Go言語で作ったアプリケーションのGithubリポジトリでGithub actionsワークフローを設定し、 codecov にカバレッジを送る設定方法を紹介したいと思います。
codecov
は、テストのコードカバレッジを取得してくれるツールです。テストスイートを実行した時にソースコードの実行箇所を視覚的に示してくれて、どこに新しいテストを書くべきか分かりやすくなります。
- 緑: テストスイートによってソースコードが実行されている箇所
- 黄: テストスイートによってソースコードが部分的に実行されている箇所(具体的には、真偽値が返るところで、
true
かfalse
のどちらかしか返っていない箇所) - 赤: テストスイートによってソースコードが実行されていない箇所
忙しい時はテストコードを書くのが手抜きになったりするのですが、 codecov
を使っているとカバレッジが定量的・視覚的に表現されることによって、状況を把握しやすくなり自然とテストコード追加しようという気持ちになると感じていて、自戒の意味を込めて codecov
を設定しています。
coverall と codecovの比較
類似のツールに coveralls がありますが、以下の観点で codecov
を使うようにしています。
- コスト面
- 操作感
- ドキュメント
- 充実している
coveralls
は、ドキュメントもシンプル
前提
- codecovでアカウントを作成済
Codecovにカバレッジを送信し、視覚的に見れるように
Codecovにリポジトリを追加
Codecov
にログインして、Repositoriesのタブから「Add New repository」のボタンを押すと、以下のようにGithub上のリポジトリが表示されるので、対象のリポジトリを選択します。
プライベートリポジトリの場合は、Settingの画面でActivateします。フリープランの場合、アクティベートできるリポジトリ数は1つのみです。
再度、Overview
を開くと、codecov
のトークンが表示されるので、コピーします。
GithubリポジトリでSecretsに追加
Github
で対象のリポジトリのSettingsタブ→Secretsと選択し、「New repository secret」ボタンを押してNameに「CODECOV_TOKEN」、Valueにコピーしたトークンを入れて保存します。
Github actionsでGoのテストカバレッジをcodecovに送信
以下の yaml
ファイルをプロジェクトに追加し、Github
リポジトリにpushすると(またはPull Request作成時)、Github actionワークフローが実行されます。
Github actionワークフローの処理の中で、Githubアクションcodecov/codecov-action がSecretsに設定したトークンを使ってコードカバレッジをCodecov
に送ってくれます。
on: [push, pull_request] name: Test jobs: test: strategy: matrix: go-version: [1.15.x] os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} - name: Checkout code uses: actions/checkout@v2 - name: Test run: go test -race -coverprofile="coverage.txt" -covermode=atomic ./... - name: upload coverage uses: codecov/codecov-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }}
このGithubアクションは https://codecov.io/bashを実行し、ファイルをcodecovに送ってくれます。(参照したコード)
この実行される bash の中で、カバレッジレポートだと思われるファイルを探して、マッチしたファイルを対象としてくれます。上記の yaml
ファイルでは"coverage.txt"がレポートのファイルです。
Github actionsワークフロー実行後の確認
実行後、Codecovに戻ると以下のように、ソースコード上でテストスイートが実行された箇所が視覚的に見えるようになったり、ファイル毎・プロジェクト全体のカバレッジ等を把握できるようになります。
便利な機能
Codecov
には、よりプロジェクトのカバレッジ状況を把握しやすくしたり、コントロールする機能があります。
Pull RequestにCodecovのレポートをコメントされるように
Codecovは、Github integration機能も提供していて、インストールするとPull Requestに自動的にレポートをコメントしてくれるようになります。
GithubリポジトリのREADMEにCoverageのバッヂを追加
再度 Codecov
に戻り、以下のSettingページを参照し、Badgeのマークダウンをコピーします。
README.mdに貼り付け、Githubのリポジトリを開くと、以下ののようにカバレッジが表示されたバッヂが付き、クリックするとCodecov
の該当のプロジェクトのURLに遷移します。
Github上でPRを作った際
Github上でPRを作った際に、一定以上のカバレッジを満たさないといけないという制約を付けたい場合はcodecov.ymlを設定することによって実現可能です。
制約の例としては
などです。
DocsのCommon Configurationsを参照すると、実現したい設定と近いものが見つかるかもしれません。 docs.codecov.io
codecov.ymlの設定は、チーム単位/リポジトリ単位にそれぞれ柔軟に設定できます。