概要
golangで作ったバイナリをリリースする際はgoxなどで特に困っていなかったのですが、goreleaserについて調べたらHomebrewに対応していることに気づきました。
Formulaの作成はいつも面倒だな...と思っていたのですが、goreleaserを使ってTravis CIでリリースするようにしたら超楽になって頻繁にリリースしたい気持ちになったので、特に大した内容はないですが一応書いておきます。
参考URL
設定
ドキュメントに書いてある通りなのですが、自分用のメモとして残しておきます。
goreleaser自体の使い方は色々なブログ等にも書いてあるので、ここでは説明は省略します。
まず自分で作った時の設定を書いておきます。
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
だったので、以下のようになります。
github:
owner: knqyf263
name: homebrew-pet
commit_author
次にcommit_authorはコミットされる時のauthorになります。
goreleaserbotにしておくと、以下のようにgoreleaserbotとしてコミットされます。
何でも良いと思いますが、自動コミットなことが分かるのでデフォルトのままgoreleaserbotにしました。
description
ここからは実際にFormula上に書かれる設定になります。
descriptionにはコマンドの説明を書きます。
description: "Simple command-line snippet manager"
homepage
homepageは何でも良いですが、特に専用のページがなければGitHubのページで良いと思います。
homepage: "https://github.com/knqyf263/pet"
dependencies
これはHomebrewのFormulaで depends_on
として設定される内容になります。
詳細は以下を見ると良いです。
- https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md#specifying-other-formulae-as-dependencies
- http://www.rubydoc.info/github/Homebrew/brew/master/Formula#depends_on-class_method
Homebrew上での依存関係の記述になるので、HomebrewでのFormula名を書きます。
dependencies:
- fzf
上記のように書くと、Formulaで以下のようになります。
depends_on "fzf"
install
これもFormulaのinstallメソッド内に記述される内容です。
書き方はドキュメントを見たり、他のFormulaを見ると良いと思います。
- https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md#bininstall-foo
- http://www.rubydoc.info/github/Homebrew/brew/Formula#install-instance_method
- https://github.com/Homebrew/homebrew-core/tree/master/Formula
install: |
bin.install Dir['pet']
zsh_completion.install "misc/completions/zsh/_pet"
このように書くと、そのままinstallメソッド内に記述されます。
def install
bin.install Dir['pet']
zsh_completion.install "misc/completions/zsh/_pet"
end
test
Formulaでのtest内に記述されます。
brewでインストール後に正しく動作しているかの確認に使われます。
test: |
system "#{bin}/pet"
今回はtapして使うためコマンド実行するだけの簡単なテストですが、本家に入れる場合は丁寧に書かないと駄目です。
結果は以下のようになります。
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パッケージの生成もやってみたので、その辺りもいつか書けたら書きます。