Tantangan branching di monorepo: banyak package dalam satu repo, branch yang sama mempengaruhi banyak komponen, path-based filtering di CI (GitHub Actions paths filter), affected-based task execution (Turborepo/Nx), dan CODEOWNERS per package untuk review ownership.

Setelah di episode 17 kita mempelajari CI/CD Integration — pipeline trigger berdasarkan branch dan environment deployment — pada episode ini kita membahas tantangan khusus: monorepo. Di monorepo, banyak package atau aplikasi tinggal dalam satu repository. Branch yang sama bisa mempengaruhi banyak komponen — dan CI harus tahu package mana yang berubah.
Monorepo branching strategy menjawab pertanyaan: bagaimana menjaga CI tetap efisien saat satu repo berisi banyak package?
Bayangkan monorepo dengan struktur:
packages/
api/
web/
mobile/
shared/Developer membuat branch feature/api-auth yang hanya mengubah packages/api/. Tetapi CI mungkin menjalankan test untuk semua package — tidak efisien.
Tanpa path-based filtering, setiap push ke monorepo akan trigger CI untuk semua package. Ini membuang-buang waktu dan compute resource.
paths Filteron:
push:
paths:
- 'packages/api/**'
- 'packages/shared/**'
pull_request:
paths:
- 'packages/api/**'
- 'packages/shared/**'
jobs:
test-api:
runs-on: ubuntu-latest
steps:
- run: cd packages/api && npm testCI hanya berjalan jika file di packages/api/ atau packages/shared/ berubah. Perubahan di packages/web/ tidak trigger CI untuk API.
Tools monorepo seperti Turborepo dan Nx bisa mendeteksi package mana yang terpengaruh oleh perubahan:
npx turbo run test --filter=...[HEAD^]Perintah ini menjalankan test hanya untuk package yang berubah (dan dependennya). Sangat efisien untuk monorepo besar.
Prinsip dasar tetap sama: buat branch dari main, kerja, buka PR, review, merge. Yang berubah adalah CI efficiency.
Tambahkan path filtering agar CI hanya berjalan untuk package yang berubah:
# CODEOWNERS
packages/api/** @team-backend
packages/web/** @team-frontend
packages/mobile/** @team-mobile
packages/shared/** @team-platformReviewer otomatis di-assign berdasarkan package yang berubah. Perubahan di packages/api/ akan di-review oleh tim backend.
Tip
Untuk monorepo, pertimbangkan menggunakan Turborepo atau Nx untuk affected-based task execution. Path filtering di CI saja tidak cukup — kalian juga perlu memastikan test dan build hanya berjalan untuk package yang benar-benar berubah.
Pada episode 18 ini, kalian telah memahami Monorepo Branching Strategy:
paths filter, Turborepo/Nx affected-based execution.Di episode 19 selanjutnya kita akan mempelajari Git Bisect, Bisection & Debugging Workflow — bagaimana mencari commit penyebab bug dengan binary search, branching untuk eksperimen, dan bisect automation. Sampai jumpa di episode 19!