Yappli Tech Blog

株式会社ヤプリの開発メンバーによるブログです。最新の技術情報からチーム・働き方に関するテーマまで、日々の熱い想いを持って発信していきます。

トラブルシューティング!CoverallsがうまくPull Requestにコメントしてくれないときの解決方法

この記事は ヤプリ Advent Calendar 2022 7日目の記事となります。

Androidエンジニアのてつ(哲)です。

概要

コード品質向上対策として、テストカバレッジの可視化がよく挙げられます。今回はCoverallsのPull Requestコメント機能がうまく導入できなかった時の解決方法について紹介したいと思います。

前提

  • CoverallsとCI環境が既に導入されていること
  • サービス*1の紹介とテストカバレッジ*2自体の説明は省略します。

トラブルシューティング

CoverallsのPull Requestコメント機能が導入できた場合、Pull Requestを作成した後にこのように表示されます。

何も表示されなかった場合は下記の項目をチェックしましょう!

機能設定自体が有効になっているか?

Coverallsの設定画面、https://coveralls.io/{ci_name}/{orgs_or_username}/{repo_name}/settings#lnk_alertsLEAVE COMMENTS?ENABLEDが選択されているかを確認しましょう(やや分かりにくいですが、Xが付いていれば有効です)

Coveralls BotにGithubリポジトリのアクセス権限を付与したか?

利用シーンによって設定方法が異なります:

  • パブリックリポジトリの場合は設定不要
  • プライベートリポジトリの場合

リポジトリの設定画面にCoveralls Botが書き込み権限で追加されていることを確認しましょう。

https://github.com/{orgs_or_username}/{repo_name}/settings/access

もし入ってなかったらAdd peopleWrite権限を与えてください。

  • 組織リポジトリで書き込み権限をCoveralls Botに与えたくない場合

組織の管理者権限が必要ですが、外部コントリビューターとして追加すれば可能なので、詳細はこちらで確認しましょう。

Coverallsに送ったビルドタイプはPull Requestであるか?

Coveralls上では直近のビルド(RECENT BUILDS)が確認できます。送ったビルドタイプがPULL #XXXXではない場合はBotが認識しませんので、Coveralls APIのレスポンス内容を確認しましょう。sha_commitbranchを間違えることが多いです。また、ローカルでのプッシュも想定使用ケースではないのでご注意ください。

比較するビルドが作成されているか

Coveralls上にターゲットブランチとベースブランチのビルドが存在しているかを確認しましょう。

Pull Requestコメントの中身はターゲットブランチとベースブランチのテスト結果を比較してから作ったものなので、そもそも存在しない場合は作れません。例えば、PRをfeature/lorem(ターゲットブランチ) -> epic/ipsum(ベースブランチ)にした場合、 Coveralls上のbranchepic/loremepic/ipsumでのビルドが必要です

全部確認したけど、うまくいかない

ここまできたらもう自力で解決することは難しいので、問い合わせしましょう!

方法としてはメール support@coveralls.io とGithub Issueの2種類がありますが、個人的にはGithub Issueの方が返信が早かったのでおすすめです。担当者はかなり丁寧に説明してくれます。もし英語で質問するのが不安なら、過去の関連Issue(ラベルno-pr-comments) を真似するのが良いと思います。

おまけ

  • Android Kotlinの場合は coveralls-jacoco-gradle-plugin*3を利用することが多いです。マルチモジュールもサポートされましたので、ぜひ検討してください。
  • Coveralls API ドキュメントはこちら(英)

coveralls-jacoco-gradle-pluginを利用する場合はオプション設定が必要です。

coverallsJacoco {
  coverallsRequest = File("build/req.json")
}

*1:Coveralls 公式サイト(英)

*2:Wikipedia: コード網羅率とは

*3:Android Gradle用Coveralls Plugin(英)