こんにちは。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)

こんな感じで各リポジトリでバッジを表示できます。

利用してみて

私たちも最近使い始めたばかりですが、とても便利で、簡単で、カバレッジ値監視が嬉しいです。

ぜひ読んだ方も試してみてください。

Join Us !

ウエディングパークでは、一緒に働く仲間を募集しています!
ご興味ある方は、お気軽にお問合せください(カジュアル面談から可)

採用情報を見る