Golangで作ったスクリプトをbrew install&brew updateできるようにする

あらすじ

Golangでスクリプトを作ったので、バイナリにしてhomebrewでインストール/アップデートできるようにしてみた。

細かく色々できるけど、とりあえず今回は最小で。

参考

環境

  • MacOS X El Capitan 10.11.3
  • go version go1.5.3 darwin/amd64
  • ruby 2.1.4p265

要件

  • GitHubに上げたスクリプトをbrew install xxxでインストールできるようにしたい
  • でもたまにはgo get github.com/xxxでもインストールしたい

ブツ

まずはブツを作った。

引数にディレクトリ与えたら、最下層のファイルを直前のディレクトリ名にリネームするっ的なスクリプト。こちらは特に意識する必要はない。

なんとなく動くようになったら、go buildして作ったファイルをGitHubのReleasesからv0.1として追加した。(割愛/今回は配布先のPCにgoコマンドがない前提なので、実行ファイルをそのまま配る)

  • 実行ファイルのUrlを覚えておく
    • https://github.com/gosyujin/bulkrenamer/releases/download/v0.1/bulkrenamer
  • sha1のハッシュ値を取っておく

Homebrew用設定

Formulaの作成

brew createで作れるみたいだけど、とりあえず手打ち。

リポジトリの名前はhomebrew-APPNAMEとするルール。今回はbulkrenamerなのでhomebrew-bulkrenamerリポジトリを作った。

ファイルはAPPNAME.rb。今回はbulkrenamer.rb

class Bulkrenamer < Formula
  desc "BulkRenamer"
  homepage "https://github.com/gosyujin/bulkrenamer"
  head "https://github.com/gosyujin/homebrew-bulkrenamer.git"
  version "v0.1"
  url "#{homepage}/releases/download/#{version}/bulkrenamer"
  sha1 "5e3ac6469395aae60a00c61f45b5343207cca330"

  def install
    bin.install Dir['bulkrenamer']
  end
end

sha1で比較とか他にも色々できるが、ひとまず

  • urlはツールの場所
  • versionはFormulaのバージョン。バージョンアップ時に使う

だけ。

インストールとアップデート

Homebrewでインストール

tapしてinstallでいける!

$ brew tap gosyujin/bulkrenamer
==> Tapping gosyujin/bulkrenamer
Cloning into '/usr/local/Library/Taps/gosyujin/homebrew-bulkrenamer'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
Checking connectivity... done.
Tapped 1 formula (25 files, 16.8K)
$ brew install bulkrenamer
==> Installing bulkrenamer from gosyujin/bulkrenamer
==> Downloading https://github.com/gosyujin/bulkrenamer/releases/download/v0.1/bulkrenamer
==> Downloading from https://github-cloud.s3.amazonaws.com/releases/52855923/178f416a-dfc8-11e5-9f9c-fc48ca5e1c98?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAISTNZFOVBIJM
()
🍺  /usr/local/Cellar/bulkrenamer/v0.1: 2 files, 7M, built in 8 seconds
$ bulkrenamer -v
BulkRenamer ver.0.1

Homebrewでアップデート

homebrew-bulkrenamerを更新してbrew updateしてもらう。

今回は配布ファイル変えずにバージョンだけ上げてみた。

  • v0.2になっているのは一回試した後だから
  • 本来の流れ的にはブツ(bulkrenamer)を更新してreleasesに新しいバージョンを登録後、この操作を行う

brew update

$ brew update
Updated Homebrew from 468adbc to 215cb53.
Updated 3 taps (caskroom/cask, caskroom/versions, gosyujin/bulkrenamer).
 ==> New Formulae
dropbox-uploader         gnu-complexity
 ==> Updated Formulae
cromwell                 mitmproxy
dcd                      nss
dmd                      planck
gosyujin/bulkrenamer/bulkrenamer ✔               rust
libpagemaker

brew outdatedで更新があるツールの確認。

$ brew outdated
gosyujin/bulkrenamer/bulkrenamer (v0.1, v0.2 < v0.3)
go (1.5.3 < 1.6)
openssl (1.0.2f < 1.0.2g)

brew upgrade

$ brew upgrade bulkrenamer
==> Upgrading 1 outdated package, with result:
gosyujin/bulkrenamer/bulkrenamer v0.3
==> Upgrading gosyujin/bulkrenamer/bulkrenamer
==> Downloading https://github.com/gosyujin/bulkrenamer/releases/download/v0.3/bulkrenamer
==> Downloading from https://github-cloud.s3.amazonaws.com/releases/52855923/c0686154-e21b-11e5-92d2-6d76b5ceb265?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAISTNZFOVBIJM
()
🍺  /usr/local/Cellar/bulkrenamer/v0.3: 2 files, 7M, built in 8 seconds