Elixir
GitLab-CI
Coveralls

GitLab CI で Elixir プロジェクトのカバレッジを取得する

More than 1 year has passed since last update.

Elixir プロジェクトに対し ExCoveralls を使って、GitLab CI でカバレッジ取得し結果を HTML で見れるようにします。サンプルコードをこちらに用意してみました。

https://github.com/ma2gedev/gitlab_ci_example


ExCoveralls の設定

設定は ExCoveralls の README.md 通りにします。

mix.exs projecttest_coverage: [tool: ExCoveralls] を追加。


mix.exs


def project do
[
...省略...
test_coverage: [tool: ExCoveralls]
]
end

deps に excoveralls を追加。


mix.exs

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 の出力結果がいい感じなので、これを取得できるように設定します。

ExCoveralls で出力される HTML 結果

HTML を取得するために MIX_ENV=test mix coveralls.html を実行すると、./cover/excoveralls.html が生成されるので、これを artifacts として登録します。

以下が設定ファイルの例です。


.gitlab-ci.yml

...省略...

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 いつの間にかとても便利になってきていて毎日感謝しながら開発しています :pray:

GitLab をすぐに最新に上げてくれて、GitLab CI もガンガン動くようにしてくれているインフラチームの皆さんにも感謝 :pray:


Resources