Modül 3 · Collaboration · ⏱ 12 dakika

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/CODEOWNERS
  • docs/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çenekAçıklama
Require a pull request before mergingDoğrudan push engellenir, PR zorunlu
Require approvalsKaç kişinin onayı gerektiği (min 1)
Dismiss stale pull request approvalsYeni push gelince önceki approve sıfırlanır
Require review from code ownersCODEOWNERS’daki kişiler approve etmeli
Require status checksCI testleri geçmeli
Require branches to be up to dateMain ile senkron olmadan merge yok
Require signed commitsGPG imzalı commit zorunlu
Include administratorsAdmin kullanıcılar da kurallara tabi
Allow force pushesForce push’a izin (genellikle kapalı)
Allow deletionsBranch’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 yokBranch protection var
Herkes main’e push edebilirPR açmak zorunlu
Hiç review yokMin 1 approve zorunlu
Test yokCI geçmeli
Force push serbestForce 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.