🐙
Github ActionsでのFlutterのセットアップを高速化する
Github ActionsでFlutterを使ったWorkflowを書くときに使える裏技?の紹介です。
具体的にはFlutterのセットアップが4秒くらいで終わるようになりました。
導入方法
Flutterのセットアップにsubosito/flutter-actionを使ってる場合、FlutterをGithubからインストールする方法に置き換えることで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
```text
2. スクリプトに実行権限を付与
```text
chmod +x .github/workflows/scripts/install-flutter.sh
```text
1. subosito/flutter-actionと置き換える
```diff:.github/workflows/hoge.yaml
- - uses: subosito/flutter-action@v2
- with:
- channel: 'stable'
+ - name: "Install Flutter"
+ run: ./.github/workflows/scripts/install-flutter.sh stable
```text
以上
# 補足
解説など
## 早い理由
インストール用スクリプトでは--depth 1オプションで最新のコミットだけ取得しているので早いようです。
# 任意のバージョンのFlutterを使いたい場合
-b オプションはブランチ名とタグを指定できるので、stableのところをバージョンに置き換えれば良いです。
```diff:.github/workflows/hoge.yaml
- run: ./.github/workflows/scripts/install-flutter.sh stable
+ run: ./.github/workflows/scripts/install-flutter.sh 2.10.1
```text
<https://github.com/flutter/flutter/tags>
# リポジトリ内でFlutterバージョンが1つの場合
導入方法のスクリプトはブランチを指定できるようになってますが、リポジトリ内で Flutterバージョンが変わらないなら直指定してしまった方がバージョン変える時の修正が少なくて楽かと思います。
```bash:.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
```text
# まとめ
Github ActionsのでFlutterのセットアップを高速化する方法でした。AnalyzeやTestのworkflowをpushごとに回している場合、セットアップが速くなるのは地味にありがたいですね。
# おまけ(asdfでバージョンを管理している場合)
import-asdf-tool-versions-actionを使うことで.tool-versionsからFlutterバージョンを取得できます。analyzeのactionなら以下のように書けます。
```yaml:.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
Discussion