Go
homebrew

goreleaserでHomebrewのFormulaを自動生成する

More than 1 year has passed since last update.


概要

golangで作ったバイナリをリリースする際はgoxなどで特に困っていなかったのですが、goreleaserについて調べたらHomebrewに対応していることに気づきました。

Formulaの作成はいつも面倒だな...と思っていたのですが、goreleaserを使ってTravis CIでリリースするようにしたら超楽になって頻繁にリリースしたい気持ちになったので、特に大した内容はないですが一応書いておきます。


参考URL


設定

ドキュメントに書いてある通りなのですが、自分用のメモとして残しておきます。

goreleaser自体の使い方は色々なブログ等にも書いてあるので、ここでは説明は省略します。

まず自分で作った時の設定を書いておきます。


goreleaser.yml

brew:

github:
owner: knqyf263
name: homebrew-pet
commit_author:
name: goreleaserbot
email: goreleaser@carlosbecker.com
description: "Simple command-line snippet manager"
homepage: "https://github.com/knqyf263/pet"
dependencies:
- fzf
install: |
bin.install Dir['pet']
zsh_completion.install "misc/completions/zsh/_pet"
test: |
system "#{bin}/pet"



github

自分でhomebrew用のリポジトリを作成して、それをgithubのsectionで設定します。

自分の場合は knqyf263/homebrew-pet だったので、以下のようになります。


goreleaser.yml

github:

owner: knqyf263
name: homebrew-pet


commit_author

次にcommit_authorはコミットされる時のauthorになります。

goreleaserbotにしておくと、以下のようにgoreleaserbotとしてコミットされます。

何でも良いと思いますが、自動コミットなことが分かるのでデフォルトのままgoreleaserbotにしました。

Kobito.CLGIPW.png


description

ここからは実際にFormula上に書かれる設定になります。

descriptionにはコマンドの説明を書きます。


goreleaser.yml

description: "Simple command-line snippet manager"



homepage

homepageは何でも良いですが、特に専用のページがなければGitHubのページで良いと思います。


goreleaser.yml

homepage: "https://github.com/knqyf263/pet"



dependencies

これはHomebrewのFormulaで depends_on として設定される内容になります。

詳細は以下を見ると良いです。

Homebrew上での依存関係の記述になるので、HomebrewでのFormula名を書きます。


goreleaser.yml

dependencies:

- fzf

上記のように書くと、Formulaで以下のようになります。


pet.rb

depends_on "fzf"



install

これもFormulaのinstallメソッド内に記述される内容です。

書き方はドキュメントを見たり、他のFormulaを見ると良いと思います。


goreleaser.yml

install: |

bin.install Dir['pet']
zsh_completion.install "misc/completions/zsh/_pet"

このように書くと、そのままinstallメソッド内に記述されます。


pet.rb

def install

bin.install Dir['pet']
zsh_completion.install "misc/completions/zsh/_pet"
end


test

Formulaでのtest内に記述されます。

brewでインストール後に正しく動作しているかの確認に使われます。

https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md#add-a-test-to-the-formula


goreleaser.yml

test: |

system "#{bin}/pet"

今回はtapして使うためコマンド実行するだけの簡単なテストですが、本家に入れる場合は丁寧に書かないと駄目です。

結果は以下のようになります。


pet.rb

test do

system "#{bin}/pet"
end


url, version, sha256

この辺りはgoreleaserが勝手に埋めてくれます。

大した手間じゃない割に一番面倒に感じていた部分なので、本当に助かります。


使ってみる

Travis CIの設定は公式ドキュメントにあるとおりです。

https://goreleaser.com/#continous_integration

tagをつけてpushすると勝手にFormulaが更新されます。

$ git push --tags

自動生成されたFormulaは以下です。

実際に試しても問題なく利用できました。

https://github.com/knqyf263/homebrew-pet/commit/99b254cfb64365fe461f9cd62bcd6e4b9bc3a96b

$ brew install knqyf263/pet/pet


まとめ

HomebrewのFormula生成は自分にとっては非常に楽になりました。

手でやっても数分の作業ですが、精神的な負荷が高かったのでこういう些細な自動化は本当に助かります。

rpmやdebパッケージの生成もやってみたので、その辺りもいつか書けたら書きます。