golintをCIする
go vetは失敗時に終了ステータスがnon zeroなんだけど、golintは指摘項目があっても終了ステータスが0なのでエラー扱いにならない。golintはコーディング規約的な推奨事項なのでエラー扱いじゃないのは妥当そう。
ただ、細かい指摘し合いで消耗したくないのでgolintで警告が出たらCIがコケるようにしたかった。以下のようにして無理やりエラーを出すようにした。
#/bin/sh
golint ./... | tee .golint.txt
test ! -s .golint.txt
標準出力になんか出てたら失敗になるようにという感じ。出力ちゃんと見たいからteeかましてる。
更にいうと、golintは$GOOSを見てくれているので$GOOSを切り替えながら回せばビルド対象毎の警告も網羅できる。
#/bin/sh
rm -f .golint.txt
for os in "linux" "darwin" "freebsd" "windows"; do
GOOS=$os golint ./... | tee -a .golint.txt
done
test ! -s .golint.txt
この辺の仕組みをmackerel-agentのテストに入れてTravisで回すようにしました。
他に良い方法ありそうだったら教えて下さい!