🚸

【Flutter】静的解析の結果を Danger でプルリクエストにコメントする

2024/03/13に公開

■ 静的解析を行うワークフローを作成

まずは、静的解析を行うワークフローを作成します。

このワークフローでは、mainブランチにプルリクエストまたはプッシュされたときに、ワークフローが起動するようにしています。

name: Check pull request

on:
  pull_request:
    branches:
      - main

  push:
    branches:
      - main

jobs:
  analyze:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      
      - name: Setup fvm
        uses: kuhnroyal/flutter-fvm-config-action@v2
        id: fvm-config-action
      
      - name: Install flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }}
          channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }}
      
      - name: Run flutter version
        run: flutter --version

      - name: Run pub get
        run: flutter pub get

      - name: Run analyze
        shell: bash
        run: flutter analyze | tee ./flutter_analyze_report.txt

実装が完了したらリモートリポジトリにプッシュして、リポジトリのActionsでワークフローが起動、静的解析が失敗することを確認します。

screenshot_github_actions_failure

■ ワークフローに Danger を追加

.githubディレクトリにGemfileを作成して、以下を実装します。

Gemfile

source "https://rubygems.org"

gem 'danger'
gem 'danger-flutter_lint'

Gemfileと同様に.githubディレクトリにDangerの設定を行うDangerfileを作成して、以下を実装します。

# true の場合、新規作成または修正したファイルで静的解析に引っかかったときプルリクエストにコメントする
flutter_lint.only_modified_files = true
# ワークフローの Run analyze ステップで出力した静的解析の結果のファイル
flutter_lint.report_path = "flutter_analyze_report.txt"
# 静的解析に引っかかった箇所にコメントする
flutter_lint.lint(inline_mode: true)

ワークフローのRun analyzeステップの下に、以下のDangerのステップを追加します。

- name: Setup ruby
  uses: ruby/setup-ruby@v1
  if: always()
  with:
    ruby-version: '3.3'
    bundler-cache: true
      
- name: Setup danger
  uses: MeilCli/danger-action@v5
  if: always()
  with:
    plugins_file: '.github/Gemfile'
    danger_file: '.github/Dangerfile'
    danger_id: 'danger-pr'
  env:
    DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}

ワークフローの実装が完了したらリモートリポジトリにプッシュします。

■ Danger がコメントしてくれるか確認する

Dangerがプルリクエストにコメントできるように、リモートリポジトリのSettings > Actions > General > Workflow permissionsRead and write permissionsに設定します。

設定が完了したら Save を選択します。

次に、静的解析に引っかかりそうな実装を追加して、プルリクエストを作成してみます。

上記のようにコメントが表示されたら完了です!!

GitHub

https://github.com/yass97/danger-flutter

参考にさせていただいた記事

Discussion