特別目新しい話は多分ないと思うけど、まあやったので。
リポジトリ
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 っぽいものを書いておくとよい気がする。