Pipeline lint multi-bahasa dan release preview otomatis diperlukan agar tim bisa mengunci kualitas kode dan melihat hasil perubahan sebelum merger. Dalam paragraf panjang ini akan dijelaskan cara merancang linting untuk JS/TS dan Python sekaligus menjalankan preview release yang otomatis tercipta dari pull/merge request.
Desain pipeline lint lintas bahasa
Mulai dari repository monorepo sampai service terpisah, linting perlu disesuaikan dengan bahasa yang berbeda. Pendekatan paling konsisten adalah membuat job matrix yang memetakan bahasa ke environment, dependency, dan perintah lint.
Job matrix linting
Dalam GitHub Actions atau GitLab CI, strategy matrix membantu menghindari definisi job duplikat. Contoh minimal untuk lint JS/TS dan Python:
name: lint-and-preview
on:
pull_request:
jobs:
lint:
runs-on: ubuntu-latest
strategy:
matrix:
language: [javascript, python]
steps:
- uses: actions/checkout@v4
- name: Setup environment
run: |
if [ "$matrix.language" = "javascript" ]; then
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
else
sudo apt-get install -y python3 python3-venv
fi
- name: Install dependencies
run: |
if [ "$matrix.language" = "javascript" ]; then
npm install
else
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
fi
- name: Run linter
run: |
if [ "$matrix.language" = "javascript" ]; then
npm run lint
else
. .venv/bin/activate
flake8 src/
fi
Dengan pendekatan ini, linting mengisolasi environment untuk setiap bahasa tanpa membuat pipeline panjang per bahasa.
Cache workspace dan dependency
Caching mencegah instal ulang paket yang mahal di setiap run. Di GitHub Actions, cache bisa ditautkan ke bahasa dan file kunci.
- name: Cache dependencies
uses: actions/cache@v4
with:
path: |
node_modules
.venv
key: lint-${{ matrix.language }}-${{ hashFiles('**/package-lock.json', '**/requirements.txt') }}
restore-keys: |
lint-${{ matrix.language }}-
lint-
Untuk GitLab CI, gunakan cache: global dengan paths node_modules/ dan .venv/, lalu atur key: "$CI_COMMIT_REF_SLUG" agar cache terpisah per branch. Ini mempercepat linting tanpa mengorbankan konsistensi.
Release preview otomatis
Setelah lint bersih, langkah berikutnya adalah membuat preview build yang dapat diakses reviewer. Tujuannya untuk merilis artefak atau environment sementara yang merepresentasikan branch.
Menyiapkan build preview
Implementasi umum: job lint selesai meng-upload artifact, lalu job release preview mengambil artifact tersebut, membangun bundle, dan mendepoy ke staging. Di GitHub Actions:
release-preview:
needs: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download lint artifact
uses: actions/download-artifact@v4
with:
path: preview-build
- run: ./scripts/build-preview.sh
- run: ./scripts/deploy-preview.sh
env:
PREVIEW_URL: https://preview.example.com/${{ github.head_ref }}
Pastikan artefak build diupload setelah lint jika diperlukan. Di GitLab CI, gunakan artifacts: dan dependencies: untuk meneruskan hasil lint ke job preview.
Strategi deploy preview build/artifact
Beberapa strategi:
- Static preview: artefak dibangun dan diupload ke CDN sementara, misalnya menggunakan Azure Blob, S3, atau GitLab Pages.
- Dynamic environment: deploy container ke namespace preview (misal namespace di Kubernetes atau environment Review App di GitLab).
Pilih berdasarkan kebutuhan tim: static lebih cepat dan murah, dynamic memberi feedback perilaku runtime. Jaga agar preview otomatis berhenti saat PR ditutup untuk menghindari biaya terus menerus.
Monitoring status lint sebelum merge
Lint yang gagal harus menghentikan merge. Terapkan dua mekanisme utama:
- Status check enforced: aktifkan protected branch yang mewajibkan status lint sukses.
- Slack/email alert: gunakan integrasi webhook atau action untuk mengirim notifikasi hasil lint, sehingga tim tahu segera jika ada kegagalan.
Untuk observabilitas, pasang step actions/upload-artifact yang menyimpan log lint, lalu gunakan badge status di README agar developer mendapat informasi real-time.
Trade-off: paralel vs sequential lint
Lint paralel (matrix) memperpendek waktu pipeline, tapi menghabiskan runner/runner minutes. Sequential sederhana lebih hemat resource dan mudah debug jika lint menggunakan perintah yang saling tergantung. Pilih paralel bila repository besar dan lint tidak saling memengaruhi. Bila cache tidak cukup stabil atau ada shared resource, sequential bisa menghindari flakiness.
Debugging tips:
- Gunakan
actions/upload-artifactuntuk menyertakan file log dari setiap bahasa. - Periksa cache key agar tidak ketinggalan file kunci.
- Jika preview gagal deploy, cek perintah build yang memakai artifact lint untuk memastikan linting tidak merusak dependensi.
Kesimpulan
Pembuatan pipeline lint multi-bahasa dengan release preview otomatis memperkuat kepercayaan terhadap codebase. Job matrix mempermudah penambahan bahasa baru, caching mempercepat eksekusi, dan preview memberi konteks visual sebelum merge. Seimbangkan paralel vs sequential sesuai anggaran runner, dan gunakan monitoring lint sebelum merger sebagai mekanisme kualitas akhir.
Komentar
0 komentar
Masuk ke akun kamu untuk ikut berkomentar.
Belum ada komentar
Jadilah yang pertama ikut berdiskusi!