Compare commits

..

70 Commits
v2.7.1 ... main

Author SHA1 Message Date
Yurii Kolesnykov
4cab68ce0f Enforce SHA pinning templates (#399)
* Create issue template regarding SHA pinning policy

* Create pull request template regarding SHA pinning policy
2026-04-29 17:12:47 -07:00
Peter Leibiger
1a449444c3 Simplify extraction of zip files (#379)
* 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
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
kzrnm
44ac965b96 Add dry-run (#270)
* Add dry-run

* Add dry-run test

* format

---------

Co-authored-by: Bartek Pacia <barpac02@gmail.com>
2024-04-02 14:25:52 +02:00
Bartek Pacia
980391a6c5 more README fixes (#292) 2024-04-01 04:09:25 +02:00
Bartek Pacia
3d80492992 update README (#291) 2024-04-01 04:07:29 +02:00
Bartek Pacia
0ef13f12a5 Add flutter-version-file (#290)
* update README with new info

* setup.sh: update arg parsing to add support for `flutter-version-file` as `-f pubspec.yaml`

* action.yaml: add flutter-version-file

* setup.sh: require `yq` only when -f option is specified

* fix tests and add a new one

* enable shell options: `errexit` and `nounset`

* move falling back to defaults to single place - setup.sh

* action.yaml: reduce number of arguments in the last invocation
2024-04-01 04:03:05 +02:00
Bartek Pacia
7564de34b3 Merge pull request #288 from subosito/chore/action_yaml_refactor
Split longer lines in action.yaml
2024-03-31 22:57:59 +02:00
Bartek Pacia
2b3ab6c7da convert some if-statements to be POSIX-compatible 2024-03-31 22:50:24 +02:00
Bartek Pacia
49cd17165c split longer lines 2024-03-31 22:15:17 +02:00
Bartek Pacia
cf12a39989 Merge pull request #287 from subosito/minor
workflow.yaml: minor fix
2024-03-31 22:08:41 +02:00
Bartek Pacia
cea4cf68a1 workflow.yaml: minor fix 2024-03-31 22:08:29 +02:00
Bartek Pacia
043862d930 Merge pull request #286 from subosito/format
Format
2024-03-31 22:07:58 +02:00
Bartek Pacia
e70699e140 file renames 2024-03-31 22:07:39 +02:00
Bartek Pacia
766e0c11bc minor readme format update 2024-03-31 19:52:05 +02:00
Bartek Pacia
7d86479cec Merge pull request #285 from subosito/format
Minor formatting changes
2024-03-31 19:37:58 +02:00
Bartek Pacia
86d4518859 format workflow.yml 2024-03-31 19:33:40 +02:00
Bartek Pacia
e2c456ecd7 format README 2024-03-31 19:31:02 +02:00
Bartek Pacia
46719f5374 format the action nicely 2024-03-31 19:21:19 +02:00
Bartek Pacia
54a6ca61b1 run prettier 2024-03-31 19:15:36 +02:00
Bartek Pacia
d3969fb775 Merge pull request #284 from niccokunzmann/patch-1
Restructure Documentation
2024-03-31 18:28:15 +02:00
Nicco Kunzmann
d32931db2f Structure Documentation
Adds sections: Flutter Version, Build Target, Cache
Bold build target names to find them more easily
2024-03-31 17:24:22 +01:00
Bartek Pacia
ab382cfb66 Merge pull request #281 from koji-1009/chore/m1_chip
chore: Add m1 chip macos machine
2024-03-31 17:24:36 +02:00
Richard Shiue
1c5eb12d81 fix: specify pub cache path (#280) 2024-03-20 11:20:53 +07:00
Koji Wakamiya
d1e0151b5f chore: Add m1 chip macos 2024-03-18 22:40:06 +09:00
Koji Wakamiya
62f096cacd Update README (#266)
* doc: Update README

* fix: Specify the dev channel version
2024-02-13 07:52:27 +07:00
Jørgen Tjernø
844082558d Improvements to caching (#265)
* Bump actions/cache to v4 to suppress node warnings

* Respect `PUB_CACHE` from the environment

* Cache pub-cache separately from flutter

In order to reduce the extra work that happens when you update your
pubspec.lock, don't use `hashFiles('**/pubspec.lock')` in the hash of
the flutter installation, and separately cache the `.pubspec-cache`.

Also return the `.pub-cache` to `$HOME`, since it's not part of the tool
installation.

* Fix README example of pub-cache-path and document `PUB_CACHE`
2024-02-13 07:13:38 +07:00
Koji Wakamiya
14bf5302ef Set architecture options from runner's architecture (#264)
* feat: Add ARCH_NAME variable and set default ARCH value

* chore: Show runner's os and architecture

* chore: Update actions
2024-02-05 09:06:33 +07:00
Devon Carew
02b923c0e1 add support for the main channel (#258)
* add support for the main channel

* update testing for the 'main' channel
2023-11-20 16:29:45 +07:00
Alif Rachmawadi
aa6d9b9844 update cache test 2023-11-01 18:11:33 +07:00
Alif Rachmawadi
2783a3f08e ensure setup.sh executable; fixes #245 2023-11-01 17:59:30 +07:00
Daren Hayward
c33c37022b Extract to a temporary location to enable moving of flutter folder. (#227) 2023-11-01 17:50:15 +07:00
Gustl22
cc97e1648f feat: Allow git ref as version in master channel (#237)
* feat: Allow git ref as version in `master` channel

* fix lint

* fix parsing

* fix test

* fix checkout, add tests

* replace with tab
2023-10-11 15:55:21 +07:00
Alif Rachmawadi
ed388baf1d fixes #224; update readme 2023-06-24 16:31:51 +07:00
Alif Rachmawadi
48cafc2471 re-add master channel support 2023-03-23 05:52:25 +07:00
Alif Rachmawadi
1508160852 adjust filter by arch 2023-03-22 08:45:49 +07:00
Alif Rachmawadi
88cab4064b add restore-keys cache support 2023-03-21 22:20:05 +07:00
Alif Rachmawadi
55a58f6493 make simpler 2023-03-21 21:49:20 +07:00
Alif Rachmawadi
d369dd765d make simpler 2023-03-21 21:46:00 +07:00
Alif Rachmawadi
42b3ed07e1 make simpler 2023-03-21 21:45:02 +07:00
Alif Rachmawadi
8dbc29a898 make simpler 2023-03-21 21:42:52 +07:00
Alif Rachmawadi
ed0e860e8f make simpler 2023-03-21 21:37:50 +07:00
Alif Rachmawadi
37734c707c update test fixtures 2023-03-21 21:31:03 +07:00
Alif Rachmawadi
b1ba330d99 update test fixtures 2023-03-21 21:25:27 +07:00
Alif Rachmawadi
43c32c5d3a update test fixtures 2023-03-21 20:55:50 +07:00
Alif Rachmawadi
dbf1fa04f4 Replace set-output with $GITHUB_OUTPUT; fixes #192 (#194)
* replace set-output with $GITHUB_OUTPUT

* use stdout for test mode

* update readme
2022-10-13 06:31:27 +07:00
13 changed files with 2495 additions and 457 deletions

View File

@@ -0,0 +1,13 @@
---
name: Enforce SHA pinning
about: Note that this feature request is not supported in this repository.
title: "[Declined] Request: Enforce SHA pinning"
labels: wontfix
assignees: ''
---
Thank you for being so interested! However, we do not support or accept requests to enforce SHA pinning in this repository.
We have discussed this previously and decided against implementing it. Please see #393 for more context on this technical decision.
**Please do not submit this issue, as it will be immediately closed.**

4
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,4 @@
**Policy:** Pull requests to enforce SHA pinning are not supported in this repository and will be closed. For context on why we do not use this feature, please refer to #393.
<!-- Use [x] to mark item done before creation, or just click the checkboxes with device pointer after creation -->
- [ ] This pull request isn't about enforcing SHA pinning.

314
.github/workflows/workflow.yaml vendored Normal file
View File

@@ -0,0 +1,314 @@
name: test
on:
workflow_dispatch:
push:
branches:
- main
- dev
pull_request:
paths:
- setup.sh
- action.yaml
- .github/workflows/workflow.yaml
jobs:
lint_shellcheck:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v6
- name: Run shellcheck
uses: ludeeus/action-shellcheck@master
test_channel:
runs-on: ${{ matrix.operating-system }}
strategy:
matrix:
operating-system:
- ubuntu-latest
- windows-latest
- macos-latest
channel: [stable, beta, master]
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:
- operating-system: ubuntu-latest
channel: main
steps:
- name: Clone repository
uses: actions/checkout@v6
- id: flutter-action
uses: ./
with:
channel: ${{ matrix.channel }}
dry-run: ${{ matrix.dry-run }}
git-source: ${{ matrix.git-source }}
- 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: dart --version
if: ${{ matrix.dry-run != true }}
shell: bash
- run: flutter --version
if: ${{ matrix.dry-run != true }}
shell: bash
- run: "! dart --version"
if: ${{ matrix.dry-run == true }}
shell: bash
- run: "! flutter --version"
if: ${{ matrix.dry-run == true }}
shell: bash
test_cache:
runs-on: ${{ matrix.operating-system }}
strategy:
matrix:
operating-system:
[ubuntu-latest, windows-latest, macos-latest]
steps:
- name: Clone repository
uses: actions/checkout@v6
- uses: ./
with:
channel: stable
flutter-version: 3.10.6
cache: true
- run: dart --version
shell: bash
- run: flutter --version
shell: bash
test_version_file:
runs-on: ${{ matrix.operating-system }}
strategy:
matrix:
operating-system: [ubuntu-latest]
steps:
- name: Clone repository
uses: actions/checkout@v6
- uses: ./
with:
channel: stable
flutter-version-file: test/pubspec.yaml
- name: Verify Dart version
run: dart --version | grep '2.18.6'
shell: bash
- name: Verify Flutter version
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
# 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@v6
- 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 'x64'
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 2 stable | grep '2.10.5'
shell: bash
- run: ./setup.sh -t -p -n 2 beta | grep '2.13.0-0.4.pre'
shell: bash
- run: ./setup.sh -t -p -n 2 any | grep 'beta'
shell: bash
- run: ./setup.sh -t -p -n 2 any | grep '2.13.0-0.4.pre'
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 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@v6
- 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'
shell: bash
- run: ./setup.sh -t -p -n any -a arm64 stable | grep 'stable'
shell: bash
- run: ./setup.sh -t -p -n any -a arm64 stable | grep '3.7.7'
shell: bash
- run: ./setup.sh -t -p -n any -a arm64 stable | grep 'arm64'
shell: bash
- run: ./setup.sh -t -p | grep 'flutter-macos-stable-3.7.7-arm64-2ad6cd72c040113b47ee9055e722606a490ef0da'
shell: bash
- run: ./setup.sh -t -p stable | grep 'flutter-macos-stable-3.7.7-arm64-2ad6cd72c040113b47ee9055e722606a490ef0da'
shell: bash
- run: ./setup.sh -t -p beta | grep 'flutter-macos-beta-3.9.0-0.1.pre-arm64-8b9b90e75107181aadc303d8d7422205863a35dd'
shell: bash
- run: ./setup.sh -t -p master | grep 'flutter-macos-master-any-arm64-master'
shell: bash
- run: ./setup.sh -t -p -n 5b12b74 master | grep 'flutter-macos-master-5b12b74-arm64-master'
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-arm64-master'
shell: bash
- run: ./setup.sh -t -p -n stable master | grep 'flutter-macos-master-stable-arm64-master'
shell: bash
- run: ./setup.sh -t -p | grep '/Users/runner/hostedtoolcache/flutter/stable-3.7.7-arm64'
shell: bash
- run: ./setup.sh -t -p stable | grep '/Users/runner/hostedtoolcache/flutter/stable-3.7.7-arm64'
shell: bash
- run: ./setup.sh -t -p beta | grep '/Users/runner/hostedtoolcache/flutter/beta-3.9.0-0.1.pre-arm64'
shell: bash
- run: ./setup.sh -t -p master | grep '/Users/runner/hostedtoolcache/flutter/master-any-arm64'
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-0511b9f164a62f467b063e6c83d9c683bb3fb056ee556b2f45e987a2c2f4a260'
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

View File

@@ -1,147 +0,0 @@
name: Main workflow
on:
push:
branches:
- main
- dev
pull_request:
paths:
- setup.sh
- action.yml
jobs:
lint_shellcheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: ludeeus/action-shellcheck@master
test_channel:
runs-on: ${{ matrix.operating-system }}
strategy:
matrix:
operating-system: [ubuntu-latest, windows-latest, macos-latest]
channel: [stable, beta, master]
steps:
- uses: actions/checkout@v3
- id: flutter-action
uses: ./
with:
channel: ${{ matrix.channel }}
- name: Echo outputs
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 }}
shell: bash
- run: dart --version
shell: bash
- run: flutter --version
shell: bash
test_cache:
runs-on: ${{ matrix.operating-system }}
strategy:
matrix:
operating-system: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v3
- uses: ./
with:
channel: stable
cache: true
- run: dart --version
shell: bash
- run: flutter --version
shell: bash
test_print_output:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- run: ./setup.sh -t -p | grep 'stable'
shell: bash
- run: ./setup.sh -t -p | grep '3.0.5'
shell: bash
- run: ./setup.sh -t -p | grep 'x64'
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.1.0-9.0.pre'
shell: bash
- run: ./setup.sh -t -p master | grep 'master'
shell: bash
- run: ./setup.sh -t -p -n 2 stable | grep '2.10.5'
shell: bash
- run: ./setup.sh -t -p -n 2 beta | grep '2.13.0-0.4.pre'
shell: bash
- run: ./setup.sh -t -p -n 2 any | grep 'beta'
shell: bash
- run: ./setup.sh -t -p -n 2 any | grep '2.13.0-0.4.pre'
shell: bash
- run: ./setup.sh -t -p -n 3 any | grep 'stable'
shell: bash
- run: ./setup.sh -t -p -n 3 any | grep '3.0.5'
shell: bash
- run: ./setup.sh -t -p -n 3 -a arm64 any | grep 'arm64'
shell: bash
- run: ./setup.sh -t -p -n any -a arm64 stable | grep 'stable'
shell: bash
- run: ./setup.sh -t -p -n any -a arm64 stable | grep '3.0.5'
shell: bash
- run: ./setup.sh -t -p -n any -a arm64 stable | grep 'arm64'
shell: bash
- run: ./setup.sh -t -p -n 1 stable | grep '1.22.6'
shell: bash
- run: ./setup.sh -t -p -n v1 stable | grep 'v1.12.13+hotfix.9'
shell: bash
- run: ./setup.sh -t -p -n 0 any | grep 'beta'
shell: bash
- run: ./setup.sh -t -p -n 0 any | grep 'v0.11.13'
shell: bash
- run: ./setup.sh -t -p -n v0 any | grep 'beta'
shell: bash
- run: ./setup.sh -t -p -n v0 any | grep 'v0.11.13'
shell: bash
- run: ./setup.sh -t -p | grep 'flutter-macos-stable-3.0.5-x64-f1875d570e39de09040c8f79aa13cc56baab8db1'
shell: bash
- run: ./setup.sh -t -p stable | grep 'flutter-macos-stable-3.0.5-x64-f1875d570e39de09040c8f79aa13cc56baab8db1'
shell: bash
- run: ./setup.sh -t -p beta | grep 'flutter-macos-beta-3.1.0-9.0.pre-x64-f28e570c8cb12a004fae2d796d0d9cd46603bde9'
shell: bash
- run: ./setup.sh -t -p master | grep 'flutter-macos-master-master-x64-master'
shell: bash
- run: ./setup.sh -t -p -n 2 stable | grep 'flutter-macos-stable-2.10.5-x64-5464c5bac742001448fe4fc0597be939379f88ea'
shell: bash
- run: ./setup.sh -t -p -n 2 beta | grep 'flutter-macos-beta-2.13.0-0.4.pre-x64-25caf1461b8f643092a9f6f5b224453b5c057d10'
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 3 any | grep 'flutter-macos-stable-3.0.5-x64-f1875d570e39de09040c8f79aa13cc56baab8db1'
shell: bash
- run: ./setup.sh -t -p -n 3 -a arm64 any | grep 'flutter-macos-stable-3.0.5-arm64-f1875d570e39de09040c8f79aa13cc56baab8db1'
shell: bash
- run: ./setup.sh -t -p -n any -a arm64 stable | grep 'flutter-macos-stable-3.0.5-arm64-f1875d570e39de09040c8f79aa13cc56baab8db1'
shell: bash
- run: ./setup.sh -t -p -n 1 stable | grep 'flutter-macos-stable-1.22.6-x64-9b2d32b605630f28625709ebd9d78ab3016b2bf6'
shell: bash
- run: ./setup.sh -t -p -n v1 stable | grep 'flutter-macos-stable-v1.12.13+hotfix.9-x64-f139b11009aeb8ed2a3a3aa8b0066e482709dde3'
shell: bash
- run: ./setup.sh -t -p -n 0 any | grep 'flutter-macos-beta-v0.11.13-x64-58c8489fcdb4e4ef6c010117584c9b23d15221aa'
shell: bash
- run: ./setup.sh -t -p -n v0 any | grep 'flutter-macos-beta-v0.11.13-x64-58c8489fcdb4e4ef6c010117584c9b23d15221aa'
shell: bash
- run: ./setup.sh -t -p | grep '/Users/runner/work/_temp/flutter/stable-3.0.5-x64'
shell: bash
- run: ./setup.sh -t -p stable | grep '/Users/runner/work/_temp/flutter/stable-3.0.5-x64'
shell: bash
- run: ./setup.sh -t -p beta | grep '/Users/runner/work/_temp/flutter/beta-3.1.0-9.0.pre-x64'
shell: bash
- run: ./setup.sh -t -p master | grep '/Users/runner/work/_temp/flutter/master-master-x64'
shell: bash
- run: ./setup.sh -t -p -k 'custom-:channel:-:version:-:hash:' | grep 'custom-stable-3.0.5-f1875d570e39de09040c8f79aa13cc56baab8db1'
shell: bash
- run: ./setup.sh -t -p -k 'custom-:channel:-:version:-:sha256:' | grep 'custom-stable-3.0.5-e79a04dcfd1b583e5831433fc200800ba0d1e9fe4567cb661479bd2542d4c685'
shell: bash
- run: ./setup.sh -t -p -c '/tmp/flutter/:channel:-:version:-:hash:' | grep '/tmp/flutter/stable-3.0.5-f1875d570e39de09040c8f79aa13cc56baab8db1'
shell: bash

480
README.md
View File

@@ -1,169 +1,347 @@
# 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.
## Usage
Originally created by [Alif Rachmawadi]. Maintained by [Bartek Pacia].
Use specific version and channel:
The following sections show how to configure this action.
## Specifying Flutter version
### Use specific version and channel
```yaml
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.0.5'
channel: 'stable'
- run: flutter --version
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: 3.19.0
- run: flutter --version
```
Use latest release for particular channel:
### Use version from pubspec.yaml or FVM config
This is inspired by [`actions/setup-go`](https://github.com/actions/setup-go).
```yaml
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
channel: 'stable' # or: 'beta', 'dev' or 'master'
- run: flutter --version
- name: Clone repository
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 or .fvmrc or .fvm/fvm_config.json
- run: flutter --version
```
Use latest release for particular version and/or channel:
> [!IMPORTANT]
>
> For `flutter-version-file` to work, you need to have the exact Flutter version
> defined in your pubspec.yaml:
>
> **Good**
>
> ```yaml
> environment:
> sdk: ">=3.3.0 <4.0.0"
> flutter: 3.19.0
> ```
>
> **Bad**
>
> ```yaml
> environment:
> sdk: ">=3.3.0 <4.0.0"
> flutter: ">= 3.19.0 <4.0.0"
> ```
> [!NOTE]
>
> Using `flutter-version-file` requires [`yq`](https://github.com/mikefarah/yq),
> 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:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
flutter-version: '1.22.x' # or, you can use 1.22
channel: 'dev'
- run: flutter --version
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable # or: beta, master (or main)
- run: flutter --version
```
Use particular version on any channel:
### Use latest release for particular version and/or channel
```yaml
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
flutter-version: '2.x'
channel: 'any'
- run: flutter --version
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: dev
flutter-version: 1.22.x
- run: flutter --version
```
Build Android APK and app bundle:
### Use particular version on any channel
```yaml
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v2
with:
distribution: 'zulu'
java-version: '11'
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.0.5'
- run: flutter pub get
- run: flutter test
- run: flutter build apk
- run: flutter build appbundle
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: any
flutter-version: 3.x
- run: flutter --version
```
Build for iOS (macOS only):
### Use particular git reference on master channel
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: master
flutter-version: 5b12b74 # tag, commit or branch
- 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)
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v6
- 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
```
### Apply a patch
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@v6
- 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:
```yaml
steps:
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: 3.24.0
- run: flutter pub get
- run: flutter test
- run: flutter build apk
- run: flutter build appbundle
```
### Build for iOS
> [!NOTE]
>
> Building for iOS requires a macOS runner.
```yaml
jobs:
build:
main:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
architecture: x64
- run: flutter pub get
- run: flutter test
- run: flutter build ios --release --no-codesign
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
- run: flutter pub get
- run: flutter test
- run: flutter build ios --release --no-codesign
```
Build for the web:
### Build for the web
```yaml
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
- run: flutter pub get
- run: flutter test
- run: flutter build web
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
- run: flutter pub get
- run: flutter test
- run: flutter build web
```
Build for Windows:
### Build for Windows
```yaml
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
channel: 'beta'
- run: flutter config --enable-windows-desktop
- run: flutter build windows
main:
runs-on: windows-latest
steps:
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
- run: flutter build windows
```
Build for Linux desktop:
### Build for Linux desktop
```yaml
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
- run: |
sudo apt-get update -y
sudo apt-get install -y ninja-build libgtk-3-dev
- run: flutter config --enable-linux-desktop
- run: flutter build linux
main:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
- run: |
sudo apt-get update -y
sudo apt-get install -y ninja-build libgtk-3-dev
- run: flutter build linux
```
Build for macOS desktop:
### Build for macOS desktop
> [!NOTE]
>
> Building for macOS requires a macOS runner.
```yaml
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
architecture: x64
- run: flutter config --enable-macos-desktop
- run: flutter build macos
main:
runs-on: macos-latest
steps:
- name: Clone repository
uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
- run: flutter build macos
```
Integration with `actions/cache`:
## Caching
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:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
cache: true
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
architecture: x64 # optional, x64 or arm64
- run: flutter --version
- name: Clone repository
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-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:" # optional, change this to specify the cache path
- run: flutter --version
```
Note: `cache-key` and `cache-path` has support for several dynamic values:
> [!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:
- `:os:`
- `:channel:`
@@ -172,20 +350,88 @@ Note: `cache-key` and `cache-path` has support for several 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:
- uses: actions/checkout@v3
- id: flutter-action
uses: subosito/flutter-action@v2
with:
channel: 'stable'
- 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 }}
shell: bash
- name: Clone repository
- uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
id: flutter-action
with:
channel: stable
- name: Print outputs
shell: bash
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 }}
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
`dry-run` option:
```yaml
steps:
- name: Clone repository
- uses: actions/checkout@v6
- name: Set up Flutter
uses: subosito/flutter-action@v2
id: flutter-action
with:
channel: stable
dry-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 }}
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

146
action.yaml Normal file
View File

@@ -0,0 +1,146 @@
name: Set up Flutter
description: Setup your runner with Flutter environment
author: Alif Rachmawadi
branding:
icon: maximize
color: blue
inputs:
channel:
description: The Flutter build release channel
required: false
default: stable
flutter-version:
description: The Flutter version to make available on the path
required: false
default: ""
flutter-version-file:
description: The pubspec.yaml or FVM config file with exact Flutter version defined
required: false
default: ""
architecture:
description: The architecture of Flutter SDK executable (x64 or arm64)
required: false
default: "${{ runner.arch }}"
cache:
description: Cache the Flutter SDK
required: false
default: "false"
cache-key:
description: Identifier for the Flutter SDK cache
required: false
default: ""
cache-path:
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
default: ""
pub-cache-path:
description: Flutter pub cache path
required: false
default: default
dry-run:
description: If true, get outputs but do not install Flutter
required: false
default: "false"
git-source:
description: Git clone source
required: false
default: "https://github.com/flutter/flutter.git"
outputs:
CHANNEL:
value: "${{ steps.flutter-action.outputs.CHANNEL }}"
description: The selected Flutter release channel
VERSION:
value: "${{ steps.flutter-action.outputs.VERSION }}"
description: The selected Flutter version
ARCHITECTURE:
value: "${{ steps.flutter-action.outputs.ARCHITECTURE }}"
description: The selected Flutter CPU architecture
CACHE-KEY:
value: "${{ steps.flutter-action.outputs.CACHE-KEY }}"
description: Key used to cache the Flutter SDK
CACHE-PATH:
value: "${{ steps.flutter-action.outputs.CACHE-PATH }}"
description: Path to Flutter SDK
PUB-CACHE-KEY:
value: "${{ steps.flutter-action.outputs.PUB-CACHE-KEY }}"
description: Key used to cache the pub dependencies
PUB-CACHE-PATH:
value: "${{ steps.flutter-action.outputs.PUB-CACHE-PATH }}"
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:
using: composite
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 != '' && !endsWith(inputs.flutter-version-file, '.fvmrc') && !endsWith(inputs.flutter-version-file, 'fvm_config.json')
run: choco install yq
shell: bash
- name: Make setup script executable
run: chmod +x "$GITHUB_ACTION_PATH/setup.sh"
shell: bash
- name: Set action inputs
id: flutter-action
shell: bash
run: |
$GITHUB_ACTION_PATH/setup.sh -p \
-n '${{ inputs.flutter-version }}' \
-f '${{ inputs.flutter-version-file }}' \
-a '${{ inputs.architecture }}' \
-k '${{ inputs.cache-key }}' \
-c '${{ inputs.cache-path }}' \
-l '${{ inputs.pub-cache-key }}' \
-d '${{ inputs.pub-cache-path }}' \
-g '${{ inputs.git-source }}' \
${{ inputs.channel }}
- name: Cache Flutter
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@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') }}
- name: Run setup script
shell: bash
if: ${{ inputs.dry-run != 'true' && inputs.dry-run != true }}
run: |
$GITHUB_ACTION_PATH/setup.sh \
-n '${{ steps.flutter-action.outputs.VERSION }}' \
-a '${{ steps.flutter-action.outputs.ARCHITECTURE }}' \
-c '${{ steps.flutter-action.outputs.CACHE-PATH }}' \
-d '${{ steps.flutter-action.outputs.PUB-CACHE-PATH }}' \
${{ steps.flutter-action.outputs.CHANNEL }}

View File

@@ -1,55 +0,0 @@
name: 'Flutter action'
description: 'Setup your runner with Flutter environment'
author: 'Alif Rachmawadi'
branding:
icon: 'maximize'
color: 'blue'
inputs:
flutter-version:
description: 'The Flutter version to make available on the path'
required: false
default: 'any'
channel:
description: 'The Flutter build release channel'
required: false
default: 'stable'
cache:
description: 'Cache the Flutter SDK'
required: false
default: false
cache-key:
description: 'Identifier for the Flutter SDK cache'
required: false
default: 'flutter-:os:-:channel:-:version:-:arch:-:hash:'
cache-path:
description: 'Flutter SDK cache path'
required: false
default: '${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:'
architecture:
description: 'The architecture of Flutter SDK executable (x64 or arm64)'
required: false
default: '${{ runner.arch }}'
outputs:
cache-path:
value: '${{ steps.flutter-action.outputs.cache-path }}'
cache-key:
value: '${{ steps.flutter-action.outputs.cache-key }}'
channel:
value: '${{ steps.flutter-action.outputs.channel }}'
version:
value: '${{ steps.flutter-action.outputs.version }}'
architecture:
value: '${{ steps.flutter-action.outputs.architecture }}'
runs:
using: 'composite'
steps:
- id: flutter-action
run: $GITHUB_ACTION_PATH/setup.sh -p -c '${{ inputs.cache-path }}' -k '${{ inputs.cache-key }}' -n '${{ inputs.flutter-version }}' -a '${{ inputs.architecture }}' ${{ inputs.channel }}
shell: bash
- if: ${{ inputs.cache == 'true' }}
uses: actions/cache@v3
with:
path: ${{ steps.flutter-action.outputs.cache-path }}
key: ${{ steps.flutter-action.outputs.cache-key }}
- run: $GITHUB_ACTION_PATH/setup.sh -c '${{ steps.flutter-action.outputs.cache-path }}' -n '${{ steps.flutter-action.outputs.version }}' -a '${{ steps.flutter-action.outputs.architecture }}' ${{ steps.flutter-action.outputs.channel }}
shell: bash

286
setup.sh
View File

@@ -1,51 +1,31 @@
#!/bin/bash
set -eu
check_command() {
command -v "$1" >/dev/null 2>&1
}
if ! check_command jq; then
echo "jq not found, please install it, https://stedolan.github.io/jq/download/"
echo "jq not found. Install it from https://stedolan.github.io/jq"
exit 1
fi
OS_NAME=$(echo "$RUNNER_OS" | awk '{print tolower($0)}')
MANIFEST_BASE_URL="https://storage.googleapis.com/flutter_infra_release/releases"
MANIFEST_URL="$MANIFEST_BASE_URL/releases_$OS_NAME.json"
MANIFEST_TEST_FIXTURE="$(dirname -- "${BASH_SOURCE[0]}")/test/releases_$OS_NAME.json"
ARCH_NAME=$(echo "$RUNNER_ARCH" | awk '{print tolower($0)}')
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"
legacy_wildcard_version() {
if [[ $1 == any ]]; then
jq --arg version "$2" '.releases | map(select(.version | startswith($version) )) | first'
else
jq --arg channel "$1" --arg version "$2" '.releases | map(select(.channel==$channel) | select(.version | startswith($version) )) | first'
fi
filter_by_channel() {
jq --arg channel "$1" '[.releases[] | select($channel == "any" or .channel == $channel)]'
}
wildcard_version() {
if [[ $1 == any ]]; then
jq --arg version "$2" --arg arch "$3" '.releases | map(select(.version | startswith($version)) | select(.dart_sdk_arch == null or .dart_sdk_arch == $arch)) | first'
else
jq --arg channel "$1" --arg version "$2" --arg arch "$3" '.releases | map(select(.channel==$channel) | select(.version | startswith($version) ) | select(.dart_sdk_arch == null or .dart_sdk_arch == $arch)) | first'
fi
filter_by_arch() {
jq --arg arch "$1" '[.[] | select(.dart_sdk_arch == $arch or ($arch == "x64" and (has("dart_sdk_arch") | not)))]'
}
get_version() {
if [[ "$1" == any && "$2" == any ]]; then # latest_version
jq --arg arch "$3" '.releases | map(select(.dart_sdk_arch == null or .dart_sdk_arch == $arch)) | first'
elif [[ "$2" == any ]]; then # latest channel version
jq --arg channel "$1" --arg arch "$3" '.releases | map(select(.channel==$channel) | select(.dart_sdk_arch == null or .dart_sdk_arch == $arch)) | first'
else
wildcard_version "$1" "$2" "$3"
fi
}
normalize_version() {
if [[ "$1" == *.x ]]; then
echo "${1/.x/}"
else
echo "$1"
fi
filter_by_version() {
jq --arg version "$1" '.[].version |= gsub("^v"; "") | (if $version == "any" then .[0] else (map(select(.version == $version or (.version | startswith(($version | sub("\\.x$"; "")) + ".")) and .version != $version)) | .[0]) end)'
}
not_found_error() {
@@ -53,7 +33,7 @@ not_found_error() {
}
transform_path() {
if [[ "$OS_NAME" == windows ]]; then
if [ "$OS_NAME" = windows ]; then
echo "$1" | sed -e 's/^\///' -e 's/\//\\/g'
else
echo "$1"
@@ -69,77 +49,128 @@ download_archive() {
mkdir -p "$2"
if [[ "$archive_name" == *zip ]]; then
unzip -q -o "$archive_local" -d "$RUNNER_TEMP"
# 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 "$RUNNER_TEMP"/flutter "$2"
else
tar xf "$archive_local" -C "$2" --strip-components=1
fi
case "$archive_name" in
*.zip)
unzip -q -o "$archive_local" -d "$2"
;;
*)
tar xf "$archive_local" -C "$2"
;;
esac
rm "$archive_local"
}
CACHE_PATH=""
CACHE_KEY=""
PRINT_MODE=""
USE_TEST_FIXTURE=false
PUB_CACHE_PATH=""
PUB_CACHE_KEY=""
PRINT_ONLY=""
TEST_MODE=false
ARCH=""
VERSION=""
VERSION_FILE=""
GIT_SOURCE=""
while getopts 'tc:k:pa:n:' flag; do
while getopts 'tc:k:d:l:pa:n:f:g:' flag; do
case "$flag" in
c) CACHE_PATH="$OPTARG" ;;
k) CACHE_KEY="$OPTARG" ;;
p) PRINT_MODE=true ;;
t) USE_TEST_FIXTURE=true ;;
d) PUB_CACHE_PATH="$OPTARG" ;;
l) PUB_CACHE_KEY="$OPTARG" ;;
p) PRINT_ONLY=true ;;
t) TEST_MODE=true ;;
a) ARCH="$(echo "$OPTARG" | awk '{print tolower($0)}')" ;;
n) VERSION="$OPTARG" ;;
f)
VERSION_FILE="$OPTARG"
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" ;;
?) exit 2 ;;
esac
done
ARR_CHANNEL=("${@:$OPTIND:1}")
CHANNEL="${ARR_CHANNEL[0]}"
[ -z "$ARCH" ] && ARCH="$ARCH_NAME"
[[ -z $CHANNEL ]] && CHANNEL=stable
[[ -z $VERSION ]] && VERSION=any
[[ -z $ARCH ]] && ARCH=x64
[[ -z $CACHE_PATH ]] && CACHE_PATH="$RUNNER_TEMP/flutter/:channel:-:version:-:arch:"
[[ -z $CACHE_KEY ]] && CACHE_KEY="flutter-:os:-:channel:-:version:-:arch:-:hash:"
RELEASE_MANIFEST=""
VERSION_MANIFEST=""
get_version_manifest() {
version_normalized=$(normalize_version "$VERSION")
version_manifest=$(echo "$RELEASE_MANIFEST" | get_version "$CHANNEL" "$version_normalized" "$ARCH")
if [[ "$version_manifest" == null ]]; then
version_manifest=$(echo "$RELEASE_MANIFEST" | legacy_wildcard_version "$CHANNEL" "v$version_normalized")
if [ -n "$VERSION_FILE" ]; then
if [ -n "$VERSION" ]; then
echo "Cannot specify both a version and a version file"
exit 1
fi
version_arch=$(echo "$version_manifest" | jq -r '.dart_sdk_arch')
if [[ "$version_arch" == null ]]; then
if [[ "$ARCH" == x64 ]]; then
echo "$version_manifest" | jq --arg dart_sdk_arch x64 '.+={dart_sdk_arch:$dart_sdk_arch}'
else
echo ""
fi
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
echo "$version_manifest"
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}")
if [ -z "${CHANNEL:-}" ]; then
CHANNEL="${ARR_CHANNEL[0]:-}"
fi
[ -z "$CHANNEL" ] && CHANNEL=stable
[ -z "$VERSION" ] && VERSION=any
[ -z "$ARCH" ] && ARCH=x64
[ -z "$CACHE_PATH" ] && CACHE_PATH="$RUNNER_TOOL_CACHE/flutter/:channel:-:version:-:arch:"
[ -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_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_PATH` is passed in from the action.
#
# If `PUB_CACHE` is set already, then it should continue to be used. Otherwise, satisfy it
# if the action requests a custom path, or set to the Dart default values depending
# on the operating system.
if [ -z "${PUB_CACHE:-}" ]; then
if [ "$PUB_CACHE_PATH" != "default" ]; then
PUB_CACHE="$PUB_CACHE_PATH"
elif [ "$OS_NAME" = "windows" ]; then
PUB_CACHE="$LOCALAPPDATA\\Pub\\Cache"
else
PUB_CACHE="$HOME/.pub-cache"
fi
fi
if [ "$TEST_MODE" = true ]; then
RELEASE_MANIFEST=$(cat "$(dirname -- "${BASH_SOURCE[0]}")/test/$MANIFEST_JSON_PATH")
else
RELEASE_MANIFEST=$(curl --silent --connect-timeout 15 --retry 5 "$MANIFEST_URL")
fi
if [ "$CHANNEL" = "master" ] || [ "$CHANNEL" = "main" ]; then
VERSION_MANIFEST="{\"channel\":\"$CHANNEL\",\"version\":\"$VERSION\",\"dart_sdk_arch\":\"$ARCH\",\"hash\":\"$CHANNEL\",\"sha256\":\"$CHANNEL\"}"
else
VERSION_MANIFEST=$(echo "$RELEASE_MANIFEST" | filter_by_channel "$CHANNEL" | filter_by_arch "$ARCH" | filter_by_version "$VERSION")
fi
case "$VERSION_MANIFEST" in
*null*)
not_found_error "$CHANNEL" "$VERSION" "$ARCH"
exit 1
;;
esac
expand_key() {
version_channel=$(echo "$VERSION_MANIFEST" | jq -r '.channel')
version_version=$(echo "$VERSION_MANIFEST" | jq -r '.version')
version_arch=$(echo "$VERSION_MANIFEST" | jq -r '.dart_sdk_arch')
version_arch=$(echo "$VERSION_MANIFEST" | jq -r '.dart_sdk_arch // "x64"')
version_hash=$(echo "$VERSION_MANIFEST" | jq -r '.hash')
version_sha_256=$(echo "$VERSION_MANIFEST" | jq -r '.sha256')
@@ -153,73 +184,64 @@ expand_key() {
echo "$expanded_key"
}
if [[ "$PRINT_MODE" == true ]]; then
if [[ "$USE_TEST_FIXTURE" == true ]]; then
RELEASE_MANIFEST=$(cat "$MANIFEST_TEST_FIXTURE")
else
RELEASE_MANIFEST=$(curl --silent --connect-timeout 15 --retry 5 "$MANIFEST_URL")
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"')
info_channel=$(echo "$version_info" | awk -F ':' '{print $1}')
info_version=$(echo "$version_info" | awk -F ':' '{print $2}')
info_architecture=$(echo "$version_info" | awk -F ':' '{print $3}')
if [ "$TEST_MODE" = true ]; then
echo "CHANNEL=$info_channel"
echo "VERSION=$info_version"
# VERSION_FILE is not printed, because it is essentially same as VERSION
echo "ARCHITECTURE=$info_architecture"
echo "CACHE-KEY=$CACHE_KEY"
echo "CACHE-PATH=$CACHE_PATH"
echo "PUB-CACHE-KEY=$PUB_CACHE_KEY"
echo "PUB-CACHE-PATH=$PUB_CACHE"
exit 0
fi
if [[ "$CHANNEL" == master ]]; then
VERSION_MANIFEST="{\"channel\":\"$CHANNEL\",\"version\":\"$CHANNEL\",\"dart_sdk_arch\":\"$ARCH\",\"hash\":\"$CHANNEL\",\"sha256\":\"$CHANNEL\"}"
else
VERSION_MANIFEST=$(get_version_manifest)
fi
{
echo "CHANNEL=$info_channel"
echo "VERSION=$info_version"
# VERSION_FILE is not printed, because it is essentially same as VERSION
echo "ARCHITECTURE=$info_architecture"
echo "CACHE-KEY=$CACHE_KEY"
echo "CACHE-PATH=$CACHE_PATH"
echo "PUB-CACHE-KEY=$PUB_CACHE_KEY"
echo "PUB-CACHE-PATH=$PUB_CACHE"
} >>"${GITHUB_OUTPUT:-/dev/null}"
if [[ -z "$VERSION_MANIFEST" ]]; then
not_found_error "$CHANNEL" "$VERSION" "$ARCH"
exit 1
fi
version_info=$(echo "$VERSION_MANIFEST" | jq -j '.channel,":",.version,":",.dart_sdk_arch')
if [[ "$version_info" == *null* ]]; then
not_found_error "$CHANNEL" "$VERSION" "$ARCH"
exit 1
fi
echo "::set-output name=channel::$(echo "$version_info" | awk -F ':' '{print $1}')"
echo "::set-output name=version::$(echo "$version_info" | awk -F ':' '{print $2}')"
echo "::set-output name=architecture::$(echo "$version_info" | awk -F ':' '{print $3}')"
expanded_key=$(expand_key "$CACHE_KEY")
echo "::set-output name=cache-key::$expanded_key"
cache_path=$(transform_path "$CACHE_PATH")
expanded_path=$(expand_key "$cache_path")
echo "::set-output name=cache-path::$expanded_path"
exit 0
fi
CACHE_PATH=$(transform_path "$CACHE_PATH")
SDK_CACHE=$(expand_key "$CACHE_PATH")
PUB_CACHE=$(expand_key "$SDK_CACHE/.pub-cache")
if [[ ! -x "$SDK_CACHE/bin/flutter" ]]; then
if [[ $CHANNEL == master ]]; then
git clone -b master https://github.com/flutter/flutter.git "$SDK_CACHE"
else
RELEASE_MANIFEST=$(curl --silent --connect-timeout 15 --retry 5 "$MANIFEST_URL")
VERSION_MANIFEST=$(get_version_manifest)
if [[ -z "$VERSION_MANIFEST" ]]; then
not_found_error "$CHANNEL" "$VERSION" "$ARCH"
exit 1
if [ ! -x "$CACHE_PATH/flutter/bin/flutter" ]; then
if [ "$CHANNEL" = "master" ] || [ "$CHANNEL" = "main" ]; then
git clone -b "$CHANNEL" "$GIT_SOURCE" "$CACHE_PATH/flutter"
if [ "$VERSION" != "any" ]; then
git config --global --add safe.directory "$CACHE_PATH/flutter"
(cd "$CACHE_PATH/flutter" && git checkout "$VERSION")
fi
ARCHIVE_PATH=$(echo "$VERSION_MANIFEST" | jq -r '.archive')
download_archive "$ARCHIVE_PATH" "$SDK_CACHE"
else
archive_url=$(echo "$VERSION_MANIFEST" | jq -r '.archive')
download_archive "$archive_url" "$CACHE_PATH"
fi
fi
{
echo "FLUTTER_ROOT=$SDK_CACHE"
echo "FLUTTER_ROOT=$CACHE_PATH/flutter"
echo "PUB_CACHE=$PUB_CACHE"
} >>"$GITHUB_ENV"
} >>"${GITHUB_ENV:-/dev/null}"
{
echo "$SDK_CACHE/bin"
echo "$SDK_CACHE/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"
} >>"${GITHUB_PATH:-/dev/null}"

5
test/pubspec.yaml Normal file
View File

@@ -0,0 +1,5 @@
name: flutter_action_test
environment:
dart: ">=2.18.0 <3.0.0"
flutter: 3.3.10

View File

@@ -1,11 +1,391 @@
{
"base_url": "https://storage.googleapis.com/flutter_infra_release/releases",
"current_release": {
"beta": "f28e570c8cb12a004fae2d796d0d9cd46603bde9",
"beta": "f732038a8cf4562ce38a1d7debb30209ae3da896",
"dev": "13a2fb10b838971ce211230f8ffdd094c14af02c",
"stable": "f1875d570e39de09040c8f79aa13cc56baab8db1"
"stable": "2ad6cd72c040113b47ee9055e722606a490ef0da"
},
"releases": [
{
"hash": "f732038a8cf4562ce38a1d7debb30209ae3da896",
"channel": "beta",
"version": "3.9.0-0.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-290.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-03-16T00:03:32.853116Z",
"archive": "beta/linux/flutter_linux_3.9.0-0.1.pre-beta.tar.xz",
"sha256": "29de474d4a1c6844f3560666d88a754dc4b4c7cafd58503f265ac4718eaf1f96"
},
{
"hash": "8b9b90e75107181aadc303d8d7422205863a35dd",
"channel": "beta",
"version": "3.9.0-0.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-290.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-03-15T23:41:24.161758Z",
"archive": "beta/linux/flutter_linux_3.9.0-0.1.pre-beta.tar.xz",
"sha256": "15c63afafa2fd7dd6f477b31c393e7d7e2bfbe08b38c7d6de1169280aae1f9e1"
},
{
"hash": "f3d140022d6a68df8b0e3776594819ce0ee94e2d",
"channel": "beta",
"version": "3.9.0-0.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-290.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-03-15T22:58:49.073713Z",
"archive": "beta/linux/flutter_linux_3.9.0-0.1.pre-beta.tar.xz",
"sha256": "3d5bf90f9a536ee55bf417f2b1d932c727fa6ff41af8fbe6d81d10732ded193c"
},
{
"hash": "2ad6cd72c040113b47ee9055e722606a490ef0da",
"channel": "stable",
"version": "3.7.7",
"dart_sdk_version": "2.19.4",
"dart_sdk_arch": "x64",
"release_date": "2023-03-08T20:53:23.713703Z",
"archive": "stable/linux/flutter_linux_3.7.7-stable.tar.xz",
"sha256": "cdd49597e88c35e5de5184e9acff433dfbb3c075b74ef7b27790af7f57ce2420"
},
{
"hash": "12cb4eb7a009f52b347b62ade7cb4854b926af72",
"channel": "stable",
"version": "3.7.6",
"dart_sdk_version": "2.19.3",
"dart_sdk_arch": "x64",
"release_date": "2023-03-01T21:08:18.329454Z",
"archive": "stable/linux/flutter_linux_3.7.6-stable.tar.xz",
"sha256": "6eb1d4aeabb0d7581bb1765f0da99a9773d1c65f5be634415b4c1afcea4b55b8"
},
{
"hash": "c07f7888888435fd9df505aa2efc38d3cf65681b",
"channel": "stable",
"version": "3.7.5",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-23T04:34:22.630384Z",
"archive": "stable/linux/flutter_linux_3.7.5-stable.tar.xz",
"sha256": "01cad642beb492e8af8413331b50325e1430b934df7be89aa9a29ea2de8df8f0"
},
{
"hash": "b4bce91dd0f168179d46a7ae5eceb3572ba9637a",
"channel": "stable",
"version": "3.7.4",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-21T21:31:04.792661Z",
"archive": "stable/linux/flutter_linux_3.7.4-stable.tar.xz",
"sha256": "698314fa9b70fda8b0769178b895f53c07a8d942e1b0cbbe220385886ea8e952"
},
{
"hash": "1a0a03a41d6613c10bab23508dee456f184b181b",
"channel": "beta",
"version": "3.8.0-10.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-218.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-02-17T17:17:08.473454Z",
"archive": "beta/linux/flutter_linux_3.8.0-10.1.pre-beta.tar.xz",
"sha256": "7b8ac39f229ae01193ac841d6687f3df705682624c32ce2dddfab9d53d8abed3"
},
{
"hash": "9944297138845a94256f1cf37beb88ff9a8e811a",
"channel": "stable",
"version": "3.7.3",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-09T17:02:14.171562Z",
"archive": "stable/linux/flutter_linux_3.7.3-stable.tar.xz",
"sha256": "7b3d2900ce0e367d73d85591d5d43a11f94a223278dd3220776b03a83e234865"
},
{
"hash": "32fb2f948e9b1a2d1b876ebee3558be7f51b457f",
"channel": "stable",
"version": "3.7.2",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-08T18:07:14.532725Z",
"archive": "stable/linux/flutter_linux_3.7.2-stable.tar.xz",
"sha256": "18fa87758dc24547a2a7fc96dc6e6d5bf24b0783b06701ee9e4b09f056559688"
},
{
"hash": "7048ed95a5ad3e43d697e0c397464193991fc230",
"channel": "stable",
"version": "3.7.1",
"dart_sdk_version": "2.19.1",
"dart_sdk_arch": "x64",
"release_date": "2023-02-01T21:25:02.828380Z",
"archive": "stable/linux/flutter_linux_3.7.1-stable.tar.xz",
"sha256": "345f730b78bcdadbe9096a666a41b9d588f885dd94f84514bf10b9483d18c2e5"
},
{
"hash": "b06b8b2710955028a6b562f5aa6fe62941d6febf",
"channel": "stable",
"version": "3.7.0",
"dart_sdk_version": "2.19.0",
"dart_sdk_arch": "x64",
"release_date": "2023-01-24T18:52:29.276391Z",
"archive": "stable/linux/flutter_linux_3.7.0-stable.tar.xz",
"sha256": "51160abac1d0d82b45647be6b2a6ed2d3827d51c3920f2c8ebf3ea8cebe6f484"
},
{
"hash": "099b3f4bf1581796fac3848d3381dbf2f29edbea",
"channel": "beta",
"version": "3.7.0-1.5.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.6.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-01-23T23:08:11.348935Z",
"archive": "beta/linux/flutter_linux_3.7.0-1.5.pre-beta.tar.xz",
"sha256": "7762ec53675fcb7c76361cf9a3fa33d0938abe1f522a6d67968ddfe184088fd0"
},
{
"hash": "135454af32477f815a7525073027a3ff9eff1bfd",
"channel": "stable",
"version": "3.3.10",
"dart_sdk_version": "2.18.6",
"dart_sdk_arch": "x64",
"release_date": "2023-01-23T19:48:31.546617Z",
"archive": "stable/linux/flutter_linux_3.3.10-stable.tar.xz",
"sha256": "4ab54d3f93ba6e0308b3176ab81843c9d3d44b126e27204aa96a339601d45aff"
},
{
"hash": "686fe913dc963954b99e62048569cb9ac8e551c8",
"channel": "beta",
"version": "3.7.0-1.4.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-01-11T18:15:03.971610Z",
"archive": "beta/linux/flutter_linux_3.7.0-1.4.pre-beta.tar.xz",
"sha256": "5ff8a1643f7057cf68bacd30df6ee2c54dfc5f18be58e0a4fb20b245c73dd661"
},
{
"hash": "9b4416aaa79bf984d06aa40ab515a274a50a75a7",
"channel": "beta",
"version": "3.7.0-1.3.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.3.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-01-05T17:47:42.981002Z",
"archive": "beta/linux/flutter_linux_3.7.0-1.3.pre-beta.tar.xz",
"sha256": "e45e0fd2b376a19ed77dd897ce4c30e9490968c6633a6e0fa85e44dfc83d6133"
},
{
"hash": "c29b09b8782b39b1678bc9c861f40902086fb7c8",
"channel": "beta",
"version": "3.7.0-1.2.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-12-20T01:59:20.718823Z",
"archive": "beta/linux/flutter_linux_3.7.0-1.2.pre-beta.tar.xz",
"sha256": "f72135714f722d591f03af37d6db34fabaf2610e528b08904acbd55081b1d3a9"
},
{
"hash": "e599f02c7af4aa8aba0e8e96f71c737f85be3c6e",
"channel": "beta",
"version": "3.7.0-1.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-12-08T18:10:44.186943Z",
"archive": "beta/linux/flutter_linux_3.7.0-1.1.pre-beta.tar.xz",
"sha256": "2d4a965a51a2c3b03ac98c1fce2caaccb362b1dfd4e5607cf00e8be2cc205e92"
},
{
"hash": "b8f7f1f9869bb2d116aa6a70dbeac61000b52849",
"channel": "stable",
"version": "3.3.9",
"dart_sdk_version": "2.18.5",
"dart_sdk_arch": "x64",
"release_date": "2022-11-23T16:40:32.603420Z",
"archive": "stable/linux/flutter_linux_3.3.9-stable.tar.xz",
"sha256": "5aac9006137157ecaf041beeb326e0395eed50950291553b60e07568a1454767"
},
{
"hash": "75927305ff855f76a9ef704f9b4a86fa2fce7292",
"channel": "beta",
"version": "3.6.0-0.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-374.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-11-17T19:46:51.911076Z",
"archive": "beta/linux/flutter_linux_3.6.0-0.1.pre-beta.tar.xz",
"sha256": "473e2fbdd4ca5230593e679303adf429603976b143858c0261af5f5e6f081e1a"
},
{
"hash": "52b3dc25f6471c27b2144594abb11c741cb88f57",
"channel": "stable",
"version": "3.3.8",
"dart_sdk_version": "2.18.4",
"dart_sdk_arch": "x64",
"release_date": "2022-11-09T18:13:11.974062Z",
"archive": "stable/linux/flutter_linux_3.3.8-stable.tar.xz",
"sha256": "407fb5d05e9ad17604bc17ad8808b8e527f2ed64dd559d62f1538ee09b92236e"
},
{
"hash": "e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4",
"channel": "stable",
"version": "3.3.7",
"dart_sdk_version": "2.18.4",
"dart_sdk_arch": "x64",
"release_date": "2022-11-02T17:48:40.430644Z",
"archive": "stable/linux/flutter_linux_3.3.7-stable.tar.xz",
"sha256": "cbbb2ae24390ef19fb290314bee63bbd7c1f0dad98f1f8aab99d1c31baac07e6"
},
{
"hash": "6928314d505d2bb4777be05e45d7808a5aa91d2a",
"channel": "stable",
"version": "3.3.6",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-10-26T16:52:00.298277Z",
"archive": "stable/linux/flutter_linux_3.3.6-stable.tar.xz",
"sha256": "16746e53f2d04ba6b476911e4e0e5b4ca1f8220792bb71ed71696050454ad5e7"
},
{
"hash": "d9111f64021372856901a1fd5bfbc386cade3318",
"channel": "stable",
"version": "3.3.5",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-10-19T22:16:09.519089Z",
"archive": "stable/linux/flutter_linux_3.3.5-stable.tar.xz",
"sha256": "1295f2e8ee30b16fb74da71b69c5332e71fff6f14dd28db5356de63b93a4d659"
},
{
"hash": "71520442d4d0d41b2d158c519928d90ddab3766f",
"channel": "beta",
"version": "3.4.0-34.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-255.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-10-06T17:12:01.834313Z",
"archive": "beta/linux/flutter_linux_3.4.0-34.1.pre-beta.tar.xz",
"sha256": "b3a4f76ff66150eab19b58bf4fb1fe76b0f06c257abce689703238f11c4e1547"
},
{
"hash": "eb6d86ee27deecba4a83536aa20f366a6044895c",
"channel": "stable",
"version": "3.3.4",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-10-05T16:48:07.889310Z",
"archive": "stable/linux/flutter_linux_3.3.4-stable.tar.xz",
"sha256": "4a2a72f09241f8e09732d9512ff4a6987fda85640d22b5799c2ea8c016378313"
},
{
"hash": "18a827f3933c19f51862dde3fa472197683249d6",
"channel": "stable",
"version": "3.3.3",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-09-28T19:51:59.024002Z",
"archive": "stable/linux/flutter_linux_3.3.3-stable.tar.xz",
"sha256": "31365e590529e3f4dc3f36084fa7aa20a48f50fbe7d8ca7fb61390ccd8294d78"
},
{
"hash": "d6260f127fe3f88c98231243b387b48448479bff",
"channel": "beta",
"version": "3.4.0-17.2.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-146.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-09-21T20:26:17.472747Z",
"archive": "beta/linux/flutter_linux_3.4.0-17.2.pre-beta.tar.xz",
"sha256": "fd906d80f943fd1ecd83215419a2b635b40c987504840f6738b005ea3b926843"
},
{
"hash": "98338388391370431e7a3c0e4602b1a29fbd1581",
"channel": "beta",
"version": "3.4.0-17.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-146.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-09-21T00:45:03.783788Z",
"archive": "beta/linux/flutter_linux_3.4.0-17.1.pre-beta.tar.xz",
"sha256": "2d4a5cd7e215d9e1df9499406a37de53b0e8d4ab88cc5c18c0befcaca2a60f7a"
},
{
"hash": "e3c29ec00c9c825c891d75054c63fcc46454dca1",
"channel": "stable",
"version": "3.3.2",
"dart_sdk_version": "2.18.1",
"dart_sdk_arch": "x64",
"release_date": "2022-09-14T15:06:55.724077Z",
"archive": "stable/linux/flutter_linux_3.3.2-stable.tar.xz",
"sha256": "a733a75ae07c42b2059a31fc9d64fabfae5dccd15770fa6b7f290e3f5f9c98e8"
},
{
"hash": "4f9d92fbbdf072a70a70d2179a9f87392b94104c",
"channel": "stable",
"version": "3.3.1",
"dart_sdk_version": "2.18.0",
"dart_sdk_arch": "x64",
"release_date": "2022-09-07T15:30:42.283999Z",
"archive": "stable/linux/flutter_linux_3.3.1-stable.tar.xz",
"sha256": "7cbcff0230affbe07a5ce82298044ac437e96aeba69f83656f9ed9a910a392e7"
},
{
"hash": "ffccd96b62ee8cec7740dab303538c5fc26ac543",
"channel": "stable",
"version": "3.3.0",
"dart_sdk_version": "2.18.0",
"dart_sdk_arch": "x64",
"release_date": "2022-08-30T17:22:12.916008Z",
"archive": "stable/linux/flutter_linux_3.3.0-stable.tar.xz",
"sha256": "a92a27aa6d4454d7a1cf9f8a0a56e0e5d6865f2cfcd21cf52e57f7922ad5d504"
},
{
"hash": "096162697a9cdc79f4e47f7230d70935fa81fd24",
"channel": "beta",
"version": "3.3.0-0.5.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.7.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-23T17:03:21.525151Z",
"archive": "beta/linux/flutter_linux_3.3.0-0.5.pre-beta.tar.xz",
"sha256": "8e07158a64a8ce79f9169cffe4ff23a486bdabb29401f13177672fae18de52d2"
},
{
"hash": "3c0bee85b8e43b860877922bdc411a7333db4d32",
"channel": "beta",
"version": "3.3.0-0.4.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.7.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-20T04:51:18.022823Z",
"archive": "beta/linux/flutter_linux_3.3.0-0.4.pre-beta.tar.xz",
"sha256": "88f67bb90b2e3f43977512540904e9d00142fa4503022b2add48743559453b36"
},
{
"hash": "8c1149878bbb8f062aecfab4d825e5b87bdb4487",
"channel": "beta",
"version": "3.3.0-0.3.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-10T19:12:48.645905Z",
"archive": "beta/linux/flutter_linux_3.3.0-0.3.pre-beta.tar.xz",
"sha256": "46bed8a4935312ef1085bf44cfdb4f91ee28f0a8d2a34d71bc4b4aacdd20163e"
},
{
"hash": "7ac27ac8e6a42750c475ba8a2a3c7047b93fd949",
"channel": "beta",
"version": "3.3.0-0.2.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-03T01:06:09.377154Z",
"archive": "beta/linux/flutter_linux_3.3.0-0.2.pre-beta.tar.xz",
"sha256": "68f656f47cd56acbe1a3f456c71355bda2dae21331a254566b1082f1010769bb"
},
{
"hash": "d952ca86d64772b1b9b0df27cf9ea145e80c38e5",
"channel": "beta",
"version": "3.3.0-0.1.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-07-27T20:02:24.681157Z",
"archive": "beta/linux/flutter_linux_3.3.0-0.1.pre-beta.tar.xz",
"sha256": "f9e63ff0b60c4b5ea9f4f33dddfae62fb607b605285dd6629afae0db66b2352b"
},
{
"hash": "f90da9b1672f7d006ba760fbb8fd1aa17af1a82a",
"channel": "beta",
"version": "3.3.0-0.0.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-07-20T17:33:09.773259Z",
"archive": "beta/linux/flutter_linux_3.3.0-0.0.pre-beta.tar.xz",
"sha256": "c11a43fba13867eaa854a754b6e0d87cd7ef7cc1aaf2795c7bbe55f417c2155f"
},
{
"hash": "f1875d570e39de09040c8f79aa13cc56baab8db1",
"channel": "stable",

View File

@@ -1,11 +1,741 @@
{
"base_url": "https://storage.googleapis.com/flutter_infra_release/releases",
"current_release": {
"beta": "f28e570c8cb12a004fae2d796d0d9cd46603bde9",
"beta": "f732038a8cf4562ce38a1d7debb30209ae3da896",
"dev": "13a2fb10b838971ce211230f8ffdd094c14af02c",
"stable": "f1875d570e39de09040c8f79aa13cc56baab8db1"
"stable": "2ad6cd72c040113b47ee9055e722606a490ef0da"
},
"releases": [
{
"hash": "f732038a8cf4562ce38a1d7debb30209ae3da896",
"channel": "beta",
"version": "3.9.0-0.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-290.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-03-15T23:49:48.869725Z",
"archive": "beta/macos/flutter_macos_3.9.0-0.1.pre-beta.zip",
"sha256": "07ae9b13c6854d85b519166f918f5504579ccbcc43ee8048c8e5c89c28333001"
},
{
"hash": "8b9b90e75107181aadc303d8d7422205863a35dd",
"channel": "beta",
"version": "3.9.0-0.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-290.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-03-15T23:33:12.756049Z",
"archive": "beta/macos/flutter_macos_3.9.0-0.1.pre-beta.zip",
"sha256": "c8cc141b55aa3edf3b3964039890996cbd74954a55ad2e74ff5005e49b74e879"
},
{
"hash": "8b9b90e75107181aadc303d8d7422205863a35dd",
"channel": "beta",
"version": "3.9.0-0.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-290.1.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2023-03-15T23:30:04.284230Z",
"archive": "beta/macos/flutter_macos_arm64_3.9.0-0.1.pre-beta.zip",
"sha256": "50fdf2ec66d3850d2efe4552566b28a37b43020aa7b79d60f346a7a3ba21bd48"
},
{
"hash": "f3d140022d6a68df8b0e3776594819ce0ee94e2d",
"channel": "beta",
"version": "3.9.0-0.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-290.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-03-15T22:45:31.522335Z",
"archive": "beta/macos/flutter_macos_3.9.0-0.1.pre-beta.zip",
"sha256": "20a1ca5bf5fde0fa327b2736f4b34796a586856c83b795e864eaa6c486d1a5d9"
},
{
"hash": "2ad6cd72c040113b47ee9055e722606a490ef0da",
"channel": "stable",
"version": "3.7.7",
"dart_sdk_version": "2.19.4",
"dart_sdk_arch": "x64",
"release_date": "2023-03-08T20:39:11.307931Z",
"archive": "stable/macos/flutter_macos_3.7.7-stable.zip",
"sha256": "78957b52f023a0d811add27eddc59b1a59d27d2ada5df123f39d0315708fb2d5"
},
{
"hash": "2ad6cd72c040113b47ee9055e722606a490ef0da",
"channel": "stable",
"version": "3.7.7",
"dart_sdk_version": "2.19.4",
"dart_sdk_arch": "arm64",
"release_date": "2023-03-08T20:36:12.935541Z",
"archive": "stable/macos/flutter_macos_arm64_3.7.7-stable.zip",
"sha256": "0511b9f164a62f467b063e6c83d9c683bb3fb056ee556b2f45e987a2c2f4a260"
},
{
"hash": "12cb4eb7a009f52b347b62ade7cb4854b926af72",
"channel": "stable",
"version": "3.7.6",
"dart_sdk_version": "2.19.3",
"dart_sdk_arch": "x64",
"release_date": "2023-03-01T20:54:19.480252Z",
"archive": "stable/macos/flutter_macos_3.7.6-stable.zip",
"sha256": "ef50057523ec5220921c8594db6e05e92077783a8232246f9c297d7d5ca95fb4"
},
{
"hash": "12cb4eb7a009f52b347b62ade7cb4854b926af72",
"channel": "stable",
"version": "3.7.6",
"dart_sdk_version": "2.19.3",
"dart_sdk_arch": "arm64",
"release_date": "2023-03-01T20:51:20.884052Z",
"archive": "stable/macos/flutter_macos_arm64_3.7.6-stable.zip",
"sha256": "0823d126788058af49d2e212e13e783517d332339bbc0538f94eb13ee3f194fa"
},
{
"hash": "c07f7888888435fd9df505aa2efc38d3cf65681b",
"channel": "stable",
"version": "3.7.5",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-23T04:27:01.291868Z",
"archive": "stable/macos/flutter_macos_3.7.5-stable.zip",
"sha256": "653961c303d34eed4ca976b814ee3f4a15078fa743e454c77624a5fe3299c5bd"
},
{
"hash": "c07f7888888435fd9df505aa2efc38d3cf65681b",
"channel": "stable",
"version": "3.7.5",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "arm64",
"release_date": "2023-02-23T04:22:14.080604Z",
"archive": "stable/macos/flutter_macos_arm64_3.7.5-stable.zip",
"sha256": "aec66d79633dafa37d5fd00bcec366993921e802050728c5b2e0c3478fd2076f"
},
{
"hash": "b4bce91dd0f168179d46a7ae5eceb3572ba9637a",
"channel": "stable",
"version": "3.7.4",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-21T21:19:15.713559Z",
"archive": "stable/macos/flutter_macos_3.7.4-stable.zip",
"sha256": "6ec44903f585531cb77af887bf5d70c285e6c63fb0c551f3db9ec8b0faddf8c6"
},
{
"hash": "b4bce91dd0f168179d46a7ae5eceb3572ba9637a",
"channel": "stable",
"version": "3.7.4",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "arm64",
"release_date": "2023-02-21T21:15:44.287622Z",
"archive": "stable/macos/flutter_macos_arm64_3.7.4-stable.zip",
"sha256": "8f37e28cd41f91ec67ed722e08bcc5bd172533d21398719fa1bd050ba281bf2c"
},
{
"hash": "1a0a03a41d6613c10bab23508dee456f184b181b",
"channel": "beta",
"version": "3.8.0-10.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-218.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-02-17T17:06:38.101781Z",
"archive": "beta/macos/flutter_macos_3.8.0-10.1.pre-beta.zip",
"sha256": "59d8f3be6d940f17bb309c0e5b0d18e1a3d8ad525feaf648208fbcaf808b7c23"
},
{
"hash": "9944297138845a94256f1cf37beb88ff9a8e811a",
"channel": "stable",
"version": "3.7.3",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-09T16:52:24.380820Z",
"archive": "stable/macos/flutter_macos_3.7.3-stable.zip",
"sha256": "41032963628ef651a81833af202ca6b636b49411c3710030898ed4277d636595"
},
{
"hash": "9944297138845a94256f1cf37beb88ff9a8e811a",
"channel": "stable",
"version": "3.7.3",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "arm64",
"release_date": "2023-02-09T16:49:08.538516Z",
"archive": "stable/macos/flutter_macos_arm64_3.7.3-stable.zip",
"sha256": "6b4eda9371094ca2cdaae944f91a0a95d1f71803dcae0d01f899edf8aa4f58a1"
},
{
"hash": "32fb2f948e9b1a2d1b876ebee3558be7f51b457f",
"channel": "stable",
"version": "3.7.2",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-08T17:58:15.194610Z",
"archive": "stable/macos/flutter_macos_3.7.2-stable.zip",
"sha256": "2ed6e48ba9f20942d600cd997de30f15725537d78cd34b8bf299a089b30e0ca0"
},
{
"hash": "32fb2f948e9b1a2d1b876ebee3558be7f51b457f",
"channel": "stable",
"version": "3.7.2",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "arm64",
"release_date": "2023-02-08T17:55:26.188873Z",
"archive": "stable/macos/flutter_macos_arm64_3.7.2-stable.zip",
"sha256": "daba89e62b5c8b4a3099034f302bdfbc6fa3c4435257192fe29fb9d39d2a3dc6"
},
{
"hash": "7048ed95a5ad3e43d697e0c397464193991fc230",
"channel": "stable",
"version": "3.7.1",
"dart_sdk_version": "2.19.1",
"dart_sdk_arch": "x64",
"release_date": "2023-02-01T21:12:35.871676Z",
"archive": "stable/macos/flutter_macos_3.7.1-stable.zip",
"sha256": "3a6fd3c151d8247785bb3c296ea2c132aaa8f6f2bf2120c7495e3b61e7ab6dc5"
},
{
"hash": "7048ed95a5ad3e43d697e0c397464193991fc230",
"channel": "stable",
"version": "3.7.1",
"dart_sdk_version": "2.19.1",
"dart_sdk_arch": "arm64",
"release_date": "2023-02-01T21:09:28.491790Z",
"archive": "stable/macos/flutter_macos_arm64_3.7.1-stable.zip",
"sha256": "70a8ae5e7ff360827e6dd7facc69c0e5965674449c4f389d994d3c2ffbb2647d"
},
{
"hash": "b06b8b2710955028a6b562f5aa6fe62941d6febf",
"channel": "stable",
"version": "3.7.0",
"dart_sdk_version": "2.19.0",
"dart_sdk_arch": "x64",
"release_date": "2023-01-24T18:44:31.737494Z",
"archive": "stable/macos/flutter_macos_3.7.0-stable.zip",
"sha256": "501dc6254c1bb158998d5d3bd65f79b8e966f991518da0cc6ed6c6d4e2772ec3"
},
{
"hash": "b06b8b2710955028a6b562f5aa6fe62941d6febf",
"channel": "stable",
"version": "3.7.0",
"dart_sdk_version": "2.19.0",
"dart_sdk_arch": "arm64",
"release_date": "2023-01-24T18:41:30.665933Z",
"archive": "stable/macos/flutter_macos_arm64_3.7.0-stable.zip",
"sha256": "6e7132bac441400432129ebb54e5dede6ab76f0dbea58370090249048a2dd013"
},
{
"hash": "099b3f4bf1581796fac3848d3381dbf2f29edbea",
"channel": "beta",
"version": "3.7.0-1.5.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.6.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-01-23T23:15:04.420865Z",
"archive": "beta/macos/flutter_macos_3.7.0-1.5.pre-beta.zip",
"sha256": "a4fdb4293039ca65e1ed1b53ee2ad12a70e18ec8e09486b7f2de78e2cd5dd83c"
},
{
"hash": "099b3f4bf1581796fac3848d3381dbf2f29edbea",
"channel": "beta",
"version": "3.7.0-1.5.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.6.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2023-01-23T22:55:47.278206Z",
"archive": "beta/macos/flutter_macos_arm64_3.7.0-1.5.pre-beta.zip",
"sha256": "ff052b3cd4c19cc49116bfe2a668f6543c7c1e9455b177ebcdc6f5cb8763f48a"
},
{
"hash": "686fe913dc963954b99e62048569cb9ac8e551c8",
"channel": "beta",
"version": "3.7.0-1.4.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-01-11T18:06:01.399151Z",
"archive": "beta/macos/flutter_macos_3.7.0-1.4.pre-beta.zip",
"sha256": "bfdd88b0069d82ffe5b4fd18e668f2bdc460b9dc64ec1990db5dc64617adc2c9"
},
{
"hash": "686fe913dc963954b99e62048569cb9ac8e551c8",
"channel": "beta",
"version": "3.7.0-1.4.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.4.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2023-01-11T18:03:59.749861Z",
"archive": "beta/macos/flutter_macos_arm64_3.7.0-1.4.pre-beta.zip",
"sha256": "e630996ecdcd7389cfcdeee5b7f1974a50151cba1c5b36ddf274d7d775e3dfa8"
},
{
"hash": "9b4416aaa79bf984d06aa40ab515a274a50a75a7",
"channel": "beta",
"version": "3.7.0-1.3.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.3.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-01-05T17:35:47.348107Z",
"archive": "beta/macos/flutter_macos_3.7.0-1.3.pre-beta.zip",
"sha256": "33568334e2489b1232b802102e10ce120735eb0c98aef0d0c6ebd872de08531c"
},
{
"hash": "9b4416aaa79bf984d06aa40ab515a274a50a75a7",
"channel": "beta",
"version": "3.7.0-1.3.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.3.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2023-01-05T17:33:17.835203Z",
"archive": "beta/macos/flutter_macos_arm64_3.7.0-1.3.pre-beta.zip",
"sha256": "ee84b7ac8e5f95061a243b9acddff25976537ee1a3296c4789d1c7c008bb74bc"
},
{
"hash": "c29b09b8782b39b1678bc9c861f40902086fb7c8",
"channel": "beta",
"version": "3.7.0-1.2.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-12-20T01:48:09.249423Z",
"archive": "beta/macos/flutter_macos_3.7.0-1.2.pre-beta.zip",
"sha256": "84d2d51f23dbaba87cb5171313c5ed58a33ee72fb69964c7af39d65b34013d2e"
},
{
"hash": "c29b09b8782b39b1678bc9c861f40902086fb7c8",
"channel": "beta",
"version": "3.7.0-1.2.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.2.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-12-20T01:45:00.490663Z",
"archive": "beta/macos/flutter_macos_arm64_3.7.0-1.2.pre-beta.zip",
"sha256": "a235539bf7c917f79f98ada1de9d11bdef4a7c6607b1b64abdfef7c24147d6cf"
},
{
"hash": "135454af32477f815a7525073027a3ff9eff1bfd",
"channel": "stable",
"version": "3.3.10",
"dart_sdk_version": "2.18.6",
"dart_sdk_arch": "x64",
"release_date": "2022-12-15T21:58:01.550028Z",
"archive": "stable/macos/flutter_macos_3.3.10-stable.zip",
"sha256": "5429d0f71bf3bfbe84c31f3ecf4c721babf51bce1b301ef2be5cbbaafa94410c"
},
{
"hash": "135454af32477f815a7525073027a3ff9eff1bfd",
"channel": "stable",
"version": "3.3.10",
"dart_sdk_version": "2.18.6",
"dart_sdk_arch": "arm64",
"release_date": "2022-12-15T21:55:11.427687Z",
"archive": "stable/macos/flutter_macos_arm64_3.3.10-stable.zip",
"sha256": "af7e59fdfe8ac24cf553a65a89c22ac364d7bf6b35c73631254f19e2c1e4cbc1"
},
{
"hash": "e599f02c7af4aa8aba0e8e96f71c737f85be3c6e",
"channel": "beta",
"version": "3.7.0-1.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-12-08T18:01:09.182464Z",
"archive": "beta/macos/flutter_macos_3.7.0-1.1.pre-beta.zip",
"sha256": "0faa94be887f48883509588309b4f3f47850443d430304e3c536e9ab6af7d41a"
},
{
"hash": "e599f02c7af4aa8aba0e8e96f71c737f85be3c6e",
"channel": "beta",
"version": "3.7.0-1.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.1.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-12-08T17:57:35.704951Z",
"archive": "beta/macos/flutter_macos_arm64_3.7.0-1.1.pre-beta.zip",
"sha256": "157d3ce05b7eca0b249370b6a81bcc48544884f9b9d9555aa8a42f0dd7132503"
},
{
"hash": "b8f7f1f9869bb2d116aa6a70dbeac61000b52849",
"channel": "stable",
"version": "3.3.9",
"dart_sdk_version": "2.18.5",
"dart_sdk_arch": "arm64",
"release_date": "2022-11-23T16:32:40.143203Z",
"archive": "stable/macos/flutter_macos_arm64_3.3.9-stable.zip",
"sha256": "872c8ecf32be88424e84e619fb53b4dd083ddae3e9bfd15a2caf14f624055d98"
},
{
"hash": "b8f7f1f9869bb2d116aa6a70dbeac61000b52849",
"channel": "stable",
"version": "3.3.9",
"dart_sdk_version": "2.18.5",
"dart_sdk_arch": "x64",
"release_date": "2022-11-23T16:30:39.672002Z",
"archive": "stable/macos/flutter_macos_3.3.9-stable.zip",
"sha256": "07c0601c9c8465ee7a165f621869b0690b4bce283dbb293c7ece9206f6914735"
},
{
"hash": "75927305ff855f76a9ef704f9b4a86fa2fce7292",
"channel": "beta",
"version": "3.6.0-0.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-374.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-11-17T19:36:00.807878Z",
"archive": "beta/macos/flutter_macos_3.6.0-0.1.pre-beta.zip",
"sha256": "68e4121503c48589ffd175a67a0c32baa8d67799edda9682f9be662b562e3914"
},
{
"hash": "75927305ff855f76a9ef704f9b4a86fa2fce7292",
"channel": "beta",
"version": "3.6.0-0.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-374.1.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-11-17T19:31:51.568642Z",
"archive": "beta/macos/flutter_macos_arm64_3.6.0-0.1.pre-beta.zip",
"sha256": "7a01c8ed90822fb4cb7c156dcf397eba9822f5bd6d968167057a74444307d47b"
},
{
"hash": "52b3dc25f6471c27b2144594abb11c741cb88f57",
"channel": "stable",
"version": "3.3.8",
"dart_sdk_version": "2.18.4",
"dart_sdk_arch": "x64",
"release_date": "2022-11-09T18:03:24.256809Z",
"archive": "stable/macos/flutter_macos_3.3.8-stable.zip",
"sha256": "2d97b90933da42d332f343dab97a982ce5317e904ff0fce3ca1ebe12c7d19501"
},
{
"hash": "52b3dc25f6471c27b2144594abb11c741cb88f57",
"channel": "stable",
"version": "3.3.8",
"dart_sdk_version": "2.18.4",
"dart_sdk_arch": "arm64",
"release_date": "2022-11-09T18:00:24.035959Z",
"archive": "stable/macos/flutter_macos_arm64_3.3.8-stable.zip",
"sha256": "c49d66a68bd8e2dea1737cf58f72828e113f242ce4f28f268917baf30ea60ea9"
},
{
"hash": "e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4",
"channel": "stable",
"version": "3.3.7",
"dart_sdk_version": "2.18.4",
"dart_sdk_arch": "x64",
"release_date": "2022-11-02T17:37:46.823631Z",
"archive": "stable/macos/flutter_macos_3.3.7-stable.zip",
"sha256": "1bc4a9c4a8a89005157ff1ae17d2691c511b49cc1f0cf8b465bc1d0284d04d55"
},
{
"hash": "e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4",
"channel": "stable",
"version": "3.3.7",
"dart_sdk_version": "2.18.4",
"dart_sdk_arch": "arm64",
"release_date": "2022-11-02T17:32:22.643480Z",
"archive": "stable/macos/flutter_macos_arm64_3.3.7-stable.zip",
"sha256": "95172586e28c8241a6c7a593573ec89fe0c48d70882421394923d477fac9f0a7"
},
{
"hash": "6928314d505d2bb4777be05e45d7808a5aa91d2a",
"channel": "stable",
"version": "3.3.6",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-10-26T16:39:56.056222Z",
"archive": "stable/macos/flutter_macos_3.3.6-stable.zip",
"sha256": "32845432ca48ca0fcf41857fdae54c681ff6b7e2ded4353046daf0e7649e168d"
},
{
"hash": "6928314d505d2bb4777be05e45d7808a5aa91d2a",
"channel": "stable",
"version": "3.3.6",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "arm64",
"release_date": "2022-10-26T16:36:36.259958Z",
"archive": "stable/macos/flutter_macos_arm64_3.3.6-stable.zip",
"sha256": "4bb7cd85c31d90a40de6adb1a2bfab6b8f2e753805bd103968b5fb1b7625fcd6"
},
{
"hash": "d9111f64021372856901a1fd5bfbc386cade3318",
"channel": "stable",
"version": "3.3.5",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-10-19T22:04:57.692139Z",
"archive": "stable/macos/flutter_macos_3.3.5-stable.zip",
"sha256": "4790eedc878f749a8babd0d1632e832a784f71824d41746e9d953adb2352d9c3"
},
{
"hash": "d9111f64021372856901a1fd5bfbc386cade3318",
"channel": "stable",
"version": "3.3.5",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "arm64",
"release_date": "2022-10-19T22:01:44.977591Z",
"archive": "stable/macos/flutter_macos_arm64_3.3.5-stable.zip",
"sha256": "55390466cd4d192620fff8558e6b757532c744c53724a2d533e033d94749c976"
},
{
"hash": "71520442d4d0d41b2d158c519928d90ddab3766f",
"channel": "beta",
"version": "3.4.0-34.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-255.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-10-06T17:02:17.314068Z",
"archive": "beta/macos/flutter_macos_3.4.0-34.1.pre-beta.zip",
"sha256": "c97204a171f5b9cc5436ffacce770dbc666288de8a8a114b894beca2df197b92"
},
{
"hash": "71520442d4d0d41b2d158c519928d90ddab3766f",
"channel": "beta",
"version": "3.4.0-34.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-255.2.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-10-06T16:58:56.925767Z",
"archive": "beta/macos/flutter_macos_arm64_3.4.0-34.1.pre-beta.zip",
"sha256": "b7c9f7e8141ae4a16b61183d2d16e1123ff5a0048e721e3ace3ccb84fa0da754"
},
{
"hash": "eb6d86ee27deecba4a83536aa20f366a6044895c",
"channel": "stable",
"version": "3.3.4",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-10-05T16:35:44.445492Z",
"archive": "stable/macos/flutter_macos_3.3.4-stable.zip",
"sha256": "3a39f0cadae5cf4fb1d634c9ec1c7564ccf1bf78d0cd6418e72e037ab8422f7b"
},
{
"hash": "eb6d86ee27deecba4a83536aa20f366a6044895c",
"channel": "stable",
"version": "3.3.4",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "arm64",
"release_date": "2022-10-05T16:33:26.309456Z",
"archive": "stable/macos/flutter_macos_arm64_3.3.4-stable.zip",
"sha256": "a6825b56fcb789a48cc7c657c9ad24498743f0d35402364c0a9f020dbf895545"
},
{
"hash": "18a827f3933c19f51862dde3fa472197683249d6",
"channel": "stable",
"version": "3.3.3",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-09-28T19:42:54.155293Z",
"archive": "stable/macos/flutter_macos_3.3.3-stable.zip",
"sha256": "d6676dbe5aeedf8f4eff6f75fb632d6101cf1a357dee207d36ae9e7b30e197df"
},
{
"hash": "18a827f3933c19f51862dde3fa472197683249d6",
"channel": "stable",
"version": "3.3.3",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "arm64",
"release_date": "2022-09-28T19:38:29.677756Z",
"archive": "stable/macos/flutter_macos_arm64_3.3.3-stable.zip",
"sha256": "41828809900dfc7cf0ef7027f83858b02a3824dc3eeee5b408726321414eddca"
},
{
"hash": "d6260f127fe3f88c98231243b387b48448479bff",
"channel": "beta",
"version": "3.4.0-17.2.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-146.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-09-21T20:14:46.975448Z",
"archive": "beta/macos/flutter_macos_3.4.0-17.2.pre-beta.zip",
"sha256": "8cbba6f8d1625334123ffd5486095d4f39756854c7341e9723db0636297f5cd5"
},
{
"hash": "d6260f127fe3f88c98231243b387b48448479bff",
"channel": "beta",
"version": "3.4.0-17.2.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-146.2.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-09-21T20:12:10.456513Z",
"archive": "beta/macos/flutter_macos_arm64_3.4.0-17.2.pre-beta.zip",
"sha256": "f3e93f73dae6d214e3042463800f6dcc4526f8206ff793a6eb201df8fbe79901"
},
{
"hash": "98338388391370431e7a3c0e4602b1a29fbd1581",
"channel": "beta",
"version": "3.4.0-17.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-146.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-09-21T00:32:52.256805Z",
"archive": "beta/macos/flutter_macos_3.4.0-17.1.pre-beta.zip",
"sha256": "5795e43e231589e0add9f69031d1a238f7c058271448ba5f5f907f6359e0080d"
},
{
"hash": "98338388391370431e7a3c0e4602b1a29fbd1581",
"channel": "beta",
"version": "3.4.0-17.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-146.1.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-09-21T00:29:48.404511Z",
"archive": "beta/macos/flutter_macos_arm64_3.4.0-17.1.pre-beta.zip",
"sha256": "6b674f0ee1b188e3c66fe879f916193008cdad8c4f1532dee02c98a0c8cfb9d3"
},
{
"hash": "e3c29ec00c9c825c891d75054c63fcc46454dca1",
"channel": "stable",
"version": "3.3.2",
"dart_sdk_version": "2.18.1",
"dart_sdk_arch": "arm64",
"release_date": "2022-09-14T15:35:34.505831Z",
"archive": "stable/macos/flutter_macos_arm64_3.3.2-stable.zip",
"sha256": "bf59ede182ac9a675cb9f2a3e2ba70b8b3e94a0a22efdebd37cc5e3b57aa37e0"
},
{
"hash": "e3c29ec00c9c825c891d75054c63fcc46454dca1",
"channel": "stable",
"version": "3.3.2",
"dart_sdk_version": "2.18.1",
"dart_sdk_arch": "x64",
"release_date": "2022-09-14T15:00:33.177611Z",
"archive": "stable/macos/flutter_macos_3.3.2-stable.zip",
"sha256": "25f35d79b008e131d3d81c2bc29ef3d3e6508f2f9fcda3683f58a4216b8b06c9"
},
{
"hash": "4f9d92fbbdf072a70a70d2179a9f87392b94104c",
"channel": "stable",
"version": "3.3.1",
"dart_sdk_version": "2.18.0",
"dart_sdk_arch": "x64",
"release_date": "2022-09-07T15:18:17.414596Z",
"archive": "stable/macos/flutter_macos_3.3.1-stable.zip",
"sha256": "e6c53c683082272feed6514fe003a793955935f3ea04485e1ccd44a05da1cc1e"
},
{
"hash": "4f9d92fbbdf072a70a70d2179a9f87392b94104c",
"channel": "stable",
"version": "3.3.1",
"dart_sdk_version": "2.18.0",
"dart_sdk_arch": "arm64",
"release_date": "2022-09-07T15:15:28.246563Z",
"archive": "stable/macos/flutter_macos_arm64_3.3.1-stable.zip",
"sha256": "648761d29335ab002ab0f0757f2392b73de09b0d4d8fae153eb49fb619c66837"
},
{
"hash": "ffccd96b62ee8cec7740dab303538c5fc26ac543",
"channel": "stable",
"version": "3.3.0",
"dart_sdk_version": "2.18.0",
"dart_sdk_arch": "x64",
"release_date": "2022-08-30T17:11:09.790844Z",
"archive": "stable/macos/flutter_macos_3.3.0-stable.zip",
"sha256": "f461df043b4a1b2dedcf31c11db5e5286b2b014804d2df445b85c6bb6ce0844b"
},
{
"hash": "ffccd96b62ee8cec7740dab303538c5fc26ac543",
"channel": "stable",
"version": "3.3.0",
"dart_sdk_version": "2.18.0",
"dart_sdk_arch": "arm64",
"release_date": "2022-08-30T17:08:26.835930Z",
"archive": "stable/macos/flutter_macos_arm64_3.3.0-stable.zip",
"sha256": "ad3b620aef65d43f54c5432a7f3a72304de639c7cf393a8a8796aa1094476b2e"
},
{
"hash": "096162697a9cdc79f4e47f7230d70935fa81fd24",
"channel": "beta",
"version": "3.3.0-0.5.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.7.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-23T16:52:21.746614Z",
"archive": "beta/macos/flutter_macos_3.3.0-0.5.pre-beta.zip",
"sha256": "7c002e918634f3f5d125b53ee624fa03fbf095b6f048adb8878e6277114d8c55"
},
{
"hash": "096162697a9cdc79f4e47f7230d70935fa81fd24",
"channel": "beta",
"version": "3.3.0-0.5.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.7.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-08-23T16:50:36.968554Z",
"archive": "beta/macos/flutter_macos_arm64_3.3.0-0.5.pre-beta.zip",
"sha256": "4b8a7d27a4126c4ca92e2ae6c9597701556057a2e4bc098747a0f2ebec17f661"
},
{
"hash": "3c0bee85b8e43b860877922bdc411a7333db4d32",
"channel": "beta",
"version": "3.3.0-0.4.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.7.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-20T04:38:15.866842Z",
"archive": "beta/macos/flutter_macos_3.3.0-0.4.pre-beta.zip",
"sha256": "53649b10202fa3c8a87c12380c9fa2a40e278de4b23039ebae8e15c3ac83ed79"
},
{
"hash": "3c0bee85b8e43b860877922bdc411a7333db4d32",
"channel": "beta",
"version": "3.3.0-0.4.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.7.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-08-20T04:35:35.455861Z",
"archive": "beta/macos/flutter_macos_arm64_3.3.0-0.4.pre-beta.zip",
"sha256": "4f37a85674030c69298cffa2193970b2f155e9611d81cae1e4fa324fc427439b"
},
{
"hash": "8c1149878bbb8f062aecfab4d825e5b87bdb4487",
"channel": "beta",
"version": "3.3.0-0.3.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-10T19:01:24.684350Z",
"archive": "beta/macos/flutter_macos_3.3.0-0.3.pre-beta.zip",
"sha256": "45d3e405a0d6e27c4ac4f3cd43cbbe06b95feb67685525a08165d07cf0dafa2c"
},
{
"hash": "8c1149878bbb8f062aecfab4d825e5b87bdb4487",
"channel": "beta",
"version": "3.3.0-0.3.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-08-10T18:58:07.202077Z",
"archive": "beta/macos/flutter_macos_arm64_3.3.0-0.3.pre-beta.zip",
"sha256": "0083abd1251c990d70f6c613e493ee84253684c486908448648fe16fea512ea5"
},
{
"hash": "7ac27ac8e6a42750c475ba8a2a3c7047b93fd949",
"channel": "beta",
"version": "3.3.0-0.2.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-08-03T04:31:44.508544Z",
"archive": "beta/macos/flutter_macos_arm64_3.3.0-0.2.pre-beta.zip",
"sha256": "bca81cc0c0b31ce06e69c0443959e71e73a2fa82d2553080092bff4f80a84ea3"
},
{
"hash": "7ac27ac8e6a42750c475ba8a2a3c7047b93fd949",
"channel": "beta",
"version": "3.3.0-0.2.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-03T01:58:04.779532Z",
"archive": "beta/macos/flutter_macos_3.3.0-0.2.pre-beta.zip",
"sha256": "e7b2928ccdeeb99aff34123f91d44451bb11164c9cc7757fac882e4abdbf56aa"
},
{
"hash": "d952ca86d64772b1b9b0df27cf9ea145e80c38e5",
"channel": "beta",
"version": "3.3.0-0.1.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-07-27T19:51:19.133963Z",
"archive": "beta/macos/flutter_macos_3.3.0-0.1.pre-beta.zip",
"sha256": "870976f4f179ee1cdafa87882c68fb9a533519508182a5580b7ba35b9dad87a5"
},
{
"hash": "d952ca86d64772b1b9b0df27cf9ea145e80c38e5",
"channel": "beta",
"version": "3.3.0-0.1.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-07-27T19:48:56.397604Z",
"archive": "beta/macos/flutter_macos_arm64_3.3.0-0.1.pre-beta.zip",
"sha256": "037550a2fdad281d070727cff68c0f5db12c116ee400b45faec5370effeddf31"
},
{
"hash": "f90da9b1672f7d006ba760fbb8fd1aa17af1a82a",
"channel": "beta",
"version": "3.3.0-0.0.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-07-20T19:10:36.884201Z",
"archive": "beta/macos/flutter_macos_3.3.0-0.0.pre-beta.zip",
"sha256": "a5bacbd9c5df2a48840b1e378e66e9f586c5bdbbc69ea0d0ff49de0280d5ca3f"
},
{
"hash": "f90da9b1672f7d006ba760fbb8fd1aa17af1a82a",
"channel": "beta",
"version": "3.3.0-0.0.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.2.beta)",
"dart_sdk_arch": "arm64",
"release_date": "2022-07-20T17:26:09.257987Z",
"archive": "beta/macos/flutter_macos_arm64_3.3.0-0.0.pre-beta.zip",
"sha256": "7ce648969a528edf1f8d826ca6fc324ce22d712d6081b15ec55fcff3a1d0c779"
},
{
"hash": "f1875d570e39de09040c8f79aa13cc56baab8db1",
"channel": "stable",

View File

@@ -1,11 +1,391 @@
{
"base_url": "https://storage.googleapis.com/flutter_infra_release/releases",
"current_release": {
"beta": "f28e570c8cb12a004fae2d796d0d9cd46603bde9",
"beta": "f732038a8cf4562ce38a1d7debb30209ae3da896",
"dev": "13a2fb10b838971ce211230f8ffdd094c14af02c",
"stable": "f1875d570e39de09040c8f79aa13cc56baab8db1"
"stable": "2ad6cd72c040113b47ee9055e722606a490ef0da"
},
"releases": [
{
"hash": "f732038a8cf4562ce38a1d7debb30209ae3da896",
"channel": "beta",
"version": "3.9.0-0.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-290.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-03-16T00:06:13.875844Z",
"archive": "beta/windows/flutter_windows_3.9.0-0.1.pre-beta.zip",
"sha256": "3754f76203a61e0483a64587d6790ec19616aa065367c5a64cf68029b8a03b0a"
},
{
"hash": "8b9b90e75107181aadc303d8d7422205863a35dd",
"channel": "beta",
"version": "3.9.0-0.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-290.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-03-15T23:46:20.941673Z",
"archive": "beta/windows/flutter_windows_3.9.0-0.1.pre-beta.zip",
"sha256": "f37ada75add1b6fdd91ad67dff564744a0c33b37ad66d2407dbadd69b519076c"
},
{
"hash": "f3d140022d6a68df8b0e3776594819ce0ee94e2d",
"channel": "beta",
"version": "3.9.0-0.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-290.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-03-15T22:54:39.722072Z",
"archive": "beta/windows/flutter_windows_3.9.0-0.1.pre-beta.zip",
"sha256": "58216af74574bd27f864eb2ef21eb3beb71229f28e317b0144e49441ff144800"
},
{
"hash": "2ad6cd72c040113b47ee9055e722606a490ef0da",
"channel": "stable",
"version": "3.7.7",
"dart_sdk_version": "2.19.4",
"dart_sdk_arch": "x64",
"release_date": "2023-03-08T20:54:40.512026Z",
"archive": "stable/windows/flutter_windows_3.7.7-stable.zip",
"sha256": "66f18e02b4e0ecad275a6376274adfad5e34c23c4a19749e9960d0a70cba7945"
},
{
"hash": "12cb4eb7a009f52b347b62ade7cb4854b926af72",
"channel": "stable",
"version": "3.7.6",
"dart_sdk_version": "2.19.3",
"dart_sdk_arch": "x64",
"release_date": "2023-03-01T21:08:50.824736Z",
"archive": "stable/windows/flutter_windows_3.7.6-stable.zip",
"sha256": "f6359d963bdf330fe81b33fcd37e954810a6f234ec27a4c7e657787d8997e4a8"
},
{
"hash": "c07f7888888435fd9df505aa2efc38d3cf65681b",
"channel": "stable",
"version": "3.7.5",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-23T04:35:24.035013Z",
"archive": "stable/windows/flutter_windows_3.7.5-stable.zip",
"sha256": "ea543520a5051e4512c75828ccf3085e586b6c62712c62cb33bf0b3d386a8ba1"
},
{
"hash": "b4bce91dd0f168179d46a7ae5eceb3572ba9637a",
"channel": "stable",
"version": "3.7.4",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-21T21:33:27.210617Z",
"archive": "stable/windows/flutter_windows_3.7.4-stable.zip",
"sha256": "0a71374359f4782da0499fe4efddfccbc71a027639afeaccbe89d3a527ba4292"
},
{
"hash": "1a0a03a41d6613c10bab23508dee456f184b181b",
"channel": "beta",
"version": "3.8.0-10.1.pre",
"dart_sdk_version": "3.0.0 (build 3.0.0-218.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-02-17T17:16:41.121017Z",
"archive": "beta/windows/flutter_windows_3.8.0-10.1.pre-beta.zip",
"sha256": "69c523a2450969bb749c4850c78d9ecf2dd7b5773f3da5517110331e6edd51bf"
},
{
"hash": "9944297138845a94256f1cf37beb88ff9a8e811a",
"channel": "stable",
"version": "3.7.3",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-09T17:07:20.774874Z",
"archive": "stable/windows/flutter_windows_3.7.3-stable.zip",
"sha256": "5bd1eb343df962a579f6f8ddf4231661b2158c582fe3b343673e5762c290b6db"
},
{
"hash": "32fb2f948e9b1a2d1b876ebee3558be7f51b457f",
"channel": "stable",
"version": "3.7.2",
"dart_sdk_version": "2.19.2",
"dart_sdk_arch": "x64",
"release_date": "2023-02-08T18:12:42.520126Z",
"archive": "stable/windows/flutter_windows_3.7.2-stable.zip",
"sha256": "328a7e6768852e1b118700aaccc73b09809c3636e8fdbbe0a9cedcb60d8d22df"
},
{
"hash": "7048ed95a5ad3e43d697e0c397464193991fc230",
"channel": "stable",
"version": "3.7.1",
"dart_sdk_version": "2.19.1",
"dart_sdk_arch": "x64",
"release_date": "2023-02-01T21:25:51.478009Z",
"archive": "stable/windows/flutter_windows_3.7.1-stable.zip",
"sha256": "8712d43e0c4a9ca87887507ee72e68c7cf9da487eef9dd28c14556491fd82d7d"
},
{
"hash": "b06b8b2710955028a6b562f5aa6fe62941d6febf",
"channel": "stable",
"version": "3.7.0",
"dart_sdk_version": "2.19.0",
"dart_sdk_arch": "x64",
"release_date": "2023-01-24T19:03:01.219427Z",
"archive": "stable/windows/flutter_windows_3.7.0-stable.zip",
"sha256": "48ba4e41f7bcf4daeebca292d876fac37df39e2dd0250c45d27995dd41864fd6"
},
{
"hash": "099b3f4bf1581796fac3848d3381dbf2f29edbea",
"channel": "beta",
"version": "3.7.0-1.5.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.6.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-01-23T23:13:05.768235Z",
"archive": "beta/windows/flutter_windows_3.7.0-1.5.pre-beta.zip",
"sha256": "fcd0821b8914b1d6ede92c2e7bc05746bb42a6cdbbade14a9bec3e96a8a5d5fc"
},
{
"hash": "686fe913dc963954b99e62048569cb9ac8e551c8",
"channel": "beta",
"version": "3.7.0-1.4.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-01-11T18:19:13.038507Z",
"archive": "beta/windows/flutter_windows_3.7.0-1.4.pre-beta.zip",
"sha256": "a1bd1aa0d07527b218b7fe5d3f035caa1142f4ee85d10b0993d004fa2e32bbe4"
},
{
"hash": "9b4416aaa79bf984d06aa40ab515a274a50a75a7",
"channel": "beta",
"version": "3.7.0-1.3.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.3.beta)",
"dart_sdk_arch": "x64",
"release_date": "2023-01-05T17:49:04.065552Z",
"archive": "beta/windows/flutter_windows_3.7.0-1.3.pre-beta.zip",
"sha256": "042da7d26c46e84b6a65e9dace31a7020e1ae71b665577b3d9d0358437af2306"
},
{
"hash": "c29b09b8782b39b1678bc9c861f40902086fb7c8",
"channel": "beta",
"version": "3.7.0-1.2.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-12-20T02:02:13.097865Z",
"archive": "beta/windows/flutter_windows_3.7.0-1.2.pre-beta.zip",
"sha256": "3d8844086aa65c9f03e684bd9869dea856d8f0c7f492dd6d4b689dde3cbc03f6"
},
{
"hash": "135454af32477f815a7525073027a3ff9eff1bfd",
"channel": "stable",
"version": "3.3.10",
"dart_sdk_version": "2.18.6",
"dart_sdk_arch": "x64",
"release_date": "2022-12-15T22:10:59.100252Z",
"archive": "stable/windows/flutter_windows_3.3.10-stable.zip",
"sha256": "bcf931ae554f3e01190a4f278ec7dbda7c61ded73b23e3d75232a8eecbf86399"
},
{
"hash": "e599f02c7af4aa8aba0e8e96f71c737f85be3c6e",
"channel": "beta",
"version": "3.7.0-1.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-444.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-12-08T18:11:40.970921Z",
"archive": "beta/windows/flutter_windows_3.7.0-1.1.pre-beta.zip",
"sha256": "9e19c383c47c07dd25620692c61d6a62966bbc1834e07af8b2b0d4b5b13152eb"
},
{
"hash": "b8f7f1f9869bb2d116aa6a70dbeac61000b52849",
"channel": "stable",
"version": "3.3.9",
"dart_sdk_version": "2.18.5",
"dart_sdk_arch": "x64",
"release_date": "2022-11-23T16:42:26.475643Z",
"archive": "stable/windows/flutter_windows_3.3.9-stable.zip",
"sha256": "2c3f03ec61f2bc218059d675746524126b24948cbaae310bc5e4da32ec96e80b"
},
{
"hash": "75927305ff855f76a9ef704f9b4a86fa2fce7292",
"channel": "beta",
"version": "3.6.0-0.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-374.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-11-17T19:47:21.141825Z",
"archive": "beta/windows/flutter_windows_3.6.0-0.1.pre-beta.zip",
"sha256": "80b2f58bd8b74d9f7e635629d2e211a0d6597609bd6f63d585b89741b933aa8c"
},
{
"hash": "52b3dc25f6471c27b2144594abb11c741cb88f57",
"channel": "stable",
"version": "3.3.8",
"dart_sdk_version": "2.18.4",
"dart_sdk_arch": "x64",
"release_date": "2022-11-09T18:14:21.714914Z",
"archive": "stable/windows/flutter_windows_3.3.8-stable.zip",
"sha256": "170beb36b218b012596ed9c568aa9db1ccad707dd5663f46a1e57d997eeb78a3"
},
{
"hash": "e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4",
"channel": "stable",
"version": "3.3.7",
"dart_sdk_version": "2.18.4",
"dart_sdk_arch": "x64",
"release_date": "2022-11-02T17:47:39.033688Z",
"archive": "stable/windows/flutter_windows_3.3.7-stable.zip",
"sha256": "726c4c1f8810a9f9e4ddcf0611b12992abb8142606ca32f07838a20a537f14af"
},
{
"hash": "6928314d505d2bb4777be05e45d7808a5aa91d2a",
"channel": "stable",
"version": "3.3.6",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-10-26T16:46:05.015003Z",
"archive": "stable/windows/flutter_windows_3.3.6-stable.zip",
"sha256": "66c6f940a8e8f2d51fea9f46895490fb1d47d85e281efd36f8900581f721fe44"
},
{
"hash": "d9111f64021372856901a1fd5bfbc386cade3318",
"channel": "stable",
"version": "3.3.5",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-10-19T22:15:09.477535Z",
"archive": "stable/windows/flutter_windows_3.3.5-stable.zip",
"sha256": "87e8d83662de7a90c4aa86e766f5a0a5d3ac7c26c07ebc770c109d14b0105e82"
},
{
"hash": "71520442d4d0d41b2d158c519928d90ddab3766f",
"channel": "beta",
"version": "3.4.0-34.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-255.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-10-06T17:12:47.130792Z",
"archive": "beta/windows/flutter_windows_3.4.0-34.1.pre-beta.zip",
"sha256": "8c397f8ee6494c04ff38971e43426d07d32dde03730dd943bb3691497b9a0865"
},
{
"hash": "eb6d86ee27deecba4a83536aa20f366a6044895c",
"channel": "stable",
"version": "3.3.4",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-10-05T16:46:53.035404Z",
"archive": "stable/windows/flutter_windows_3.3.4-stable.zip",
"sha256": "87632a47a631aea267eedf48c851b50aefbf7ff4e19651746ba58975e5edb087"
},
{
"hash": "18a827f3933c19f51862dde3fa472197683249d6",
"channel": "stable",
"version": "3.3.3",
"dart_sdk_version": "2.18.2",
"dart_sdk_arch": "x64",
"release_date": "2022-09-28T19:52:44.384630Z",
"archive": "stable/windows/flutter_windows_3.3.3-stable.zip",
"sha256": "34d1456306c3eff891bb53863c8319a19f9d6f7f844763720add830a7d974aa7"
},
{
"hash": "d6260f127fe3f88c98231243b387b48448479bff",
"channel": "beta",
"version": "3.4.0-17.2.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-146.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-09-21T20:26:28.792489Z",
"archive": "beta/windows/flutter_windows_3.4.0-17.2.pre-beta.zip",
"sha256": "8d0f2e145b4ed81948dc907a8b332890e87da809ce4a6e3fc725d55acd205c08"
},
{
"hash": "98338388391370431e7a3c0e4602b1a29fbd1581",
"channel": "beta",
"version": "3.4.0-17.1.pre",
"dart_sdk_version": "2.19.0 (build 2.19.0-146.1.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-09-21T00:43:43.298606Z",
"archive": "beta/windows/flutter_windows_3.4.0-17.1.pre-beta.zip",
"sha256": "2a8c339e42c573c409fb5ef26373cf4b623feaf721924faefafa9ff89a74fc41"
},
{
"hash": "e3c29ec00c9c825c891d75054c63fcc46454dca1",
"channel": "stable",
"version": "3.3.2",
"dart_sdk_version": "2.18.1",
"dart_sdk_arch": "x64",
"release_date": "2022-09-14T15:12:51.830276Z",
"archive": "stable/windows/flutter_windows_3.3.2-stable.zip",
"sha256": "444a1bfcb7143370e6ed826ebab0a2ff2c73a10a5e239a821d34811e71977263"
},
{
"hash": "4f9d92fbbdf072a70a70d2179a9f87392b94104c",
"channel": "stable",
"version": "3.3.1",
"dart_sdk_version": "2.18.0",
"dart_sdk_arch": "x64",
"release_date": "2022-09-07T15:24:37.360637Z",
"archive": "stable/windows/flutter_windows_3.3.1-stable.zip",
"sha256": "207d567a30fec11153dd9f8aa305014dda6d172cea1712daa103dacea694ace7"
},
{
"hash": "ffccd96b62ee8cec7740dab303538c5fc26ac543",
"channel": "stable",
"version": "3.3.0",
"dart_sdk_version": "2.18.0",
"dart_sdk_arch": "x64",
"release_date": "2022-08-30T17:23:11.902225Z",
"archive": "stable/windows/flutter_windows_3.3.0-stable.zip",
"sha256": "ed705da07825b3d9d1dcaf566c9b0e18fd0d9c5deaab771024882534cc4ecdb3"
},
{
"hash": "096162697a9cdc79f4e47f7230d70935fa81fd24",
"channel": "beta",
"version": "3.3.0-0.5.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.7.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-23T17:03:59.164239Z",
"archive": "beta/windows/flutter_windows_3.3.0-0.5.pre-beta.zip",
"sha256": "e4d9f7ff79449ed1af361c6fe7f76277ea059b8e731aa5c209d067e49f460975"
},
{
"hash": "3c0bee85b8e43b860877922bdc411a7333db4d32",
"channel": "beta",
"version": "3.3.0-0.4.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.7.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-20T04:49:06.533728Z",
"archive": "beta/windows/flutter_windows_3.3.0-0.4.pre-beta.zip",
"sha256": "16420bd046bc06d35f7c16fa23b0a262484bf43a8077da7907b8ac80ba1bba9b"
},
{
"hash": "8c1149878bbb8f062aecfab4d825e5b87bdb4487",
"channel": "beta",
"version": "3.3.0-0.3.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-10T19:15:56.456584Z",
"archive": "beta/windows/flutter_windows_3.3.0-0.3.pre-beta.zip",
"sha256": "6a082a9e994bb55f20482c4570778b702ca2904179e9b03a400f14afe2be220b"
},
{
"hash": "7ac27ac8e6a42750c475ba8a2a3c7047b93fd949",
"channel": "beta",
"version": "3.3.0-0.2.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-08-03T01:08:04.522815Z",
"archive": "beta/windows/flutter_windows_3.3.0-0.2.pre-beta.zip",
"sha256": "50a8604cb473ee24549cc215d4185dc85fa7a11c88c08bf03418d9b175e4e4b7"
},
{
"hash": "d952ca86d64772b1b9b0df27cf9ea145e80c38e5",
"channel": "beta",
"version": "3.3.0-0.1.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.4.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-07-27T20:02:02.713990Z",
"archive": "beta/windows/flutter_windows_3.3.0-0.1.pre-beta.zip",
"sha256": "bbf926ca1ac393d837e4bb8a9a699ae5ab6c68d87c09f010fb4fb9fcaf058e0c"
},
{
"hash": "f90da9b1672f7d006ba760fbb8fd1aa17af1a82a",
"channel": "beta",
"version": "3.3.0-0.0.pre",
"dart_sdk_version": "2.18.0 (build 2.18.0-271.2.beta)",
"dart_sdk_arch": "x64",
"release_date": "2022-07-20T17:35:34.178761Z",
"archive": "beta/windows/flutter_windows_3.3.0-0.0.pre-beta.zip",
"sha256": "45a95c9e54945b97b0891a17d099052a6063001441be5a833e2b75e45f5acc74"
},
{
"hash": "f1875d570e39de09040c8f79aa13cc56baab8db1",
"channel": "stable",