Araçlar

Pull request CI'ı kapatıp yerel kapı ve gh-signoff ile birleşmeyi koru

Milan Jovanović, pull request'lerinde bulut CI'ı kapatıp build ve testleri yerelde çalıştırdığını ve gh-signoff ile bir commit status yayınlayarak merge'i koruduğunu anlatıyor. Git pre-push hook'u, GitHub ruleset'i ve main'e merge sonrası çalışan bulut pipeline'ı da yazının konusu. Bulut CI maliyetini ve bekleme süresini azaltmak isteyen .NET ekipleri için pratik bir örnek.

Milan Jovanović [email protected] (Milan Jovanović)
Yayın tarihi
Okuma süresi
10 dk okuma
agent çalıştırması #17
agent çalıştırması #17
Orijinale git milanjovanovic.tech

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Yerel kapı betiği dotnet build -warnaserror, dotnet test --no-build ve dotnet format --verify-no-changes adımlarını sırayla çalıştırır.
  • gh extension install basecamp/gh-signoff ve gh signoff install, main için signoff status'unu zorunlu kılan bir ruleset oluşturur.
  • Ruleset strict required status checks ile birlikte kullanılırsa main ilerlediğinde yeniden rebase ve yeniden signoff gerekir.
  • Pre-push hook yalnızca yerelde çalışır; git push --no-verify ile atlanabilir, bu yüzden GitHub tarafındaki kural gereklidir.
  • Bulut iş akışında pull_request tetikleyicisi kaldırılır, main'e push ve haftalık zamanlama kalır.
  • Fork'lardan gelen pull request'ler için bulut CI'ı korumak gerekir; signoff push yetkisi ister.

Yazarın deposunda bulut CI haziran ayından beri pull request'lerde çalışmıyor; build, testler ve container image adımları geliştirici makinesinde koşuyor. Bu düzen yaklaşık dört ayda 833 birleştirilmiş pull request'e uygulanmış. Kapıyı kapatmadan önce pull request başına yaklaşık 2,7 dakikalık iş akışları, main'e her merge'de tekrar edilen adımlarla birlikte maliyet ve bekleme süresi yaratıyordu.

Çözüm üç parçalı: yerel bir shell betiği build, test ve format kontrollerini çalıştırıyor ve başarılı olursa gh signoff ile commit status yayınlıyor. Bir pre-push git hook'u kontrolleri her push'tan önce tetikliyor. GitHub tarafında ise gh signoff install ile oluşturulan bir ruleset, main için signoff adlı status'u şart koşuyor. Bulut pipeline'ı yalnızca main'e merge sonrası ve haftalık zamanlanmış olarak çalışıyor. Yazar, hook'un GitHub tarafında korumadığını ve fork pull request'lerinin bu yöntemle onaylanamayacağını vurguluyor.

Gerçek dünyada kullanımı

  • Bulut CI dakikalarının ve Actions faturasının pahalı olduğu, birkaç geliştiricili bir .NET ekibinin pull request bekleme süresini azaltması.
  • Docker tabanlı entegrasyon testleri içeren ve yerelde beş dakika altında biten bir ASP.NET Core servisinin merge kapısı.
  • Açık kaynak bir .NET projesinde çekirdek ekibin yerel onayını kullanırken dış katkıları bulutta koruması.

Neden önemli

Bulut CI'ı tamamen kaldırmadan merge kapısını yerel makineye taşımak mümkün; ancak bu yalnızca GitHub ruleset'i ve main'deki merge sonrası bulut çalıştırması ile güvenli hale gelir. Ekipler yerel kapının kurallarını birlikte kabul etmeli.

Bu özet, Milan Jovanović üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü