🤖
1分で出来る Android Lint と GitHub code scanning の連動
やり方
build.gradle.kts
app/build.gradle.kts
android {
...
lint {
sarifReport = true
checkDependencies = true
}
}
SARIF フォーマットでレポートを出力するようにします。マルチモジュール構成であっても、ルートの Android application プロジェクトで checkDependencies = true
を設定(デフォルトは false
)すれば、依存するサブモジュールについても解析され、結果もルートのプロジェクトの一つのレポートに含まれるようになります。
CI(GitHub Actions)
.github/workflows/android-lint.yml
name: Android Lint
on:
pull_request:
push:
branches: [main]
jobs:
lint:
runs-on: ubuntu-latest
permissions:
security-events: write
actions: read
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: 17
- run: ./gradlew app:lintDebug
continue-on-error: true
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: app/build/reports/lint-results-debug.sarif
SARIF ファイルをアップロードします。ちなみに private リポジトリで GitHub code scanning が有効になっていないと github/codeql-action/upload-sarif@v3
がエラーを吐きます。
continue-on-error
の箇所は、lint のオプションで abortOnError を false にするか、もしくは ./gradlew app:lintDebug || true
のように異常終了を握りつぶしてもよいです。
何が起こるの?
プルリクで自身が変更した行に Android Lint の指摘があれば annotation の形でコメントされます。
検出した問題はチケット化され、code scanning のビューで一覧の表示や追跡ができます。問題を修正したコードがマージされた場合は、チケットは自動的にクローズされます。
参考
- GitHub の code scanning のドキュメント
- Android Lint and Detekt warnings in GitHub pull requests
- Android Gradle Plugin 8.1 の Lint のドキュメント
- 1分で出来るモバイルアプリのセキュリティ向上
宣伝
来週(2024/1/31) こちらのイベントで話しますので、よろしければ。Android Lint に関しては今回の投稿のように特別に何かする必要がないので、それ以外のツールや code scanning を利用しない方法についてお話する予定です。
Discussion