特別目新しい話は多分ないと思うけど、まあやったので。
リポジトリ
mackerel-plugin-darwin-battery という Mackerel 用のエージェント。
github.com
この記事で書いたやつ。
astj.hatenablog.com
go のバイナリを作るので GitHub release にアップロードできると便利そう、ということでやった。別にこれくらいなら手でビルドすればいいんだけど、仕事でもちょっと Travis 触ってることもあって試しに Travis でやってみる。
Travis CI は組み込みで GitHub Releases へのアップロード機能があるので、ひとまずはそれにお任せしてみる。
まずテストする
テストしたいだけなら.travis.ymlにlanguage: goと書けば良いので楽。( ref: Building a Go Project - Travis CI )
いちおう go のバージョンくらいは指定している:
language: go go: - 1.7.3
go lint とかもやりたければ script をきちんと定義することになるけど、今回は手抜きしてる。
go のリリース用アーカイブを作る
ちょっと迷ったけど、今回は lahr/goxc を使うことにした。単体で GitHub releases へのアップロードもできたり重厚なので少し大袈裟ではある。mitchellh/gox とかのシンプルな他の選択肢もあるし、そもそも単にバイナリをクロスコンパイルするだけなら標準の go build だけでできるんだけれど、今回リリース用の zip に固める作業もあって、それを手で用意するのが少し面倒なので goxc にしたという感じ。丁寧に Makefile やシェルスクリプト書くならビルド部分自体は go build でいい気がする。
コマンド自体はざっくりとこういう感じ。性質上 Mac でしか使わないので darwin だけ。 tasks はごちゃっと書いたけどよく見たら xc と archive だけやれば十分な気がする。
goxc -d=$TRAVIS_BUILD_DIR/dist -bc=darwin -tasks=clean-destination,xc,archive,rmbin
これを Travis での deploy 前に実行してビルドしたいので、.travis.yml の before_deploy に書いておく。当然 goxcもここで入れないといけない。アーカイブを置くディレクトリもここで mkdir しておくと安心感がある。
before_deploy: - go get -u github.com/laher/goxc - mkdir -p $TRAVIS_BUILD_DIR/dist - goxc -d=$TRAVIS_BUILD_DIR/dist -bc=darwin -tasks=clean-destination,xc,archive,rmbin
リリース用の設定を作る
travis のドキュメントにもあるけど、GitHub への Access Token を .travis.yml に書いたりしないといけない。手でやるといかにも面倒そうで、公式の CLI ツールを使うと楽。
github.com
travis setup releases して適当に質問に答えると .travis.yml にデプロイ用の設定が書き加えられる。後はちょいちょい設定していくと完成という感じ。
deploy: provider: releases skip_cleanup: true api_key: secure: (snip) file_glob: true file: "$TRAVIS_BUILD_DIR/dist/**/*.{tar.gz,zip}" on: tags: true all_branches: true condition: "$TRAVIS_TAG =~ ^v[0-9].*$"
file_glob とかは qiita のこの辺のエントリを見た。ビルドしたファイルの構成に過不足なくマッチする glob を書けばよい。
qiita.com
on は v0.0.9みたいなタグを切ったときに実行されるように書いておく。master にしかタグ打たないなら all_branches はもしかしたらいらないかもしれない。試してない。タグの書式は個人的にはなんでもよかったのだけど、Songmu/ghch がvX.Y.Zを期待してそうなので踏襲した。
タグ打ち => ビルド => リリース
ここまでで設定は完成。完成した .travis.yml はこういう感じ:
https://github.com/astj/mackerel-plugin-darwin-battery/blob/master/.travis.yml
"Release v0.0.2" みたいなコミットをしてv0.0.2みたいなタグを打って push すると GitHub の releases にアーカイブが上がってくるようになった。
Release v0.0.2: Release v0.02 · astj/mackerel-plugin-darwin-battery · GitHub
デフォルトの挙動だとタグを打ったコミットのコミットメッセージが release の説明に入るので、タグを打つコミットメッセージに changelog っぽいものを書いておくとよい気がする。