おそらくはそれさえも平凡な日々

複数パッケージ構成のgolangのプロジェクトのカバレッジを測定しcoverallsに投稿する

前回もそうでしたが、golangの話と言いつつシェルスクリプトしか出てきません。このへんで出ているような話で同じようなことで大分ガイシュツネタです。

やったのは以下。

  • go test -coverprofile=coverage.outが複数パッケージに対応しておらず動かないのでディレクトリを渡り歩いてそれぞれでcoverprofileを出力しながらひとつのファイルにマージする
  • coverallsへの投稿はmattnさんのgoverallsを使う

coverprofileを出力するスクリプトは似たようなの既にたくさんあるけどこんな感じ。go list使うのはmotemenに知見をもらった。

#/bin/sh
set -e
# 中断した時とかにゴミが残らないようにcleanupする

cleanup() {
  retval=$?
  if [ $tmpprof != "" ] && [ -f $tmpprof ]; then
    rm -f $tmpprof
  fi
  exit $retval
}
trap cleanup INT QUIT TERM EXIT

# メインの処理
prof=${1:-".profile.cov"}
echo "mode: count" > $prof
gopath1=$(echo $GOPATH | cut -d: -f1)
for pkg in $(go list ./...); do
  tmpprof=$gopath1/src/$pkg/profile.tmp
  go test -covermode=count -coverprofile=$tmpprof $pkg
  if [ -f $tmpprof ]; then
    cat $tmpprof | tail -n +2 >> $prof
    rm $tmpprof
  fi
done

travisだと、これを動かして終わった後で、after_successに

goveralls -coverprofile=.profile.cov

とか書いてやると良い。前回同様このへんでやってることも全部golangで書けると再利用しやすくなっていいかなーとは思っている。

created at
last modified at

2015-08-10T23:47:25+0900

comments powered by Disqus