iOSアプリやAndroidアプリを開発する際にDangerを使っていました。
Flutterでも使えないか調べたところdanger-flutter_lintというものを発見したので試してみようと思います!
そもそもDangerって?
CIで実行し、警告などをPullRequestにコメントしてくれるものです。
Githubでは、このように書かれていました。
Danger runs after your CI, automating your team's conventions surrounding code review.
This provides another logical step in your process, through this Danger can help lint your rote tasks in daily code review.
You can use Danger to codify your team's norms, leaving humans to think about harder problems.
ref) https://github.com/danger/danger#what-is-danger
danger-flutter_lintのざっくりな使い方
-
$ flutter analyze
を叩き、その結果をテキストファイルに保存 - Dangerがそのテキストファイルを読み取り、PullRequestにコメントする
使用方法
今回のサンプルのリポジトリはこちらです
リポジトリ
PullRequest
Dangerをインストール
1. Gemfileの設定
Gemfileに danger
と danger-flutter_lint
を追加
# frozen_string_literal: true
source "https://rubygems.org"
gem 'danger'
gem 'danger-flutter_lint'
2. bundle install
bundle install
の --path
オプションがdeprecatedになったため、 bundle config
を使用
$ bundle config set path 'vendor/bundle'
$ bundle install
Dangerfileの設定
// danger
warn("WIPだよ〜〜〜〜〜〜") if github.pr_title.include? "[WIP]"
// danger-flutter_lint
flutter_lint.only_modified_files = true
flutter_lint.report_path = "flutter_analyze_report.txt"
flutter_lint.lint(inline_mode: true)
- danger
- GithubのPullRequestのタイトルに「[WIP]」がついていた場合、警告します
- 他にも警告など様々なことをカスタマイズできます
- danger-flutter_lint
- only_modified_files: 新しく追加したファイル、編集したファイルのみ対象にする
- report_path:
flutter analyze
の実行結果を出力したファイルを指定(次のGithub Actionsでflutter_analyze_report.txt
というファイル名にしています) - lint: 結果をPullRequestに表示する
Github Actionsの設定
Github Actionsを自分で設定するのは初めてなので、何か間違っているところがありましたら教えてください!
name: DangerFlutterLint
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: setup repository
uses: actions/checkout@v2
- name: setup Flutter
uses: subosito/flutter-action@v1.5.3
with:
channel: stable
- name: pub get
run: flutter pub get
- name: flutter analyze
run: flutter analyze > flutter_analyze_report.txt
- name: setup ruby
if: ${{ failure() }}
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7
bundler-cache: true
- name: run danger
if: ${{ failure() }}
uses: MeilCli/danger-action@v5.0.1
with:
plugins_file: Gemfile
install_path: vendor/bundle
danger_file: Dangerfile
danger_id: danger-pr
env:
DANGER_GITHUB_API_TOKEN: ${{ secrets.DANGER_TOKEN }}
結果
終わりに
FlutterでもDangerが使えました!
DangerはFlutter lintの警告を表示させるだけではなく、PullRequestに関わる様々なことに使えるので凄い便利ですよね。