- Homebrew, macOS'ta CLI araçlarını kolayca kurup yönetmeyi sağlayan bir paket yöneticisidir; geliştiricilerin sık kullandığı araçlarla sistem ortamını verimli biçimde yapılandırmasına yardımcı olur
- Bu rehber, Homebrew kullanarak kişisel CLI script'lerini dağıtma sürecini açıklar ve GitHub entegrasyonu ile otomasyon iş akışları sayesinde bakımı nasıl sadeleştirebileceğini gösterir
- Dağıtım süreci CLI oluşturma → GitHub release → Tap oluşturma → Formula yazma ve güncelleme şeklinde ilerler; sonunda yalnızca
brew tap ve brew install komutlarıyla kurulum yapılabilir
- Homebrew'un terminolojisini ve en iyi uygulamalarını anlamak, yeniden üretilebilirliği ve tedarik zinciri güvenliğini güçlendiren sağlam bir dağıtım süreci sağlar
- GitHub Actions iş akışlarıyla bu süreç otomatikleştirilebilir; bir kez kurulduğunda sonraki CLI dağıtımları da çok daha kolay hale gelir
Arka plan ve motivasyon
- Homebrew, CLI araçları kurulurken tercih edilen paket yöneticilerinden biridir ve birçok geliştirici tarafından kullanılır
- Ancak kendi geliştirdiğiniz CLI'yi çoğu zaman npm veya RubyGem üzerinden dağıtırsınız; bu yüzden Homebrew ile dağıtım süreci ilk başta yabancı gelebilir
- Homebrew'un resmî core deposu, ekip politikasına göre kişisel veya özel yapım araçların eklenmesine sıcak bakmaz; bu nedenle genel geliştiriciler ayrı bir tap ve formula ile dağıtım yapar
- Bu rehber, basit bir Ruby tabanlı CLI dağıtım deneyimine dayanarak anlatılmıştır
Terimler
- Homebrew, bira üretimi temasını yansıtan kendine özgü terimler kullanır; bunları anlamak sistem yapısını kavramayı kolaylaştırır
- Formula, paket tanımı dosyasıdır; kaynak kodu veya binary'leri kurmak için gereken talimatları içerir
- Tap, Formula'ların bulunduğu bir Git deposudur; kullanıcı veya organizasyon bazında özel paketler burada yönetilir
- Cask, GUI uygulamaları veya büyük binary'leri kurmak için kullanılan manifest'tir; Formula'ya benzer ama önceden derlenmiş dosyaları işler
- Bottle, kaynaktan derlemek yerine önceden derlenmiş binary paketin kopyalanması yaklaşımıdır; böylece kurulum hızlanır
- Cellar, kurulu Formula'ların bulunduğu dizindir; örneğin
/opt/homebrew/Cellar yolunu kullanır
- Keg, belirli bir Formula'nın kurulum örneği dizinidir ve Cellar içinde sürüm bazında yer alır
Genel bakış
- Homebrew core deposu niş veya kişisel gönderimleri kabul etmediği için, kullanıcıların CLI'lerini dağıtmak üzere ayrı bir tap deposu oluşturması gerekir
- 1. CLI'yi oluşturup GitHub'a yükleyin ve etiketli release yayınlayın
- 2.
brew tap-new ile Tap oluşturup GitHub'a push edin
- 3.
brew create ile Formula yazın (tarball URL'si ve SHA256 dahil)
- 4. Her yeni sürümde Formula'yı güncelleyerek kullanıcıların
brew install komutuyla kolayca kurabilmesini sağlayın
- Dağıtım tamamlandıktan sonra kullanıcılar CLI'yi iki komutla kurabilir:
brew tap your_github_handle/tap ve brew install your_cool_cli
- Bu rehber CLI geliştirme kısmını atlar; tap oluşturma, Formula üretme ve güncelleme sürecine odaklanır
- Örnek olarak, iMessage veritabanından etkileşimli bir web arşivi üreten
imsg CLI'si kullanılır
Tap oluşturma
- Homebrew'un tap oluşturma rehberini izleyin ve kendi GitHub kullanıcı adınız veya organizasyon adınızla uyarlayın
- İleride tüm CLI araçlarını tek bir tap altında toplamak için
homebrew-tap adı önerilir; homebrew öneki CLI tarafından özel işlenir, tap son eki ise yerleşik bir gelenektir
- Tap oluşturma komutunu çalıştırın:
brew tap-new searlsco/homebrew-tap
- Bu komut
/opt/homebrew/Library/Taps/searlsco/homebrew-tap altında iskelet yapıyı oluşturur
- GitHub'da karşılık gelen depoyu oluşturun ve üretilen içeriği gönderin:
cd /opt/homebrew/Library/Taps/searlsco/homebrew-tap, git remote add origin git@github.com:searlsco/homebrew-tap.git, git push -u origin main
- Tap'in sahibi olduktan sonra diğer kullanıcılar
brew tap searlsco/tap komutuyla bu depoyu klonlayıp /opt/homebrew/Library/Taps altına yerleştirebilir
- Başlangıçta içinde faydalı bir şey olmasa da temel davranış doğrulanabilir
Formula oluşturma
- Homebrew, GitHub depolarını doğrudan referans alabilse de sürümlenmiş tarball ve checksum kullanılmasını önerir; bu da yeniden üretilebilirliği ve açık kaynak tedarik zinciri güvenliğini artırır
- Formula oluşturma komutu:
brew create https://github.com/searlsco/imsg/archive/refs/tags/v0.0.5.tar.gz --tap searlsco/homebrew-tap --set-name imsg --ruby
--tap bayrağı özel tap'i belirtir ve Formula'yı /opt/homebrew/Library/Taps/searlsco/homebrew-tap/Formula içine yerleştirir
--set-name imsg, Formula adını açıkça belirler; çakışmaları önlemek için benzersiz seçilmelidir (ör. mevcut TLDR veya standard CLI ile çakışmamaya dikkat edin)
--ruby, Ruby CLI'leri için bir şablon ön ayarıdır; özelleştirmeyi kolaylaştıran seçeneklerden biridir
- Oluşturulan Formula başlangıçta çalışmayabilir; bunu düzeltmek için LLM'den yararlanabilirsiniz:
brew install --verbose imsg çalıştırın, hatayı ChatGPT'ye verin ve Formula'yı yinelemeli olarak güncelleyin
- Son Formula/imsg.rb dosyası, Ruby CLI dağıtımı için başlangıç noktası olarak kopyalanabilir
- Dile özgü paket yöneticileri yerine Homebrew üzerinden dağıtım yapmak, uygulama dilini değiştirseniz bile kullanıcı yükseltmelerini daha sorunsuz hale getirir
Formula için önemli noktalar
- Tüm Formula'lar Ruby ile yazılır; çünkü JavaScript ve yapay zeka öncesinde popüler geliştirici araçlarının çoğu Ruby tabanlıydı
head metodu ile Git deposu belirtilebilir, ancak pratik etkisi belirsizdir
livecheck eklemek değerlidir; Formula sürüm güncellemelerini kolaylaştırır
- Binary çalıştırma testi, yardım çıktısını doğrulayan basit bir testle uygulanabilir; oluşturulan yorumların gözünüzü korkutmasına izin vermeyin
- Stil hatalarını kontrol etmek için
brew style searlsco/tap komutunu kullanın
--ruby şablonunun varsayılan uses_from_macos "ruby" ayarı 2.6.10 sürümünü kullanır (COVID öncesi çıkmış, 3 yıl önce EOL olmuş bir sürüm); bu nedenle depends_on "ruby@3" ile güncel ruby Formula bağımlılığı önerilir
- Formula istediğiniz hale geldiğinde
git push ile canlıya alınabilir; kullanıcılar da brew tap searlsco/tap ve brew install imsg ile kurabilir
Her CLI release'i için Formula güncelleme
- Formula'nın üst kısmındaki
url ve sha256 değerlerini her release'te elle güncellemek yorucudur; etiket push etmek veya GitHub release oluşturmak bile ayrı bir yük olabilir
- Homebrew'un
bump-formula-pr komutu veya GitHub Actions ile PR üretmek mümkün olsa da fork ve PR süreci gereksiz derecede karmaşık olabilir
- Tap sahibiyseniz, doğrudan main branch'e commit eden daha basit bir yaklaşım tercih edilebilir
- Bunu önlemek için Formula deposuna bir GitHub workflow'u eklemeniz önerilir; böylece release olduğunda tap otomatik güncellenir
- Workflow örneğini kopyalayıp kullanabilirsiniz
- Gerekli ayar: GitHub kişisel erişim token'ı (PAT) oluştururken
homebrew-tap deposu için Content → Write yetkisi verin ve bunu Formula deposunun Secrets bölümünde HOMEBREW_TAP_TOKEN adıyla saklayın
- Ortam değişkenleriyle tap ve Formula'yı belirtin (ör. 13-15. satırlar)
- GitHub bot hesabı güncellemesi önerilir:
GH_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com, GH_NAME: github-actions[bot]
- Release oluşturup
git push --tags çalıştırdıktan birkaç saniye sonra otomatik güncelleme gerçekleşir; kullanıcılar brew update ve brew upgrade imsg ile yükseltebilir
En iyi kısmı
- Bu süreç karmaşık görünse de, tap kurulumu ve tek bir Formula örneği tamamlandıktan sonra ek CLI dağıtımları neredeyse önemsiz bir iş haline gelir
- Birkaç dakika içinde yeni bir Formula yayımlayabilmek oldukça pratiktir
- Homebrew'un resmî süreci biraz karmaşık olsa da otomasyonla ciddi biçimde kolaylaşır
- Her araçta release ile dağıtım arasındaki sürtünmeyi azaltır ve farklı dillerde yazılmış CLI'lere kadar genişleyebilir
- Gerçekte bir Formula daha yayımlanır mı bilinmez, ama bu seçeneğin açık olması bile tatmin edicidir
Henüz yorum yok.