Pull Request, Merge Request & Code Review
Alur review kode yang efektif, template PR/MR, status checks, strategi merge, dan kebiasaan review yang membangun.
Pull Request (GitHub) atau Merge Request (GitLab) adalah tempat perubahan diusulkan, diuji, dan didiskuisikan sebelum masuk ke branch utama. Review yang baik menangkap bug lebih awal dan menyebarkan pengetahuan tim.
Alur PR/MR
branch ──push──▶ PR/MR ──CI──▶ review ──approval──▶ merge ──▶ deploy
│ │
└── gagal ───┴── perbaiki- Buat branch dari
main. - Commit perubahan kecil.
- Push dan buka PR/MR.
- CI menjalankan lint, test, build, scan.
- Reviewer memberi komentar dan approval.
- Merge sesuai strategi yang disepakati.
- Hapus branch.
Template PR/MR
Simpan di .github/pull_request_template.md atau .gitlab/merge_request_templates/default.md.
## Ringkasan
Menambahkan endpoint health check.
## Perubahan
- Endpoint GET /health
- Test unit
- Dokumentasi
## Cara uji
1. Jalankan `npm test`
2. Jalankan `curl localhost:3000/health`
## Checklist
- [ ] Test lulus
- [ ] Dokumentasi diperbarui
- [ ] Tidak ada rahasia di diff
- [ ] Sudah diuji di stagingStatus checks
Wajibkan pemeriksaan otomatis sebelum merge:
| Check | Tujuan |
|---|---|
| Lint | Konsistensi gaya |
| Unit test | Logika |
| Integration test | Interaksi komponen |
| Build | Artefak dapat dibuat |
| Security scan | Kerentanan dan secret |
| Coverage | Ambang cakupan test |
Jika check gagal, perbaiki kode, jangan memaksa merge.
Review yang efektif
Untuk author
- Jelaskan apa dan mengapa, bukan hanya daftar file.
- Jaga PR tetap kecil (< 400 baris bila mungkin).
- Pisahkan refactor dari perubahan perilaku.
- Sertakan screenshot/log bila relevan.
- Respon komentar dengan perubahan atau alasan.
Untuk reviewer
- Fokus pada kebenaran, keamanan, keterbacaan, dan test.
- Bedakan blocking dan saran.
- Beri komentar spesifik pada baris terkait.
- Hindari gaya pribadi yang tidak tercantum di guideline.
- Setujui setelah concern utama selesai.
Review bukan ajang menjatuhkan
Tujuan review adalah memperbaiki produk dan berbagi pengetahuan. Kritik kode, bukan orangnya. Gunakan pertanyaan terbuka: “Apakah kasus timeout sudah ditangani?”
CODEOWNERS
Reviewer otomatis berdasarkan area:
# GitHub .github/CODEOWNERS
* @org/engineering
/src/api/ @org/api-team
/infra/ @org/platform-teamDengan branch protection, approval dari code owner dapat diwajibkan.
Strategi merge
| Strategi | Hasil riwayat | Kapan dipakai |
|---|---|---|
| Merge commit | Mempertahankan semua commit + merge commit | Ingin jejak lengkap |
| Squash merge | Satu commit per PR | Riwayat main bersih |
| Rebase merge | Commit dipindahkan linear | Ingin linear tanpa merge commit |
Untuk banyak tim, squash merge memberi riwayat yang mudah dibaca dan rollback per fitur.
Menangani konflik
git fetch origin
git rebase origin/main
# selesaikan konflik
git add <file>
git rebase --continue
git push --force-with-leaseGunakan --force-with-lease, bukan --force, agar tidak menimpa pekerjaan orang lain.
Draft dan stacked PR
- Draft PR — tandai belum siap review.
- Stacked PR — pecah fitur besar menjadi beberapa PR berurutan.
- Draft release — siapkan changelog sebelum rilis.
Review keamanan
Periksa khusus:
- Apakah ada secret, token, atau password di diff?
- Apakah input divalidasi?
- Apakah query database aman dari injection?
- Apakah dependency baru tepercaya?
- Apakah permission/file access sesuai?
- Apakah log membocorkan data sensitif?
Praktik: alur PR lengkap
git switch -c fix/health-timeout
# perubahan
git add -p
git commit -m "fix(api): tangani timeout health check"
git push -u origin fix/health-timeoutBuka PR, isi template, tunggu CI. Setelah approval:
git switch main
git pull --ff-only
git merge --squash fix/health-timeout
git commit -m "fix(api): tangani timeout health check (#57)"
git push origin main
git branch -d fix/health-timeoutRingkasan
- PR/MR adalah gerbang kualitas sebelum perubahan masuk
main. - Template, status checks, dan code owners membuat review konsisten.
- Review fokus pada kebenaran, keamanan, dan keterbacaan.
- Squash merge sering menjadi pilihan untuk riwayat yang bersih.
Selanjutnya
Otomasi pemeriksaan dengan GitHub Actions Fundamentals.