Help us understand the problem. What is going on with this article?

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

More than 3 years have 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パッケージの生成もやってみたので、その辺りもいつか書けたら書きます。

knqyf263
漫画が好きです
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away