İçeriğe geç
Muhammet Şafak
en
Soran: Devrim Cevaplandı:

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.

  1. .goreleaser.yaml’da build matrisini tanımla. darwin/arm64, darwin/amd64, linux/amd64, linux/arm64 hedeflerini yaz. İstersen universal_binaries ile macOS için tek bir evrensel artefakt üret; M1/M2/Intel ayrımı kullanıcı tarafında kaybolur.
  2. Tag push’unda tetiklenen bir GitHub Actions workflow’u kur. on: push: tags: ['v*'] ile goreleaser release çalışsın: cross-compile eder, arşivleri + checksum’ları üretir, GitHub Release’i yayımlar.
  3. brews: bloğuyla tap formülünü otomatik güncelle. Bu blok, formülü ayrı bir homebrew-tap reposuna commit eder. Kullanıcı sonra brew install seninadin/tap/cli ile kurar. İhtiyacın olan: tap reposuna push yetkisi olan bir PAT (varsayılan GITHUB_TOKEN başka repoya yazamaz, ayrı token şart).
  4. Sürüm bilgisini binary’ye gömüp config’i CI’da doğrula. ldflags ile version/commit/date stamp’le ki cli --version doğru bilgi versin. Pipeline’a goreleaser check ekle — 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.

Etiketler: #ci-cd#go#deploy
Paylaş:

Yorumlar

Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.

Diğer Sorular

Tüm sorular

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi