自分用の Homebrew Tap を作成したい!
こちらの記事で作った git-branch-delete-merged-rs を
Homebrew の brew install
でインストールできたら楽だなあ、と思いました。
そこで、『GoReleaser で Go 製 CLI のリリースを自動化& Homebrew でインストールできるようにする』の記事の『Homebrew でインストールできるようにする』の項を参考に、
homebrew-tap
というリポジトリを作って、Homebrew 用の設定を置くことにしました。
ちなみに公式の説明は、
けっこうサッパリしていてわかりにくいので、作り方を検索したり、
GitHub内で「homebrew-tap」で検索をかけて他の人の例を見てみるのがオススメです。
私はけっこう aws/homebrew-tap
を何度も見て参考にしました。
→ https://github.com/aws/homebrew-tap
自動生成の Formula ファイルを見てみる
brew create --tap nekonenene/homebrew-tap --set-name rust-test --rust https://github.com/nekonenene/git-branch-delete-merged-rs/releases/download/v1.0.4/git-branch-delete-merged_Darwin_x86_64
のようなコマンドを打つと、
/usr/local/Homebrew/Library/Taps/nekonenene/homebrew-tap/Formula/rust-test.rb
に以下のようなファイルが作られます。
# Documentation: https://docs.brew.sh/Formula-Cookbook # https://rubydoc.brew.sh/Formula # PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST! class RustTest < Formula desc "" homepage "" url "https://github.com/nekonenene/git-branch-delete-merged-rs/releases/download/v1.0.4/git-branch-delete-merged_Darwin_x86_64" sha256 "5dd726b01b5cb78d0f256c3ba7ee6d0139691d0d39d84525411911de00138481" license "" depends_on "rust" => :build def install # ENV.deparallelize # if your formula fails when building in parallel system "cargo", "install", *std_cargo_args end test do # `test do` will create, run in and delete a temporary directory. # # This test will fail and we won't accept that! For Homebrew/homebrew-core # this will need to be a test that verifies the functionality of the # software. Run the test with `brew test rust-test`. Options passed # to `brew install` such as `--HEAD` also need to be provided to `brew test`. # # The installed folder is not in the path, so use the entire path to any # executables being tested: `system "#{bin}/program", "do", "something"`. system "false" end end
ダウンロードするファイルのURLと、
そのファイルをSHA256でハッシュ化した値を記載する必要があります。
ハッシュ値は以下のようなスクリプトで取得することができます。
curl -fL https://github.com/nekonenene/git-branch-delete-merged-rs/releases/download/v1.0.4/git-branch-delete-merged_Darwin_x86_64 | shasum -a 256 5dd726b01b5cb78d0f256c3ba7ee6d0139691d0d39d84525411911de00138481 -
しかし、各OS・CPU種類ごとにバイナリファイルを作成している場合、
それぞれに対してこのコマンドを実行するのはなかなかに億劫(おっくう)です。
SHA256ハッシュ値をカンタンに取得できるようにする
というわけで作成したのが、この update_config.rb です。
configs ディレクトリに
{ "inputs": { "github_url": "https://github.com/nekonenene/git-branch-delete-merged-rs", "version": "v1.0.4", "filename_template": "git-branch-delete-merged_{os}_{cpu}" } }
のようなJSONファイルを置いてから
ruby update_config.rb configs/git-branch-delete-merged.json
を実行すると、必要なバイナリファイルを見に行って、
https://github.com/nekonenene/homebrew-tap/blob/v1.0.0/configs/git-branch-delete-merged.json のように
outputs キーの中に URL と SHA256 ハッシュ値のペアを入れたJSONファイルへと更新してくれます。
外部ライブラリへの依存がないので、実行前に gem install
が不要なのも便利なところです。
あとは config_provider.rb でそれをパースしたものを、
Formula/git-branch-delete-merged.rb で使うような作りになっています。*1
これによって、バージョンアップ時に Formula ファイル側を変更する必要がなくなりましたし、
新たな Formula を足すときも、既存の Formula ファイルをほぼコピペするだけで使い回せるようになりました!
もし便利に感じましたら、 https://github.com/nekonenene/homebrew-tap の
update_config.rb などを、お好きにコピーしたり改変したりしてお使いください!
*1:config_provider は aws/homebrew-tap を基に作成しました