時間がない人へのまとめ

この記事では、Actionsで行ったテスト結果をPRにレポートとしてコメントしてくれるoctocovを自分の管理するGoのプロジェクトのリポジトリに導入してみます。

目次

octocovって?

octocovは、コードメトリクス(コードカバレッジ、コード/テスト比、テスト実行時間)を収集するためのツールキットです。

octocov is a toolkit for collecting code metrics (code coverage, code to test ratio and test execution time).

https://github.com/k1LoW/octocovより引用

実際にoctocovがコメントしたレポートは以下のような感じです。

octocovがコメントしたレポート
octocovがコメントしたレポート

このように、コードカバレッジ、コード/テスト比、テスト実行時間をコメントして見やすくしてくれます。

加えて、レポートを比較するように設定すれば加えた変更でテスト実行時間にどれだけ影響があるのか、カバレッジが下がっていないかなどを容易に把握できるようになり、コードをより健全に保てるようになります。

octocovがコメントした比較レポート
octocovがコメントした比較レポート

導入

では早速導入していきましょう。 今回は自身の作成しているOSSである、whrisに導入してみます。

octocov.ymlの作成

octocovを使用するための設定を書きます。 導入したいリポジトリに、octocov.ymlを作成し下記内容を記載します。

coverage:
  paths:
    - coverage.out
codeToTestRatio:
  code:
    - '**/*.go'
    - '!**/*_test.go'
  test:
    - '**/*_test.go'
testExecutionTime:
  if: true
comment:
  if: is_pull_request
report:
  if: is_default_branch
  datastores:
    - artifact://${GITHUB_REPOSITORY}
diff:
  datastores:
    - artifact://${GITHUB_REPOSITORY}

今回は、Goで書いているので、codeToTestRatio>code/testにはgo関連のファイルを指定しています。

ほかに設定できるオプションもあるので、気になる方は下記を確認してください。

workflowの準備

octocovの設定はかけたので、octocovがレポートをコメントしてくれるようにActionsのWorkflowの設定を書いていきましょう。 テストをWorkflowで走らせている、.github/workflow/test.ymlの中身を以下のようにします。 今回重要なのは、1でgoのユニットテストでレポートを吐かせていることと、2でoctocovを使用していることです。

name: Test
on:
  push:
      branches:
        - main
  pull_request:
jobs:
  golang-test:
    strategy:
      matrix:
        go-version: [1.17.x]
        os: [ubuntu-latest]
    name: lint
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v2
      - name: golangci-lint
        uses: golangci/golangci-lint-action@v2
        with:
          version: latest
      - name: testing
        run: go test ./... -coverprofile=coverage.out --1
      - name: create report
        uses: k1LoW/octocov-action@v0 --2

これで、準備は完了です。

確認

PRを作成して準備したものをPushしてみましょう。 そうすると下記のように、レポートをコメントしてくれるはずです。

octocovがコメントした比較レポート
octocovがコメントした比較レポート

おわりに

今回コードをより健全に保つ補助をしてくれるoctocovの導入を行いました。 コードカバレッジ、コード/テスト比、テスト実行時間をPRにコメントしてくれるだけで、「あ、カバレッジ下がってるからテスト足りないかも」など思いテストを整備するきっかけになりそうですね。 導入自体も簡単にできるので気軽に導入してみてもいいかもしれません。 是非皆さんも導入してみてください。

参考