Compare commits

...

13 Commits

Author SHA1 Message Date
Peter Leibiger
1a449444c3 Simplify extraction of zip files (#379)
Some checks failed
test / test_channel (beta, false, https://gitee.com/harmonycommando_flutter/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (beta, false, https://github.com/Flutter-Foundation/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (beta, false, https://github.com/flutter/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (beta, true, https://gitee.com/harmonycommando_flutter/flutter.git, macos-latest) (push) Failing after 2s
test / test_channel (beta, true, https://github.com/Flutter-Foundation/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (beta, true, https://github.com/flutter/flutter.git, macos-latest) (push) Failing after 2s
test / test_channel (master, false, https://gitee.com/harmonycommando_flutter/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (master, false, https://github.com/Flutter-Foundation/flutter.git, macos-latest) (push) Failing after 2s
test / test_channel (master, false, https://github.com/flutter/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (master, true, https://gitee.com/harmonycommando_flutter/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (master, true, https://github.com/Flutter-Foundation/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (master, true, https://github.com/flutter/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (stable, false, https://gitee.com/harmonycommando_flutter/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (stable, false, https://github.com/Flutter-Foundation/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (stable, false, https://github.com/flutter/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (stable, true, https://gitee.com/harmonycommando_flutter/flutter.git, macos-latest) (push) Failing after 3s
test / test_channel (stable, true, https://github.com/Flutter-Foundation/flutter.git, macos-latest) (push) Failing after 4s
test / test_channel (stable, true, https://github.com/flutter/flutter.git, macos-latest) (push) Failing after 3s
test / test_cache (macos-latest) (push) Failing after 3s
test / test_master_version (macos-latest) (push) Failing after 3s
test / test_print_output_arm64 (push) Failing after 3s
test / lint_shellcheck (push) Successful in 14s
test / test_channel (beta, false, https://gitee.com/harmonycommando_flutter/flutter.git, ubuntu-latest) (push) Failing after 11s
test / test_channel (beta, false, https://github.com/Flutter-Foundation/flutter.git, ubuntu-latest) (push) Failing after 11s
test / test_channel (beta, false, https://github.com/flutter/flutter.git, ubuntu-latest) (push) Failing after 10s
test / test_channel (beta, true, https://gitee.com/harmonycommando_flutter/flutter.git, ubuntu-latest) (push) Failing after 10s
test / test_channel (beta, true, https://github.com/Flutter-Foundation/flutter.git, ubuntu-latest) (push) Failing after 10s
test / test_channel (beta, true, https://github.com/flutter/flutter.git, ubuntu-latest) (push) Failing after 10s
test / test_channel (main, ubuntu-latest) (push) Failing after 11s
test / test_channel (master, false, https://gitee.com/harmonycommando_flutter/flutter.git, ubuntu-latest) (push) Failing after 11s
test / test_channel (master, false, https://github.com/Flutter-Foundation/flutter.git, ubuntu-latest) (push) Failing after 11s
test / test_channel (master, false, https://github.com/flutter/flutter.git, ubuntu-latest) (push) Failing after 11s
test / test_channel (master, true, https://gitee.com/harmonycommando_flutter/flutter.git, ubuntu-latest) (push) Failing after 11s
test / test_channel (master, true, https://github.com/Flutter-Foundation/flutter.git, ubuntu-latest) (push) Failing after 11s
test / test_channel (master, true, https://github.com/flutter/flutter.git, ubuntu-latest) (push) Failing after 10s
test / test_channel (stable, false, https://gitee.com/harmonycommando_flutter/flutter.git, ubuntu-latest) (push) Failing after 10s
test / test_channel (stable, false, https://github.com/Flutter-Foundation/flutter.git, ubuntu-latest) (push) Failing after 10s
test / test_channel (stable, false, https://github.com/flutter/flutter.git, ubuntu-latest) (push) Failing after 13s
test / test_channel (stable, true, https://gitee.com/harmonycommando_flutter/flutter.git, ubuntu-latest) (push) Failing after 10s
test / test_channel (stable, true, https://github.com/Flutter-Foundation/flutter.git, ubuntu-latest) (push) Failing after 10s
test / test_channel (stable, true, https://github.com/flutter/flutter.git, ubuntu-latest) (push) Failing after 12s
test / test_cache (ubuntu-latest) (push) Failing after 11s
test / test_version_file (ubuntu-latest) (push) Failing after 11s
test / test_master_version (ubuntu-latest) (push) Failing after 11s
test / test_print_output_x64 (push) Failing after 8s
test / test_channel (beta, false, https://gitee.com/harmonycommando_flutter/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (beta, false, https://github.com/Flutter-Foundation/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (beta, false, https://github.com/flutter/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (beta, true, https://gitee.com/harmonycommando_flutter/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (beta, true, https://github.com/Flutter-Foundation/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (beta, true, https://github.com/flutter/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (master, false, https://gitee.com/harmonycommando_flutter/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (master, false, https://github.com/Flutter-Foundation/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (stable, true, https://github.com/Flutter-Foundation/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (stable, true, https://github.com/flutter/flutter.git, windows-latest) (push) Has been cancelled
test / test_cache (windows-latest) (push) Has been cancelled
test / test_channel (master, false, https://github.com/flutter/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (master, true, https://gitee.com/harmonycommando_flutter/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (master, true, https://github.com/Flutter-Foundation/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (master, true, https://github.com/flutter/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (stable, false, https://gitee.com/harmonycommando_flutter/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (stable, false, https://github.com/Flutter-Foundation/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (stable, false, https://github.com/flutter/flutter.git, windows-latest) (push) Has been cancelled
test / test_channel (stable, true, https://gitee.com/harmonycommando_flutter/flutter.git, windows-latest) (push) Has been cancelled
* Simplify extraction of zip files in setup.sh

Refactor unzip command to directly extract to target directory.
By keeping the /flutter directory from inside the archive, we avoid having to use a temp directory and move afterwards.

* fix: checkout specific version on main/master
2026-03-25 11:24:42 +01:00
Bartek Pacia
4efee115f1 readme: minor updates (#392) 2026-03-18 17:23:45 +01:00
Bartek Pacia
d97c38e97d add a CI job that checks out a specific master commit (#391) 2026-03-18 17:00:36 +01:00
Bartek Pacia
75b905c640 chores (#390)
* readme: update note about yq

* readme: minor updates (semantic line breaks)

* checkout@v4 -> checkout@v6
2026-03-18 15:40:24 +01:00
Peter Leibiger
7ff07e9ecd Add separate pub-cache boolean flag (#377)
This allows to selectively enabled pub dependency caching. Uses backwards compatible default if only `cache: true` is set.

Also update README
2026-03-18 15:31:10 +01:00
Pedro Monteiro
6622f58c44 feat: fvm support (#383)
* feat: added support for .fvmrc files, so it can fetch the flutter version from there

* feat: changed README description of action to accomodate new changes
2026-03-18 14:18:09 +01:00
Bartek Pacia
0ca7a949e7 Remove macos-13 (Intel) runner from CI (#388)
macos-13 was retired by GitHub in December 2025 and no longer works.
Intel-based macOS runners are being phased out entirely by GitHub,
with only expensive *-large variants remaining as alternatives.

Closes #387

Made-with: Cursor
2026-03-17 13:23:10 +01:00
Azincc
de04a6aaec Upgrade actions/cache to v5 (#385) 2026-03-16 15:24:34 +07:00
Nicholas Beninato
fd55f4c5af Support dynamic values for PUB-CACHE-PATH (#363)
* use expand_key for PUB_CACHE_PATH

* add tests

* add dash

* use PUB_CACHE
2025-06-24 23:50:48 +02:00
Bartek Pacia
ca16aee0c3 fix broken links in README (#365) 2025-06-24 23:48:20 +02:00
Nicholas Beninato
947e9c91a5 Add cache hit outputs (#364)
* feat: impl cache hit outputs

* support flutter cache and pub cache outputs

* add cache output example to readme

* use cache step directly

* update readme

---------

Co-authored-by: anies1212 <all.for.me1212sna@gmail.com>
2025-06-24 23:41:32 +02:00
atishoo
395322a6cd use env if it existed (#360) 2025-06-10 09:21:26 +02:00
Christer Eliasi-Swahn
02d6ac3427 perf: Only install yq on Windows if used (#362) 2025-06-09 09:54:01 +02:00
4 changed files with 201 additions and 74 deletions

View File

@@ -17,7 +17,7 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Run shellcheck
uses: ludeeus/action-shellcheck@master
@@ -30,7 +30,6 @@ jobs:
- ubuntu-latest
- windows-latest
- macos-latest
- macos-13
channel: [stable, beta, master]
dry-run: [true, false]
git-source:
@@ -43,7 +42,7 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- id: flutter-action
uses: ./
with:
@@ -80,11 +79,11 @@ jobs:
strategy:
matrix:
operating-system:
[ubuntu-latest, windows-latest, macos-latest, macos-13]
[ubuntu-latest, windows-latest, macos-latest]
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- uses: ./
with:
channel: stable
@@ -104,7 +103,7 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- uses: ./
with:
channel: stable
@@ -116,6 +115,35 @@ jobs:
run: flutter --version | grep '3.3.10'
shell: bash
test_master_version:
runs-on: ${{ matrix.operating-system }}
strategy:
matrix:
operating-system: [ubuntu-latest, macos-latest]
steps:
- name: Clone repository
uses: actions/checkout@v6
- id: flutter-action
uses: ./
with:
channel: master
flutter-version: e6ed6e9e16782a24a912e79d3100c496600aae5b # some commit made on 18/03/2026
- name: Echo outputs
run: |
echo RUNNER-OS=${{ runner.os }}
echo RUNNER-ARCH=${{ runner.arch }}
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 }}
shell: bash
- run: flutter --version
shell: bash
test_print_output_x64:
runs-on: ubuntu-latest
@@ -124,7 +152,7 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- run: ./setup.sh -t -p -f test/pubspec.yaml | grep '3.3.10'
shell: bash
- run: ./setup.sh -t -p | grep 'stable'
@@ -207,6 +235,10 @@ jobs:
shell: bash
- run: ./setup.sh -t -p -c '/tmp/flutter/:channel:-:version:-:hash:' | grep '/tmp/flutter/stable-3.7.7-2ad6cd72c040113b47ee9055e722606a490ef0da'
shell: bash
- run: ./setup.sh -t -p -d '/tmp/flutter/:channel:-:version:-:hash:-pub-cache-path' | grep '/tmp/flutter/stable-3.7.7-2ad6cd72c040113b47ee9055e722606a490ef0da-pub-cache-path'
shell: bash
- run: ./setup.sh -t -p -l '/tmp/flutter/:channel:-:version:-:hash:-pub-cache-key' | grep '/tmp/flutter/stable-3.7.7-2ad6cd72c040113b47ee9055e722606a490ef0da-pub-cache-key'
shell: bash
test_print_output_arm64:
@@ -217,7 +249,7 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- run: ./setup.sh -t -p -f test/pubspec.yaml | grep '3.3.10'
shell: bash
- run: ./setup.sh -t -p | grep 'stable'
@@ -276,3 +308,7 @@ jobs:
shell: bash
- run: ./setup.sh -t -p -c '/tmp/flutter/:channel:-:version:-:hash:' | grep '/tmp/flutter/stable-3.7.7-2ad6cd72c040113b47ee9055e722606a490ef0da'
shell: bash
- run: ./setup.sh -t -p -d '/tmp/flutter/:channel:-:version:-:hash:-pub-cache-path' | grep '/tmp/flutter/stable-3.7.7-2ad6cd72c040113b47ee9055e722606a490ef0da-pub-cache-path'
shell: bash
- run: ./setup.sh -t -p -l '/tmp/flutter/:channel:-:version:-:hash:-pub-cache-key' | grep '/tmp/flutter/stable-3.7.7-2ad6cd72c040113b47ee9055e722606a490ef0da-pub-cache-key'
shell: bash

142
README.md
View File

@@ -1,7 +1,7 @@
# flutter-action
Flutter environment for use in GitHub Actions. It works on Linux, Windows, and
macOS.
Flutter environment for use in GitHub Actions.
It works on Linux, Windows, and macOS.
Originally created by [Alif Rachmawadi]. Maintained by [Bartek Pacia].
@@ -14,7 +14,7 @@ The following sections show how to configure this action.
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -23,19 +23,19 @@ steps:
- run: flutter --version
```
### Use version from pubspec.yaml
### Use version from pubspec.yaml or FVM config
This is inspired by [`actions/setup-go`](https://github.com/actions/setup-go).
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version-file: pubspec.yaml # path to pubspec.yaml
flutter-version-file: pubspec.yaml # path to pubspec.yaml or .fvmrc or .fvm/fvm_config.json
- run: flutter --version
```
@@ -63,16 +63,16 @@ steps:
> [!NOTE]
>
> Using `flutter-version-file` requires [`yq`](https://github.com/mikefarah/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.
> which is not pre-installed in `windows` runners.
> This action installs `yq` automatically if `flutter-version-file` is specified,
> so no action is required from you.
### Use latest release for particular channel
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -85,7 +85,7 @@ steps:
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -99,7 +99,7 @@ steps:
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -113,7 +113,7 @@ steps:
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -122,18 +122,35 @@ steps:
- run: flutter --version
```
### Use a Flutter mirror by set ENV
You can get more infomation from [Flutter official docs](https://docs.flutter.dev/community/china).
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
env:
FLUTTER_STORAGE_BASE_URL: https://storage.flutter-io.cn
uses: subosito/flutter-action@v2
with:
channel: master
flutter-version: 5b12b74 # tag, commit or branch
- run: flutter --version
```
### Use alternative Flutter repository
This action supports "alternative Flutters" in addition to the official
[`flutter/flutter`](https://github.com/flutter/flutter), for example:
- [Flock](https://github.com/join-the-flock/flock.git)
- [a Flutter fork that supports
HarmonyOS](https://gitee.com/harmonycommando_flutter/flutter.git)
- [a Flutter fork that supports HarmonyOS](https://gitee.com/harmonycommando_flutter/flutter.git)
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -143,24 +160,18 @@ steps:
- run: flutter --version
```
> [!NOTE]
>
> This feature was implemented in
> [#344](https://github.com/subosito/flutter-action/pull/334) and is available
> since v2.18.0.
### Apply a patch
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_.
Sometimes you find a bug in Flutter and 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:
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- uses: subosito/flutter-action@v2
with:
flutter-version: 3.22.2
@@ -183,7 +194,7 @@ Build **Android** APK and app bundle:
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -206,7 +217,7 @@ jobs:
runs-on: macos-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -221,7 +232,7 @@ jobs:
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -239,7 +250,7 @@ jobs:
runs-on: windows-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -255,7 +266,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -278,7 +289,7 @@ jobs:
runs-on: macos-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
@@ -290,23 +301,45 @@ jobs:
Integration with [`actions/cache`](https://github.com/actions/cache):
> [!IMPORTANT]
> `subosito/flutter-action` now uses `actions/cache@v5` internally.
> If you use self-hosted runners, make sure they are updated
> to Actions Runner `2.327.1` or newer before enabling cache support.
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true
# optional parameters follow
pub-cache: true # optional, defaults to empty (falls back to cache value for backward compatibility)
cache-key: "flutter-:os:-:channel:-:version:-:arch:-:hash:" # optional, change this to force refresh cache
cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:" # optional, change this to specify the cache path
pub-cache-key: "flutter-pub:os:-:channel:-:version:-:arch:-:hash:" # optional, change this to force refresh cache of dart pub get dependencies
pub-cache-key: "flutter-pub-:os:-:channel:-:version:-:arch:-:hash:" # optional, change this to force refresh cache of dart pub get dependencies
pub-cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:" # optional, change this to specify the cache path
- run: flutter --version
```
> [!NOTE]
>
> **The `cache` and `pub-cache` inputs are independent and control different caches:**
> - `cache: true/false` - controls whether to cache the Flutter SDK installation
> - `pub-cache: true/false` - controls whether to cache the pub dependencies
>
> **Backward Compatibility:** When `pub-cache` is not specified (empty), it falls back to the `cache` value.
> This means existing workflows with `cache: true` automatically cache both Flutter SDK and pub dependencies.
>
> You can use them in any combination:
> - Both enabled: `cache: true` (`pub-cache` defaults to true for backward compatibility)
> - Both enabled explicitly: `cache: true` and `pub-cache: true`
> - Only Flutter SDK: `cache: true` and `pub-cache: false`
> - Only pub dependencies: `cache: false` and `pub-cache: true` for self-hosted runners
> - Neither: `cache: false` and `pub-cache: false` (or omit both)
Note: `cache-key`, `pub-cache-key`, and `cache-path` have support for several
dynamic values:
@@ -317,12 +350,44 @@ dynamic values:
- `:hash:`
- `:sha256:`
### Using cache outputs
> [!NOTE]
> `PUB-CACHE-HIT` and `CACHE-HIT` directly use the `cache-hit` output from `actions/cache@v5`, which is the following:
> - `cache-hit` - A string value to indicate an exact match was found for the key.
> - If there's a cache hit, this will be 'true' or 'false' to indicate if there's an exact match for `key`.
> - If there's a cache miss, this will be an empty string.
Example usage (inspired by [actions/cache@v5](https://github.com/actions/cache/blob/v5/README.md#skipping-steps-based-on-cache-hit) and [#346](https://github.com/subosito/flutter-action/pull/346)) to skip `melos bootstrap` if there was a pub cache hit:
```yaml
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
id: flutter-action
with:
channel: stable
cache: true
- name: Conditionally run melos bootstrap
if: steps.flutter-action.outputs.PUB-CACHE-HIT != 'true'
run: melos bootstrap
- name: Continue with build
run: flutter build apk
```
## Outputs
Use outputs from `flutter-action`:
```yaml
steps:
- name: Clone repository
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
id: flutter-action
@@ -338,6 +403,8 @@ steps:
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 }}
echo CACHE-HIT=${{ steps.flutter-action.outputs.CACHE-HIT }}
echo PUB-CACHE-HIT=${{ steps.flutter-action.outputs.PUB-CACHE-HIT }}
```
If you don't need to install Flutter and just want the outputs, you can use the
@@ -346,7 +413,7 @@ If you don't need to install Flutter and just want the outputs, you can use the
```yaml
steps:
- name: Clone repository
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
id: flutter-action
@@ -361,7 +428,10 @@ steps:
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 }}
echo CACHE-HIT=${{ steps.flutter-action.outputs.CACHE-HIT }}
echo PUB-CACHE-HIT=${{ steps.flutter-action.outputs.PUB-CACHE-HIT }}
shell: bash
```
[Alif Rachmawadi]: https://github.com/subosito
[Bartek Pacia]: https://github.com/bartekpacia

View File

@@ -15,7 +15,7 @@ inputs:
required: false
default: ""
flutter-version-file:
description: The pubspec.yaml file with exact Flutter version defined
description: The pubspec.yaml or FVM config file with exact Flutter version defined
required: false
default: ""
architecture:
@@ -34,6 +34,10 @@ inputs:
description: Flutter SDK cache path
required: false
default: ""
pub-cache:
description: Cache the Dart pub dependencies
required: false
default: ""
pub-cache-key:
description: Identifier for the Dart .pub-cache cache
required: false
@@ -76,15 +80,22 @@ outputs:
GIT_SOURCE:
value: "${{ steps.flutter-action.outputs.GIT_SOURCE }}"
description: Git source of Flutter SDK repository to clone
CACHE-HIT:
value: "${{ steps.cache-flutter.outputs.cache-hit }}"
description: "`true` if the flutter cache was a hit"
PUB-CACHE-HIT:
value: "${{ steps.cache-pub.outputs.cache-hit }}"
description: "`true` if the pub cache was a hit"
runs:
using: composite
steps:
# This is a cross-platform composite action that needs yq.
# This is a cross-platform composite action that needs yq in order to parse
# the pubspec.yaml file.
# It's not preinstalled on Windows runners.
# See https://github.com/actions/runner-images/issues/7443#issuecomment-1514597691
- name: Make yq tool available on Windows runners
if: runner.os == 'Windows'
if: runner.os == 'Windows' && inputs.flutter-version-file != '' && !endsWith(inputs.flutter-version-file, '.fvmrc') && !endsWith(inputs.flutter-version-file, 'fvm_config.json')
run: choco install yq
shell: bash
@@ -108,15 +119,17 @@ runs:
${{ inputs.channel }}
- name: Cache Flutter
uses: actions/cache@v4
id: cache-flutter
uses: actions/cache@v5
if: ${{ inputs.cache == 'true' }}
with:
path: ${{ steps.flutter-action.outputs.CACHE-PATH }}
key: ${{ steps.flutter-action.outputs.CACHE-KEY }}
- name: Cache pub dependencies
uses: actions/cache@v4
if: ${{ inputs.cache == 'true' }}
uses: actions/cache@v5
id: cache-pub
if: ${{ (inputs.pub-cache == '' && inputs.cache == 'true') || inputs.pub-cache == 'true' }}
with:
path: ${{ steps.flutter-action.outputs.PUB-CACHE-PATH }}
key: ${{ steps.flutter-action.outputs.PUB-CACHE-KEY }}-${{ hashFiles('**/pubspec.lock') }}

View File

@@ -12,7 +12,7 @@ fi
OS_NAME=$(echo "$RUNNER_OS" | awk '{print tolower($0)}')
ARCH_NAME=$(echo "$RUNNER_ARCH" | awk '{print tolower($0)}')
MANIFEST_BASE_URL="https://storage.googleapis.com/flutter_infra_release/releases"
MANIFEST_BASE_URL="${FLUTTER_STORAGE_BASE_URL:-https://storage.googleapis.com}/flutter_infra_release/releases"
MANIFEST_JSON_PATH="releases_$OS_NAME.json"
MANIFEST_URL="$MANIFEST_BASE_URL/$MANIFEST_JSON_PATH"
@@ -51,18 +51,10 @@ download_archive() {
case "$archive_name" in
*.zip)
EXTRACT_PATH="$RUNNER_TEMP/_unzip_temp"
unzip -q -o "$archive_local" -d "$EXTRACT_PATH"
# Remove the folder again so that the move command can do a simple rename
# instead of moving the content into the target folder.
# This is a little bit of a hack since the "mv --no-target-directory"
# linux option is not available here
rm -r "$2"
mv "$EXTRACT_PATH"/flutter "$2"
rm -r "$EXTRACT_PATH"
unzip -q -o "$archive_local" -d "$2"
;;
*)
tar xf "$archive_local" -C "$2" --strip-components=1
tar xf "$archive_local" -C "$2"
;;
esac
@@ -92,12 +84,14 @@ while getopts 'tc:k:d:l:pa:n:f:g:' flag; do
n) VERSION="$OPTARG" ;;
f)
VERSION_FILE="$OPTARG"
if [ -n "$VERSION_FILE" ] && ! check_command yq; then
echo "yq not found. Install it from https://mikefarah.gitbook.io/yq"
exit 1
if [ -n "$VERSION_FILE" ]; then
if [[ "$VERSION_FILE" != *".fvmrc" ]] && [[ "$VERSION_FILE" != *"fvm_config.json" ]] && ! check_command yq; then
echo "yq not found. Install it from https://mikefarah.gitbook.io/yq"
exit 1
fi
fi
;;
g) GIT_SOURCE="$OPTARG" ;;
g) GIT_SOURCE="$OPTARG" ;;
?) exit 2 ;;
esac
done
@@ -110,11 +104,24 @@ if [ -n "$VERSION_FILE" ]; then
exit 1
fi
VERSION="$(yq eval '.environment.flutter' "$VERSION_FILE")"
if [[ "$VERSION_FILE" == *".fvmrc" ]]; then
VERSION="$(jq -r '.flutter' "$VERSION_FILE")"
elif [[ "$VERSION_FILE" == *"fvm_config.json" ]]; then
VERSION="$(jq -r '.flutterSdkVersion // .flutter' "$VERSION_FILE")"
else
VERSION="$(yq eval '.environment.flutter' "$VERSION_FILE")"
fi
if [[ "$VERSION" == "stable" ]] || [[ "$VERSION" == "beta" ]] || [[ "$VERSION" == "master" ]] || [[ "$VERSION" == "main" ]]; then
CHANNEL="$VERSION"
VERSION="any"
fi
fi
ARR_CHANNEL=("${@:$OPTIND:1}")
CHANNEL="${ARR_CHANNEL[0]:-}"
if [ -z "${CHANNEL:-}" ]; then
CHANNEL="${ARR_CHANNEL[0]:-}"
fi
[ -z "$CHANNEL" ] && CHANNEL=stable
[ -z "$VERSION" ] && VERSION=any
@@ -180,6 +187,7 @@ expand_key() {
CACHE_KEY=$(expand_key "$CACHE_KEY")
PUB_CACHE_KEY=$(expand_key "$PUB_CACHE_KEY")
CACHE_PATH=$(expand_key "$(transform_path "$CACHE_PATH")")
PUB_CACHE=$(expand_key "$(transform_path "$PUB_CACHE")")
if [ "$PRINT_ONLY" = true ]; then
version_info=$(echo "$VERSION_MANIFEST" | jq -j '.channel,":",.version,":",.dart_sdk_arch // "x64"')
@@ -214,12 +222,12 @@ if [ "$PRINT_ONLY" = true ]; then
exit 0
fi
if [ ! -x "$CACHE_PATH/bin/flutter" ]; then
if [ ! -x "$CACHE_PATH/flutter/bin/flutter" ]; then
if [ "$CHANNEL" = "master" ] || [ "$CHANNEL" = "main" ]; then
git clone -b "$CHANNEL" "$GIT_SOURCE" "$CACHE_PATH"
git clone -b "$CHANNEL" "$GIT_SOURCE" "$CACHE_PATH/flutter"
if [ "$VERSION" != "any" ]; then
git config --global --add safe.directory "$CACHE_PATH"
(cd "$CACHE_PATH" && git checkout "$VERSION")
git config --global --add safe.directory "$CACHE_PATH/flutter"
(cd "$CACHE_PATH/flutter" && git checkout "$VERSION")
fi
else
archive_url=$(echo "$VERSION_MANIFEST" | jq -r '.archive')
@@ -228,12 +236,12 @@ if [ ! -x "$CACHE_PATH/bin/flutter" ]; then
fi
{
echo "FLUTTER_ROOT=$CACHE_PATH"
echo "FLUTTER_ROOT=$CACHE_PATH/flutter"
echo "PUB_CACHE=$PUB_CACHE"
} >>"${GITHUB_ENV:-/dev/null}"
{
echo "$CACHE_PATH/bin"
echo "$CACHE_PATH/bin/cache/dart-sdk/bin"
echo "$CACHE_PATH/flutter/bin"
echo "$CACHE_PATH/flutter/bin/cache/dart-sdk/bin"
echo "$PUB_CACHE/bin"
} >>"${GITHUB_PATH:-/dev/null}"