この記事ではRust製のcliをbrew installできるようになるまでの手順について書きます。(CI上で実行できるようにしたいのですが、まずは手でやります) サンプルとして利用するのは、前回の記事で紹介した、MySQLにpingをうつだけのcli, mysqlpingerです。
Build
$ cd path/to/mysqlpinger
$ cargo build --release
$ cd target/release
$ tar -czf mysqlpinger-0.3.0-x86_64-apple-darwin.tar.gz mysqlpinger
$ shasum -a 256 mysqlpinger-0.3.0-x86_64-apple-darwin.tar.gz
f253213e27eaec55a9c58029de92c84c4bd11f311f77d273e15053a21ba5684c mysqlpinger-0.3.0-x86_64-apple-darwin.tar.gz--releaseでbuildして、tarにします。file名は他のprojectにならって、<binname>-<version>-<target>.tar.gzとしました。 また、あとで利用するので、hash値を取得しておきます。
Github release

buildしたbinaryを公開するために、githubのreleaseを利用します。新しいreleaseを作成し、さきほど作成したtar fileをuploadします。 releaseが作成されると、Assetsにリンクが生成されます。
Homebrew Formulaの作成
homebrew-mysqlpinger という名前のrepositoryをgithub上に作成して、cloneしてきます。
$ cd homebrew-mysqlpinger
$ exa -T
.
└── Formula
└── mysqlpinger.rb
$ bat Formula/mysqlpinger.rb -p
class Mysqlpinger < Formula
desc "cli mysql utility written in Rust"
homepage "https://github.com/ymgyt/mysqlpinger"
url "https://github.com/ymgyt/mysqlpinger/releases/download/v0.3.0/mysqlpinger-0.3.0-x86_64-apple-darwin.tar.gz"
sha256 "f253213e27eaec55a9c58029de92c84c4bd11f311f77d273e15053a21ba5684c"
version "0.3.0"
def install
bin.install "mysqlpinger"
end
end上記のようにFormula/mysqlpinger.rbを作成して、classを定義します。 urlには、github releaseのasset fileのlinkを指定します。 sha256にはtar fileのhash値を指定します。 (class名をMySQLPingerのようにするとエラーになりました)
ここまでを作成して、pushします。
Install
$ brew tap ymgyt/mysqlpinger
$ brew install mysqlpinger
$ mysqlpinger --version
mysqlpinger 0.3.0無事、installすることができました。🎉 github releaseの作成、fileのupload, formula repositoryの更新までをコマンドでできたらこの作業をci上でおこなえそうです。 Rust製でよさそうなツールを探して、なければ作ってみようと思います。
参考にさせていただいたブログ
- https://federicoterzi.com/blog/how-to-publish-your-rust-project-on-homebrew/