9 poin oleh GN⁺ 2025-09-18 | Belum ada komentar. | Bagikan ke WhatsApp
  • Homebrew adalah package manager di macOS yang memudahkan instalasi dan pengelolaan alat CLI, sehingga developer dapat menyiapkan lingkungan sistem secara efisien dengan alat yang sering mereka gunakan
  • Panduan ini menjelaskan proses mendistribusikan skrip CLI pribadi dengan Homebrew, serta menunjukkan cara menyederhanakan pemeliharaan melalui integrasi GitHub dan alur kerja otomatis
  • Proses distribusinya mengikuti alur membuat CLI → rilis GitHub → membuat Tap → menulis dan memperbarui Formula, dan pada akhirnya dapat diinstal hanya dengan perintah brew tap dan brew install
  • Dengan memahami sistem istilah dan best practice Homebrew, Anda dapat melakukan distribusi yang stabil dengan reproduktibilitas dan keamanan rantai pasok yang lebih kuat
  • Ini juga dapat diotomatisasi melalui workflow GitHub Actions, dan setelah sekali disiapkan, distribusi CLI lain berikutnya menjadi jauh lebih mudah

Latar belakang dan motivasi

  • Homebrew adalah package manager pilihan untuk menginstal alat CLI dan digunakan oleh banyak developer
  • Namun, banyak orang mendistribusikan CLI buatan mereka sendiri lewat npm atau RubyGem, sehingga cara distribusi via Homebrew bisa terasa asing
  • Repositori core resmi Homebrew memiliki kebijakan bahwa tim Homebrew enggan menerima pendaftaran alat buatan sendiri, sehingga developer umum mendistribusikannya lewat tap dan formula terpisah
  • Panduan ini dijelaskan berdasarkan pengalaman mendistribusikan CLI sederhana berbasis Ruby

Penjelasan istilah

  • Homebrew menggunakan istilah khas yang mengikuti tema pembuatan bir, jadi memahaminya akan memudahkan Anda menangkap struktur sistemnya
    • Formula adalah file definisi paket yang berisi instruksi untuk menginstal source code atau biner
    • Tap adalah repositori Git untuk kumpulan Formula, digunakan untuk mengelola paket kustom per pengguna atau organisasi
    • Cask adalah manifest instalasi untuk aplikasi GUI atau biner berukuran besar, mirip Formula tetapi menangani file yang sudah dibangun sebelumnya
    • Bottle adalah bentuk paket biner prebuilt yang disalin tanpa membangun dari source, sehingga mempercepat instalasi
    • Cellar adalah direktori tempat Formula yang sudah terinstal disimpan, misalnya pada path /opt/homebrew/Cellar
    • Keg adalah direktori instance instalasi untuk Formula tertentu, ditempatkan per versi di dalam Cellar

Gambaran umum

  • Repositori core Homebrew tidak menerima konten yang terlalu niche atau bersifat pribadi, sehingga pengguna harus membuat repositori tap terpisah untuk mendistribusikan CLI mereka
    • 1. Buat CLI, unggah ke GitHub, lalu buat rilis bertag
    • 2. Buat Tap dengan brew tap-new, lalu push ke GitHub
    • 3. Tulis Formula dengan brew create (termasuk URL tarball dan SHA256)
    • 4. Setiap ada rilis versi baru, perbarui Formula agar pengguna dapat menginstalnya dengan mudah lewat perintah brew install
  • Setelah distribusi selesai, pengguna dapat menginstal CLI hanya dengan dua perintah: brew tap your_github_handle/tap dan brew install your_cool_cli
    • Panduan ini tidak membahas pengembangan CLI, dan berfokus pada pembuatan tap, pembuatan Formula, serta proses pembaruan
    • Sebagai contoh, digunakan CLI imsg yang membuat arsip web interaktif dari database iMessage

Membuat tap

  • Ikuti panduan pembuatan tap Homebrew, lalu sesuaikan dengan nama pengguna atau organisasi GitHub Anda
    • Untuk mengumpulkan semua alat CLI ke dalam satu tap di masa mendatang, nama homebrew-tap direkomendasikan; awalan homebrew diperlakukan khusus oleh CLI dan awalan tap adalah konvensi umum
  • Jalankan perintah pembuatan tap: brew tap-new searlsco/homebrew-tap
    • Ini akan membuat scaffold di /opt/homebrew/Library/Taps/searlsco/homebrew-tap
    • Buat repositori pasangannya di GitHub, lalu push hasil yang telah dibuat: cd /opt/homebrew/Library/Taps/searlsco/homebrew-tap, git remote add origin git@github.com:searlsco/homebrew-tap.git, git push -u origin main
  • Setelah memiliki tap tersebut, pengguna lain bisa meng-clone repositorinya ke /opt/homebrew/Library/Taps dengan perintah brew tap searlsco/tap
    • Pada awalnya belum ada isi yang berguna, tetapi perilaku dasarnya bisa dipastikan berjalan

