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.
Sizin yapmanız gereken tek şey paketleme zincirini elinizden bırakmak; gerisini GoReleaser üstlenir.
.goreleaser.yaml’da build matrisini tanımlayın.darwin/arm64,darwin/amd64,linux/amd64,linux/arm64hedeflerini yazın. İstersenizuniversal_binariesile macOS için tek bir evrensel artefakt üretin; M1/M2/Intel ayrımı kullanıcı tarafında kaybolur.- Tag push’unda tetiklenen bir GitHub Actions workflow’u kurun.
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üncelleyin. Bu blok, formülü ayrı birhomebrew-tapreposuna commit eder. Kullanıcı sonrabrew install seninadin/tap/cliile kurar. İhtiyacınız 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ğrulayın.
ldflagsile version/commit/date stamp’leyin kicli --versiondoğru bilgi versin. Pipeline’agoreleaser checkekleyin — config bozuksa release anına kalmadan, daha PR’da yakalarsınız.
Sonuç: Tag atın, gerisini GoReleaser yapsın — Releases + tap formülü tek komutla çıkar, manuel paketleme tamamen ortadan kalkar. Bu, Go ekosisteminde fiili standart; siz sadece tag disiplinini ve ayrı tap token’ını kurarsanız 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 oturtursunuz.
İlgili Yazılar
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.