CloudBuild, ava, GolangでCodecov
5名までは無料という噂のCodecov導入してみた
事前準備
Codecov登録
何はともあれCodecovでSign Up!
GitHubアカウントで登録していくとこんな画面にたどり着く
トークンの保存
ここで出てきたトークンをSecret Managerに登録しておく
Cloud Buildにロール追加
Cloud Buildの設定に表示されるサービスアカウントをIAMで探し
「シークレットマネージャー」->「Secret Managerのシークレットアクセサー」ロールを追加
Cloud Buildの設定
avaのcoverage
nycをインストールし
package.jsonにavaテストのscriptを記載
{
...
"scripts": {
"test": "nyc -s --reporter=text-lcov ava && nyc report --reporter=text-lcov > ./coverage.lcov"
},
-sで標準出力を消して、nyc reportでカバレッジファイルを出力
Codecovがこのファイルをよろしく見つけてくれる
cloudbuild.yamlにテストのstep記述
steps:
- name: 'node:12.16.0-alpine'
dir: 'frontend'
entrypoint: yarn
args: ['test']
Golangのcoverage
cloudbuild.yamlにテストのstep追記
- name: 'golang:1.14-buster'
entrypoint: /bin/sh
args: [
'-c',
'go test -coverprofile=coverage.txt -covermode=atomic ./...'
]
これでava, Golangで2Coverageファイルが出力された
Codecovにcoverageファイルを投げつける
Secret managerからトークン取得->Codecovに投げるstep追記
- name: gcr.io/cloud-builders/gcloud
entrypoint: "bash"
args:
[
"-c",
"gcloud secrets versions access latest --secret=codecov-token > ./codecov-token.txt"
]
- name: gcr.io/cloud-builders/gcloud
entrypoint: "bash"
args:
[
"-c",
"bash <(curl -s https://codecov.io/bash) -t $(< ./codecov-token.txt) -C $COMMIT_SHA -B $BRANCH_NAME"
]
step間で使える./codecov-token.txtに記載されたトークンを指定する
検証
これでCloud Build実行すると以下の通り素敵にCodecov使える!
CodecovページでavaもgolangもCoverageみれる!
(全然テストかけてねーw)
何が素敵って
GitHub App Integration設定するとGitHub上で勝手にコメントされるし
Coverage下がってると怒られる。
Coverage目標設定して超えないと怒られる設定もできるみたい
まとめ
PR作るたびに可視化されるとやる気でるし
テスト書いてよーって指摘しなくていいのは精神的にもいいね!