Compare commits

..

20 Commits

Author SHA1 Message Date
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
Victor Eronmosele
e938fdf565 Update Flock's git URL in README (#347)
* Update Flock's git URL in README

* Update Flock's git URL in code sample
2025-03-24 21:47:02 +01:00
Peter Leibiger
bcafcd664b Fix PUB-CACHE-PATH output different to PUB_CACHE env variable (#348) 2025-03-24 21:46:39 +01:00
Luke Bonsey
1177d931c8 fix: remove restore keys (#349) 2025-03-24 21:42:03 +01:00
Koji Wakamiya
ce3cf2160d test: Split test cases by architecture (#305) 2024-12-20 10:31:11 +01:00
Bartek Pacia
f2c4f6686c fix syntax mistake in readme (#338) 2024-12-03 21:06:22 +01:00
Bartek Pacia
fd476281dd improve readme (#337) 2024-12-03 21:04:13 +01:00
ErBW_s
799318a131 feat: add git source support (#334)
* try to add git source support

* improve GIT_SOURCE output name

* fix syntax

---------

Co-authored-by: Bartek Pacia <barpac02@gmail.com>
2024-12-03 20:23:57 +01:00
Bartek Pacia
8535a80ce0 Feature/yq on windows (#336)
* install `yq` if runner.os is `windows`

* update readme with `yq` on windows info
2024-12-03 20:05:47 +01:00
Bartek Pacia
7642db7052 update readme (#335) 2024-12-03 19:58:13 +01:00
Thomas Aunvik
74af56c5ed Support older yq versions (#329) 2024-11-23 23:26:19 +01:00
Koji Wakamiya
9bc1d83fda Remove macos-14 from matrix (#304)
* fix: Fix conditional statements in workflow

* chore: Update operating system matrix
2024-11-23 23:26:02 +01:00
Bartek Pacia
bcec24ecf7 Fix failing tests (#327)
* try to fix failing tests

* continue on error

* remove Flutter versions that aren't available natively for arm64 macOS

* explicitly specify arch = x64 (`-a x64`)

* fix order of args

* remove redundant quotes

* make `dry-run` also accept bools
2024-08-21 02:53:58 +01:00
Bartek Pacia
94b32dd006 test action: allow to run manually (#325) 2024-08-20 02:09:15 +01:00
4 changed files with 284 additions and 59 deletions

View File

@@ -1,6 +1,7 @@
name: Main workflow name: test
on: on:
workflow_dispatch:
push: push:
branches: branches:
- main - main
@@ -26,9 +27,15 @@ jobs:
strategy: strategy:
matrix: matrix:
operating-system: operating-system:
[ubuntu-latest, windows-latest, macos-latest, macos-13, macos-14] - ubuntu-latest
- windows-latest
- macos-latest
channel: [stable, beta, master] channel: [stable, beta, master]
dry-run: [true, false] dry-run: [true, false]
git-source:
- https://github.com/flutter/flutter.git
- https://github.com/Flutter-Foundation/flutter.git
- https://gitee.com/harmonycommando_flutter/flutter.git
include: include:
- operating-system: ubuntu-latest - operating-system: ubuntu-latest
channel: main channel: main
@@ -41,6 +48,7 @@ jobs:
with: with:
channel: ${{ matrix.channel }} channel: ${{ matrix.channel }}
dry-run: ${{ matrix.dry-run }} dry-run: ${{ matrix.dry-run }}
git-source: ${{ matrix.git-source }}
- name: Echo outputs - name: Echo outputs
run: | run: |
echo RUNNER-OS=${{ runner.os }} echo RUNNER-OS=${{ runner.os }}
@@ -53,16 +61,16 @@ jobs:
echo ARCHITECTURE=${{ steps.flutter-action.outputs.ARCHITECTURE }} echo ARCHITECTURE=${{ steps.flutter-action.outputs.ARCHITECTURE }}
shell: bash shell: bash
- run: dart --version - run: dart --version
if: ${{ matrix.dry-run != 'true' }} if: ${{ matrix.dry-run != true }}
shell: bash shell: bash
- run: flutter --version - run: flutter --version
if: ${{ matrix.dry-run != 'true' }} if: ${{ matrix.dry-run != true }}
shell: bash shell: bash
- run: "! dart --version" - run: "! dart --version"
if: ${{ matrix.dry-run == 'true' }} if: ${{ matrix.dry-run == true }}
shell: bash shell: bash
- run: "! flutter --version" - run: "! flutter --version"
if: ${{ matrix.dry-run == 'true' }} if: ${{ matrix.dry-run == true }}
shell: bash shell: bash
test_cache: test_cache:
@@ -71,7 +79,7 @@ jobs:
strategy: strategy:
matrix: matrix:
operating-system: operating-system:
[ubuntu-latest, windows-latest, macos-latest, macos-13, macos-14] [ubuntu-latest, windows-latest, macos-latest]
steps: steps:
- name: Clone repository - name: Clone repository
@@ -107,8 +115,11 @@ jobs:
run: flutter --version | grep '3.3.10' run: flutter --version | grep '3.3.10'
shell: bash shell: bash
test_print_output: test_print_output_x64:
runs-on: macos-latest runs-on: ubuntu-latest
# These calls to setup.sh sepcify the -t flag, which enables test mode.
# Test mode uses hardcoded Flutter release manifests from test/ directory.
steps: steps:
- name: Clone repository - name: Clone repository
@@ -143,6 +154,95 @@ jobs:
shell: bash shell: bash
- run: ./setup.sh -t -p -n 3 any | grep '3.9.0-0.1.pre' - run: ./setup.sh -t -p -n 3 any | grep '3.9.0-0.1.pre'
shell: bash shell: bash
- run: ./setup.sh -t -p -n 3 any | grep 'x64'
shell: bash
- run: ./setup.sh -t -p -n any stable | grep 'stable'
shell: bash
- run: ./setup.sh -t -p -n any stable | grep '3.7.7'
shell: bash
- run: ./setup.sh -t -p -n any stable | grep 'x64'
shell: bash
- run: ./setup.sh -t -p -n 1 stable | grep '1.22.6'
shell: bash
- run: ./setup.sh -t -p -n 0 any | grep 'beta'
shell: bash
- run: ./setup.sh -t -p -n 0 any | grep '0.11.13'
shell: bash
- run: ./setup.sh -t -p | grep 'flutter-linux-stable-3.7.7-x64-2ad6cd72c040113b47ee9055e722606a490ef0da'
shell: bash
- run: ./setup.sh -t -p stable | grep 'flutter-linux-stable-3.7.7-x64-2ad6cd72c040113b47ee9055e722606a490ef0da'
shell: bash
- run: ./setup.sh -t -p beta | grep 'flutter-linux-beta-3.9.0-0.1.pre-x64-f732038a8cf4562ce38a1d7debb30209ae3da896'
shell: bash
- run: ./setup.sh -t -p dev | grep 'flutter-linux-dev-2.13.0-0.1.pre-x64-13a2fb10b838971ce211230f8ffdd094c14af02c'
shell: bash
- run: ./setup.sh -t -p master | grep 'flutter-linux-master-any-x64-master'
shell: bash
- run: ./setup.sh -t -p -n 5b12b74 master | grep 'flutter-linux-master-5b12b74-x64-master'
shell: bash
- run: ./setup.sh -t -p -n 3.12.0-12.0.pre master | grep 'flutter-linux-master-3.12.0-12.0.pre-x64-master'
shell: bash
- run: ./setup.sh -t -p -n stable master | grep 'flutter-linux-master-stable-x64-master'
shell: bash
- run: ./setup.sh -t -p -n 2 any | grep 'flutter-linux-beta-2.13.0-0.4.pre-x64-25caf1461b8f643092a9f6f5b224453b5c057d10'
shell: bash
- run: ./setup.sh -t -p -n 1 any | grep 'flutter-linux-beta-1.26.0-17.8.pre-x64-044f2cf5607a26f8818dab0f766400e85c52bdff'
shell: bash
- run: ./setup.sh -t -p -n 0 any | grep 'flutter-linux-beta-0.11.13-x64-58c8489fcdb4e4ef6c010117584c9b23d15221aa'
shell: bash
- run: ./setup.sh -t -p | grep '/opt/hostedtoolcache/flutter/stable-3.7.7-x64'
shell: bash
- run: ./setup.sh -t -p stable | grep '/opt/hostedtoolcache/flutter/stable-3.7.7-x64'
shell: bash
- run: ./setup.sh -t -p beta | grep '/opt/hostedtoolcache/flutter/beta-3.9.0-0.1.pre-x64'
shell: bash
- run: ./setup.sh -t -p dev | grep '/opt/hostedtoolcache/flutter/dev-2.13.0-0.1.pre-x64'
shell: bash
- run: ./setup.sh -t -p master | grep '/opt/hostedtoolcache/flutter/master-any-x64'
shell: bash
- run: ./setup.sh -t -p -k 'custom-:channel:-:version:-:hash:' | grep 'custom-stable-3.7.7-2ad6cd72c040113b47ee9055e722606a490ef0da'
shell: bash
- run: ./setup.sh -t -p -k 'custom-:channel:-:version:-:sha256:' | grep 'custom-stable-3.7.7-cdd49597e88c35e5de5184e9acff433dfbb3c075b74ef7b27790af7f57ce2420'
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:
runs-on: macos-latest
# These calls to setup.sh sepcify the -t flag, which enables test mode.
# Test mode uses hardcoded Flutter release manifests from test/ directory.
steps:
- name: Clone repository
uses: actions/checkout@v4
- run: ./setup.sh -t -p -f test/pubspec.yaml | grep '3.3.10'
shell: bash
- run: ./setup.sh -t -p | grep 'stable'
shell: bash
- run: ./setup.sh -t -p | grep '3.7.7'
shell: bash
- run: ./setup.sh -t -p | grep 'arm64'
shell: bash
- run: ./setup.sh -t -p stable | grep 'stable'
shell: bash
- run: ./setup.sh -t -p beta | grep 'beta'
shell: bash
- run: ./setup.sh -t -p beta | grep '3.9.0-0.1.pre'
shell: bash
- run: ./setup.sh -t -p -n 3.3.10 stable | grep '3.3.10'
shell: bash
- run: ./setup.sh -t -p -n 3.3.1 stable | grep '3.3.1'
shell: bash
- run: ./setup.sh -t -p -n 3 any | grep 'beta'
shell: bash
- run: ./setup.sh -t -p -n 3 any | grep '3.9.0-0.1.pre'
shell: bash
- run: ./setup.sh -t -p -n 3 -a arm64 any | grep 'arm64' - run: ./setup.sh -t -p -n 3 -a arm64 any | grep 'arm64'
shell: bash shell: bash
- run: ./setup.sh -t -p -n any -a arm64 stable | grep 'stable' - run: ./setup.sh -t -p -n any -a arm64 stable | grep 'stable'
@@ -151,47 +251,35 @@ jobs:
shell: bash shell: bash
- run: ./setup.sh -t -p -n any -a arm64 stable | grep 'arm64' - run: ./setup.sh -t -p -n any -a arm64 stable | grep 'arm64'
shell: bash shell: bash
- run: ./setup.sh -t -p -n 1 stable | grep '1.22.6' - run: ./setup.sh -t -p | grep 'flutter-macos-stable-3.7.7-arm64-2ad6cd72c040113b47ee9055e722606a490ef0da'
shell: bash shell: bash
- run: ./setup.sh -t -p -n 0 any | grep 'beta' - run: ./setup.sh -t -p stable | grep 'flutter-macos-stable-3.7.7-arm64-2ad6cd72c040113b47ee9055e722606a490ef0da'
shell: bash shell: bash
- run: ./setup.sh -t -p -n 0 any | grep '0.11.13' - run: ./setup.sh -t -p beta | grep 'flutter-macos-beta-3.9.0-0.1.pre-arm64-8b9b90e75107181aadc303d8d7422205863a35dd'
shell: bash shell: bash
- run: ./setup.sh -t -p | grep 'flutter-macos-stable-3.7.7-x64-2ad6cd72c040113b47ee9055e722606a490ef0da' - run: ./setup.sh -t -p master | grep 'flutter-macos-master-any-arm64-master'
shell: bash shell: bash
- run: ./setup.sh -t -p stable | grep 'flutter-macos-stable-3.7.7-x64-2ad6cd72c040113b47ee9055e722606a490ef0da' - run: ./setup.sh -t -p -n 5b12b74 master | grep 'flutter-macos-master-5b12b74-arm64-master'
shell: bash shell: bash
- run: ./setup.sh -t -p beta | grep 'flutter-macos-beta-3.9.0-0.1.pre-x64-f732038a8cf4562ce38a1d7debb30209ae3da896' - run: ./setup.sh -t -p -n 3.12.0-12.0.pre master | grep 'flutter-macos-master-3.12.0-12.0.pre-arm64-master'
shell: bash shell: bash
- run: ./setup.sh -t -p dev | grep 'flutter-macos-dev-2.11.0-0.1.pre-x64-b101bfe32f634566e7cb2791a9efe19cf8828b15' - run: ./setup.sh -t -p -n stable master | grep 'flutter-macos-master-stable-arm64-master'
shell: bash shell: bash
- run: ./setup.sh -t -p master | grep 'flutter-macos-master-any-x64-master' - run: ./setup.sh -t -p | grep '/Users/runner/hostedtoolcache/flutter/stable-3.7.7-arm64'
shell: bash shell: bash
- run: ./setup.sh -t -p -n 5b12b74 master | grep 'flutter-macos-master-5b12b74-x64-master' - run: ./setup.sh -t -p stable | grep '/Users/runner/hostedtoolcache/flutter/stable-3.7.7-arm64'
shell: bash shell: bash
- run: ./setup.sh -t -p -n 3.12.0-12.0.pre master | grep 'flutter-macos-master-3.12.0-12.0.pre-x64-master' - run: ./setup.sh -t -p beta | grep '/Users/runner/hostedtoolcache/flutter/beta-3.9.0-0.1.pre-arm64'
shell: bash shell: bash
- run: ./setup.sh -t -p -n stable master | grep 'flutter-macos-master-stable-x64-master' - run: ./setup.sh -t -p master | grep '/Users/runner/hostedtoolcache/flutter/master-any-arm64'
shell: bash
- run: ./setup.sh -t -p -n 2 any | grep 'flutter-macos-beta-2.13.0-0.4.pre-x64-25caf1461b8f643092a9f6f5b224453b5c057d10'
shell: bash
- run: ./setup.sh -t -p -n 1 any | grep 'flutter-macos-beta-1.26.0-17.8.pre-x64-044f2cf5607a26f8818dab0f766400e85c52bdff'
shell: bash
- run: ./setup.sh -t -p -n 0 any | grep 'flutter-macos-beta-0.11.13-x64-58c8489fcdb4e4ef6c010117584c9b23d15221aa'
shell: bash
- run: ./setup.sh -t -p | grep '/Users/runner/hostedtoolcache/flutter/stable-3.7.7-x64'
shell: bash
- run: ./setup.sh -t -p stable | grep '/Users/runner/hostedtoolcache/flutter/stable-3.7.7-x64'
shell: bash
- run: ./setup.sh -t -p beta | grep '/Users/runner/hostedtoolcache/flutter/beta-3.9.0-0.1.pre-x64'
shell: bash
- run: ./setup.sh -t -p dev | grep '/Users/runner/hostedtoolcache/flutter/dev-2.11.0-0.1.pre-x64'
shell: bash
- run: ./setup.sh -t -p master | grep '/Users/runner/hostedtoolcache/flutter/master-any-x64'
shell: bash shell: bash
- run: ./setup.sh -t -p -k 'custom-:channel:-:version:-:hash:' | grep 'custom-stable-3.7.7-2ad6cd72c040113b47ee9055e722606a490ef0da' - run: ./setup.sh -t -p -k 'custom-:channel:-:version:-:hash:' | grep 'custom-stable-3.7.7-2ad6cd72c040113b47ee9055e722606a490ef0da'
shell: bash shell: bash
- run: ./setup.sh -t -p -k 'custom-:channel:-:version:-:sha256:' | grep 'custom-stable-3.7.7-78957b52f023a0d811add27eddc59b1a59d27d2ada5df123f39d0315708fb2d5' - run: ./setup.sh -t -p -k 'custom-:channel:-:version:-:sha256:' | grep 'custom-stable-3.7.7-0511b9f164a62f467b063e6c83d9c683bb3fb056ee556b2f45e987a2c2f4a260'
shell: bash shell: bash
- run: ./setup.sh -t -p -c '/tmp/flutter/:channel:-:version:-:hash:' | grep '/tmp/flutter/stable-3.7.7-2ad6cd72c040113b47ee9055e722606a490ef0da' - run: ./setup.sh -t -p -c '/tmp/flutter/:channel:-:version:-:hash:' | grep '/tmp/flutter/stable-3.7.7-2ad6cd72c040113b47ee9055e722606a490ef0da'
shell: bash 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

132
README.md
View File

@@ -3,6 +3,8 @@
Flutter environment for use in GitHub Actions. It works on Linux, Windows, and Flutter environment for use in GitHub Actions. It works on Linux, Windows, and
macOS. macOS.
Originally created by [Alif Rachmawadi]. Maintained by [Bartek Pacia].
The following sections show how to configure this action. The following sections show how to configure this action.
## Specifying Flutter version ## Specifying Flutter version
@@ -58,10 +60,12 @@ steps:
> flutter: ">= 3.19.0 <4.0.0" > flutter: ">= 3.19.0 <4.0.0"
> ``` > ```
> [!WARNING] > [!NOTE]
> >
> Using `flutter-version-file` requires [`yq`](https://github.com/mikefarah/yq), > Using `flutter-version-file` requires [`yq`](https://github.com/mikefarah/yq),
> which is not pre-installed in `windows` images. Install it yourself. > which is not pre-installed in `windows` runners. Fortunately, since version
> 2.18.0, this action installs `yq` automatically if `flutter-version-file`
> is specified, so no action is required from you.
### Use latest release for particular channel ### Use latest release for particular channel
@@ -118,7 +122,79 @@ steps:
- run: flutter --version - run: flutter --version
``` ```
## Build Target ### 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@v4
- 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)
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: master
flutter-version: 3.24.0
git-source: https://github.com/join-the-flock/flock.git
- 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_.
You can apply your patch like this:
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v4
- uses: subosito/flutter-action@v2
with:
flutter-version: 3.22.2
channel: stable
- run: |
flutter --version
cd ${{ env.FLUTTER_ROOT }}
curl https://patch-diff.githubusercontent.com/raw/flutter/flutter/pull/137874.patch | git apply
git status
```
> [!NOTE]
>
> This was first discussed in [this issue](https://github.com/subosito/flutter-action/issues/310).
## Build targets
Build **Android** APK and app bundle: Build **Android** APK and app bundle:
@@ -129,7 +205,7 @@ steps:
- name: Set up Flutter - name: Set up Flutter
uses: subosito/flutter-action@v2 uses: subosito/flutter-action@v2
with: with:
flutter-version: 3.19.0 flutter-version: 3.24.0
- run: flutter pub get - run: flutter pub get
- run: flutter test - run: flutter test
- run: flutter build apk - run: flutter build apk
@@ -232,6 +308,11 @@ jobs:
Integration with [`actions/cache`](https://github.com/actions/cache): 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 ```yaml
steps: steps:
- name: Clone repository - name: Clone repository
@@ -244,7 +325,7 @@ steps:
# optional parameters follow # optional parameters follow
cache-key: "flutter-:os:-:channel:-:version:-:arch:-:hash:" # optional, change this to force refresh cache 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 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 pub-cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:" # optional, change this to specify the cache path
- run: flutter --version - run: flutter --version
``` ```
@@ -259,6 +340,38 @@ dynamic values:
- `:hash:` - `:hash:`
- `:sha256:` - `: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:
```
steps:
- name: Checkout repository
uses: actions/checkout@v4
- 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`: Use outputs from `flutter-action`:
```yaml ```yaml
@@ -280,6 +393,8 @@ steps:
echo ARCHITECTURE=${{ steps.flutter-action.outputs.ARCHITECTURE }} echo ARCHITECTURE=${{ steps.flutter-action.outputs.ARCHITECTURE }}
echo PUB-CACHE-PATH=${{ steps.flutter-action.outputs.PUB-CACHE-PATH }} echo PUB-CACHE-PATH=${{ steps.flutter-action.outputs.PUB-CACHE-PATH }}
echo PUB-CACHE-KEY=${{ steps.flutter-action.outputs.PUB-CACHE-KEY }} 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 If you don't need to install Flutter and just want the outputs, you can use the
@@ -303,13 +418,10 @@ steps:
echo ARCHITECTURE=${{ steps.flutter-action.outputs.ARCHITECTURE }} echo ARCHITECTURE=${{ steps.flutter-action.outputs.ARCHITECTURE }}
echo PUB-CACHE-PATH=${{ steps.flutter-action.outputs.PUB-CACHE-PATH }} echo PUB-CACHE-PATH=${{ steps.flutter-action.outputs.PUB-CACHE-PATH }}
echo PUB-CACHE-KEY=${{ steps.flutter-action.outputs.PUB-CACHE-KEY }} 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 shell: bash
``` ```
## Maintainers
- [Alif Rachmawadi] (original creator)
- [Bartek Pacia]
[Alif Rachmawadi]: https://github.com/subosito [Alif Rachmawadi]: https://github.com/subosito
[Bartek Pacia]: https://github.com/bartekpacia [Bartek Pacia]: https://github.com/bartekpacia

View File

@@ -46,6 +46,10 @@ inputs:
description: If true, get outputs but do not install Flutter description: If true, get outputs but do not install Flutter
required: false required: false
default: "false" default: "false"
git-source:
description: Git clone source
required: false
default: "https://github.com/flutter/flutter.git"
outputs: outputs:
CHANNEL: CHANNEL:
@@ -69,10 +73,28 @@ outputs:
PUB-CACHE-PATH: PUB-CACHE-PATH:
value: "${{ steps.flutter-action.outputs.PUB-CACHE-PATH }}" value: "${{ steps.flutter-action.outputs.PUB-CACHE-PATH }}"
description: Path to pub cache description: Path to pub cache
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: runs:
using: composite using: composite
steps: steps:
# 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' && inputs.flutter-version-file != ''
run: choco install yq
shell: bash
- name: Make setup script executable - name: Make setup script executable
run: chmod +x "$GITHUB_ACTION_PATH/setup.sh" run: chmod +x "$GITHUB_ACTION_PATH/setup.sh"
shell: bash shell: bash
@@ -89,33 +111,32 @@ runs:
-c '${{ inputs.cache-path }}' \ -c '${{ inputs.cache-path }}' \
-l '${{ inputs.pub-cache-key }}' \ -l '${{ inputs.pub-cache-key }}' \
-d '${{ inputs.pub-cache-path }}' \ -d '${{ inputs.pub-cache-path }}' \
-g '${{ inputs.git-source }}' \
${{ inputs.channel }} ${{ inputs.channel }}
- name: Cache Flutter - name: Cache Flutter
uses: actions/cache@v4 id: cache-flutter
uses: actions/cache@v5
if: ${{ inputs.cache == 'true' }} if: ${{ inputs.cache == 'true' }}
with: with:
path: ${{ steps.flutter-action.outputs.CACHE-PATH }} path: ${{ steps.flutter-action.outputs.CACHE-PATH }}
key: ${{ steps.flutter-action.outputs.CACHE-KEY }} key: ${{ steps.flutter-action.outputs.CACHE-KEY }}
restore-keys: |
${{ steps.flutter-action.outputs.CACHE-KEY }}
- name: Cache pub dependencies - name: Cache pub dependencies
uses: actions/cache@v4 uses: actions/cache@v5
id: cache-pub
if: ${{ inputs.cache == 'true' }} if: ${{ inputs.cache == 'true' }}
with: with:
path: ${{ steps.flutter-action.outputs.PUB-CACHE-PATH }} path: ${{ steps.flutter-action.outputs.PUB-CACHE-PATH }}
key: ${{ steps.flutter-action.outputs.PUB-CACHE-KEY }}-${{ hashFiles('**/pubspec.lock') }} key: ${{ steps.flutter-action.outputs.PUB-CACHE-KEY }}-${{ hashFiles('**/pubspec.lock') }}
restore-keys: |
${{ steps.flutter-action.outputs.PUB-CACHE-KEY }}-${{ hashFiles('**/pubspec.lock') }}
${{ steps.flutter-action.outputs.PUB-CACHE-KEY }}
- name: Run setup script - name: Run setup script
shell: bash shell: bash
if: ${{ inputs.dry-run != 'true' }} if: ${{ inputs.dry-run != 'true' && inputs.dry-run != true }}
run: | run: |
$GITHUB_ACTION_PATH/setup.sh \ $GITHUB_ACTION_PATH/setup.sh \
-n '${{ steps.flutter-action.outputs.VERSION }}' \ -n '${{ steps.flutter-action.outputs.VERSION }}' \
-a '${{ steps.flutter-action.outputs.ARCHITECTURE }}' \ -a '${{ steps.flutter-action.outputs.ARCHITECTURE }}' \
-c '${{ steps.flutter-action.outputs.CACHE-PATH }}' \ -c '${{ steps.flutter-action.outputs.CACHE-PATH }}' \
-d '${{ steps.flutter-action.outputs.PUB-CACHE-PATH }}' \
${{ steps.flutter-action.outputs.CHANNEL }} ${{ steps.flutter-action.outputs.CHANNEL }}

View File

@@ -12,7 +12,7 @@ fi
OS_NAME=$(echo "$RUNNER_OS" | awk '{print tolower($0)}') OS_NAME=$(echo "$RUNNER_OS" | awk '{print tolower($0)}')
ARCH_NAME=$(echo "$RUNNER_ARCH" | 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_JSON_PATH="releases_$OS_NAME.json"
MANIFEST_URL="$MANIFEST_BASE_URL/$MANIFEST_JSON_PATH" MANIFEST_URL="$MANIFEST_BASE_URL/$MANIFEST_JSON_PATH"
@@ -78,8 +78,9 @@ TEST_MODE=false
ARCH="" ARCH=""
VERSION="" VERSION=""
VERSION_FILE="" VERSION_FILE=""
GIT_SOURCE=""
while getopts 'tc:k:d:l:pa:n:f:' flag; do while getopts 'tc:k:d:l:pa:n:f:g:' flag; do
case "$flag" in case "$flag" in
c) CACHE_PATH="$OPTARG" ;; c) CACHE_PATH="$OPTARG" ;;
k) CACHE_KEY="$OPTARG" ;; k) CACHE_KEY="$OPTARG" ;;
@@ -96,6 +97,7 @@ while getopts 'tc:k:d:l:pa:n:f:' flag; do
exit 1 exit 1
fi fi
;; ;;
g) GIT_SOURCE="$OPTARG" ;;
?) exit 2 ;; ?) exit 2 ;;
esac esac
done done
@@ -108,7 +110,7 @@ if [ -n "$VERSION_FILE" ]; then
exit 1 exit 1
fi fi
VERSION="$(yq '.environment.flutter' "$VERSION_FILE")" VERSION="$(yq eval '.environment.flutter' "$VERSION_FILE")"
fi fi
ARR_CHANNEL=("${@:$OPTIND:1}") ARR_CHANNEL=("${@:$OPTIND:1}")
@@ -121,6 +123,7 @@ CHANNEL="${ARR_CHANNEL[0]:-}"
[ -z "$CACHE_KEY" ] && CACHE_KEY="flutter-:os:-:channel:-:version:-:arch:-:hash:" [ -z "$CACHE_KEY" ] && CACHE_KEY="flutter-:os:-:channel:-:version:-:arch:-:hash:"
[ -z "$PUB_CACHE_KEY" ] && PUB_CACHE_KEY="flutter-pub-:os:-:channel:-:version:-:arch:-:hash:" [ -z "$PUB_CACHE_KEY" ] && PUB_CACHE_KEY="flutter-pub-:os:-:channel:-:version:-:arch:-:hash:"
[ -z "$PUB_CACHE_PATH" ] && PUB_CACHE_PATH="default" [ -z "$PUB_CACHE_PATH" ] && PUB_CACHE_PATH="default"
[ -z "$GIT_SOURCE" ] && GIT_SOURCE="https://github.com/flutter/flutter.git"
# `PUB_CACHE` is what Dart and Flutter looks for in the environment, while # `PUB_CACHE` is what Dart and Flutter looks for in the environment, while
# `PUB_CACHE_PATH` is passed in from the action. # `PUB_CACHE_PATH` is passed in from the action.
@@ -177,6 +180,7 @@ expand_key() {
CACHE_KEY=$(expand_key "$CACHE_KEY") CACHE_KEY=$(expand_key "$CACHE_KEY")
PUB_CACHE_KEY=$(expand_key "$PUB_CACHE_KEY") PUB_CACHE_KEY=$(expand_key "$PUB_CACHE_KEY")
CACHE_PATH=$(expand_key "$(transform_path "$CACHE_PATH")") CACHE_PATH=$(expand_key "$(transform_path "$CACHE_PATH")")
PUB_CACHE=$(expand_key "$(transform_path "$PUB_CACHE")")
if [ "$PRINT_ONLY" = true ]; then if [ "$PRINT_ONLY" = true ]; then
version_info=$(echo "$VERSION_MANIFEST" | jq -j '.channel,":",.version,":",.dart_sdk_arch // "x64"') version_info=$(echo "$VERSION_MANIFEST" | jq -j '.channel,":",.version,":",.dart_sdk_arch // "x64"')
@@ -213,7 +217,7 @@ fi
if [ ! -x "$CACHE_PATH/bin/flutter" ]; then if [ ! -x "$CACHE_PATH/bin/flutter" ]; then
if [ "$CHANNEL" = "master" ] || [ "$CHANNEL" = "main" ]; then if [ "$CHANNEL" = "master" ] || [ "$CHANNEL" = "main" ]; then
git clone -b "$CHANNEL" https://github.com/flutter/flutter.git "$CACHE_PATH" git clone -b "$CHANNEL" "$GIT_SOURCE" "$CACHE_PATH"
if [ "$VERSION" != "any" ]; then if [ "$VERSION" != "any" ]; then
git config --global --add safe.directory "$CACHE_PATH" git config --global --add safe.directory "$CACHE_PATH"
(cd "$CACHE_PATH" && git checkout "$VERSION") (cd "$CACHE_PATH" && git checkout "$VERSION")