🔄
【Flutter × GitHub Actions】 GitHub Actionsで指定するバージョンとプロジェクトのバージョンは揃えよう
2022年に作ったflutterのプロジェクトで久しぶりにメンテナンスをしたら色々仕様が変わってて困惑しました。
中でもGitHub ActionsでCIがこけていた。このことについて解消した際の知見をまとめようと思います。
先に結論を2つ
- GitHub actionsで動かすミドルウェアのバージョン値とプロダクトで動かすミドルウェアのバージョン値は合わせよう
- flutterではpubspec.yamlで記載されているバージョン値をGitHub actionsで使用することが可能
エラーの内容
github actionsでエラーが起きた。テストを実行するジョブを組んでいたが、テストではなく、実行環境構築でこけている
LVR: Version solving took 0:00:00.830334 seconds.
| Tried 1 solutions.
FINE: Resolving dependencies finished (0.8s).
ERR : The current Flutter SDK version is 3.0.2.
|
| Because mytodoapp depends on flutter_slidable >=3.0.0 which requires Flutter SDK version >=3.7.0, version solving failed.
FINE: Exception type: SolveFailure
FINE: package:pub/src/solver/version_solver.dart 311:5 VersionSolver._resolveConflict
| package:pub/src/solver/version_solver.dart 132:27 VersionSolver._propagate
| package:pub/src/solver/version_solver.dart 96:11 VersionSolver.solve.<fn>
| ===== asynchronous gap ===========================
| dart:async Future.catchError
| package:pub/src/utils.dart 109:52 captureErrors.wrappedCallback
| package:stack_trace Chain.capture
| package:pub/src/utils.dart 122:11 captureErrors
| package:pub/src/command.dart 183:13 PubCommand.run
| package:args/command_runner.dart 209:27 CommandRunner.runCommand
| package:pub/src/command_runner.dart 174:24 PubCommandRunner.runCommand
| package:pub/src/command_runner.dart 159:20 PubCommandRunner.run
| package:dartdev/dartdev.dart 45:56 runDartdev
| /b/s/w/ir/cache/builder/sdk/pkg/dartdev/bin/dartdev.dart 11:9 main
---- End log transcript ----
pub get failed (1; ---- End log transcript ----)
Error: Process completed with exit code 1.
エラーの原因は、現在使用している Flutter SDK のバージョン (3.0.2) が、flutter_slidable >=3.0.0 の必要とする Flutter SDK バージョン (>=3.7.0) を満たしていないためだった
解決策は?
現在のバージョンを確かめてみる
// 現在のバージョン
❯❯❯ flutter --version
Flutter 3.19.5 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 300451adae (11 months ago) • 2024-03-27 21:54:07 -0500
Engine • revision e76c956498
Tools • Dart 3.3.3 • DevTools 2.31.1
CIで定義するバージョンを確認する
- name: CIジョブを動かすためのflutterの環境構築
uses: subosito/flutter-action@v2
with:
flutter-version: '3.0.2'
channel: 'stable'
-
flutter-version: '3.0.2'
を3.19.5
で指定すれば解決しそう
でも今後のメンテナンスがめんどくさそう
flutter-version: '3.0.2'
を3.19.5
で指定すれば解決しそうだが、flutterのバージョンアップのたびにここを修正するのは少し面倒
私が使っている flutter-action
ではflutter-version-fileを指定することが可能だったのでこれを使おうと思う
- name: CIジョブを動かすためのflutterの環境構築
uses: subosito/flutter-action@v2
with:
flutter-version-file: pubspec.yaml ## pubspec.yamlのパスを指定
channel: 'stable'
cache: true ## つけていなかったので、つけた
ここで大事なのはpubspec.yaml
にバージョン値を指定しておくこと。こうしないと、どこを呼んで良いかわからなくなる
name: flutter-app
description: A new Flutter project.
environment:
sdk: ">=2.17.3 <3.0.0"
flutter: "3.19.5" ## ここを指定しておく必要がある
これで動くと思います
最後に
github actionsは様々なワークフロー自動化する便利なツールです。しかしメンテナンスも必要になってきます
このようにメンテナンスを少しでも減らして、開発に集中する仕組みを作っていきたいですね
Discussion