CODEOWNERS ve korumalı branch'ler
CODEOWNERS and protected branches
Bu derste neler öğreneceksin
- CODEOWNERS dosyasının amacını ve sözdizimini öğrenmek
- Branch protection rules nedir, nasıl oluşturulur?
- Required reviews ve required status check'lerin farkını açıklamak
- Merge queue ve rulesets kavramlarını tanımak
Takımlarda kod kalitesini korumak için iki güçlü araç: CODEOWNERS (belirli dosyaların otomatik reviewer ataması) ve branch protection rules (main branch’e doğrudan push engeli ve zorunlu review).
CODEOWNERS dosyası
CODEOWNERS, dosya ve dizin sahiplerini tanımlar. PR bu dosyaları değiştirdiğinde, belirtilen kişiler veya takımlar otomatik reviewer olarak eklenir.
Dosya konumu (herhangi biri geçerlidir):
CODEOWNERS(repo kökü).github/CODEOWNERSdocs/CODEOWNERS
Sözdizimi
# Genel sahip — tüm dosyalar için
* @global-owner
# Belirli dizin
/docs/ @docs-team
# Belirli uzantı
*.js @frontend-team
# Belirli dosya
package.json @ydemir @backup-owner
# Organizasyon takımı
*.ts @org-name/typescript-team
Kurallar üstten alta doğru uygulanır; son eşleşen kural geçerlidir.
CODEOWNERS gereksinimleri
- Listelenen kullanıcıların repoya read (veya daha üst) erişimi olmalı
- Takım mention için kullanıcının o takımın üyesi olması lazım
- CODEOWNERS, branch protection ile birlikte güçlü hale gelir: “Required review from code owners” seçilirse CODEOWNERS’daki kişiler approve etmeden merge edilemez
Branch protection rules
Branch protection rules, belirli bir branch’e (ör. main) uygulanacak kısıtlamaları tanımlar.
Ayarlamak için: repo Settings → Branches → Add branch protection rule.
Yaygın kural seçenekleri
| Seçenek | Açıklama |
|---|---|
| Require a pull request before merging | Doğrudan push engellenir, PR zorunlu |
| Require approvals | Kaç kişinin onayı gerektiği (min 1) |
| Dismiss stale pull request approvals | Yeni push gelince önceki approve sıfırlanır |
| Require review from code owners | CODEOWNERS’daki kişiler approve etmeli |
| Require status checks | CI testleri geçmeli |
| Require branches to be up to date | Main ile senkron olmadan merge yok |
| Require signed commits | GPG imzalı commit zorunlu |
| Include administrators | Admin kullanıcılar da kurallara tabi |
| Allow force pushes | Force push’a izin (genellikle kapalı) |
| Allow deletions | Branch’in silinmesine izin |
Required status checks
CI workflow’larının (GitHub Actions, üçüncü taraf CI) başarılı olması şartı. Status check adı, Actions job adı veya üçüncü taraf uygulama adından gelir.
Rulesets (yeni nesil)
Repository Rulesets (2023+), branch protection rules’un daha güçlü versiyonudur:
- Birden fazla branch’e aynı ruleset uygulanabilir
- Bypass list ile belirli kullanıcılar kurallara tabi olmayabilir
- Tag koruması da eklenebilir
- Organizasyon düzeyinde kurallar
Merge queue
Merge queue (GitHub Enterprise ve bazı public repolar için), birden fazla PR’ın aynı anda test edilip sırayla merge edilmesini sağlar. “Flaky CI” sorununu azaltır. PR’ı “Add to queue” ile kuyruğa eklenir.
Doğrudan push vs. PR zorunluluğu
| Koruma yok | Branch protection var |
|---|---|
| Herkes main’e push edebilir | PR açmak zorunlu |
| Hiç review yok | Min 1 approve zorunlu |
| Test yok | CI geçmeli |
| Force push serbest | Force push yasak |
Sınav perspektifinden dikkat noktaları
- CODEOWNERS’da son eşleşen kural geçerlidir (git’in .gitignore mantığının tersine, sıralama önemlidir)
- “Dismiss stale approvals” olmadan yeni commit push edilse de önceki approve geçerli kalır
- Admin kullanıcılar varsayılan olarak kuralları bypass edebilir — “Include administrators” bunu engeller
- Ruleset, branch protection rules’u tamamlayıcıdır (hem ikisi birlikte kullanılabilir)
Sırada ne var?
Modül 3 tamamlandı. Sonraki modülde modern geliştirme araçlarına — GitHub Actions, Pages, Packages ve Codespaces — geçiyoruz.