🐙

Github ActionsでのFlutterのセットアップを高速化する

2022/02/18に公開

Github ActionsでFlutterを使ったWorkflowを書くときに使える裏技?の紹介です。
具体的にはFlutterのセットアップが4秒くらいで終わるようになりました。

導入方法

Flutterのセットアップにsubosito/flutter-actionを使ってる場合、FlutterをGithubからインストールする方法に置き換えることで1分近く高速化できます。

  1. Flutterインストール用のスクリプトを作成
    参考(元ネタ)
.github/workflows/scripts/install-flutter.sh
#!/bin/bash

BRANCH=$1
git clone https://github.com/flutter/flutter.git --depth 1 -b $BRANCH "$GITHUB_WORKSPACE/_flutter"
echo "$GITHUB_WORKSPACE/_flutter/bin" >> $GITHUB_PATH
  1. スクリプトに実行権限を付与
chmod +x .github/workflows/scripts/install-flutter.sh
  1. subosito/flutter-actionと置き換える
.github/workflows/hoge.yaml
- - uses: subosito/flutter-action@v2
-   with:
-     channel: 'stable'
+ - name: "Install Flutter"
+   run: ./.github/workflows/scripts/install-flutter.sh stable

以上

補足

解説など

早い理由

インストール用スクリプトでは--depth 1オプションで最新のコミットだけ取得しているので早いようです。

任意のバージョンのFlutterを使いたい場合

-b オプションはブランチ名とタグを指定できるので、stableのところをバージョンに置き換えれば良いです。

.github/workflows/hoge.yaml
-        run: ./.github/workflows/scripts/install-flutter.sh stable
+        run: ./.github/workflows/scripts/install-flutter.sh 2.10.1

https://github.com/flutter/flutter/tags

リポジトリ内でFlutterバージョンが1つの場合

導入方法のスクリプトはブランチを指定できるようになってますが、リポジトリ内で Flutterバージョンが変わらないなら直指定してしまった方がバージョン変える時の修正が少なくて楽かと思います。

.github/workflows/scripts/install-flutter.sh
#!/bin/bash

git clone https://github.com/flutter/flutter.git --depth 1 -b 2.10.1 "$GITHUB_WORKSPACE/_flutter"
echo "$GITHUB_WORKSPACE/_flutter/bin" >> $GITHUB_PATH

まとめ

Github ActionsのでFlutterのセットアップを高速化する方法でした。AnalyzeやTestのworkflowをpushごとに回している場合、セットアップが速くなるのは地味にありがたいですね。

おまけ(asdfでバージョンを管理している場合)

import-asdf-tool-versions-actionを使うことで.tool-versionsからFlutterバージョンを取得できます。analyzeのactionなら以下のように書けます。

.github/workflows/flutter_analyze.yml
name: Flutter Analyze

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  flutter-analyze:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: wasabeef/import-asdf-tool-versions-action@v1.0.1
        id: asdf
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh ${{ steps.asdf.outputs.flutter }}
      - run: flutter pub get
      - uses: invertase/github-action-dart-analyzer@v1
        with:
          fatal-infos: true
          fatal-warnings: true
          annotate: true
          annotate-only: false
          working-directory: ./lib/

Flutterバージョンを更新した時workflowの更新もれがなくなって良いですね🥳

https://github.com/wasabeef/import-asdf-tool-versions-action

GitHubで編集を提案

Discussion