Open7

【Flutter】Github Actionsで実現する継続インテグレーション(CI)

heyhey1028heyhey1028

Github Actions

公式:https://github.com/features/actions

基本

on:トリガー

手順

  • name
  • on
  • env
  • jobs
    • job名
      • runs-on
      • timeout-minutes
      • steps
        • uses
          with

よく使うActions

  • actions/checkout@v2
  • subosito/flutter-action@v2
    ワークフロー内でflutterコマンドを実行する為のアクション
  • kuhnroyal/flutter-fvm-config-action@v1
    プロジェクト内のfmv_config.jsonの値を環境変数(env.FLUTTER_VERSIONenv.FLUTTER_CHANNEL)として、読み取ってくれるアクション。これを前述のflutter_actionsに渡し、そのバージョンをインストールする様に指定する 公式
heyhey1028heyhey1028

Dangerを使ってAnalyze結果をプルリクエストにコメントする

仕組み

  • flutter analyzeの結果をテキストファイルに出力
  • そのテキストファイルをDangerで解析し、プルリクエストにコメントする

導入手順

  1. Rubyのセットアップ:
  2. Bundlerのインストール:gem install bundler
  3. Gemfileの生成:bundle init
  4. Gemfileの設定:Gemfileに danger を追加
Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

gem 'danger'
  1. dangerのインストール:bundle install
  2. 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
  1. Actionsのworkflowに定義を追加

参考

https://qiita.com/idonuntius/items/531518e37902efa73893
https://dev.classmethod.jp/articles/mapping-secrets-github-token/

heyhey1028heyhey1028

やりたい事

Pull Request作成時に以下を行いたい

  • ローカライズテキストの作成 flutter gen-l10n
  • コードフォーマット flutter format
  • 静的解析 (Lint解析) flutter analyze
  • テスト flutter test

Workflowの流れ

  1. flutterのインストール
  2. rubyのインストール
  3. bundlerのインストール
  4. bundle install (dangerのインストール)
  5. ローカライズテキストの作成
  6. flutter formatでフォーマット
  7. flutter analyze > flutter_analyze_report.txtで解析結果をtxtファイルに出力
  8. Dangerでその結果をプルリクにコメント
  9. flutter test
  10. codecovでカバレッジをコメント
heyhey1028heyhey1028

オマケ:Github actionの失敗・成功をslackに通知する

  • いくつかやり方が存在する
  • 結果を報告するslackアプリを作成する方法やslackのworkflowを活用する方法
  • またfastlaneからslackに通知する事も可能だし、zapierを使う方法もありそう
  • Github actionsの成功・失敗はあくまでGithub Actions内で実行すれば良さそう
  • slackアプリの作成よりはslack workflowの活用の方法が手軽そう

参考

https://blog.shibayu36.org/entry/2022/01/24/170000