octocovを導入してみる
時間がない人へのまとめ
この記事では、Actionsで行ったテスト結果をPRにレポートとしてコメントしてくれるoctocovを自分の管理するGoのプロジェクトのリポジトリに導入してみます。
目次
octocovって?
octocovは、コードメトリクス(コードカバレッジ、コード/テスト比、テスト実行時間)を収集するためのツールキットです。
octocov is a toolkit for collecting code metrics (code coverage, code to test ratio and test execution time).
実際に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の導入を行いました。 コードカバレッジ、コード/テスト比、テスト実行時間をPRにコメントしてくれるだけで、「あ、カバレッジ下がってるからテスト足りないかも」など思いテストを整備するきっかけになりそうですね。 導入自体も簡単にできるので気軽に導入してみてもいいかもしれません。 是非皆さんも導入してみてください。
参考