LoginSignup
0
0

複数の SARIF ファイルを統合する

Last updated at Posted at 2024-06-13

経緯

Kotlin 言語で Android アプリ開発をしています。こちらの文献を参考に静的解析ツールの detekt を導入しました。

これにより Gradle のタスク実行だけで静的解析ができて、レポートも出力できるようにしました。

./gradlew deteKt

レポート形式は HTML や XML がありますが、今回は標準フォーマットと称される SARIF を使うことにしました。

さらに検出された Issue を GitHub のプルリクページにコメントするために、reviewdog を導入しました。CI で reviewdog コマンドにレポートファイルの中身を標準入力すると GitHub のプルリクページに投稿してくれます。

reviewdog -f=sarif -name="detekt" -reporter=github-pr-review < app/build/reports/detekt/detekt.sarif 

スクリーンショット 2024-06-14 1.10.22.png

しかしこのプロジェクトはマルチモジュールなので複数のレポートファイルが出力されます。

find . -type f -name detekt.sarif 
./common/build/reports/detekt/detekt.sarif
./feature/home/build/reports/detekt/detekt.sarif
./androidApp/build/reports/detekt/detekt.sarif
./data/remote/build/reports/detekt/detekt.sarif

このままでは reviewdog コマンドに入力できないです。よって複数の SARIF ファイルを1ファイルに統合する方法を紹介します。

複数の SARIF ファイルを1つのファイルに統合する方法

マイクロソフト社が sarif-multitool というコマンドラインツールを OSS でリリースしています。nodejs で作られているので npx コマンドで動かせます。

それを find コマンドと合わせて使い、このようなコマンドで複数の SARIF ファイルを1つのファイルに統合できます。

find . -type f -name detekt.sarif -exec npx @microsoft/sarif-multitool merge {} +

merged.sarif というファイルが作られるので、それを標準入力で reviewdog コマンドに渡せば良いです。

reviewdog -f=sarif -name="detekt" -reporter=github-pr-review < merged.sarif

補足

Gradle でなく jar ファイルをダウンロードして、それを実行する場合は、マルチモジュールプロジェクトでもレポートファイルは1つになります。

find コマンドの -exec{} + については、こちらの記事が参考になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0