İç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.

Sizin yapmanız gereken tek şey paketleme zincirini elinizden bırakmak; gerisini GoReleaser üstlenir.

  1. .goreleaser.yaml’da build matrisini tanımlayın. darwin/arm64, darwin/amd64, linux/amd64, linux/arm64 hedeflerini yazın. İsterseniz universal_binaries ile macOS için tek bir evrensel artefakt üretin; M1/M2/Intel ayrımı kullanıcı tarafında kaybolur.
  2. Tag push’unda tetiklenen bir GitHub Actions workflow’u kurun. 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üncelleyin. Bu blok, formülü ayrı bir homebrew-tap reposuna commit eder. Kullanıcı sonra brew install seninadin/tap/cli ile kurar. İhtiyacınız 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ğrulayın. ldflags ile version/commit/date stamp’leyin ki cli --version doğru bilgi versin. Pipeline’a goreleaser check ekleyin — 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

Etiketler: #CI/CD#Go
Uzmanlık: Go Geliştirici
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