GoでCI+カバレッジレポート環境を作るのに少し手間取ったのでまとめ。
どんだけ無駄なcommitしたんだって感じがあります(都度pushして動作を確認してた)
https://github.com/dmnlk/stringUtils/commits/master
https://github.com/dmnlk/stringUtils
https://travis-ci.org/dmnlk/stringUtils
https://coveralls.io/r/dmnlk/stringUtils
Travis CI でGoのCI
これはすごく簡単。
.travis.yml
に
language: go
script:
- go test -v
を書いておけば勝手にCIしてくれる。
Coverallsでカバレッジを取る
これも先人のありがたいツールを使って。
さっきの .travis.yml
の中身を消して以下にする
language: go
go:
- tip
before_install:
- go get github.com/axw/gocov/gocov
- go get github.com/mattn/goveralls
- if ! go get code.google.com/p/go.tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi
script:
- $HOME/gopath/bin/goveralls -repotoken とーくん
-repotoken
にはCoverallsで取得できるトークンを設定する。
Tokenを暗号化してセキュアにする
ここからがハマりどころだった。
-repotoken
にトークン渡せば良いのだが、YAMLファイルにトークンベタ書きは良くない。
Coverallsには Note: Do not make your repo token public.
とある(多分private リポジトリの話をしてるっぽいけど)
公開リポジトリなら別に平気な感じもあるが、どうせならsecureにしてみようと。
まず、ローカル端末に travisのgemをインストールする必要がある。
sudo gem install travis
そして、TOKENを暗号化してもらう。
travis encrypt COVERALLS_TOKEN=とーくんほげほげ --add
--add
するとリポジトリ内の .travis.yml
に追記してくれる。
が、この --add
オプションをつけるのだけはオススメしません。
インデントとかも結構変更するので、そもそものbuildがTravisで通らなくなったりする。
それで何度もyamlを書きなおしたりトークンを再生成するとかハマった。
--add
をしない場合、標準出力に、
Please add the following to your .travis.yml file:
secure: "VLQkBFIJGWG3KE/PJTIVJ4fYQMGptoozHbLQwu66SbD2Gb58EFn/HXlZNE8VF+gH+S81D4WCIORKTa3dfOOIXUc22GlQRecOdnwWl8f3+M9vneL9PTn/4t548Z2ydDk5WMNtBeu1MuNWQ9arOa2EKl090Ip5LCgs/P4MAwInhUo="
Pro Tip: You can add it automatically by running with --add.
とか出てくるので secure
の行をコピー。
で、.travis.yml
に追記して環境変数として設定してあげる。
language: go
go:
- tip
before_install:
- go get github.com/axw/gocov/gocov
- go get github.com/mattn/goveralls
- if ! go get code.google.com/p/go.tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi
script:
- $HOME/gopath/bin/goveralls -repotoken $COVERALLS_TOKEN
env:
global:
secure: さっきのコピーしたアレ
-repotoken
には $COVERALLS_TOKEN
を渡すことでTravis側が勝手に暗号を解読?してtokenをgoverallsに渡してくれる。
これでCIとカバレッジが自動で取得できるようになる。