Open7
【Flutter】Github Actionsで実現する継続インテグレーション(CI)
Github Actions
公式:https://github.com/features/actions
基本
on
:トリガー
手順
- name
- on
- env
- jobs
- job名
- runs-on
- timeout-minutes
- steps
- uses
with
- uses
- job名
よく使うActions
actions/checkout@v2
-
subosito/flutter-action@v2
:
ワークフロー内でflutterコマンドを実行する為のアクション -
kuhnroyal/flutter-fvm-config-action@v1
:
プロジェクト内のfmv_config.json
の値を環境変数(env.FLUTTER_VERSION
、env.FLUTTER_CHANNEL
)として、読み取ってくれるアクション。これを前述のflutter_actions
に渡し、そのバージョンをインストールする様に指定する 公式
Dangerを使ってAnalyze結果をプルリクエストにコメントする
仕組み
-
flutter analyze
の結果をテキストファイルに出力 - そのテキストファイルを
Danger
で解析し、プルリクエストにコメントする
導入手順
- Rubyのセットアップ:
- Bundlerのインストール:
gem install bundler
- Gemfileの生成:
bundle init
- Gemfileの設定:Gemfileに danger を追加
Gemfile
# frozen_string_literal: true
source "https://rubygems.org"
gem 'danger'
- dangerのインストール:
bundle install
- Dangerfileの作成と定義
Dangerfile
danger.import_plugin("./danger/plugins/flutter_analyze.rb")
flutter_analyze.report_name = "operation"
flutter_analyze.report_path = "flutter_analyze_report.txt"
flutter_analyze.lint
- Actionsのworkflowに定義を追加
参考
Flutterのバージョンをfvmに合わせる
action: https://github.com/marketplace/actions/flutter-fvm-config-action
やりたい事
Pull Request作成時に以下を行いたい
- ローカライズテキストの作成
flutter gen-l10n
- コードフォーマット
flutter format
- 静的解析 (Lint解析)
flutter analyze
- テスト
flutter test
Workflowの流れ
- flutterのインストール
- rubyのインストール
- bundlerのインストール
- bundle install (dangerのインストール)
- ローカライズテキストの作成
-
flutter format
でフォーマット -
flutter analyze > flutter_analyze_report.txt
で解析結果をtxtファイルに出力 - Dangerでその結果をプルリクにコメント
flutter test
- codecovでカバレッジをコメント
オマケ:Github actionの失敗・成功をslackに通知する
- いくつかやり方が存在する
- 結果を報告するslackアプリを作成する方法やslackのworkflowを活用する方法
- またfastlaneからslackに通知する事も可能だし、zapierを使う方法もありそう
- Github actionsの成功・失敗はあくまでGithub Actions内で実行すれば良さそう
- slackアプリの作成よりはslack workflowの活用の方法が手軽そう
参考
Github Actionsをmainブランチにマージする前にテストする
Actionsのワークフローをローカルでテストする
Actionsのワークフローをローカルでテストするact
というツールもあるらしい。