Perintah dan konteks
Beberapa tim berbagi repositori, sementara direktori keamanan, pembayaran, dan data memerlukan tanggung jawab yang jelas. Jelaskan bagaimana CODEOWNERS dengan proteksi branch atau ruleset dapat menciptakan proses persetujuan yang mudah ditemukan, dapat ditegakkan, dan dapat diaudit, termasuk penanganan pengecualian dan perubahan tim.
Apa yang dievaluasi pewawancara
- Membedakan permintaan otomatis CODEOWNERS dari persetujuan wajib yang ditegakkan oleh proteksi branch.
- Memeriksa akses tulis (write access) pemilik, visibilitas tim, target branch, dan lokasi file.
- Menangani perlindungan mandiri CODEOWNERS, fork, pull request draf, bypass, dan persetujuan kedaluwarsa (stale approvals).
- Mengukur tata kelola dengan cakupan, pemblokiran merge, waktu tunggu, dan catatan audit.
Pertanyaan klarifikasi yang perlu diajukan
- Direktori mana yang harus memblokir merge dan mana yang hanya membutuhkan notifikasi? Apakah ada jalur darurat?
- Apakah pemiliknya berupa individu atau tim? Bagaimana visibilitas, akses tulis, dan rotasi dikelola?
- Branch mana saja yang diproteksi? Apakah ruleset dan proteksi klasik keduanya aktif, dan siapa yang dapat melakukan bypass?
- Bagaimana file CODEOWNERS itu sendiri, fork, PR draf, persetujuan kedaluwarsa, dan anggota yang keluar ditangani?
Kerangka jawaban 30 detik
Saya akan memetakan direktori penting ke tim yang bertanggung jawab, kemudian memperlakukan CODEOWNERS sebagai lapisan pencocokan dan notifikasi, serta proteksi branch atau ruleset sebagai lapisan pemblokir merge. Saya akan memverifikasi akses tulis pemilik, visibilitas tim, dan file pada base-branch; memproteksi CODEOWNERS itu sendiri dan menentukan bypass darurat yang diaudit. Pull request simulasi akan mencakup file yang ditambahkan, dipindahkan, dan dihapus, serta fork. Saya akan memantau waktu tunggu persetujuan, pemblokiran, bypass, dan jalur tanpa pemilik (orphaned paths).
Pembahasan mendalam langkah demi langkah
1. Menentukan batasan kepemilikan
Bagi direktori berdasarkan risiko dan frekuensi perubahan alih-alih menetapkan satu tim global. Setiap pola memerlukan pemilik utama, pemilik cadangan, dan tanggal peninjauan; temukan jalur yang tidak memiliki kecocokan secara berkala.
2. Memisahkan permintaan dari penegakan aturan
CODEOWNERS secara otomatis meminta tinjauan ketika file yang dimiliki berubah, tetapi hanya tinjauan code-owner yang diwajibkan dalam proteksi branch atau ruleset yang akan memblokir merge. Uji kedua lapisan ini secara terpisah agar notifikasi tidak disalahartikan sebagai penegakan aturan.
3. Melindungi konfigurasi dan pengecualian
Tempatkan CODEOWNERS di lokasi yang dilindungi dan tetapkan pemilik untuk file tersebut. Untuk perbaikan darurat, gunakan bypass berprinsip hak akses terendah (least-privilege), sertakan alasan, dan lakukan peninjauan pasca-merge; perhitungkan pull request draf, fork, dan persetujuan yang dibatalkan setelah ada push baru.
4. Menjalankan dan memigrasikan secara aman
Mulai dalam mode laporan untuk mengukur pencocokan, jalur tanpa pemilik, waktu tunggu, dan pemblokiran keliru sebelum diberlakukan secara ketat. Perbarui izin, ruleset, dan kueri audit secara bersamaan saat tim atau repositori berubah, dan pertahankan rencana rollback.
Contoh jawaban
Saya akan mempartisi repositori berdasarkan risiko, membuat CODEOWNERS dengan pemilik cadangan, serta memverifikasi visibilitas tim dan akses tulis. CODEOWNERS menangani pencocokan dan notifikasi; proteksi branch atau ruleset menyediakan pemblokiran merge yang sebenarnya, jadi saya akan memvalidasi keduanya dengan simulasi pull request. File CODEOWNERS itu sendiri akan dilindungi dan memiliki pemilik. Bypass darurat akan menerapkan hak akses terendah, memiliki justifikasi, dan ditinjau setelahnya. Saya akan mulai dalam mode laporan, mengukur jalur tanpa pemilik, pemblokiran keliru, dan waktu tunggu, lalu memberlakukannya secara bertahap sambil memantau persetujuan kedaluwarsa, bypass, dan cakupan.
Kesalahan umum
- Menganggap bahwa permintaan CODEOWNERS otomatis selalu memblokir merge.
- Mengabaikan fakta bahwa tim harus berstatus terlihat (visible) dan memiliki akses tulis.
- Membiarkan CODEOWNERS tidak terlindungi sehingga pemetaan kepemilikan dapat diubah begitu saja.
- Mengabaikan base branch, fork, draf, atau persetujuan kedaluwarsa.
- Menghilangkan bypass darurat, peninjauan pasca-merge, dan jejak audit.
- Mengukur jumlah persetujuan tanpa memperhitungkan jalur tanpa pemilik, waktu tunggu, atau pemblokiran keliru.
Pertanyaan lanjutan dan tanggapan
Apakah setiap pemilik yang terdaftar harus menyetujui?
Biasanya persetujuan dari satu pemilik yang cocok sudah memenuhi syarat tinjauan code-owner kecuali ada aturan lain yang menyatakan berbeda. Desain produk harus menentukan apakah direktori berisiko tinggi memerlukan aturan multi-pihak tambahan.
Mengapa perlu memproteksi CODEOWNERS itu sendiri?
Jika tidak, seorang kontributor dapat mengubah pemetaan kepemilikan lalu memodifikasi kode penting, sehingga melewati batas perlindungan yang dimaksud. Menetapkan pemilik dan mewajibkan peninjauan untuk file tersebut akan menutup celah ini.
Bagaimana Anda menghindari pemblokiran terkait rotasi tim?
Gunakan tim yang terlihat daripada individu, pertahankan pemilik cadangan dan pemeriksaan perubahan, audit jalur tanpa pemilik saat akses berubah, dan jalankan pull request regresi sebelum aturan baru diberlakukan secara aktif.