Go CLI aracını GoReleaser ve Homebrew ile çoklu platforma nasıl dağıtırım?
Soru
Go ile yazdığımız bir CLI aracımız var (mesela CommitBrief). Hem macOS (M1/M2/Intel) hem Linux kullanıcıları `brew install` ile kolayca kurabilsin istiyorum. GitHub Actions'ta GoReleaser kullanarak her tag'de binary derleyen, GitHub Releases'e yükleyen ve özel bir Homebrew Tap reposunu otomatik güncelleyen CI/CD akışını nasıl kurarım?
Cevap
Kısa cevap: Bu tam olarak GoReleaser’ın çözdüğü problem — bir .goreleaser.yaml + tag’de tetiklenen tek bir workflow, hem cross-compile’ı hem GitHub Release’i hem de Homebrew tap formülünü otomatik halleder.
Senin yapman gereken tek şey paketleme zincirini elinden bırakmak; gerisini GoReleaser üstlenir.
.goreleaser.yaml’da build matrisini tanımla.darwin/arm64,darwin/amd64,linux/amd64,linux/arm64hedeflerini yaz. İstersenuniversal_binariesile macOS için tek bir evrensel artefakt üret; M1/M2/Intel ayrımı kullanıcı tarafında kaybolur.- Tag push’unda tetiklenen bir GitHub Actions workflow’u kur.
on: push: tags: ['v*']ilegoreleaser releaseçalışsın: cross-compile eder, arşivleri + checksum’ları üretir, GitHub Release’i yayımlar. brews:bloğuyla tap formülünü otomatik güncelle. Bu blok, formülü ayrı birhomebrew-tapreposuna commit eder. Kullanıcı sonrabrew install seninadin/tap/cliile kurar. İhtiyacın olan: tap reposuna push yetkisi olan bir PAT (varsayılanGITHUB_TOKENbaşka repoya yazamaz, ayrı token şart).- Sürüm bilgisini binary’ye gömüp config’i CI’da doğrula.
ldflagsile version/commit/date stamp’le kicli --versiondoğru bilgi versin. Pipeline’agoreleaser checkekle — config bozuksa release anına kalmadan, daha PR’da yakalarsın.
Sonuç: Tag at, gerisini GoReleaser yapsın — Releases + tap formülü tek komutla çıkar, manuel paketleme tamamen ortadan kalkar. Bu, Go ekosisteminde fiili standart; sen sadece tag disiplinini ve ayrı tap token’ını kurarsan akış kendi kendine döner. CLI’yı paketleyip dağıtmanın daha geniş resmini hub yazısında ele aldım; oradaki dağıtım modelini bu workflow’a oturtursun.
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.