🤖

1分で出来る Android Lint と GitHub code scanning の連動

2024/01/22に公開

やり方

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 の形でコメントされます。



参考:プルリクに関する GitHub のドキュメント

検出した問題はチケット化され、code scanning のビューで一覧の表示や追跡ができます。問題を修正したコードがマージされた場合は、チケットは自動的にクローズされます。



参考

宣伝

来週(2024/1/31) こちらのイベントで話しますので、よろしければ。Android Lint に関しては今回の投稿のように特別に何かする必要がないので、それ以外のツールや code scanning を利用しない方法についてお話する予定です。

https://testnight.connpass.com/event/305270/

株式会社ゆめみ

Discussion