Flutter environment for use in GitHub Actions. It works on Linux, Windows, and macOS.
Originally created by Alif Rachmawadi. Maintained by Bartek Pacia.
The following sections show how to configure this action.
steps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: stableflutter-version: 3.19.0
- run: flutter --versionThis is inspired by actions/setup-go.
steps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: stableflutter-version-file: pubspec.yaml # path to pubspec.yaml
- run: flutter --versionImportant
For flutter-version-file to work, you need to have the exact Flutter version
defined in your pubspec.yaml:
Good
environment:
sdk: ">=3.3.0 <4.0.0"flutter: 3.19.0Bad
environment:
sdk: ">=3.3.0 <4.0.0"flutter: ">= 3.19.0 <4.0.0"Note
Using flutter-version-file requires yq,
which is not pre-installed in windows runners. Fortunately, since version
2.18.0, this action installs yq automatically, so no action is required from
you.
steps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: stable # or: beta, master (or main)
- run: flutter --versionsteps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: devflutter-version: 1.22.x
- run: flutter --versionsteps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: anyflutter-version: 3.x
- run: flutter --versionsteps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: masterflutter-version: 5b12b74 # tag, commit or branch
- run: flutter --versionThis action supports "alternative Flutters" in addition to the official
flutter/flutter, for example:
steps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: masterflutter-version: 3.24.0git-source: https://github.com/join-the-flock/flock.git
- run: flutter --versionNote
This feature was implemented in #344 and is available since v2.18.0.
Sometimes you find a bug in Flutter and you fix it yourself (you're a rockstar!), and then submit a patch/PR to Flutter repository. However, everyone knows that code review takes time, but your app needs the fix now.
You can apply your patch like this:
steps:
- name: Clone repositoryuses: actions/checkout@v4
- uses: subosito/flutter-action@v2with:
flutter-version: 3.22.2channel: stable
- run: | flutter --version cd ${{ env.FLUTTER_ROOT }} curl https://patch-diff.githubusercontent.com/raw/flutter/flutter/pull/137874.patch | git apply git statusNote
This was first discussed in this issue.
Build Android APK and app bundle:
steps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
flutter-version: 3.24.0
- run: flutter pub get
- run: flutter test
- run: flutter build apk
- run: flutter build appbundleNote
Building for iOS requires a macOS runner.
jobs:
main:
runs-on: macos-lateststeps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: stable
- run: flutter pub get
- run: flutter test
- run: flutter build ios --release --no-codesignsteps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: stable
- run: flutter pub get
- run: flutter test
- run: flutter build webjobs:
main:
runs-on: windows-lateststeps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: stable
- run: flutter build windowsjobs:
main:
runs-on: ubuntu-lateststeps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: stable
- run: | sudo apt-get update -y sudo apt-get install -y ninja-build libgtk-3-dev - run: flutter build linuxNote
Building for macOS requires a macOS runner.
jobs:
main:
runs-on: macos-lateststeps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: stable
- run: flutter build macosIntegration with actions/cache:
steps:
- name: Clone repositoryuses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2with:
channel: stablecache: true# optional parameters followcache-key: "flutter-:os:-:channel:-:version:-:arch:-:hash:"# optional, change this to force refresh cachecache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:"# optional, change this to specify the cache pathpub-cache-key: "flutter-pub:os:-:channel:-:version:-:arch:-:hash:"# optional, change this to force refresh cache of dart pub get dependenciespub-cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:"# optional, change this to specify the cache path
- run: flutter --versionNote: cache-key, pub-cache-key, and cache-path have support for several
dynamic values:
:os::channel::version::arch::hash::sha256:
Use outputs from flutter-action:
steps:
- name: Clone repository
- uses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2id: flutter-actionwith:
channel: stable
- name: Print outputsshell: bashrun: | echo CACHE-PATH=${{ steps.flutter-action.outputs.CACHE-PATH }} echo CACHE-KEY=${{ steps.flutter-action.outputs.CACHE-KEY }} echo CHANNEL=${{ steps.flutter-action.outputs.CHANNEL }} echo VERSION=${{ steps.flutter-action.outputs.VERSION }} echo ARCHITECTURE=${{ steps.flutter-action.outputs.ARCHITECTURE }} echo PUB-CACHE-PATH=${{ steps.flutter-action.outputs.PUB-CACHE-PATH }} echo PUB-CACHE-KEY=${{ steps.flutter-action.outputs.PUB-CACHE-KEY }}If you don't need to install Flutter and just want the outputs, you can use the
dry-run option:
steps:
- name: Clone repository
- uses: actions/checkout@v4
- name: Set up Flutteruses: subosito/flutter-action@v2id: flutter-actionwith:
channel: stabledry-run: true
- run: | echo CACHE-PATH=${{ steps.flutter-action.outputs.CACHE-PATH }} echo CACHE-KEY=${{ steps.flutter-action.outputs.CACHE-KEY }} echo CHANNEL=${{ steps.flutter-action.outputs.CHANNEL }} echo VERSION=${{ steps.flutter-action.outputs.VERSION }} echo ARCHITECTURE=${{ steps.flutter-action.outputs.ARCHITECTURE }} echo PUB-CACHE-PATH=${{ steps.flutter-action.outputs.PUB-CACHE-PATH }} echo PUB-CACHE-KEY=${{ steps.flutter-action.outputs.PUB-CACHE-KEY }} shell: bash