Elixir プロジェクトに対し ExCoveralls を使って、GitLab CI でカバレッジ取得し結果を HTML で見れるようにします。サンプルコードをこちらに用意してみました。
https://github.com/ma2gedev/gitlab_ci_example
ExCoveralls の設定
設定は ExCoveralls の README.md 通りにします。
mix.exs project
へ test_coverage: [tool: ExCoveralls]
を追加。
def project do
[
...省略...
test_coverage: [tool: ExCoveralls]
]
end
deps
に excoveralls を追加。
defp deps do
[
...省略...
{:excoveralls, "~> 0.7", only: :test}
]
end
参考コミット
mix deps.get
を実行で設定は完了。
ここまでできれば MIX_ENV=test mix coveralls
コマンドが実行できます。
$ MIX_ENV=test mix coveralls
..
Finished in 0.04 seconds
2 tests, 0 failures
Randomized with seed 663727
----------------
COV FILE LINES RELEVANT MISSED
75.0% lib/gitlab_ci_example.ex 11 4 1
[TOTAL] 75.0%
----------------
GitLab CI 用の設定
HTML の出力結果がいい感じなので、これを取得できるように設定します。
HTML を取得するために MIX_ENV=test mix coveralls.html
を実行すると、./cover/excoveralls.html が生成されるので、これを artifacts として登録します。
以下が設定ファイルの例です。
...省略...
test:
coverage: /\[TOTAL\]\s+(\d+\.\d+)%/
script:
- mix local.hex --force
- mix local.rebar --force
- mix deps.get
- MIX_ENV=test mix coveralls.html
artifacts:
expire_in: 2 week
when: always
paths:
- cover
参考コミット
coverage: /\[TOTAL\]\s+(\d+\.\d+)%/
はカバレッジのバッジとかできて便利なので設定しています。
これができたら GitLab へ Push して CI の実行を待ちます。
以下のように結果が表示されたら設定、動作確認まで完了です。
$ MIX_ENV=test mix coveralls.html
...省略...
Generated gitlab_ci_example app
..
Finished in 0.09 seconds
2 tests, 0 failures
Randomized with seed 972758
----------------
COV FILE LINES RELEVANT MISSED
75.0% lib/gitlab_ci_example.ex 11 4 1
[TOTAL] 75.0%
----------------
Generating report...
Uploading artifacts...
cover: found 2 matching files
Uploading artifacts to coordinator...
...省略...
所感
社内の Elixir プロジェクト向けに書こうと思ったのですが、外向けでも良いと思ったので公開しました(ちょっと雑だけど)。
GitLab いつの間にかとても便利になってきていて毎日感謝しながら開発しています
GitLab をすぐに最新に上げてくれて、GitLab CI もガンガン動くようにしてくれているインフラチームの皆さんにも感謝