GitHub Actions で Detekt を動かして reviewdog に注意させる
GitHub Actions で Detekt を使ってコード解析し、違反があれば reviewdog で通知するように設定してみたので備忘録的な感じで残しておきます。
alaegin/Detekt-Action がありますが、今回は使わないです。
最終的にこうなる
要所要所で解説していきます。
Detekt を GitHub Actions で検査する
この部分です。push した時と main ブランチに向かって PR が出された時に発火します。
こだわりとしては以下があります。
- concurrency で連続 push した場合に前のジョブを取り消す。
- gradle/gradle-build-action を使って Gradle キャッシュを楽にする。
reviewdog を追加する
この部分です。if: failure()
で Detekt の検査で違反された時に発火するよう設定しています。
Detekt は reviewdog に標準で定義されていないので、Detekt から出力される checkstyle XML 方式のレポートを reviewdog に渡しています。
Reporting | Detekt
https://github.com/reviewdog/reviewdog#checkstyle-format
設定後に PR を出し、Detekt に違反していると最初に見せたようなコメントが追加されます。
注意点
リポジトリの設定
https://github.com/[user]/[repo]/settings/actions
内の Workflow Permissions が Read repository contents permission になっているとsecrets.GITHUB_TOKEN
に書き込み権限がなく 403 エラーが吐き出されてしまいます。
reviewdog: POST https://api.github.com/repos/user/repo/pulls/number/reviews: 403 Resource not accessible by integration []
変更前
変更後
変更がないとレビューされない
Detekt で検査したファイルの中に PR で変更がないものが引っかかっている場合、-reporter=github-pr-review
だとしても reviewdog からはコメントされません。当たり前だろ!と言われそうですが、自分はこれに気がつけず時間を溶かしてしまいました🫠
-reporter=github-check
とするか-filter-mode=nofilter
とすることで PR の Summary の Annotations に表示させることはできます。
感想
初めて reviewdog を飼ってみました。変なところでつまづきましたが、Detekt のログをわざわざ見に行かなくてもいいのはとても楽でした。
Discussion