Membuat Formula

  • Homebrew bisa langsung merujuk ke repositori GitHub, tetapi menyarankan penggunaan tarball berversi dan checksum untuk memperkuat reproduktibilitas serta keamanan rantai pasok open source
  • Perintah untuk membuat Formula: brew create https://github.com/searlsco/imsg/archive/refs/tags/v0.0.5.tar.gz --tap searlsco/homebrew-tap --set-name imsg --ruby
    • Flag --tap menentukan tap kustom dan menempatkan Formula di /opt/homebrew/Library/Taps/searlsco/homebrew-tap/Formula
    • --set-name imsg menetapkan nama Formula secara eksplisit; pilih nama yang unik untuk menghindari duplikasi (misalnya, hati-hati agar tidak bentrok dengan CLI TLDR atau standard yang sudah ada)
    • --ruby adalah preset template untuk Ruby CLI, salah satu dari beberapa opsi yang menyederhanakan kustomisasi
  • Formula yang dihasilkan mungkin belum langsung berfungsi, jadi gunakan LLM untuk memperbaikinya: jalankan brew install --verbose imsg, lalu masukkan error ke ChatGPT dan ulangi pembaruan Formula
    • File akhir Formula/imsg.rb dapat disalin sebagai titik awal untuk distribusi Ruby CLI
    • Dengan mendistribusikannya lewat Homebrew alih-alih package manager spesifik bahasa, upgrade di sisi pengguna tetap lancar meskipun bahasa implementasinya berubah

Sorotan utama Formula

  • Semua Formula ditulis dalam Ruby, karena sebelum JavaScript atau AI populer, banyak alat pengembang ditulis berbasis Ruby
    • Metode head dapat digunakan untuk menentukan repositori Git, tetapi efek nyatanya tidak jelas
    • Menambahkan livecheck bernilai karena memudahkan pembaruan versi Formula
    • Pengujian eksekusi biner bisa diimplementasikan secara sederhana dengan memeriksa output bantuan; jangan terintimidasi oleh komentar yang dihasilkan otomatis
    • Gunakan perintah brew style searlsco/tap untuk memeriksa error gaya
    • Default uses_from_macos "ruby" pada template --ruby memakai versi 2.6.10 (rilis sebelum COVID, EOL 3 tahun lalu), sehingga disarankan bergantung pada Formula ruby terbaru dengan depends_on "ruby@3"
  • Jika Formula sudah memuaskan, lakukan git push untuk distribusi langsung, dan pengguna dapat menginstalnya dengan brew tap searlsco/tap serta brew install imsg

Memperbarui Formula untuk setiap rilis CLI

  • url dan hash sha256 di bagian atas Formula harus diperbarui manual pada setiap rilis, dan ini merepotkan; bahkan membuat tag push atau GitHub release pun terasa melelahkan
    • Perintah bump-formula-pr milik Homebrew atau GitHub Actions bisa membuat PR, tetapi proses fork dan PR terasa tidak perlu rumit
    • Jika Anda pemilik tap, pendekatan yang lebih diinginkan adalah cara sederhana yang langsung commit ke branch main
  • Untuk menghindari itu, disarankan menambahkan workflow GitHub ke repositori Formula agar tap diperbarui otomatis saat rilis
    • Anda dapat menyalin dan menggunakan contoh workflow
    • Konfigurasi yang diperlukan: saat membuat GitHub personal access token (PAT), beri izin ContentWrite pada repositori homebrew-tap, lalu simpan di Secrets repositori Formula sebagai HOMEBREW_TAP_TOKEN
    • Tentukan tap dan Formula melalui environment variable (misalnya, baris 13-15)
    • Disarankan memperbarui akun bot GitHub: GH_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com, GH_NAME: github-actions[bot]
  • Setelah rilis dibuat dan git push --tags dijalankan, pembaruan otomatis akan terjadi dalam beberapa detik, dan pengguna dapat melakukan upgrade dengan brew update serta brew upgrade imsg

Bagian terbaiknya

  • Proses ini memang rumit, tetapi setelah pengaturan tap dan satu contoh Formula selesai, distribusi CLI tambahan menjadi nyaris sepele
    • Sangat praktis karena Formula baru bisa dipublikasikan hanya dalam beberapa menit
  • Proses resmi Homebrew memang agak kompleks, tetapi otomatisasi membuatnya lebih nyaman
    • Ini mengurangi kerepotan antara rilis dan distribusi tiap alat, serta dapat diperluas untuk mendukung CLI dari berbagai bahasa
  • Belum tentu akan benar-benar menerbitkan Formula lain lagi, tetapi menyenangkan mengetahui kemungkinannya terbuka

Belum ada komentar.

Belum ada komentar.