こんにちは。Photoraitエンジニアのヒエイです。
octocovをGitHub Actionsで使ってテストカバレッジを監視している話をします。
octocov
https://github.com/k1LoW/octocov
テストカバレッジ値やテストコード実行時間を管理できるツールです。特徴的なのがメトリクス一覧やラベルバッジ作成を行えるだけでなく、Github上だけで監視ツールとして完結できるところが便利だと感じています。
octocovはGithub Actionsと連携することで、テストカバレッジ情報の生成を行えます。
Pull requestとoctocov
Github Actionsでテストを実行し、テストカバレッジ値をPull Request(以下PR)で表示することができます。
以下例では、PHPUnitを実行してPRにテストカバレッジを表示させます。
まずアプリケーションに.octocov.yml
ファイルを用意します。
coverage: paths: - coverage.xml codeToTestRatio: code: - 'app/**/*.php' test: - 'tests/**/*Test.php' testExecutionTime: if: true diff: datastores: - artifact://${GITHUB_REPOSITORY} comment: if: is_pull_request report: if: is_default_branch datastores: - artifact://${GITHUB_REPOSITORY}
Github Actions用のworkflowファイルはこちら。
# .github/workflows/phpunit.yml name: phpunit on: pull_request: jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: exec phpunit run: vendor/bin/phpunit --coverage-clover coverage.xml - name: Run octocov uses: k1LoW/octocov-action@v0
octocovでサポートされているカバレッジフォーマットは以下に載っています。
https://github.com/k1LoW/octocov#supported-coverage-report-formats
PHPUnitではcloverでカバレッジレポートを作成できるので --coverage-clover coverage.xml
としています。
この状態でPRを作るとこうなります。
さらに.octocov.yml
ファイルに以下を追加します。
body: if: is_pull_request
とするとPRのメインコメントエリアにカバレッジ情報をコメントしてくれます。
また、
summary: if: true
を追加すると、GitHub Actionsのワークフローjob内にコメントをしてくれます。
このように、例えばコードレビュワーに対してもテストカバレッジ値の変化を見せた上でレビューしてもらうことができるのです。
Centralモード
さらに便利なのが、Centralモード
https://github.com/k1LoW/octocov#central-mode
リンク先の画像の解説がわかりやすいですが、
例えばカバレッジ監視するA・B・Cのリポジトリに対して、central
という別リポジトリを設けたとします。
そのcentral
リポジトリが、A・B・Cのカバレッジ値を集計して監視させることができます。
集計先はcentral
リポジトリ側で行うこともできますし、S3やBigQueryなどに置いて別ツールを立てて管理することもできます。
Photoraitではcentral
リポジトリ自身を集計先として使っていますので、そのベーシックなやり方を紹介します。
やり方はすごく簡単。
https://github.com/k1LoW/octocovs-template
このテンプレートから Create new repository
してCentralモードとして稼働させるリポジトリを立ち上げます。
central
リポジトリの .octocov.ymlファイルを
central: reports: datastores: - artifact://集計したいリポジトリA - artifact://集計したいリポジトリB - artifact://集計したいリポジトC badges: datastores: - local://badges push: enable: true
の形で記述し、コミット・プッシュをするだけです。
Github Actionsのワークフローが動き、Readmeファイルが以下のように表示されます。
あれ、、、バッジが表示されてるはずの画像が表示されていませんね・・・
こちらは調べたところ、central
リポジトリがprivateリポジトリだとこうなってしまうようです。ここは対応されるのを待ちましょう。。。
こちらは修正アップデートされていました!大変有難いです!
バッジは、badgesディレクトリ以下に生成されたバッジがコミットされています。素晴らしいですね。
このバッジを集計対象のリポジトリに貼ることができますね。
![coverage](https://github.com/organization/central-repo/blob/main/badges/hogehoge/coverage.svg?raw=true) ![ratio](https://github.com/organization/central-repo/blob/main/badges/hogehoge/ratio.svg?raw=true) ![test_time](https://github.com/organization/central-repo/blob/main/badges/hogehoge/time.svg?raw=true)
こんな感じで各リポジトリでバッジを表示できます。
利用してみて
私たちも最近使い始めたばかりですが、とても便利で、簡単で、カバレッジ値監視が嬉しいです。
ぜひ読んだ方も試してみてください。