🐕

GitHub Actions で Detekt を動かして reviewdog に注意させる

2023/01/22に公開

GitHub Actions で Detekt を使ってコード解析し、違反があれば reviewdog で通知するように設定してみたので備忘録的な感じで残しておきます。
alaegin/Detekt-Action がありますが、今回は使わないです。

最終的にこうなる

https://github.com/nemuki/quarkus-kotlin-hello-world/blob/41535db887eb5f72125b8b39e59579f0fc338307/.github/workflows/detekt.yml

最終的な例

要所要所で解説していきます。

Detekt を GitHub Actions で検査する

この部分です。push した時と main ブランチに向かって PR が出された時に発火します。

https://github.com/nemuki/quarkus-kotlin-hello-world/blob/e09492f80b7eced23243f09de68a99749db14e77/.github/workflows/detekt.yml#L1-L29

こだわりとしては以下があります。

reviewdog を追加する

この部分です。if: failure()で Detekt の検査で違反された時に発火するよう設定しています。

https://github.com/nemuki/quarkus-kotlin-hello-world/blob/e09492f80b7eced23243f09de68a99749db14e77/.github/workflows/detekt.yml#L31-L41

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 []


変更前

Workflow Permissions 変更前

変更後

Workflow Permissions 変更後

変更がないとレビューされない

Detekt で検査したファイルの中に PR で変更がないものが引っかかっている場合、-reporter=github-pr-reviewだとしても reviewdog からはコメントされません。当たり前だろ!と言われそうですが、自分はこれに気がつけず時間を溶かしてしまいました🫠
-reporter=github-checkとするか-filter-mode=nofilterとすることで PR の Summary の Annotations に表示させることはできます。

Annotations

感想

初めて reviewdog を飼ってみました。変なところでつまづきましたが、Detekt のログをわざわざ見に行かなくてもいいのはとても楽でした。

GitHubで編集を提案

Discussion