Dasar-dasar CI: buat pemeriksaan menjadi otomatis
(Continuous Integration — Integrasi Berkelanjutan) adalah robot yang menjalankan pemeriksaanmu setiap kali kamu push kode, sehingga kamu tidak bisa lupa menjalankannya. Kebanyakan platform membuat ini menjadi satu file saja. Berikut contoh minimal GitHub Actions:
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run lint
- run: npm run typecheck
- run: npm test
Sekarang setiap push otomatis di-lint, diperiksa tipenya, dan diuji. Kalau ada yang gagal, kamu melihat tanda merah sebelum kode bisa digabungkan. Kamu bahkan bisa meminta AI menulis file ini untuk stack-mu — "Add a GitHub Actions workflow that runs our lint, type check, and tests on every ."
Dengan protection diaktifkan, pemeriksaan merah bukan sekadar memperingatkanmu — ia secara fisik mengunci tombol merge sampai build kembali hijau:
pull request
│
▼
┌──────────────┐ all pass ┌───────────────┐
│ CI runs │ ───── ✓ green ─────▶ │ MERGE allowed │ ──▶ main
│ lint · types │ └───────────────┘
│ · tests │ any fail
└──────────────┘ ───── ✗ red ──────▶ ┌───────────────┐
│ MERGE blocked │ 🔒
└───────────────┘
fix, push, re-run
Inti dari CI bukan otomatisasi demi otomatisasi itu sendiri — melainkan bahwa ia memindahkan pemeriksaan dari ingatanmu ke dalam pipeline, di mana ia tidak bisa dilewati begitu saja pada malam yang kamu sedang lelah. Ada dua peningkatan yang layak dilakukan begitu dasar-dasarnya berjalan hijau. Pertama, jadikan pemeriksaan itu status yang wajib (required) di branch utamamu ("branch protection rule" di GitHub) sehingga build merah benar-benar memblokir tombol merge, bukan sekadar menampilkan peringatan yang bisa kamu abaikan. Kedua, ketika CI gagal, tempelkan log kegagalannya langsung ke AI: "CI failed on this run, here's the output — diagnose and fix it." Log itu adalah laporan bug yang presisi dan dihasilkan mesin, yang justru merupakan jenis input yang paling ampuh untuk ditindaklanjuti AI.