Compare commits

...

49 Commits

Author SHA1 Message Date
Alif Rachmawadi
5188e41281 Merge pull request #100 from chatsen/master
Some checks failed
Main workflow / Run (ubuntu-latest) (push) Failing after 16m22s
Main workflow / Run (macos-latest) (push) Failing after 3s
Main workflow / Run (windows-latest) (push) Has been cancelled
Fix the endpoint for flutter releases
2021-06-02 10:48:10 +07:00
William Bulin
1ced41a989 Update index.js 2021-06-02 01:38:26 +02:00
William Bulin
4ac301c302 Update release.ts 2021-06-02 01:36:53 +02:00
Alif Rachmawadi
0600af6a5c Merge pull request #93 from subosito/dependabot/npm_and_yarn/hosted-git-info-2.8.9
Bump hosted-git-info from 2.7.1 to 2.8.9
2021-05-15 14:04:20 +07:00
dependabot[bot]
1c63d3b831 Bump hosted-git-info from 2.7.1 to 2.8.9
Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.7.1 to 2.8.9.
- [Release notes](https://github.com/npm/hosted-git-info/releases)
- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)
- [Commits](https://github.com/npm/hosted-git-info/compare/v2.7.1...v2.8.9)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-11 01:25:41 +00:00
Alif Rachmawadi
086f9fb649 Merge pull request #90 from kuhnroyal/feature/pub-cache
Export PUB_CACHE if it is not in env
2021-05-01 08:31:38 +07:00
Peter Leibiger
8f6ad7c383 Export PUB_CACHE if it is not in env
Export `PUB_CACHE` if it is not configured before calling the action.
This ensures that flutter and dart use the same cache.
It also enables other tools to use this official Dart env variable.
2021-04-28 20:43:14 +02:00
Alif Rachmawadi
13141e86c3 update readme
Some checks failed
Main workflow / Run (ubuntu-latest) (push) Failing after 10m31s
Main workflow / Run (macos-latest) (push) Failing after 3s
Main workflow / Run (windows-latest) (push) Has been cancelled
2021-04-26 14:56:05 +00:00
Alif Rachmawadi
41992c08db adjust windows example 2021-04-26 14:49:19 +00:00
Alif Rachmawadi
d94ad8f4a5 Merge pull request #68 from majudhu/patch-1
add example to build for windows
2021-04-26 21:47:15 +07:00
Alif Rachmawadi
7bb7a2ead1 pin prettier 2021-04-26 14:35:27 +00:00
Alif Rachmawadi
08d7837173 update dist 2021-04-26 14:31:40 +00:00
Alif Rachmawadi
cb118effe2 update dependencies 2021-04-26 14:30:05 +00:00
Alif Rachmawadi
8c0828b9c2 update readme 2021-04-26 14:24:54 +00:00
Alif Rachmawadi
30d8b6aed2 update tests 2021-04-26 14:24:40 +00:00
Alif Rachmawadi
e7b018ff3a Merge pull request #83 from subosito/dependabot/npm_and_yarn/y18n-4.0.1
Bump y18n from 4.0.0 to 4.0.1
2021-04-02 20:14:32 +07:00
dependabot[bot]
267db14c3d Bump y18n from 4.0.0 to 4.0.1
Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-30 22:16:18 +00:00
Alif Rachmawadi
123325ea84 Merge pull request #79 from jpnurmi/pub-cache-path
Add .pub-cache/bin to PATH
2021-03-07 19:03:55 +07:00
J-P Nurmi
06a5370154 Add .pub-cache/bin to PATH 2021-03-05 18:29:25 +01:00
Alif Rachmawadi
5781588262 Merge pull request #71 from subosito/dependabot/npm_and_yarn/node-notifier-8.0.1
Bump node-notifier from 8.0.0 to 8.0.1
2021-01-07 09:38:37 +07:00
dependabot[bot]
2d5af0bae8 Bump node-notifier from 8.0.0 to 8.0.1
Bumps [node-notifier](https://github.com/mikaelbr/node-notifier) from 8.0.0 to 8.0.1.
- [Release notes](https://github.com/mikaelbr/node-notifier/releases)
- [Changelog](https://github.com/mikaelbr/node-notifier/blob/v8.0.1/CHANGELOG.md)
- [Commits](https://github.com/mikaelbr/node-notifier/compare/v8.0.0...v8.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-22 08:02:28 +00:00
Alif Rachmawadi
d2a92405ab update examples 2020-12-01 15:49:09 +00:00
Alif Rachmawadi
c1329a99f0 fix test 2020-12-01 15:44:22 +00:00
Alif Rachmawadi
618ffe6e1a Merge pull request #67 from dmitry-shibanov/add-any-channel
Add any channel
2020-12-01 22:08:51 +07:00
Majudhu
1b4d6c711f add example to build for windows
add example script which will build a windows executable and also upload it to action artifacts
2020-11-25 14:07:49 +05:00
Dmitry Shibanov
2ed9c88ae0 build project 2020-11-23 16:13:25 +03:00
Dmitry Shibanov
d8b5280c4b add any channel 2020-11-23 16:11:57 +03:00
Alif Rachmawadi
8ffad233a0 Merge pull request #66 from sidrao2006/patch-1
Use FLUTTER_ROOT instead of FLUTTER_HOME
2020-11-21 05:57:49 +07:00
Aneesh Rao
2dc29df57b Use FLUTTER_ROOT instead of FLUTTER_HOME 2020-11-19 20:31:28 +05:30
Alif Rachmawadi
d141f1640a Merge pull request #64 from cclauss/patch-1
README.md: actions/checkout@v2
2020-10-20 20:03:42 +07:00
Christian Clauss
c4e0544d9c fixup! Fix typo 2020-10-20 14:50:34 +02:00
Christian Clauss
2ff7205390 README.md: actions/checkout@v2 2020-10-14 12:50:28 +02:00
Alif Rachmawadi
4a44bbb8a6 update dist 2020-10-08 04:42:13 +00:00
Alif Rachmawadi
d7578c4eec add support for master channel 2020-10-08 04:36:23 +00:00
Alif Rachmawadi
26bf50084a update test platform map
Some checks failed
Main workflow / Run (ubuntu-latest) (push) Failing after 16m21s
Main workflow / Run (macos-latest) (push) Failing after 2s
Main workflow / Run (windows-latest) (push) Has been cancelled
2020-10-08 01:36:34 +00:00
Alif Rachmawadi
45483e4c19 increase test timeout 2020-10-08 01:32:27 +00:00
Alif Rachmawadi
6f4d1ee832 use exact prettier 2020-10-08 01:26:57 +00:00
Alif Rachmawadi
58a4d54c5d update dist 2020-10-08 01:24:34 +00:00
Alif Rachmawadi
d0e7441034 update installer 2020-10-08 01:22:27 +00:00
Alif Rachmawadi
c7c0640db8 add release version check function 2020-10-08 01:22:02 +00:00
Alif Rachmawadi
1aaec8dd0f update dependencies 2020-10-08 01:20:47 +00:00
Alif Rachmawadi
ddb7b913ca update test data 2020-10-08 01:19:56 +00:00
Alif Rachmawadi
0b6cdde020 Merge pull request #60 from subosito/dependabot/npm_and_yarn/actions/core-1.2.6
Bump @actions/core from 1.2.4 to 1.2.6
2020-10-07 19:26:56 +07:00
dependabot[bot]
8078702ac6 Bump @actions/core from 1.2.4 to 1.2.6
Bumps [@actions/core](https://github.com/actions/toolkit/tree/HEAD/packages/core) from 1.2.4 to 1.2.6.
- [Release notes](https://github.com/actions/toolkit/releases)
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/core/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/core)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-01 17:17:20 +00:00
Alif Rachmawadi
282b38c3d9 Merge pull request #30 from AlessioLuciani/master
Add iOS and Android app bundle builds
2020-08-14 10:12:00 +07:00
Alif Rachmawadi
12d5ce54d2 Merge pull request #53 from subosito/dependabot/npm_and_yarn/lodash-4.17.19
Bump lodash from 4.17.15 to 4.17.19
2020-07-22 17:03:20 +07:00
dependabot[bot]
d00139d608 Bump lodash from 4.17.15 to 4.17.19
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-18 00:09:06 +00:00
Alessio Luciani
5d4e01ab3b Add build instructions for the web 2020-06-19 16:13:08 +02:00
Alessio Luciani
a81c830097 Add iOS and Android app bundle builds
Solving issue https://github.com/subosito/flutter-action/issues/7 .
2020-04-09 14:40:15 +02:00
12 changed files with 9315 additions and 6515 deletions

102
README.md
View File

@@ -6,29 +6,28 @@ This action sets up a flutter environment for use in actions. It works on Linux,
```yaml
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: '12.x'
- uses: subosito/flutter-action@v1
with:
flutter-version: '1.9.1+hotfix.6'
flutter-version: '2.0.5'
- run: flutter pub get
- run: flutter test
- run: flutter build apk
```
Use latest release for particular channel:
```yaml
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: '12.x'
- uses: subosito/flutter-action@v1
with:
channel: 'stable' # or: 'dev' or 'beta'
channel: 'stable' # or: 'beta', 'dev' or 'master'
- run: flutter pub get
- run: flutter test
- run: flutter build apk
@@ -38,17 +37,96 @@ Use latest release for particular version and/or channel:
```yaml
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: '12.x'
- uses: subosito/flutter-action@v1
with:
flutter-version: '1.12.x' # you can use 1.12
channel: 'dev' # optional, default to: 'stable'
flutter-version: '1.22.x' # or, you can use 1.22
channel: 'dev'
- run: flutter pub get
- run: flutter test
```
Use particular version on any channel:
```yaml
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: '12.x'
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.x'
channel: 'any'
- run: flutter pub get
- run: flutter test
```
Build Android APK and app bundle:
```yaml
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: '12.x'
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.5'
- run: flutter pub get
- run: flutter test
- run: flutter build apk
- run: flutter build appbundle
```
Build for iOS too (macOS only):
```yaml
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: '12.x'
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.5'
- run: flutter pub get
- run: flutter test
- run: flutter build apk
- run: flutter build ios --release --no-codesign
```
Build for the web:
```yaml
steps:
- uses: actions/checkout@v2
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.5'
- run: flutter pub get
- run: flutter test
- run: flutter build web
```
Build for Windows:
```yaml
windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: subosito/flutter-action@v1
with:
channel: beta
- run: flutter config --enable-windows-desktop
- run: flutter build windows
```
Matrix Testing:
@@ -62,18 +140,14 @@ jobs:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: '12.x'
- uses: subosito/flutter-action@v1
with:
flutter-version: '1.11.0'
flutter-version: '1.20.2'
channel: 'beta'
- run: dart --version
- run: flutter --version
- run: flutter pub get
- run: flutter test
- run: flutter build apk
```

View File

@@ -1,11 +1,755 @@
{
"base_url": "https://storage.googleapis.com/flutter_infra/releases",
"current_release": {
"beta": "e6b34c2b5c96bb95325269a29a84e83ed8909b5f",
"dev": "a849daf2836d653ef80e01f428531b3f787671cb",
"stable": "e6b34c2b5c96bb95325269a29a84e83ed8909b5f"
"beta": "0941968447ea8058e56e1479f7e53147149b739e",
"dev": "0941968447ea8058e56e1479f7e53147149b739e",
"stable": "adc687823a831bbebe28bdccfac1a628ca621513"
},
"releases": [
{
"hash": "adc687823a831bbebe28bdccfac1a628ca621513",
"channel": "stable",
"version": "2.0.5",
"release_date": "2021-04-16T18:02:26.366756Z",
"archive": "stable/linux/flutter_linux_2.0.5-stable.tar.xz",
"sha256": "326946994c839a690b98833c496f7cdc3f9c0fb6a1b6315c64fe5f1f3b8026ca"
},
{
"hash": "0941968447ea8058e56e1479f7e53147149b739e",
"channel": "beta",
"version": "2.2.0-10.1.pre",
"release_date": "2021-04-15T22:29:58.158319Z",
"archive": "beta/linux/flutter_linux_2.2.0-10.1.pre-beta.tar.xz",
"sha256": "3ac386933feee932db38a73145c7a33ff5b1b9fe9f5fc92f5ef20e95db6926b1"
},
{
"hash": "0941968447ea8058e56e1479f7e53147149b739e",
"channel": "dev",
"version": "2.2.0-10.1.pre",
"release_date": "2021-04-15T21:37:54.279500Z",
"archive": "dev/linux/flutter_linux_2.2.0-10.1.pre-dev.tar.xz",
"sha256": "dd3621a6f5041d8f088636841a3980ccc9f06affee7cf5b8c03a81997a26b6c2"
},
{
"hash": "b1395592de68cc8ac4522094ae59956dd21a91db",
"channel": "stable",
"version": "2.0.4",
"release_date": "2021-04-02T20:38:09.220024Z",
"archive": "stable/linux/flutter_linux_2.0.4-stable.tar.xz",
"sha256": "e610f1c854e73645b343152de9df9fb8c9c067d6fad5d46c9c3d71b76ef77cf0"
},
{
"hash": "4d7946a68d26794349189cf21b3f68cc6fe61dcb",
"channel": "stable",
"version": "2.0.3",
"release_date": "2021-03-19T20:19:35.184656Z",
"archive": "stable/linux/flutter_linux_2.0.3-stable.tar.xz",
"sha256": "95c5045d0739187d961d24b7315e562d6b998c6ef7665aab7f199d3b2f1b4691"
},
{
"hash": "5bedb7b1d5698ce2c1c67aaf9afae7b3948b172a",
"channel": "beta",
"version": "2.1.0-12.2.pre",
"release_date": "2021-03-18T21:12:11.804378Z",
"archive": "beta/linux/flutter_linux_2.1.0-12.2.pre-beta.tar.xz",
"sha256": "a6227aeed00fbf4631ded83e93330e7b51c8e79a3d11e0580f933d5083913ce1"
},
{
"hash": "8962f6dc68ec8e2206ac2fa874da4a453856c7d3",
"channel": "beta",
"version": "2.0.2",
"release_date": "2021-03-15T17:14:12.027228Z",
"archive": "beta/linux/flutter_linux_2.0.2-beta.tar.xz",
"sha256": "3b276ff11df0d6941c196602579dc4c37b389995d69ed5303f101188040538db"
},
{
"hash": "8264cb3e8a797eef39cbcd32bb56fd07790efb7f",
"channel": "dev",
"version": "2.1.0-12.1.pre",
"release_date": "2021-03-13T01:00:26.623032Z",
"archive": "dev/linux/flutter_linux_2.1.0-12.1.pre-dev.tar.xz",
"sha256": "18ee693ef1f7b9752d4e7add7ccf5736c133dd3cfe048c64311942f8372190f0"
},
{
"hash": "8962f6dc68ec8e2206ac2fa874da4a453856c7d3",
"channel": "stable",
"version": "2.0.2",
"release_date": "2021-03-12T20:19:12.688967Z",
"archive": "stable/linux/flutter_linux_2.0.2-stable.tar.xz",
"sha256": "27aae1df9bd64debe5b1c0ed81a90e0ec7a7dad11a24def76c7c7ba99fa04d5f"
},
{
"hash": "c5a4b4029c0798f37c4a39b479d7cb75daa7b05c",
"channel": "beta",
"version": "2.0.1",
"release_date": "2021-03-04T21:11:12.627929Z",
"archive": "beta/linux/flutter_linux_2.0.1-beta.tar.xz",
"sha256": "fc8717eb3247f3563dd1823e175f4f3d5a5e43abc0df5f0ebac7f418f4f01793"
},
{
"hash": "c5a4b4029c0798f37c4a39b479d7cb75daa7b05c",
"channel": "stable",
"version": "2.0.1",
"release_date": "2021-03-04T19:56:07.512496Z",
"archive": "stable/linux/flutter_linux_2.0.1-stable.tar.xz",
"sha256": "7938e7c78cd277fcf2f01291cd590b9d5adb0c4342763044c9d9678901829241"
},
{
"hash": "cc9b78fc5c4a4d2d51316d9626523336230a89a9",
"channel": "dev",
"version": "2.1.0-10.0.pre",
"release_date": "2021-03-03T19:18:13.528065Z",
"archive": "dev/linux/flutter_linux_2.1.0-10.0.pre-dev.tar.xz",
"sha256": "f4200d48528a7578dd6cdeb084720072658105c73f83bbfba114cd8e3eedc913"
},
{
"hash": "60bd88df915880d23877bfc1602e8ddcf4c4dd2a",
"channel": "beta",
"version": "2.0.0",
"release_date": "2021-03-03T18:57:03.408707Z",
"archive": "beta/linux/flutter_linux_2.0.0-beta.tar.xz",
"sha256": "958e94708d95b6aea8ef0ea51ed599d2f02d71c4bdf04af0573234e822abac1e"
},
{
"hash": "60bd88df915880d23877bfc1602e8ddcf4c4dd2a",
"channel": "stable",
"version": "2.0.0",
"release_date": "2021-03-03T17:53:06.760622Z",
"archive": "stable/linux/flutter_linux_2.0.0-stable.tar.xz",
"sha256": "15bcbf57c0d82037ea2e7838d154fc9883ee1abdb9633aa3e7370d0614c8613c"
},
{
"hash": "044f2cf5607a26f8818dab0f766400e85c52bdff",
"channel": "beta",
"version": "1.26.0-17.8.pre",
"release_date": "2021-02-25T17:56:48.055907Z",
"archive": "beta/linux/flutter_linux_1.26.0-17.8.pre-beta.tar.xz",
"sha256": "e760ee8824ebef8d387fcc084bd0066d04734189d938d528254ed4732d33cb80"
},
{
"hash": "b7d4806243a4e906bf061f79a0e314ba28111aa6",
"channel": "dev",
"version": "1.27.0-8.0.pre",
"release_date": "2021-02-24T23:10:35.566285Z",
"archive": "dev/linux/flutter_linux_1.27.0-8.0.pre-dev.tar.xz",
"sha256": "bf9b64fef7ce74342222acf76f24e44160fdcaf94075f7aa65605967d5913ba8"
},
{
"hash": "68e7d2e301e1969275cd11947e900b6b80405052",
"channel": "beta",
"version": "1.26.0-17.7.pre",
"release_date": "2021-02-24T18:23:36.226263Z",
"archive": "beta/linux/flutter_linux_1.26.0-17.7.pre-beta.tar.xz",
"sha256": "4693594ee2a97012a5ab1606b10e9ae35ca3a311b479709f2af0ef3c6e5fde14"
},
{
"hash": "f8cd24de95b16b5a1ce6ebc0716154271fbf6252",
"channel": "dev",
"version": "1.27.0-4.0.pre",
"release_date": "2021-02-17T23:07:28.519514Z",
"archive": "dev/linux/flutter_linux_1.27.0-4.0.pre-dev.tar.xz",
"sha256": "9db8fe7797a01cb7e85fdb0929cb0f80a0f3f08a2f2a7012ac7e194d9a3f6b81"
},
{
"hash": "a29104a69b102a7485cd00d358eaeab219d258ab",
"channel": "beta",
"version": "1.26.0-17.6.pre",
"release_date": "2021-02-16T19:18:08.750365Z",
"archive": "beta/linux/flutter_linux_1.26.0-17.6.pre-beta.tar.xz",
"sha256": "1c37e7d8edf9439f555facb698b6b737e9f2b39b8efa2b039dc7cf363efb5240"
},
{
"hash": "1fe38dcb5fc58242c6e0904a318bcc3ed5a4d837",
"channel": "beta",
"version": "1.26.0-17.5.pre",
"release_date": "2021-02-11T17:51:36.185276Z",
"archive": "beta/linux/flutter_linux_1.26.0-17.5.pre-beta.tar.xz",
"sha256": "e46b0c16f9200a1d63ef3bc9ed57bd9e93defd5a62f9103a4f8ce831cd851aa8"
},
{
"hash": "68c96f100e42ab3dbf43e61e9e2fc875a2d50cb8",
"channel": "dev",
"version": "1.27.0-1.0.pre",
"release_date": "2021-02-10T23:56:25.228514Z",
"archive": "dev/linux/flutter_linux_1.27.0-1.0.pre-dev.tar.xz",
"sha256": "89b3c8d30ce11f0c1ee2d5c2467885ee2c8519227a0fee3ad8ff77def33147e1"
},
{
"hash": "48c9d3e0e19e8fec84f1d316ce0559f26ca7277d",
"channel": "beta",
"version": "1.26.0-17.4.pre",
"release_date": "2021-02-10T21:37:42.846047Z",
"archive": "beta/linux/flutter_linux_1.26.0-17.4.pre-beta.tar.xz",
"sha256": "7b9e8ed59422d8d7e45a665385e3db85aad2fc84ebcf127cac320938379474f7"
},
{
"hash": "4b50ca7f7fbf56be72e54cd200825b760416a356",
"channel": "beta",
"version": "1.26.0-17.3.pre",
"release_date": "2021-02-05T06:36:19.027982Z",
"archive": "beta/linux/flutter_linux_1.26.0-17.3.pre-beta.tar.xz",
"sha256": "83845c65d164659a39a9e6ec6bd0c40075c6d8e6dec2ca8ac29886cb0e867fd5"
},
{
"hash": "79b49b9e1057f90ebf797725233c6b311722de69",
"channel": "beta",
"version": "1.26.0-17.2.pre",
"release_date": "2021-02-04T19:52:38.978585Z",
"archive": "beta/linux/flutter_linux_1.26.0-17.2.pre-beta.tar.xz",
"sha256": "787c1564fbed5548ff049da133ca83beb282dbe1882d88d294ebf729e267267b"
},
{
"hash": "79b49b9e1057f90ebf797725233c6b311722de69",
"channel": "dev",
"version": "1.26.0-17.2.pre",
"release_date": "2021-02-04T19:19:59.441299Z",
"archive": "dev/linux/flutter_linux_1.26.0-17.2.pre-dev.tar.xz",
"sha256": "32ab218a701f809af722ba1e30f9196832515da9284f4703e227b0b0ce6e3df0"
},
{
"hash": "c40e5294dda34d04cd222dfdf765f171e12e4a8d",
"channel": "dev",
"version": "1.26.0-17.1.pre",
"release_date": "2021-01-29T18:20:51.623493Z",
"archive": "dev/linux/flutter_linux_1.26.0-17.1.pre-dev.tar.xz",
"sha256": "55f955a5fabbf73ce08179ccd8206a3940ebdd31993110a167517ffa78b7ce39"
},
{
"hash": "9b2d32b605630f28625709ebd9d78ab3016b2bf6",
"channel": "stable",
"version": "1.22.6",
"release_date": "2021-01-25T19:47:03.570647Z",
"archive": "stable/linux/flutter_linux_1.22.6-stable.tar.xz",
"sha256": "282fc4b9c59a4e98c5e76a934ca804ea868f45b05c6255c85ee1065955dd7fa5"
},
{
"hash": "a706cd211240f27be3b61f06d70f958c7a4156fe",
"channel": "dev",
"version": "1.26.0-12.0.pre",
"release_date": "2021-01-21T18:36:56.763964Z",
"archive": "dev/linux/flutter_linux_1.26.0-12.0.pre-dev.tar.xz",
"sha256": "fa2ba98775f65c9bd151881696b9d2d5672bb260ed24d83184010a0d436e140a"
},
{
"hash": "5d36f2e7f5387b6c751449258ade8e4e6edf99be",
"channel": "beta",
"version": "1.25.0-8.3.pre",
"release_date": "2021-01-15T19:54:29.877720Z",
"archive": "beta/linux/flutter_linux_1.25.0-8.3.pre-beta.tar.xz",
"sha256": "83d744e8f7861e89fe6317d9e634c0a0db06e52a50bd1c129c4254e7e6e7d25c"
},
{
"hash": "b9d06fffb2db263ab7021fc39adde7f2bf988a4a",
"channel": "dev",
"version": "1.26.0-8.0.pre",
"release_date": "2021-01-13T17:25:01.089187Z",
"archive": "dev/linux/flutter_linux_1.26.0-8.0.pre-dev.tar.xz",
"sha256": "a0d8fa959455d21988d47ff6cfbef10329bd3c48e78b55ab817933d8382d3042"
},
{
"hash": "b0a22998593fc605c723dee8ff4d9315c32cfe2c",
"channel": "beta",
"version": "1.25.0-8.2.pre",
"release_date": "2021-01-06T00:07:32.178315Z",
"archive": "beta/linux/flutter_linux_1.25.0-8.2.pre-beta.tar.xz",
"sha256": "62a77e1a6fb7a0693558a6a647d79c5d9f4a39889272d7470f534b67230a4a7d"
},
{
"hash": "63062a64432cce03315d6b5196fda7912866eb37",
"channel": "dev",
"version": "1.26.0-1.0.pre",
"release_date": "2020-12-16T22:07:55.041449Z",
"archive": "dev/linux/flutter_linux_1.26.0-1.0.pre-dev.tar.xz",
"sha256": "5cd505511856a3020f91af5e866d1fe664b1a70bddb92213b5de0b15a6e91edb"
},
{
"hash": "8f89f6505b941329a864fef1527243a72800bf4d",
"channel": "beta",
"version": "1.25.0-8.1.pre",
"release_date": "2020-12-16T21:55:19.340490Z",
"archive": "beta/linux/flutter_linux_1.25.0-8.1.pre-beta.tar.xz",
"sha256": "8db28a4ec4dbd0e06c2c29e52560c8d9c7b0de8a94102c33764ec137ecd12e07"
},
{
"hash": "78910062997c3a836feee883712c241a5fd22983",
"channel": "stable",
"version": "1.22.5",
"release_date": "2020-12-10T22:57:36.709896Z",
"archive": "stable/linux/flutter_linux_1.22.5-stable.tar.xz",
"sha256": "4a9624921f1130126c67411443ae1aaa5b1913bbd52adafb71d726c93e9b65b7"
},
{
"hash": "a12e2a473a3214b4556ca589d2d9bd311ac7c6f1",
"channel": "dev",
"version": "1.25.0-8.0.pre",
"release_date": "2020-12-10T19:30:31.030402Z",
"archive": "dev/linux/flutter_linux_1.25.0-8.0.pre-dev.tar.xz",
"sha256": "6edfa02e6b10b7b2c5aa97ad4ea433c1a7997e258e770fca2ff4a8a973cc4f5f"
},
{
"hash": "a7f5fd5360007518644597c60a1f2169eacccc2b",
"channel": "dev",
"version": "1.25.0-4.0.pre",
"release_date": "2020-12-02T17:01:50.738702Z",
"archive": "dev/linux/flutter_linux_1.25.0-4.0.pre-dev.tar.xz",
"sha256": "68d83f75d87db58adbfe5f2b286bf916a848e524c09438a6b7c4f466fccacdbd"
},
{
"hash": "022b333a089afb81c471ec43d1f1f4f26305d876",
"channel": "beta",
"version": "1.24.0-10.2.pre",
"release_date": "2020-11-19T15:26:06.042451Z",
"archive": "beta/linux/flutter_linux_1.24.0-10.2.pre-beta.tar.xz",
"sha256": "2fa095f18a0b805f871b405054d867e105bad34604ccbf810d22a54f5e3e07f2"
},
{
"hash": "022b333a089afb81c471ec43d1f1f4f26305d876",
"channel": "dev",
"version": "1.24.0-10.2.pre",
"release_date": "2020-11-18T22:26:37.493313Z",
"archive": "dev/linux/flutter_linux_1.24.0-10.2.pre-dev.tar.xz",
"sha256": "475c09a32239159f0e180024cd49cf1871c01c8b55e86d7e019c56567cae07c4"
},
{
"hash": "405c85fe7ee688156028e87a623c9153d05591b2",
"channel": "dev",
"version": "1.24.0-10.1.pre",
"release_date": "2020-11-16T20:57:04.768750Z",
"archive": "dev/linux/flutter_linux_1.24.0-10.1.pre-dev.tar.xz",
"sha256": "120f75c2ab43a2148763d15a368e719b2e6a8fcd731b8af35f4605c2571b9639"
},
{
"hash": "1aafb3a8b9b0c36241c5f5b34ee914770f015818",
"channel": "stable",
"version": "1.22.4",
"release_date": "2020-11-13T20:11:42.086473Z",
"archive": "stable/linux/flutter_linux_1.22.4-stable.tar.xz",
"sha256": "fc23a4747a54d343147c75ee3b4ab2458ce15a4b743b8a246b0de796b67a5461"
},
{
"hash": "a0860f6e87ba4f9031bee4d6f56c08b970606bee",
"channel": "dev",
"version": "1.24.0-7.0.pre",
"release_date": "2020-11-05T00:26:10.692106Z",
"archive": "dev/linux/flutter_linux_1.24.0-7.0.pre-dev.tar.xz",
"sha256": "d51f17b24c6d991b218b91a5de0c0b871df2830bd5dc2cfaf9559716dcf1648a"
},
{
"hash": "13896b3bd1858687a06b1639d60c877206170df8",
"channel": "dev",
"version": "1.24.0-6.0.pre",
"release_date": "2020-10-30T19:32:26.946345Z",
"archive": "dev/linux/flutter_linux_1.24.0-6.0.pre-dev.tar.xz",
"sha256": "c3766707587a88a790a07f60ffccbc76b9c9e91aa17b284de65325931be756eb"
},
{
"hash": "8874f21e79d7ec66d0457c7ab338348e31b17f1d",
"channel": "stable",
"version": "1.22.3",
"release_date": "2020-10-30T16:35:53.176150Z",
"archive": "stable/linux/flutter_linux_1.22.3-stable.tar.xz",
"sha256": "8a680edf02542f5e50adafd417297be5fe106d6df817354cd811c7ea8c7529e3"
},
{
"hash": "2783f8e2e14efec8b7e08f668dde61c40d128c24",
"channel": "dev",
"version": "1.24.0-3.0.pre",
"release_date": "2020-10-22T21:19:29.265296Z",
"archive": "dev/linux/flutter_linux_1.24.0-3.0.pre-dev.tar.xz",
"sha256": "7229a7fbae418aa69abcc550629bee6d48ef9a84ba8f8959a1d5af4b03461c97"
},
{
"hash": "12bea61c2902784fec73b7f5f2ff3415f873fead",
"channel": "dev",
"version": "1.24.0-1.0.pre",
"release_date": "2020-10-20T02:45:48.918341Z",
"archive": "dev/linux/flutter_linux_1.24.0-1.0.pre-dev.tar.xz",
"sha256": "2ef371562cc54720ea0abae68c99663747d8175d78eaf4dd4597ebf01922c52d"
},
{
"hash": "84f3d28555368a70270e9ac8390a9441df95e752",
"channel": "stable",
"version": "1.22.2",
"release_date": "2020-10-16T18:22:30.509912Z",
"archive": "stable/linux/flutter_linux_1.22.2-stable.tar.xz",
"sha256": "21d42ce985a34584e7796171ed3c4eb63fb76596f72476bb7c6ae850c4423761"
},
{
"hash": "198df796aa80073ef22bdf249e614e2ff33c6895",
"channel": "beta",
"version": "1.23.0-18.1.pre",
"release_date": "2020-10-15T23:29:05.996433Z",
"archive": "beta/linux/flutter_linux_1.23.0-18.1.pre-beta.tar.xz",
"sha256": "c8e3dba770228c28d3be4b8075d18a292dfcdda0a4c15a4229096facfe776984"
},
{
"hash": "37ebe3d82a9d5faeda7d3c1a6ad193030210a2cc",
"channel": "dev",
"version": "1.23.0-18.0.pre",
"release_date": "2020-10-14T00:38:49.787667Z",
"archive": "dev/linux/flutter_linux_1.23.0-18.0.pre-dev.tar.xz",
"sha256": "d99050bbb809da654a8bd57bc5f2def406c73c381d5d45556eb22d385de6733d"
},
{
"hash": "4fa4f91d5cc65a5a98c7ccd91bb7d47814048a57",
"channel": "dev",
"version": "1.23.0-13.0.pre",
"release_date": "2020-10-12T18:10:16.613698Z",
"archive": "dev/linux/flutter_linux_1.23.0-13.0.pre-dev.tar.xz",
"sha256": "f03300e74a131582673b87233c9e57208586f88458c79eddf63b97906057fae6"
},
{
"hash": "f30b7f4db93ee747cd727df747941a28ead25ff5",
"channel": "stable",
"version": "1.22.1",
"release_date": "2020-10-08T22:00:09.613324Z",
"archive": "stable/linux/flutter_linux_1.22.1-stable.tar.xz",
"sha256": "f04ce668df540433e04935f6d5a94ad74e5da08d25ad759abaa8879c572da650"
},
{
"hash": "f30b7f4db93ee747cd727df747941a28ead25ff5",
"channel": "beta",
"version": "1.22.0-12.4.pre",
"release_date": "2020-10-08T21:41:58.867531Z",
"archive": "beta/linux/flutter_linux_1.22.0-12.4.pre-beta.tar.xz",
"sha256": "684e8ad07e7f87dacdfe9db5f9b5b77bb12b09fb6e7f004890fd2a643d062415"
},
{
"hash": "db6e2d8aa5bb9a0bd3e75fc7470268b5a56fd0b0",
"channel": "dev",
"version": "1.23.0-7.0.pre",
"release_date": "2020-10-01T23:27:31.491417Z",
"archive": "dev/linux/flutter_linux_1.23.0-7.0.pre-dev.tar.xz",
"sha256": "454ade7c3d24d58f5118bf8eebc6ff1b5635f306ec481f0e5ba180bd3059d898"
},
{
"hash": "d408d302e22179d598f467e11da5dd968dbdc9ec",
"channel": "stable",
"version": "1.22.0",
"release_date": "2020-10-01T14:34:00.881067Z",
"archive": "stable/linux/flutter_linux_1.22.0-stable.tar.xz",
"sha256": "a8ee7458c3b1c3cfff2e1307d89721f48aa6b684d9b1ab2bf419698d0ae9d967"
},
{
"hash": "d408d302e22179d598f467e11da5dd968dbdc9ec",
"channel": "beta",
"version": "1.22.0-12.3.pre",
"release_date": "2020-09-29T20:24:32.881819Z",
"archive": "beta/linux/flutter_linux_1.22.0-12.3.pre-beta.tar.xz",
"sha256": "f0d39b401e623581425070c9ca93323236134571721d9880ba8f927f46f8bfab"
},
{
"hash": "2bafdc822636426fa09afb43236400a60ea432b2",
"channel": "beta",
"version": "1.22.0-12.2.pre",
"release_date": "2020-09-28T16:48:05.583300Z",
"archive": "beta/linux/flutter_linux_1.22.0-12.2.pre-beta.tar.xz",
"sha256": "c3c7e66f48e1a3b63400adbcb272487a01a496552c69d7d080b0fd0978ae5594"
},
{
"hash": "83dd176777cd04bd2aaca050f6bb6cb9edbf56a1",
"channel": "dev",
"version": "1.23.0-4.0.pre",
"release_date": "2020-09-22T21:17:39.925058Z",
"archive": "dev/linux/flutter_linux_1.23.0-4.0.pre-dev.tar.xz",
"sha256": "43a77efd0b74c611185711c7bf5413998a93e036d6dc3c186ac37b95a8304c94"
},
{
"hash": "8b3760638a189741cd9ca881aa2dd237c1df1be5",
"channel": "beta",
"version": "1.22.0-12.1.pre",
"release_date": "2020-09-16T17:16:40.811444Z",
"archive": "beta/linux/flutter_linux_1.22.0-12.1.pre-beta.tar.xz",
"sha256": "6301b83fe963becd5d47cff6fc9e33d9412569e5c2d08b3b88952d38652da897"
},
{
"hash": "fba99f6cf9a14512e461e3122c8ddfaa25394e89",
"channel": "stable",
"version": "1.20.4",
"release_date": "2020-09-15T17:49:01.042713Z",
"archive": "stable/linux/flutter_linux_1.20.4-stable.tar.xz",
"sha256": "70d479d7cffe31c23ff70f798a3414405441397743ab83626f018c4869bd54a3"
},
{
"hash": "a27c242b0eea731317cfec5bbdd9d35452ab3ecb",
"channel": "dev",
"version": "1.22.0-12.0.pre",
"release_date": "2020-09-14T21:53:13.773392Z",
"archive": "dev/linux/flutter_linux_1.22.0-12.0.pre-dev.tar.xz",
"sha256": "088465e692ed42e55f992e4a6082f3ec4c2177c791bd11a3a2017b61109dc52c"
},
{
"hash": "216dee60c0cc9449f0b29bcf922974d612263e24",
"channel": "stable",
"version": "1.20.3",
"release_date": "2020-09-02T18:06:30.513925Z",
"archive": "stable/linux/flutter_linux_1.20.3-stable.tar.xz",
"sha256": "66077a6f0d4baa58edcbc51d0418ad6781dc3ae22b88ce160b7b4556765b293f"
},
{
"hash": "7a4317519865146acda84702bba8775610598c0c",
"channel": "dev",
"version": "1.22.0-9.0.pre",
"release_date": "2020-09-01T19:39:00.885280Z",
"archive": "dev/linux/flutter_linux_1.22.0-9.0.pre-dev.tar.xz",
"sha256": "056c9907c7f82ec050502931f90f957b67d1dc960f71eacf8135aa4cb252d1a5"
},
{
"hash": "81a45ec2e5f80fa71d5135f1702ce540558b416d",
"channel": "beta",
"version": "1.21.0-9.2.pre",
"release_date": "2020-08-28T18:39:17.092143Z",
"archive": "beta/linux/flutter_linux_1.21.0-9.2.pre-beta.tar.xz",
"sha256": "9f88e71562044b291f67a294c0d7c236a6dc6e7ad14065608c73aa9e3896d768"
},
{
"hash": "ce40de69b7b4f89c66d19c8dbd3bd86ae30f1bc6",
"channel": "dev",
"version": "1.22.0-1.0.pre",
"release_date": "2020-08-21T22:07:11.688251Z",
"archive": "dev/linux/flutter_linux_1.22.0-1.0.pre-dev.tar.xz",
"sha256": "6ddc48c9bb78cbf564b8423f90167398b3f8b62c4fe010183b2e2ab1a2e3ee40"
},
{
"hash": "be9bc8cb3942bda5d8ef4e44b44616c470625e18",
"channel": "beta",
"version": "1.21.0-9.1.pre",
"release_date": "2020-08-19T18:43:17.164133Z",
"archive": "beta/linux/flutter_linux_1.21.0-9.1.pre-beta.tar.xz",
"sha256": "225c932068858d8933116ee1dcfb0de12e1c9ea961335b1a295d85607102edad"
},
{
"hash": "bbfbf1770cca2da7c82e887e4e4af910034800b6",
"channel": "beta",
"version": "1.20.2",
"release_date": "2020-08-14T21:07:28.246902Z",
"archive": "beta/linux/flutter_linux_1.20.2-beta.tar.xz",
"sha256": "e569b55862d8224616a0528fe746b3724e3b36ffb44717d20bc7f4f7f558bcd9"
},
{
"hash": "bbfbf1770cca2da7c82e887e4e4af910034800b6",
"channel": "stable",
"version": "1.20.2",
"release_date": "2020-08-13T21:49:57.376494Z",
"archive": "stable/linux/flutter_linux_1.20.2-stable.tar.xz",
"sha256": "d977ad356184e17565657ae9a0a0977fbb93047638af4e4320290c20c4b8418a"
},
{
"hash": "7c6f9dd2396dfe7deb6fd11edc12c10786490083",
"channel": "dev",
"version": "1.21.0-9.0.pre",
"release_date": "2020-08-13T17:31:36.085672Z",
"archive": "dev/linux/flutter_linux_1.21.0-9.0.pre-dev.tar.xz",
"sha256": "7fef663b3edb950667be75897bd35df544baadb0ad056930f80b79cb0eae1cc7"
},
{
"hash": "5a6dfa35caaf7bccb35488dc03677c150ebf2d97",
"channel": "dev",
"version": "1.21.0-7.0.pre",
"release_date": "2020-08-07T16:47:56.936647Z",
"archive": "dev/linux/flutter_linux_1.21.0-7.0.pre-dev.tar.xz",
"sha256": "e56e794c8e1c0340445be64655577b143efccb3ea06630fa494a82e35ca92f37"
},
{
"hash": "2ae34518b87dd891355ed6c6ea8cb68c4d52bb9d",
"channel": "stable",
"version": "1.20.1",
"release_date": "2020-08-06T17:51:18.839916Z",
"archive": "stable/linux/flutter_linux_1.20.1-stable.tar.xz",
"sha256": "a2b3bf4ffe51f702cb4e161088b197da4b11748e3807dd9c572169139888f536"
},
{
"hash": "840c9205b344a59e48a5926ee2d791cc5640924c",
"channel": "stable",
"version": "1.20.0",
"release_date": "2020-08-05T14:29:36.789739Z",
"archive": "stable/linux/flutter_linux_1.20.0-stable.tar.xz",
"sha256": "65e78629b4fe65762a3b827ab12a486a7afacf2d118d92443c2583915ba718a6"
},
{
"hash": "916c3ac648aa0498a70f32b5fc4f6c51447628e3",
"channel": "beta",
"version": "1.20.0-7.4.pre",
"release_date": "2020-08-03T21:49:15.216860Z",
"archive": "beta/linux/flutter_linux_1.20.0-7.4.pre-beta.tar.xz",
"sha256": "1258758ccb5326340ae6d0b91cc4ea86211c92e0ef03e8110c0a51465e04405e"
},
{
"hash": "e606910f28be51c8151f6169072afe3b3a8b3c5e",
"channel": "beta",
"version": "1.20.0-7.3.pre",
"release_date": "2020-07-29T03:34:51.537375Z",
"archive": "beta/linux/flutter_linux_1.20.0-7.3.pre-beta.tar.xz",
"sha256": "c57f1ad60c29f90250df17b98158d22ee84f75f4fc0fc5d9f751a9840f055eb0"
},
{
"hash": "a2bde82fbd52e09057a4146f46889f4e10342d32",
"channel": "beta",
"version": "1.20.0-7.2.pre",
"release_date": "2020-07-21T16:18:22.967962Z",
"archive": "beta/linux/flutter_linux_1.20.0-7.2.pre-beta.tar.xz",
"sha256": "cee8248fabb80c15bc4e79434fdbffeb44cbf7261901574b525793b8cb8b0971"
},
{
"hash": "f25bd9c55c48c139524139b477d04b13e9f36b2c",
"channel": "dev",
"version": "1.21.0-1.0.pre",
"release_date": "2020-07-17T03:24:03.608448Z",
"archive": "dev/linux/flutter_linux_1.21.0-1.0.pre-dev.tar.xz",
"sha256": "19012134087802515e5fff5e8760b385105cf2b47ff178a21a73477365423d93"
},
{
"hash": "7736f3bc90270dcb0480db2ccffbf1d13c28db85",
"channel": "dev",
"version": "1.20.0-7.1.pre",
"release_date": "2020-07-11T04:18:51.678227Z",
"archive": "dev/linux/flutter_linux_1.20.0-7.1.pre-dev.tar.xz",
"sha256": "6d9a915be565092fc5cb72d4e12e700c554e2813b38bb0b875c6bac95f1f28ea"
},
{
"hash": "cc1af3afb62187cc37185afddc2d43bfef469db7",
"channel": "dev",
"version": "1.20.0-7.0.pre",
"release_date": "2020-07-09T19:21:38.263441Z",
"archive": "dev/linux/flutter_linux_1.20.0-7.0.pre-dev.tar.xz",
"sha256": "5793bace0979c1ca08568fe5565304bbc87a8cd10c5320f77228eb08eea0e22d"
},
{
"hash": "0af027f80543302c65f99e1c1a2f3b3cbb8d04f3",
"channel": "dev",
"version": "1.20.0-3.0.pre",
"release_date": "2020-07-05T04:53:44.915768Z",
"archive": "dev/linux/flutter_linux_1.20.0-3.0.pre-dev.tar.xz",
"sha256": "a0b0771b9edd1a853a543aa8fdb4bbf525f8db3df5f4ef0ea0c3a0855eed255e"
},
{
"hash": "8fe7655ed20ffd1395f68e30539a847a01a30351",
"channel": "beta",
"version": "1.19.0-4.3.pre",
"release_date": "2020-07-01T23:46:59.532838Z",
"archive": "beta/linux/flutter_linux_1.19.0-4.3.pre-beta.tar.xz",
"sha256": "f70cf7a569d49fd4d159b3d4c449afd40356e08f49606c71326f14efd8de93c2"
},
{
"hash": "9b9b543d9265484132c798adaab6caca52055b08",
"channel": "beta",
"version": "1.19.0-4.2.pre",
"release_date": "2020-07-01T23:27:53.160554Z",
"archive": "beta/linux/flutter_linux_1.19.0-4.2.pre-beta.tar.xz",
"sha256": "7b76c0cb7153ec6ca4ab4cc45bf26742a89f368de3740ad1eb8b82b072e087b9"
},
{
"hash": "15a28159bcf4b3db13411cbc8d9b5fc51adc0a93",
"channel": "dev",
"version": "1.20.0-2.0.pre",
"release_date": "2020-07-01T23:26:51.051094Z",
"archive": "dev/linux/flutter_linux_1.20.0-2.0.pre-dev.tar.xz",
"sha256": "4cb56feb24805b4f91164c287a168d8cf92dc6d935d1b96bee72403f34b7973b"
},
{
"hash": "8af6b2f038c1172e61d418869363a28dffec3cb4",
"channel": "stable",
"version": "1.17.5",
"release_date": "2020-07-01T23:24:33.419295Z",
"archive": "stable/linux/flutter_linux_1.17.5-stable.tar.xz",
"sha256": "b1a5d01b441a92221d081f92adffb532cb081f17e05a619784ae1d688792574d"
},
{
"hash": "1ad9baa8b99a2897c20f9e6e54d3b9b359ade314",
"channel": "stable",
"version": "1.17.4",
"release_date": "2020-06-18T16:04:42.724586Z",
"archive": "stable/linux/flutter_linux_1.17.4-stable.tar.xz",
"sha256": "74dd0e3f3f63b8b25023eeec3460e456ee89a974ff99af4db93085e3cdcc28e3"
},
{
"hash": "d9653445f4d1257b5f5adb4b271d1316469e8cf1",
"channel": "dev",
"version": "1.20.0-0.0.pre",
"release_date": "2020-06-11T15:33:43.923597Z",
"archive": "dev/linux/flutter_linux_1.20.0-0.0.pre-dev.tar.xz",
"sha256": "ab045973c3d9bf405b90ffa144ddb67288eb9f9e0d5406c38dcc599eb8de5abe"
},
{
"hash": "f994b769743368b36b9c03fb359f62230b60ab92",
"channel": "beta",
"version": "1.19.0-4.1.pre",
"release_date": "2020-06-10T22:07:46.350990Z",
"archive": "beta/linux/flutter_linux_1.19.0-4.1.pre-beta.tar.xz",
"sha256": "626450b87c11ece65b52e817c5df1016add6ec0c6665e35b3a8d9f2e79be4a00"
},
{
"hash": "c264b70ec3b0cf9cd568eba5d65d0ce47fe57e1d",
"channel": "dev",
"version": "1.19.0-5.0.pre",
"release_date": "2020-06-09T23:56:14.424965Z",
"archive": "dev/linux/flutter_linux_1.19.0-5.0.pre-dev.tar.xz",
"sha256": "69e2ac80a8ce18adf2b280efd63cf5445b2d3060a5bd2c7c7bc75954fc22604e"
},
{
"hash": "2f7a59a8da20b3a7fbdfb7ac783dbca977a81653",
"channel": "dev",
"version": "1.19.0-4.0.pre",
"release_date": "2020-06-05T16:39:36.057354Z",
"archive": "dev/linux/flutter_linux_1.19.0-4.0.pre-dev.tar.xz",
"sha256": "b0f8d5d76daa63624b2715495daecef3628b156e4c93412de2653b649eaf4c96"
},
{
"hash": "b041144f833e05cf463b8887fa12efdec9493488",
"channel": "stable",
"version": "1.17.3",
"release_date": "2020-06-04T17:15:43.744344Z",
"archive": "stable/linux/flutter_linux_1.17.3-stable.tar.xz",
"sha256": "3fa0d658d651a16ccfb4be1c4f609bab1b93abfd5e13627772b803a8e0b5d59b"
},
{
"hash": "6135091de9f8f6befc2ec7f8835d28d43a21cd05",
"channel": "dev",
"version": "1.19.0-3.0.pre",
"release_date": "2020-06-02T20:25:12.215535Z",
"archive": "dev/linux/flutter_linux_1.19.0-3.0.pre-dev.tar.xz",
"sha256": "d2eac8112604c535a7a631f477b2743f3d67f3a4a1cd4c07de597b559479afb2"
},
{
"hash": "1d395c5e187370f2838bb043d3b438029b484bfc",
"channel": "dev",
"version": "1.19.0-2.0.pre",
"release_date": "2020-06-01T17:41:58.968805Z",
"archive": "dev/linux/flutter_linux_1.19.0-2.0.pre-dev.tar.xz",
"sha256": "0cca4b2b968ec0d568c5799b8e31cbda2a932962a85bcf408d82a0de075d2dcd"
},
{
"hash": "5f21edf8b66e31a39133177319414395cc5b5f48",
"channel": "stable",
"version": "1.17.2",
"release_date": "2020-05-28T21:45:26.846070Z",
"archive": "stable/linux/flutter_linux_1.17.2-stable.tar.xz",
"sha256": "c74e72a190766a1ecd5b8922bcbb66d0e698e7bcb66533c645659d1e66cd52bc"
},
{
"hash": "2738a1148ba6c9a6114df62358109407c3ef2553",
"channel": "beta",
"version": "1.18.0-11.1.pre",
"release_date": "2020-05-14T17:55:40.355488Z",
"archive": "beta/linux/flutter_linux_1.18.0-11.1.pre-beta.tar.xz",
"sha256": "ec4535ec5bdb0f3d7549a81a31a8975febe998efafae44806cdb37173513cc55"
},
{
"hash": "f7a6a7906be96d2288f5d63a5a54c515a6e987fe",
"channel": "stable",
"version": "1.17.1",
"release_date": "2020-05-13T18:12:10.369553Z",
"archive": "stable/linux/flutter_linux_1.17.1-stable.tar.xz",
"sha256": "ae40bc83504c147229b34755892e8df36678e312f66117904deaff2c8faf4a21"
},
{
"hash": "456d80b9ddd74b4b5ca3b77bbfb70ab0e05d3fa8",
"channel": "dev",
"version": "1.19.0-1.0.pre",
"release_date": "2020-05-12T22:42:16.142124Z",
"archive": "dev/linux/flutter_linux_1.19.0-1.0.pre-dev.tar.xz",
"sha256": "11c832731aa9ec783d5ed8ea0f14eb9f820cdf6e2850ea6367b034c15216b126"
},
{
"hash": "a849daf2836d653ef80e01f428531b3f787671cb",
"channel": "dev",

View File

@@ -1,11 +1,755 @@
{
"base_url": "https://storage.googleapis.com/flutter_infra/releases",
"current_release": {
"beta": "e6b34c2b5c96bb95325269a29a84e83ed8909b5f",
"dev": "a849daf2836d653ef80e01f428531b3f787671cb",
"stable": "e6b34c2b5c96bb95325269a29a84e83ed8909b5f"
"beta": "0941968447ea8058e56e1479f7e53147149b739e",
"dev": "0941968447ea8058e56e1479f7e53147149b739e",
"stable": "adc687823a831bbebe28bdccfac1a628ca621513"
},
"releases": [
{
"hash": "adc687823a831bbebe28bdccfac1a628ca621513",
"channel": "stable",
"version": "2.0.5",
"release_date": "2021-04-16T17:55:24.241189Z",
"archive": "stable/macos/flutter_macos_2.0.5-stable.zip",
"sha256": "98cdbab108586c359984c5a5e42f48d9244a3ecb56989111e16f999eae2ae95b"
},
{
"hash": "0941968447ea8058e56e1479f7e53147149b739e",
"channel": "beta",
"version": "2.2.0-10.1.pre",
"release_date": "2021-04-15T22:16:52.425295Z",
"archive": "beta/macos/flutter_macos_2.2.0-10.1.pre-beta.zip",
"sha256": "4a24be2936dc8c647bd0b09db0cd42bbec82345eb1ae6b47d83e3f1690326161"
},
{
"hash": "0941968447ea8058e56e1479f7e53147149b739e",
"channel": "dev",
"version": "2.2.0-10.1.pre",
"release_date": "2021-04-15T21:29:18.785505Z",
"archive": "dev/macos/flutter_macos_2.2.0-10.1.pre-dev.zip",
"sha256": "117f2ac95a99bfa9cc9e252de3c94cd00983b21ed456cf73189719f7b30ba972"
},
{
"hash": "b1395592de68cc8ac4522094ae59956dd21a91db",
"channel": "stable",
"version": "2.0.4",
"release_date": "2021-04-02T20:29:37.579992Z",
"archive": "stable/macos/flutter_macos_2.0.4-stable.zip",
"sha256": "31e4a9f874e9d9743e7c3bb6bc69b3ba1bad122e71a4424e4240f204d0c9b34e"
},
{
"hash": "4d7946a68d26794349189cf21b3f68cc6fe61dcb",
"channel": "stable",
"version": "2.0.3",
"release_date": "2021-03-19T20:10:20.144279Z",
"archive": "stable/macos/flutter_macos_2.0.3-stable.zip",
"sha256": "f9f7ef2118945252961a738b0d245e41aac289b793ee872735ae546637758551"
},
{
"hash": "5bedb7b1d5698ce2c1c67aaf9afae7b3948b172a",
"channel": "beta",
"version": "2.1.0-12.2.pre",
"release_date": "2021-03-18T21:04:31.772298Z",
"archive": "beta/macos/flutter_macos_2.1.0-12.2.pre-beta.zip",
"sha256": "aa05713e14b0a7af6a8abeee52b62b3b7bedde1c331418e5e9a8341b75195d17"
},
{
"hash": "8962f6dc68ec8e2206ac2fa874da4a453856c7d3",
"channel": "beta",
"version": "2.0.2",
"release_date": "2021-03-15T16:56:30.689206Z",
"archive": "beta/macos/flutter_macos_2.0.2-beta.zip",
"sha256": "572022a6f4429f50456ddd2bca098b8843ea6875cdd72f18b1f94df52675944c"
},
{
"hash": "8264cb3e8a797eef39cbcd32bb56fd07790efb7f",
"channel": "dev",
"version": "2.1.0-12.1.pre",
"release_date": "2021-03-13T00:54:32.611915Z",
"archive": "dev/macos/flutter_macos_2.1.0-12.1.pre-dev.zip",
"sha256": "21cfba6cbb755925952543bd425917023190fa05fb30bfc345ff2ba083951821"
},
{
"hash": "8962f6dc68ec8e2206ac2fa874da4a453856c7d3",
"channel": "stable",
"version": "2.0.2",
"release_date": "2021-03-12T20:10:47.990338Z",
"archive": "stable/macos/flutter_macos_2.0.2-stable.zip",
"sha256": "0fd76e44c2080e3e9c02e2960628ca3ee0999d4ad13dd4e6b76d0f3fee76379e"
},
{
"hash": "c5a4b4029c0798f37c4a39b479d7cb75daa7b05c",
"channel": "beta",
"version": "2.0.1",
"release_date": "2021-03-04T20:57:52.657482Z",
"archive": "beta/macos/flutter_macos_2.0.1-beta.zip",
"sha256": "39569c1443311ebc66cff944ce1e58dcf1314c600776e40cbec69b68b523b624"
},
{
"hash": "c5a4b4029c0798f37c4a39b479d7cb75daa7b05c",
"channel": "stable",
"version": "2.0.1",
"release_date": "2021-03-04T19:46:19.886582Z",
"archive": "stable/macos/flutter_macos_2.0.1-stable.zip",
"sha256": "0d1985d0cc6ef99a51c8b2051aceb07eb654a02973e8e43aaf28ef1d8c3735b4"
},
{
"hash": "60bd88df915880d23877bfc1602e8ddcf4c4dd2a",
"channel": "beta",
"version": "2.0.0",
"release_date": "2021-03-03T19:38:28.814685Z",
"archive": "beta/macos/flutter_macos_2.0.0-beta.zip",
"sha256": "ac96558264c7cba717b27b5c1f136333a30345f720c0741cc63dfd519a82b3bd"
},
{
"hash": "cc9b78fc5c4a4d2d51316d9626523336230a89a9",
"channel": "dev",
"version": "2.1.0-10.0.pre",
"release_date": "2021-03-03T19:11:03.023654Z",
"archive": "dev/macos/flutter_macos_2.1.0-10.0.pre-dev.zip",
"sha256": "5b94fa9f1db978aed45baae22ce3b909213077055fbc577c6c0944e67a0eb7c8"
},
{
"hash": "60bd88df915880d23877bfc1602e8ddcf4c4dd2a",
"channel": "stable",
"version": "2.0.0",
"release_date": "2021-03-03T17:46:23.817373Z",
"archive": "stable/macos/flutter_macos_2.0.0-stable.zip",
"sha256": "e096bf5cdf28401be2d7cf286e561bf70163012be892384b1fe1554b56682d52"
},
{
"hash": "044f2cf5607a26f8818dab0f766400e85c52bdff",
"channel": "beta",
"version": "1.26.0-17.8.pre",
"release_date": "2021-02-25T17:56:33.110706Z",
"archive": "beta/macos/flutter_macos_1.26.0-17.8.pre-beta.zip",
"sha256": "ea7b077c525128c4963f8738f8643920fe1d123830c9a923242497300cbd680c"
},
{
"hash": "b7d4806243a4e906bf061f79a0e314ba28111aa6",
"channel": "dev",
"version": "1.27.0-8.0.pre",
"release_date": "2021-02-24T23:13:48.002697Z",
"archive": "dev/macos/flutter_macos_1.27.0-8.0.pre-dev.zip",
"sha256": "a2d99ca0f9a7559fb2a8e98420fb4126ae8170725ed7a61bfe72eecb3f3866cf"
},
{
"hash": "68e7d2e301e1969275cd11947e900b6b80405052",
"channel": "beta",
"version": "1.26.0-17.7.pre",
"release_date": "2021-02-24T18:23:23.356430Z",
"archive": "beta/macos/flutter_macos_1.26.0-17.7.pre-beta.zip",
"sha256": "7bf91dd3f82291d62a0e2ca80289c7a864174b79f69034ac553443b10315d8e7"
},
{
"hash": "f8cd24de95b16b5a1ce6ebc0716154271fbf6252",
"channel": "dev",
"version": "1.27.0-4.0.pre",
"release_date": "2021-02-17T23:12:45.927425Z",
"archive": "dev/macos/flutter_macos_1.27.0-4.0.pre-dev.zip",
"sha256": "428a7a56719cd246378b431331eb9df42bd9b0c320dfde8deaa36a52342701ac"
},
{
"hash": "a29104a69b102a7485cd00d358eaeab219d258ab",
"channel": "beta",
"version": "1.26.0-17.6.pre",
"release_date": "2021-02-16T19:17:46.516048Z",
"archive": "beta/macos/flutter_macos_1.26.0-17.6.pre-beta.zip",
"sha256": "13c8790c37912b691b02823cdb4085f43c1418bfdbc78bb3304ddd4977bc7a25"
},
{
"hash": "1fe38dcb5fc58242c6e0904a318bcc3ed5a4d837",
"channel": "beta",
"version": "1.26.0-17.5.pre",
"release_date": "2021-02-11T17:55:34.991140Z",
"archive": "beta/macos/flutter_macos_1.26.0-17.5.pre-beta.zip",
"sha256": "b57b777b1ec3eb8828f3c4d826cb0f3af888211b51be94e08c2a12bc54df2a78"
},
{
"hash": "68c96f100e42ab3dbf43e61e9e2fc875a2d50cb8",
"channel": "dev",
"version": "1.27.0-1.0.pre",
"release_date": "2021-02-10T23:55:52.798135Z",
"archive": "dev/macos/flutter_macos_1.27.0-1.0.pre-dev.zip",
"sha256": "72d113611665f5f8827e681de709765c558126a649fe71d121a2f1583c350f36"
},
{
"hash": "48c9d3e0e19e8fec84f1d316ce0559f26ca7277d",
"channel": "beta",
"version": "1.26.0-17.4.pre",
"release_date": "2021-02-10T21:36:46.564198Z",
"archive": "beta/macos/flutter_macos_1.26.0-17.4.pre-beta.zip",
"sha256": "9d7213066edb463b9c7baaa20c9ef35fec8018f25b899fbfa5281f2e7fcba981"
},
{
"hash": "4b50ca7f7fbf56be72e54cd200825b760416a356",
"channel": "beta",
"version": "1.26.0-17.3.pre",
"release_date": "2021-02-05T06:36:29.008663Z",
"archive": "beta/macos/flutter_macos_1.26.0-17.3.pre-beta.zip",
"sha256": "7fe8a8a616bb1379da2442add1be61be21f771bd1bdc7a46832a1959900cf9a0"
},
{
"hash": "79b49b9e1057f90ebf797725233c6b311722de69",
"channel": "beta",
"version": "1.26.0-17.2.pre",
"release_date": "2021-02-04T19:51:12.386458Z",
"archive": "beta/macos/flutter_macos_1.26.0-17.2.pre-beta.zip",
"sha256": "5188ee1dfceaa715b48d73725cb678320786910f7e3c70f837a1bff1554adbdd"
},
{
"hash": "79b49b9e1057f90ebf797725233c6b311722de69",
"channel": "dev",
"version": "1.26.0-17.2.pre",
"release_date": "2021-02-04T19:19:37.095390Z",
"archive": "dev/macos/flutter_macos_1.26.0-17.2.pre-dev.zip",
"sha256": "56b8fcaf888efb162ff3e7083fd3d01f13369bf9be326f67c5e17e1e1b84b7a6"
},
{
"hash": "c40e5294dda34d04cd222dfdf765f171e12e4a8d",
"channel": "dev",
"version": "1.26.0-17.1.pre",
"release_date": "2021-01-29T18:19:51.959907Z",
"archive": "dev/macos/flutter_macos_1.26.0-17.1.pre-dev.zip",
"sha256": "01fd7b347b09b544c3a1ce4f6536032b43a70bd5c12def3ad4dc8ddcf050c701"
},
{
"hash": "9b2d32b605630f28625709ebd9d78ab3016b2bf6",
"channel": "stable",
"version": "1.22.6",
"release_date": "2021-01-25T19:46:48.527913Z",
"archive": "stable/macos/flutter_macos_1.22.6-stable.zip",
"sha256": "a5a7b66c1e4ac4058c72714d67bb863a80170749fe6f11f541e314474c899b05"
},
{
"hash": "a706cd211240f27be3b61f06d70f958c7a4156fe",
"channel": "dev",
"version": "1.26.0-12.0.pre",
"release_date": "2021-01-21T18:36:13.095509Z",
"archive": "dev/macos/flutter_macos_1.26.0-12.0.pre-dev.zip",
"sha256": "fd556bd98c92b492e0be64045c4cdef32859b44e50b999303f3e5dbbbc7ecbe1"
},
{
"hash": "5d36f2e7f5387b6c751449258ade8e4e6edf99be",
"channel": "beta",
"version": "1.25.0-8.3.pre",
"release_date": "2021-01-15T19:58:18.410060Z",
"archive": "beta/macos/flutter_macos_1.25.0-8.3.pre-beta.zip",
"sha256": "4db727d6850339a9ecc5067e421f28975e3a25718691eeedfea0f1411b97237f"
},
{
"hash": "b9d06fffb2db263ab7021fc39adde7f2bf988a4a",
"channel": "dev",
"version": "1.26.0-8.0.pre",
"release_date": "2021-01-13T17:24:07.151253Z",
"archive": "dev/macos/flutter_macos_1.26.0-8.0.pre-dev.zip",
"sha256": "91c707752b831d38621f489106a433269424c2ce01f353ea0f74fd7ddd157db1"
},
{
"hash": "b0a22998593fc605c723dee8ff4d9315c32cfe2c",
"channel": "beta",
"version": "1.25.0-8.2.pre",
"release_date": "2021-01-06T00:06:41.437421Z",
"archive": "beta/macos/flutter_macos_1.25.0-8.2.pre-beta.zip",
"sha256": "92d8100cb405cbc480d9020bbfca3b862d1201438ae786934fb6852cab645170"
},
{
"hash": "63062a64432cce03315d6b5196fda7912866eb37",
"channel": "dev",
"version": "1.26.0-1.0.pre",
"release_date": "2020-12-16T22:06:33.259580Z",
"archive": "dev/macos/flutter_macos_1.26.0-1.0.pre-dev.zip",
"sha256": "8695c838ada2c26a5cd6659539ef326e8257966374daad51e39f73728f03b5d7"
},
{
"hash": "8f89f6505b941329a864fef1527243a72800bf4d",
"channel": "beta",
"version": "1.25.0-8.1.pre",
"release_date": "2020-12-16T21:54:56.493375Z",
"archive": "beta/macos/flutter_macos_1.25.0-8.1.pre-beta.zip",
"sha256": "cfff47f305cf66aa16c0c5e8798820efcacd9a014ee907ae35db7e65ee283856"
},
{
"hash": "78910062997c3a836feee883712c241a5fd22983",
"channel": "stable",
"version": "1.22.5",
"release_date": "2020-12-10T22:56:49.884409Z",
"archive": "stable/macos/flutter_macos_1.22.5-stable.zip",
"sha256": "a64f5df488b95ac41036559bf436189037a868b393b1c050649cbb61d7d3b932"
},
{
"hash": "a12e2a473a3214b4556ca589d2d9bd311ac7c6f1",
"channel": "dev",
"version": "1.25.0-8.0.pre",
"release_date": "2020-12-10T19:30:02.854836Z",
"archive": "dev/macos/flutter_macos_1.25.0-8.0.pre-dev.zip",
"sha256": "e4838460a0f96e2b2f75e380425bc1666c3bdcde2f7f59717d52b9ecac1f5e29"
},
{
"hash": "a7f5fd5360007518644597c60a1f2169eacccc2b",
"channel": "dev",
"version": "1.25.0-4.0.pre",
"release_date": "2020-12-02T17:04:11.861712Z",
"archive": "dev/macos/flutter_macos_1.25.0-4.0.pre-dev.zip",
"sha256": "0c117e343a40183a1da45f7496cea16fbdd26ff5efeb4272037387a4db95bafe"
},
{
"hash": "022b333a089afb81c471ec43d1f1f4f26305d876",
"channel": "beta",
"version": "1.24.0-10.2.pre",
"release_date": "2020-11-19T15:19:01.250780Z",
"archive": "beta/macos/flutter_macos_1.24.0-10.2.pre-beta.zip",
"sha256": "b8d961d58434da269b0b2563b17327a6543ea7ad2aeb368e837a957ef601d4aa"
},
{
"hash": "022b333a089afb81c471ec43d1f1f4f26305d876",
"channel": "dev",
"version": "1.24.0-10.2.pre",
"release_date": "2020-11-18T22:20:28.675722Z",
"archive": "dev/macos/flutter_macos_1.24.0-10.2.pre-dev.zip",
"sha256": "4f4ec35069ccd9d8ea98064b63046cebe6cfd39ee9abc55a179afec49f778ac6"
},
{
"hash": "405c85fe7ee688156028e87a623c9153d05591b2",
"channel": "dev",
"version": "1.24.0-10.1.pre",
"release_date": "2020-11-16T20:50:22.337009Z",
"archive": "dev/macos/flutter_macos_1.24.0-10.1.pre-dev.zip",
"sha256": "4ae245929ad26ea505d65c3089eac65b1aaf0a4ef4f9e7dc19b2d32676f64508"
},
{
"hash": "1aafb3a8b9b0c36241c5f5b34ee914770f015818",
"channel": "stable",
"version": "1.22.4",
"release_date": "2020-11-13T20:05:41.373223Z",
"archive": "stable/macos/flutter_macos_1.22.4-stable.zip",
"sha256": "d73b71316e883f36e02d412ed237c712c7942902bdb84ad0ebfa1fa431b75b88"
},
{
"hash": "a0860f6e87ba4f9031bee4d6f56c08b970606bee",
"channel": "dev",
"version": "1.24.0-7.0.pre",
"release_date": "2020-11-05T00:15:56.102329Z",
"archive": "dev/macos/flutter_macos_1.24.0-7.0.pre-dev.zip",
"sha256": "7d470f6106f87be91193aa832e37aa792d1d0f2e007ffd017b98e5ccd70274ec"
},
{
"hash": "13896b3bd1858687a06b1639d60c877206170df8",
"channel": "dev",
"version": "1.24.0-6.0.pre",
"release_date": "2020-10-30T19:25:59.884849Z",
"archive": "dev/macos/flutter_macos_1.24.0-6.0.pre-dev.zip",
"sha256": "eff9f38fa75dbc8debaf60919ec8678a48716fe2b56370ade00de61f95b77b10"
},
{
"hash": "8874f21e79d7ec66d0457c7ab338348e31b17f1d",
"channel": "stable",
"version": "1.22.3",
"release_date": "2020-10-30T16:28:31.874818Z",
"archive": "stable/macos/flutter_macos_1.22.3-stable.zip",
"sha256": "7cad68c2e678c9f7e59214c036558d7caa627577452be759efa8e4ff82a9a703"
},
{
"hash": "2783f8e2e14efec8b7e08f668dde61c40d128c24",
"channel": "dev",
"version": "1.24.0-3.0.pre",
"release_date": "2020-10-22T22:09:15.844161Z",
"archive": "dev/macos/flutter_macos_1.24.0-3.0.pre-dev.zip",
"sha256": "f2e8e6c173010d278c1bf40b1a5d4f65bc6b3d085a791ce000f35c1b7f453814"
},
{
"hash": "12bea61c2902784fec73b7f5f2ff3415f873fead",
"channel": "dev",
"version": "1.24.0-1.0.pre",
"release_date": "2020-10-20T02:40:12.415504Z",
"archive": "dev/macos/flutter_macos_1.24.0-1.0.pre-dev.zip",
"sha256": "c774b6314f74b0222ab102c91eb0a9edab854613b4846a15b66e27d167d11e7b"
},
{
"hash": "84f3d28555368a70270e9ac8390a9441df95e752",
"channel": "stable",
"version": "1.22.2",
"release_date": "2020-10-16T18:14:45.745723Z",
"archive": "stable/macos/flutter_macos_1.22.2-stable.zip",
"sha256": "1b749721d4e9c9d6712ae1701972a87c69743c25cf369b966dc2626af165db84"
},
{
"hash": "198df796aa80073ef22bdf249e614e2ff33c6895",
"channel": "beta",
"version": "1.23.0-18.1.pre",
"release_date": "2020-10-15T23:20:28.007326Z",
"archive": "beta/macos/flutter_macos_1.23.0-18.1.pre-beta.zip",
"sha256": "56fc0e77c3b14410ab88286e3c39b16c87671ac5fe90f68a4a5d82a79f67b56e"
},
{
"hash": "37ebe3d82a9d5faeda7d3c1a6ad193030210a2cc",
"channel": "dev",
"version": "1.23.0-18.0.pre",
"release_date": "2020-10-14T00:35:37.881637Z",
"archive": "dev/macos/flutter_macos_1.23.0-18.0.pre-dev.zip",
"sha256": "b0a4d3f4a13e94c07f6234aade20b022b37a55ea7c8d6f673921bfab3dd6c166"
},
{
"hash": "4fa4f91d5cc65a5a98c7ccd91bb7d47814048a57",
"channel": "dev",
"version": "1.23.0-13.0.pre",
"release_date": "2020-10-12T18:09:26.197680Z",
"archive": "dev/macos/flutter_macos_1.23.0-13.0.pre-dev.zip",
"sha256": "b5ab26da91aa2972d79c32990fa45e6b66ddfb834a70ed5d90a7a68d11f6cf4f"
},
{
"hash": "f30b7f4db93ee747cd727df747941a28ead25ff5",
"channel": "stable",
"version": "1.22.1",
"release_date": "2020-10-08T22:00:51.454777Z",
"archive": "stable/macos/flutter_macos_1.22.1-stable.zip",
"sha256": "04f5b8a1af40814ff496d48c7a71fa8ff10ef396fca6a9feb2d231a3f7776b9a"
},
{
"hash": "f30b7f4db93ee747cd727df747941a28ead25ff5",
"channel": "beta",
"version": "1.22.0-12.4.pre",
"release_date": "2020-10-08T21:32:12.523357Z",
"archive": "beta/macos/flutter_macos_1.22.0-12.4.pre-beta.zip",
"sha256": "74cf038c15f73403b204fac0991f6863c65be454b7def6c1f099f405bedcab00"
},
{
"hash": "db6e2d8aa5bb9a0bd3e75fc7470268b5a56fd0b0",
"channel": "dev",
"version": "1.23.0-7.0.pre",
"release_date": "2020-10-01T23:22:14.973873Z",
"archive": "dev/macos/flutter_macos_1.23.0-7.0.pre-dev.zip",
"sha256": "e4f8a9a4f960a7770acab9c9d02992f42473f47252e74dfa4d29cbc4edab05fa"
},
{
"hash": "d408d302e22179d598f467e11da5dd968dbdc9ec",
"channel": "stable",
"version": "1.22.0",
"release_date": "2020-10-01T14:23:41.609321Z",
"archive": "stable/macos/flutter_macos_1.22.0-stable.zip",
"sha256": "d9663e5fe5fe6ee44ce04dd43d9626fc14db16c3b8d0a6e8ae666f5e6cf51ca4"
},
{
"hash": "d408d302e22179d598f467e11da5dd968dbdc9ec",
"channel": "beta",
"version": "1.22.0-12.3.pre",
"release_date": "2020-09-29T20:25:43.820625Z",
"archive": "beta/macos/flutter_macos_1.22.0-12.3.pre-beta.zip",
"sha256": "68a43dadb778df49d2db916ec72d1d3b8f0f54ec0b59eb5626bd0fcbfbd09f27"
},
{
"hash": "2bafdc822636426fa09afb43236400a60ea432b2",
"channel": "beta",
"version": "1.22.0-12.2.pre",
"release_date": "2020-09-28T16:44:47.932346Z",
"archive": "beta/macos/flutter_macos_1.22.0-12.2.pre-beta.zip",
"sha256": "1401271f35f3dc342dafe3a89de038bf24b9c80527a86f8e3451136e1e353371"
},
{
"hash": "83dd176777cd04bd2aaca050f6bb6cb9edbf56a1",
"channel": "dev",
"version": "1.23.0-4.0.pre",
"release_date": "2020-09-22T21:10:12.999195Z",
"archive": "dev/macos/flutter_macos_1.23.0-4.0.pre-dev.zip",
"sha256": "5abb85db2cb3be610f9e48688eee098abe5ea9c7ca447d2085e41dd54ebd5bc9"
},
{
"hash": "8b3760638a189741cd9ca881aa2dd237c1df1be5",
"channel": "beta",
"version": "1.22.0-12.1.pre",
"release_date": "2020-09-16T17:09:41.228493Z",
"archive": "beta/macos/flutter_macos_1.22.0-12.1.pre-beta.zip",
"sha256": "cf7d43bde41eef8d2e09e0f192eecb43e1ffc2dcb2a7e91df5c496ebae3ec3a4"
},
{
"hash": "fba99f6cf9a14512e461e3122c8ddfaa25394e89",
"channel": "stable",
"version": "1.20.4",
"release_date": "2020-09-15T17:40:12.045259Z",
"archive": "stable/macos/flutter_macos_1.20.4-stable.zip",
"sha256": "08fcbcc9c902bc6f245d660b6d68f1da420fbdd5878902b5687961a5fb43e9f7"
},
{
"hash": "a27c242b0eea731317cfec5bbdd9d35452ab3ecb",
"channel": "dev",
"version": "1.22.0-12.0.pre",
"release_date": "2020-09-14T21:42:02.011366Z",
"archive": "dev/macos/flutter_macos_1.22.0-12.0.pre-dev.zip",
"sha256": "6d5c56d43a82008f03d5dd7fe275d32faa5c804f6416dd85b1dd56471fbb907f"
},
{
"hash": "216dee60c0cc9449f0b29bcf922974d612263e24",
"channel": "stable",
"version": "1.20.3",
"release_date": "2020-09-02T18:06:18.341367Z",
"archive": "stable/macos/flutter_macos_1.20.3-stable.zip",
"sha256": "f68740137fb15f627667ec2eab39d83afeb3396c96ab268b78c67c092f5c8b18"
},
{
"hash": "7a4317519865146acda84702bba8775610598c0c",
"channel": "dev",
"version": "1.22.0-9.0.pre",
"release_date": "2020-09-01T19:28:22.697842Z",
"archive": "dev/macos/flutter_macos_1.22.0-9.0.pre-dev.zip",
"sha256": "3f5d6311e67c2dfe46adb8fddaadcd966f129878e8fd22edc4539cb2cab93fc9"
},
{
"hash": "81a45ec2e5f80fa71d5135f1702ce540558b416d",
"channel": "beta",
"version": "1.21.0-9.2.pre",
"release_date": "2020-08-28T18:33:54.145026Z",
"archive": "beta/macos/flutter_macos_1.21.0-9.2.pre-beta.zip",
"sha256": "717bff28f1a32a969bcae559ffa17cc00069b25cb94d4fb16e97f5ee9735edf2"
},
{
"hash": "ce40de69b7b4f89c66d19c8dbd3bd86ae30f1bc6",
"channel": "dev",
"version": "1.22.0-1.0.pre",
"release_date": "2020-08-21T21:59:25.678368Z",
"archive": "dev/macos/flutter_macos_1.22.0-1.0.pre-dev.zip",
"sha256": "6ffa83341c43c8a05ec3f853a95deda5deefb4790a3236a5d739601d1d30f949"
},
{
"hash": "be9bc8cb3942bda5d8ef4e44b44616c470625e18",
"channel": "beta",
"version": "1.21.0-9.1.pre",
"release_date": "2020-08-19T18:35:17.762947Z",
"archive": "beta/macos/flutter_macos_1.21.0-9.1.pre-beta.zip",
"sha256": "c04afcdfd5625508f5641232555620dc1cb9c30f0e93fb5feec10bb7523c87a6"
},
{
"hash": "bbfbf1770cca2da7c82e887e4e4af910034800b6",
"channel": "beta",
"version": "1.20.2",
"release_date": "2020-08-14T20:58:13.245691Z",
"archive": "beta/macos/flutter_macos_1.20.2-beta.zip",
"sha256": "3f6fe6fecf7d91b6d78a3d64cd2c577f7d4202e03f38cdac584462a438918b38"
},
{
"hash": "bbfbf1770cca2da7c82e887e4e4af910034800b6",
"channel": "stable",
"version": "1.20.2",
"release_date": "2020-08-13T21:40:50.579223Z",
"archive": "stable/macos/flutter_macos_1.20.2-stable.zip",
"sha256": "c801653e989811b60f79d3edffa808bd1fba5b771ba8492bfc53ea49302afc0e"
},
{
"hash": "7c6f9dd2396dfe7deb6fd11edc12c10786490083",
"channel": "dev",
"version": "1.21.0-9.0.pre",
"release_date": "2020-08-13T16:03:32.942694Z",
"archive": "dev/macos/flutter_macos_1.21.0-9.0.pre-dev.zip",
"sha256": "d36444994adb5b29272827a052516180eef00cc40a14ec19b70f3a62012a7335"
},
{
"hash": "5a6dfa35caaf7bccb35488dc03677c150ebf2d97",
"channel": "dev",
"version": "1.21.0-7.0.pre",
"release_date": "2020-08-07T16:41:15.680848Z",
"archive": "dev/macos/flutter_macos_1.21.0-7.0.pre-dev.zip",
"sha256": "fde3be8d09c7c572f5ab2f4d747bec2fa47ef43b0a5c7add803fc735fa625453"
},
{
"hash": "2ae34518b87dd891355ed6c6ea8cb68c4d52bb9d",
"channel": "stable",
"version": "1.20.1",
"release_date": "2020-08-06T18:37:40.752145Z",
"archive": "stable/macos/flutter_macos_1.20.1-stable.zip",
"sha256": "a6364d48455bd7eb749bcbd0b7c71b985bccb0149ea0dd95c6bef3bbb2e9f91b"
},
{
"hash": "840c9205b344a59e48a5926ee2d791cc5640924c",
"channel": "stable",
"version": "1.20.0",
"release_date": "2020-08-05T14:21:17.293576Z",
"archive": "stable/macos/flutter_macos_1.20.0-stable.zip",
"sha256": "e49f8b63470244a472f08c62e770fed08e15e1e994dcdb28ea03acdc937011be"
},
{
"hash": "916c3ac648aa0498a70f32b5fc4f6c51447628e3",
"channel": "beta",
"version": "1.20.0-7.4.pre",
"release_date": "2020-08-03T21:40:41.560256Z",
"archive": "beta/macos/flutter_macos_1.20.0-7.4.pre-beta.zip",
"sha256": "be8b2bc2125f9099fe4210d4c04654ed6b48b86a3056169599224e8afa9610fc"
},
{
"hash": "e606910f28be51c8151f6169072afe3b3a8b3c5e",
"channel": "beta",
"version": "1.20.0-7.3.pre",
"release_date": "2020-07-29T03:26:03.419026Z",
"archive": "beta/macos/flutter_macos_1.20.0-7.3.pre-beta.zip",
"sha256": "54b101d047811e341629fd2408ad7df8bbdfcefa3b4354c6f44d566f714fa2dc"
},
{
"hash": "a2bde82fbd52e09057a4146f46889f4e10342d32",
"channel": "beta",
"version": "1.20.0-7.2.pre",
"release_date": "2020-07-21T16:15:05.642652Z",
"archive": "beta/macos/flutter_macos_1.20.0-7.2.pre-beta.zip",
"sha256": "ead0524aa5262f872e369448f6ee1eccdfb0636704c8d4208a4ab2ec6da87a15"
},
{
"hash": "f25bd9c55c48c139524139b477d04b13e9f36b2c",
"channel": "dev",
"version": "1.21.0-1.0.pre",
"release_date": "2020-07-17T03:16:08.438489Z",
"archive": "dev/macos/flutter_macos_1.21.0-1.0.pre-dev.zip",
"sha256": "fc9592842d859d1a6619d5302c97eb56bf587f7bcb984283289954933ae3d23d"
},
{
"hash": "7736f3bc90270dcb0480db2ccffbf1d13c28db85",
"channel": "dev",
"version": "1.20.0-7.1.pre",
"release_date": "2020-07-11T04:09:49.782032Z",
"archive": "dev/macos/flutter_macos_1.20.0-7.1.pre-dev.zip",
"sha256": "198ecee004963b5f5320f7499b5ed734dbb497e320c3178b6e5a0066de8d3e0c"
},
{
"hash": "cc1af3afb62187cc37185afddc2d43bfef469db7",
"channel": "dev",
"version": "1.20.0-7.0.pre",
"release_date": "2020-07-09T19:11:22.337305Z",
"archive": "dev/macos/flutter_macos_1.20.0-7.0.pre-dev.zip",
"sha256": "e4e40e6c2c765239ed53b5199c97bf37e6e51d7478a387d351ea06881b5461f5"
},
{
"hash": "0af027f80543302c65f99e1c1a2f3b3cbb8d04f3",
"channel": "dev",
"version": "1.20.0-3.0.pre",
"release_date": "2020-07-05T02:20:08.815663Z",
"archive": "dev/macos/flutter_macos_1.20.0-3.0.pre-dev.zip",
"sha256": "9359b5a798858360974261b69510e8c952e90837530a82223951beb52b40797a"
},
{
"hash": "8fe7655ed20ffd1395f68e30539a847a01a30351",
"channel": "beta",
"version": "1.19.0-4.3.pre",
"release_date": "2020-07-01T23:42:10.067590Z",
"archive": "beta/macos/flutter_macos_1.19.0-4.3.pre-beta.zip",
"sha256": "f3621cfddee8e592d3e0b926a14f14b5466a702e52d1009b6e5dd2cc18d9b5ef"
},
{
"hash": "15a28159bcf4b3db13411cbc8d9b5fc51adc0a93",
"channel": "dev",
"version": "1.20.0-2.0.pre",
"release_date": "2020-07-01T23:17:53.874444Z",
"archive": "dev/macos/flutter_macos_1.20.0-2.0.pre-dev.zip",
"sha256": "fd16b754ef33a33611e1e6dbb6b8498cc3722db4eef3e0ec93266f719f6f51ad"
},
{
"hash": "8af6b2f038c1172e61d418869363a28dffec3cb4",
"channel": "stable",
"version": "1.17.5",
"release_date": "2020-07-01T23:16:58.968722Z",
"archive": "stable/macos/flutter_macos_1.17.5-stable.zip",
"sha256": "8fcb853546956f816d2c181fb8f7c7ba7539da96070af353a713745b2d63ed97"
},
{
"hash": "9b9b543d9265484132c798adaab6caca52055b08",
"channel": "beta",
"version": "1.19.0-4.2.pre",
"release_date": "2020-06-25T20:04:18.776389Z",
"archive": "beta/macos/flutter_macos_1.19.0-4.2.pre-beta.zip",
"sha256": "c838f78ccc9a10b73e3ccdf216f142365a6f92aefefcf8985c4ca7c2ddb0ce59"
},
{
"hash": "1ad9baa8b99a2897c20f9e6e54d3b9b359ade314",
"channel": "stable",
"version": "1.17.4",
"release_date": "2020-06-18T15:57:50.856625Z",
"archive": "stable/macos/flutter_macos_1.17.4-stable.zip",
"sha256": "1464da8422e0fd70ba93dab257d77e3a60fee06ac081296c32255635d6328e48"
},
{
"hash": "d9653445f4d1257b5f5adb4b271d1316469e8cf1",
"channel": "dev",
"version": "1.20.0-0.0.pre",
"release_date": "2020-06-11T15:25:15.356574Z",
"archive": "dev/macos/flutter_macos_1.20.0-0.0.pre-dev.zip",
"sha256": "b32a063548db297c40985fc67f27230ab49baea6248179cfc9d95ed1cda13101"
},
{
"hash": "f994b769743368b36b9c03fb359f62230b60ab92",
"channel": "beta",
"version": "1.19.0-4.1.pre",
"release_date": "2020-06-10T21:59:36.901924Z",
"archive": "beta/macos/flutter_macos_1.19.0-4.1.pre-beta.zip",
"sha256": "a09a01f9c4aa6c37fd4006ed23a33a684073ebc4fca6881ef52674beb490e443"
},
{
"hash": "c264b70ec3b0cf9cd568eba5d65d0ce47fe57e1d",
"channel": "dev",
"version": "1.19.0-5.0.pre",
"release_date": "2020-06-10T01:01:52.476109Z",
"archive": "dev/macos/flutter_macos_1.19.0-5.0.pre-dev.zip",
"sha256": "158baa1c91db850752ea7df69ef3f8d5218729e66188096ce778362e54bafdd9"
},
{
"hash": "2f7a59a8da20b3a7fbdfb7ac783dbca977a81653",
"channel": "dev",
"version": "1.19.0-4.0.pre",
"release_date": "2020-06-05T16:28:34.028693Z",
"archive": "dev/macos/flutter_macos_1.19.0-4.0.pre-dev.zip",
"sha256": "05df42fddfbc29f4d9ae96b3ab4bd983790a56e00d137bfdf98658b4b450f89c"
},
{
"hash": "b041144f833e05cf463b8887fa12efdec9493488",
"channel": "stable",
"version": "1.17.3",
"release_date": "2020-06-04T17:24:41.587754Z",
"archive": "stable/macos/flutter_macos_1.17.3-stable.zip",
"sha256": "4506b3ab985f86a7a5b7a65ba2377b7407395e993c5094b9c843cbc4c798eb92"
},
{
"hash": "6135091de9f8f6befc2ec7f8835d28d43a21cd05",
"channel": "dev",
"version": "1.19.0-3.0.pre",
"release_date": "2020-06-02T20:22:58.335734Z",
"archive": "dev/macos/flutter_macos_1.19.0-3.0.pre-dev.zip",
"sha256": "659015af8363474169ddbb4f224f659a6779cc23314232982efd2b4bf95dbaf1"
},
{
"hash": "1d395c5e187370f2838bb043d3b438029b484bfc",
"channel": "dev",
"version": "1.19.0-2.0.pre",
"release_date": "2020-06-01T17:29:12.998120Z",
"archive": "dev/macos/flutter_macos_1.19.0-2.0.pre-dev.zip",
"sha256": "e5feb3916c503b72aa3a3c5f90e265fd80c5c4794c8b167231a794750fd5e1ee"
},
{
"hash": "5f21edf8b66e31a39133177319414395cc5b5f48",
"channel": "stable",
"version": "1.17.2",
"release_date": "2020-05-28T21:39:28.327910Z",
"archive": "stable/macos/flutter_macos_1.17.2-stable.zip",
"sha256": "f692118a4e9da5372128ed2c882bc4ca8e3ed7aac4efa4ad2346ca54b9cda8ec"
},
{
"hash": "2738a1148ba6c9a6114df62358109407c3ef2553",
"channel": "beta",
"version": "1.18.0-11.1.pre",
"release_date": "2020-05-14T17:48:04.712994Z",
"archive": "beta/macos/flutter_macos_1.18.0-11.1.pre-beta.zip",
"sha256": "a33d0f96c9f4abd984efa591ee10c502039c186a0719df8b688b6df1e0d79969"
},
{
"hash": "f7a6a7906be96d2288f5d63a5a54c515a6e987fe",
"channel": "stable",
"version": "1.17.1",
"release_date": "2020-05-13T18:22:25.737914Z",
"archive": "stable/macos/flutter_macos_1.17.1-stable.zip",
"sha256": "598c6341e43421257a57fc17e82f000eb2df3ed9593e6d698fd2a2f62fe1c829"
},
{
"hash": "456d80b9ddd74b4b5ca3b77bbfb70ab0e05d3fa8",
"channel": "dev",
"version": "1.19.0-1.0.pre",
"release_date": "2020-05-12T22:34:16.114113Z",
"archive": "dev/macos/flutter_macos_1.19.0-1.0.pre-dev.zip",
"sha256": "9f4c8384a068afb5b9412f9160d0e709cdaa015014dba9b011bf79761435ee9b"
},
{
"hash": "a849daf2836d653ef80e01f428531b3f787671cb",
"channel": "dev",

View File

@@ -1,11 +1,755 @@
{
"base_url": "https://storage.googleapis.com/flutter_infra/releases",
"current_release": {
"beta": "e6b34c2b5c96bb95325269a29a84e83ed8909b5f",
"dev": "a849daf2836d653ef80e01f428531b3f787671cb",
"stable": "e6b34c2b5c96bb95325269a29a84e83ed8909b5f"
"beta": "0941968447ea8058e56e1479f7e53147149b739e",
"dev": "0941968447ea8058e56e1479f7e53147149b739e",
"stable": "adc687823a831bbebe28bdccfac1a628ca621513"
},
"releases": [
{
"hash": "adc687823a831bbebe28bdccfac1a628ca621513",
"channel": "stable",
"version": "2.0.5",
"release_date": "2021-04-16T18:06:46.988183Z",
"archive": "stable/windows/flutter_windows_2.0.5-stable.zip",
"sha256": "67438f40a9b811704555b9801b52738f4156b617a03351ff143335639a23b2b2"
},
{
"hash": "0941968447ea8058e56e1479f7e53147149b739e",
"channel": "beta",
"version": "2.2.0-10.1.pre",
"release_date": "2021-04-15T22:33:06.150073Z",
"archive": "beta/windows/flutter_windows_2.2.0-10.1.pre-beta.zip",
"sha256": "548e019c8712a0eea8e4004374a035cf3b0e222ebe4e150f01184b0dfbd6a46a"
},
{
"hash": "0941968447ea8058e56e1479f7e53147149b739e",
"channel": "dev",
"version": "2.2.0-10.1.pre",
"release_date": "2021-04-15T21:42:19.545965Z",
"archive": "dev/windows/flutter_windows_2.2.0-10.1.pre-dev.zip",
"sha256": "bdfec73fb4d4bf2d96408a531cb9e1dc43b2b5094dc9de55ec0b84ad758e5319"
},
{
"hash": "b1395592de68cc8ac4522094ae59956dd21a91db",
"channel": "stable",
"version": "2.0.4",
"release_date": "2021-04-02T20:40:57.314750Z",
"archive": "stable/windows/flutter_windows_2.0.4-stable.zip",
"sha256": "42a722b7b364ff4b3b639b07f08fa83794d4bd1c467c86d6b574bcb2127ac6f5"
},
{
"hash": "4d7946a68d26794349189cf21b3f68cc6fe61dcb",
"channel": "stable",
"version": "2.0.3",
"release_date": "2021-03-19T20:17:00.731257Z",
"archive": "stable/windows/flutter_windows_2.0.3-stable.zip",
"sha256": "182911341394a7baec1c587a3b92653f43c37f7abfe5a10b67dabedbd3dfd9d9"
},
{
"hash": "5bedb7b1d5698ce2c1c67aaf9afae7b3948b172a",
"channel": "beta",
"version": "2.1.0-12.2.pre",
"release_date": "2021-03-18T21:00:48.627463Z",
"archive": "beta/windows/flutter_windows_2.1.0-12.2.pre-beta.zip",
"sha256": "d23c843e754013f72e76350c541fd12b772ce51bd5dd0dd41a740e63bc47a9aa"
},
{
"hash": "8962f6dc68ec8e2206ac2fa874da4a453856c7d3",
"channel": "beta",
"version": "2.0.2",
"release_date": "2021-03-15T17:02:01.795126Z",
"archive": "beta/windows/flutter_windows_2.0.2-beta.zip",
"sha256": "289badd5caf2452448b0d41d68c3f410cca0fa58df1ffd9ec56e24d463ca6a71"
},
{
"hash": "8264cb3e8a797eef39cbcd32bb56fd07790efb7f",
"channel": "dev",
"version": "2.1.0-12.1.pre",
"release_date": "2021-03-13T00:57:16.262443Z",
"archive": "dev/windows/flutter_windows_2.1.0-12.1.pre-dev.zip",
"sha256": "ff9b3428928d5619ff48cb13fff701d9100becefbf421f50810ca93c827f73ab"
},
{
"hash": "8962f6dc68ec8e2206ac2fa874da4a453856c7d3",
"channel": "stable",
"version": "2.0.2",
"release_date": "2021-03-12T20:16:58.889236Z",
"archive": "stable/windows/flutter_windows_2.0.2-stable.zip",
"sha256": "aba438b6b177bff0264fae43e5494c1d191144413ea52d1f386b867c117d4af7"
},
{
"hash": "c5a4b4029c0798f37c4a39b479d7cb75daa7b05c",
"channel": "beta",
"version": "2.0.1",
"release_date": "2021-03-04T21:03:17.507284Z",
"archive": "beta/windows/flutter_windows_2.0.1-beta.zip",
"sha256": "64b173e0a66722dc6c1a83949d3358088e23aa8639d9fe91ddac302fe46f2d58"
},
{
"hash": "c5a4b4029c0798f37c4a39b479d7cb75daa7b05c",
"channel": "stable",
"version": "2.0.1",
"release_date": "2021-03-04T19:49:50.531411Z",
"archive": "stable/windows/flutter_windows_2.0.1-stable.zip",
"sha256": "e3abdabf62d98b7b2773047f67ce3f2f996b50132a85395453de019d43bbe721"
},
{
"hash": "cc9b78fc5c4a4d2d51316d9626523336230a89a9",
"channel": "dev",
"version": "2.1.0-10.0.pre",
"release_date": "2021-03-03T19:14:39.042872Z",
"archive": "dev/windows/flutter_windows_2.1.0-10.0.pre-dev.zip",
"sha256": "b39a0b292a39697d071ef75797efc84806d53dff011ae730ab9c91b3828b96e7"
},
{
"hash": "60bd88df915880d23877bfc1602e8ddcf4c4dd2a",
"channel": "beta",
"version": "2.0.0",
"release_date": "2021-03-03T17:51:19.556560Z",
"archive": "beta/windows/flutter_windows_2.0.0-beta.zip",
"sha256": "23764f0513d7cebfabb23253c2b1c6a8e60b152ec619e3da542136edfbfaf88c"
},
{
"hash": "60bd88df915880d23877bfc1602e8ddcf4c4dd2a",
"channel": "stable",
"version": "2.0.0",
"release_date": "2021-03-03T17:50:17.892863Z",
"archive": "stable/windows/flutter_windows_2.0.0-stable.zip",
"sha256": "922a5d5dd009348360c9bf88af52fd3186120a7929c031b81683654fdb45bb74"
},
{
"hash": "044f2cf5607a26f8818dab0f766400e85c52bdff",
"channel": "beta",
"version": "1.26.0-17.8.pre",
"release_date": "2021-02-25T17:58:26.186358Z",
"archive": "beta/windows/flutter_windows_1.26.0-17.8.pre-beta.zip",
"sha256": "31b457a5bd278432bd1147cb6857b4c635f36d0c11ca44d2f2642c704367c690"
},
{
"hash": "b7d4806243a4e906bf061f79a0e314ba28111aa6",
"channel": "dev",
"version": "1.27.0-8.0.pre",
"release_date": "2021-02-24T23:12:17.327254Z",
"archive": "dev/windows/flutter_windows_1.27.0-8.0.pre-dev.zip",
"sha256": "e3e62300ee640eb92c368e3c96c7f14519c9fb956e186f7ff46f8654fe52e0ea"
},
{
"hash": "68e7d2e301e1969275cd11947e900b6b80405052",
"channel": "beta",
"version": "1.26.0-17.7.pre",
"release_date": "2021-02-24T18:26:29.797090Z",
"archive": "beta/windows/flutter_windows_1.26.0-17.7.pre-beta.zip",
"sha256": "eb0f8106e283d77cf125ddbe2dddfb8866f588e1b75f0d3c7e21d7aa0809fed1"
},
{
"hash": "f8cd24de95b16b5a1ce6ebc0716154271fbf6252",
"channel": "dev",
"version": "1.27.0-4.0.pre",
"release_date": "2021-02-17T23:12:21.058306Z",
"archive": "dev/windows/flutter_windows_1.27.0-4.0.pre-dev.zip",
"sha256": "54cdb27c9d96a4268b98fdd29c4937356289255154737a7cf08d6cc6ef76b57a"
},
{
"hash": "a29104a69b102a7485cd00d358eaeab219d258ab",
"channel": "beta",
"version": "1.26.0-17.6.pre",
"release_date": "2021-02-16T19:21:39.013663Z",
"archive": "beta/windows/flutter_windows_1.26.0-17.6.pre-beta.zip",
"sha256": "4e997dfd0dc38336d1918aebe17d701a10262ea2590d05af047a3b828c94b8b3"
},
{
"hash": "1fe38dcb5fc58242c6e0904a318bcc3ed5a4d837",
"channel": "beta",
"version": "1.26.0-17.5.pre",
"release_date": "2021-02-11T17:55:25.670687Z",
"archive": "beta/windows/flutter_windows_1.26.0-17.5.pre-beta.zip",
"sha256": "8f5a3440d125e5413255008894163970a0462588b04c50f3eb8139f7469cd351"
},
{
"hash": "68c96f100e42ab3dbf43e61e9e2fc875a2d50cb8",
"channel": "dev",
"version": "1.27.0-1.0.pre",
"release_date": "2021-02-10T23:58:19.092713Z",
"archive": "dev/windows/flutter_windows_1.27.0-1.0.pre-dev.zip",
"sha256": "b0aca40f8e82c798f185bae23bf62b3074f989c344002a1e13932f996b379277"
},
{
"hash": "48c9d3e0e19e8fec84f1d316ce0559f26ca7277d",
"channel": "beta",
"version": "1.26.0-17.4.pre",
"release_date": "2021-02-10T21:39:41.420263Z",
"archive": "beta/windows/flutter_windows_1.26.0-17.4.pre-beta.zip",
"sha256": "00ac018863b95c940964109f7101debcfdb0fa1337e703fe0ad82a56ee70ccbb"
},
{
"hash": "4b50ca7f7fbf56be72e54cd200825b760416a356",
"channel": "beta",
"version": "1.26.0-17.3.pre",
"release_date": "2021-02-05T06:39:35.115601Z",
"archive": "beta/windows/flutter_windows_1.26.0-17.3.pre-beta.zip",
"sha256": "4376b0e857c28b8634662f95bec116a4c0945b8d418d29b766ba747b3a8efc95"
},
{
"hash": "79b49b9e1057f90ebf797725233c6b311722de69",
"channel": "beta",
"version": "1.26.0-17.2.pre",
"release_date": "2021-02-04T19:54:53.806672Z",
"archive": "beta/windows/flutter_windows_1.26.0-17.2.pre-beta.zip",
"sha256": "34efce24134aea08cd2677892b78849f4dbe315bfd76530ac4b69c63caacaff1"
},
{
"hash": "79b49b9e1057f90ebf797725233c6b311722de69",
"channel": "dev",
"version": "1.26.0-17.2.pre",
"release_date": "2021-02-04T19:23:10.728898Z",
"archive": "dev/windows/flutter_windows_1.26.0-17.2.pre-dev.zip",
"sha256": "356023bc28318da455f6840a4f9ab7648f974004aa1fb5f0c8e7d1a6f1a8a610"
},
{
"hash": "c40e5294dda34d04cd222dfdf765f171e12e4a8d",
"channel": "dev",
"version": "1.26.0-17.1.pre",
"release_date": "2021-01-29T18:23:10.559300Z",
"archive": "dev/windows/flutter_windows_1.26.0-17.1.pre-dev.zip",
"sha256": "dbaaaee93dd58113881218351a468d3d953555dc6c0e80d8f5e03eac3136adae"
},
{
"hash": "9b2d32b605630f28625709ebd9d78ab3016b2bf6",
"channel": "stable",
"version": "1.22.6",
"release_date": "2021-01-25T19:48:46.814881Z",
"archive": "stable/windows/flutter_windows_1.22.6-stable.zip",
"sha256": "8a1bb036c8495c768b6d94855dcc4f603c7b1a76dceb70a15b2c48e0c9853ef3"
},
{
"hash": "a706cd211240f27be3b61f06d70f958c7a4156fe",
"channel": "dev",
"version": "1.26.0-12.0.pre",
"release_date": "2021-01-21T18:38:49.541663Z",
"archive": "dev/windows/flutter_windows_1.26.0-12.0.pre-dev.zip",
"sha256": "400e938aa19cfe6f44e2d319dde562982d269186526acdac53fbd8480109a8a4"
},
{
"hash": "5d36f2e7f5387b6c751449258ade8e4e6edf99be",
"channel": "beta",
"version": "1.25.0-8.3.pre",
"release_date": "2021-01-15T19:57:58.248802Z",
"archive": "beta/windows/flutter_windows_1.25.0-8.3.pre-beta.zip",
"sha256": "9a608b5fc0b9d67924dcfb736143c33f16c0d9368063009a068241f2385dc8b5"
},
{
"hash": "b9d06fffb2db263ab7021fc39adde7f2bf988a4a",
"channel": "dev",
"version": "1.26.0-8.0.pre",
"release_date": "2021-01-13T17:27:38.376912Z",
"archive": "dev/windows/flutter_windows_1.26.0-8.0.pre-dev.zip",
"sha256": "4e73f5aad7602add6108c10e2f86e1d5228f3fd5d96e37e0b0509c527e5d1849"
},
{
"hash": "b0a22998593fc605c723dee8ff4d9315c32cfe2c",
"channel": "beta",
"version": "1.25.0-8.2.pre",
"release_date": "2021-01-06T00:08:12.063194Z",
"archive": "beta/windows/flutter_windows_1.25.0-8.2.pre-beta.zip",
"sha256": "4553bf289f403acb904b29757d3366daadfe3088b005e7baa2a5c6fd00e69271"
},
{
"hash": "63062a64432cce03315d6b5196fda7912866eb37",
"channel": "dev",
"version": "1.26.0-1.0.pre",
"release_date": "2020-12-16T22:09:33.471589Z",
"archive": "dev/windows/flutter_windows_1.26.0-1.0.pre-dev.zip",
"sha256": "ff926adeb9ede90d8cd27c139923c3cf0595997bf8594abf8a5931b2f83eb7e2"
},
{
"hash": "8f89f6505b941329a864fef1527243a72800bf4d",
"channel": "beta",
"version": "1.25.0-8.1.pre",
"release_date": "2020-12-16T21:57:08.120807Z",
"archive": "beta/windows/flutter_windows_1.25.0-8.1.pre-beta.zip",
"sha256": "400d3532157f0a396c750268dc0c81da5684aff8a4ead873a0ec7ec3819cd9a0"
},
{
"hash": "78910062997c3a836feee883712c241a5fd22983",
"channel": "stable",
"version": "1.22.5",
"release_date": "2020-12-10T23:00:04.214180Z",
"archive": "stable/windows/flutter_windows_1.22.5-stable.zip",
"sha256": "84f28062f15362934b9f427bb3312a010443f4ce663af465edf80be8a7099b8d"
},
{
"hash": "a12e2a473a3214b4556ca589d2d9bd311ac7c6f1",
"channel": "dev",
"version": "1.25.0-8.0.pre",
"release_date": "2020-12-10T19:30:49.981962Z",
"archive": "dev/windows/flutter_windows_1.25.0-8.0.pre-dev.zip",
"sha256": "c0d9401c764bd568bb6834570ce6c37ac8a6e2df1dd9bc04521f21f36a6808f9"
},
{
"hash": "a7f5fd5360007518644597c60a1f2169eacccc2b",
"channel": "dev",
"version": "1.25.0-4.0.pre",
"release_date": "2020-12-02T17:04:18.037297Z",
"archive": "dev/windows/flutter_windows_1.25.0-4.0.pre-dev.zip",
"sha256": "23e537539f3271fa0f335681ccb41deaa17f1db012f6e4f519d86f37daf5db31"
},
{
"hash": "022b333a089afb81c471ec43d1f1f4f26305d876",
"channel": "beta",
"version": "1.24.0-10.2.pre",
"release_date": "2020-11-19T15:23:01.892138Z",
"archive": "beta/windows/flutter_windows_1.24.0-10.2.pre-beta.zip",
"sha256": "86459c48c6cf81c16afd4e8a6f7c77cda030b88b983ac677d7ec7a16427fe215"
},
{
"hash": "022b333a089afb81c471ec43d1f1f4f26305d876",
"channel": "dev",
"version": "1.24.0-10.2.pre",
"release_date": "2020-11-18T22:22:51.939704Z",
"archive": "dev/windows/flutter_windows_1.24.0-10.2.pre-dev.zip",
"sha256": "4c22139db82a405ec82cd17603174a2743be13be7b0320b800b8a27af360862e"
},
{
"hash": "405c85fe7ee688156028e87a623c9153d05591b2",
"channel": "dev",
"version": "1.24.0-10.1.pre",
"release_date": "2020-11-16T20:52:52.818886Z",
"archive": "dev/windows/flutter_windows_1.24.0-10.1.pre-dev.zip",
"sha256": "60a70fd07cfee4df7298e19699900cd560ac5d0a26be399ec7acbafc293919fc"
},
{
"hash": "1aafb3a8b9b0c36241c5f5b34ee914770f015818",
"channel": "stable",
"version": "1.22.4",
"release_date": "2020-11-13T20:08:53.636552Z",
"archive": "stable/windows/flutter_windows_1.22.4-stable.zip",
"sha256": "1eb4406be9d37db9ac3f3d5b1030ec1bfcb8209fce901c253c5452ba8706ab7c"
},
{
"hash": "a0860f6e87ba4f9031bee4d6f56c08b970606bee",
"channel": "dev",
"version": "1.24.0-7.0.pre",
"release_date": "2020-11-05T00:17:28.446963Z",
"archive": "dev/windows/flutter_windows_1.24.0-7.0.pre-dev.zip",
"sha256": "49a58240f816a95ce453d0348d8ea42160f41b77877d66d627f5ea57c91d3dda"
},
{
"hash": "13896b3bd1858687a06b1639d60c877206170df8",
"channel": "dev",
"version": "1.24.0-6.0.pre",
"release_date": "2020-10-30T19:28:20.535878Z",
"archive": "dev/windows/flutter_windows_1.24.0-6.0.pre-dev.zip",
"sha256": "58f0dc4e1434b2fe7dd791f7b40b01a63d1d46cc61253eb8106f33a30ed0be75"
},
{
"hash": "8874f21e79d7ec66d0457c7ab338348e31b17f1d",
"channel": "stable",
"version": "1.22.3",
"release_date": "2020-10-30T16:30:51.878352Z",
"archive": "stable/windows/flutter_windows_1.22.3-stable.zip",
"sha256": "31d7ccda5badebc9038c420b5953e8ebd07e95ea600a92abfdac9b4f674e97c3"
},
{
"hash": "2783f8e2e14efec8b7e08f668dde61c40d128c24",
"channel": "dev",
"version": "1.24.0-3.0.pre",
"release_date": "2020-10-22T21:10:01.308816Z",
"archive": "dev/windows/flutter_windows_1.24.0-3.0.pre-dev.zip",
"sha256": "042c3acb272fe1c6eddd443221939662c24a274db9d30ab14492134d8520bfcd"
},
{
"hash": "12bea61c2902784fec73b7f5f2ff3415f873fead",
"channel": "dev",
"version": "1.24.0-1.0.pre",
"release_date": "2020-10-20T02:42:24.155611Z",
"archive": "dev/windows/flutter_windows_1.24.0-1.0.pre-dev.zip",
"sha256": "50440e8ccb1ffc97ee10b156f626e88e3d7c5aa9a1b6c99956c8c7c574c8baba"
},
{
"hash": "84f3d28555368a70270e9ac8390a9441df95e752",
"channel": "stable",
"version": "1.22.2",
"release_date": "2020-10-16T18:16:45.139977Z",
"archive": "stable/windows/flutter_windows_1.22.2-stable.zip",
"sha256": "0629b9b5272f8d395acbdcdc182c0e8aee25abf3788a21622cc58a846f145fbd"
},
{
"hash": "198df796aa80073ef22bdf249e614e2ff33c6895",
"channel": "beta",
"version": "1.23.0-18.1.pre",
"release_date": "2020-10-15T23:22:20.329784Z",
"archive": "beta/windows/flutter_windows_1.23.0-18.1.pre-beta.zip",
"sha256": "54c1d70792a9008794293a9e0fcaaf9ddace6e4085120f8b168b3c4fb75d699f"
},
{
"hash": "37ebe3d82a9d5faeda7d3c1a6ad193030210a2cc",
"channel": "dev",
"version": "1.23.0-18.0.pre",
"release_date": "2020-10-14T00:33:56.051416Z",
"archive": "dev/windows/flutter_windows_1.23.0-18.0.pre-dev.zip",
"sha256": "092089200ee11d3033fd956e4dec66ae190d4030daf40265ee78c0b6c5a77306"
},
{
"hash": "4fa4f91d5cc65a5a98c7ccd91bb7d47814048a57",
"channel": "dev",
"version": "1.23.0-13.0.pre",
"release_date": "2020-10-12T18:06:41.508033Z",
"archive": "dev/windows/flutter_windows_1.23.0-13.0.pre-dev.zip",
"sha256": "5ea8c7122be27e3070770e028e9fe9880166658b785fa584a3fa306e5ab8f9e3"
},
{
"hash": "f30b7f4db93ee747cd727df747941a28ead25ff5",
"channel": "stable",
"version": "1.22.1",
"release_date": "2020-10-08T21:55:04.701840Z",
"archive": "stable/windows/flutter_windows_1.22.1-stable.zip",
"sha256": "99d01cb973eb3b66be4b0af8462b04fbea9dcc2f67b59798ec14c760962c5f5e"
},
{
"hash": "f30b7f4db93ee747cd727df747941a28ead25ff5",
"channel": "beta",
"version": "1.22.0-12.4.pre",
"release_date": "2020-10-08T21:31:48.568207Z",
"archive": "beta/windows/flutter_windows_1.22.0-12.4.pre-beta.zip",
"sha256": "684eafa09a20c20d947b889f56069197709ba92433b42942d96b83903fa59c08"
},
{
"hash": "db6e2d8aa5bb9a0bd3e75fc7470268b5a56fd0b0",
"channel": "dev",
"version": "1.23.0-7.0.pre",
"release_date": "2020-10-01T23:23:47.131642Z",
"archive": "dev/windows/flutter_windows_1.23.0-7.0.pre-dev.zip",
"sha256": "9e1ae41f8dd826fca87df7403e24cffe68c8949e32241fbc256c24e7793e8403"
},
{
"hash": "d408d302e22179d598f467e11da5dd968dbdc9ec",
"channel": "stable",
"version": "1.22.0",
"release_date": "2020-10-01T14:26:12.579271Z",
"archive": "stable/windows/flutter_windows_1.22.0-stable.zip",
"sha256": "7af70a3d159656f4c0d695a68eb3031bb2fb4381384866551308962367d24ac2"
},
{
"hash": "d408d302e22179d598f467e11da5dd968dbdc9ec",
"channel": "beta",
"version": "1.22.0-12.3.pre",
"release_date": "2020-09-29T20:21:55.098247Z",
"archive": "beta/windows/flutter_windows_1.22.0-12.3.pre-beta.zip",
"sha256": "24c2c47c9dfbe50f9cd3a9bce72bcb0c5f17926db6b653c004d8a4bf92838f94"
},
{
"hash": "2bafdc822636426fa09afb43236400a60ea432b2",
"channel": "beta",
"version": "1.22.0-12.2.pre",
"release_date": "2020-09-28T16:42:43.574873Z",
"archive": "beta/windows/flutter_windows_1.22.0-12.2.pre-beta.zip",
"sha256": "fc5e70612bec2350cd68c4a5f93de5196b72208b9c65af19d4f1bd55a0daca88"
},
{
"hash": "83dd176777cd04bd2aaca050f6bb6cb9edbf56a1",
"channel": "dev",
"version": "1.23.0-4.0.pre",
"release_date": "2020-09-22T21:12:48.856721Z",
"archive": "dev/windows/flutter_windows_1.23.0-4.0.pre-dev.zip",
"sha256": "3847dc6add2caad5c8bfd5820fb2ce6ce4a404094f1ab664d1c881b9194d92a5"
},
{
"hash": "8b3760638a189741cd9ca881aa2dd237c1df1be5",
"channel": "beta",
"version": "1.22.0-12.1.pre",
"release_date": "2020-09-16T17:12:50.559705Z",
"archive": "beta/windows/flutter_windows_1.22.0-12.1.pre-beta.zip",
"sha256": "a779a5d41233affa1460d3a4152b343df3d2bacf7be1eeedfd777c1fa6c21b3f"
},
{
"hash": "fba99f6cf9a14512e461e3122c8ddfaa25394e89",
"channel": "stable",
"version": "1.20.4",
"release_date": "2020-09-15T17:43:40.376494Z",
"archive": "stable/windows/flutter_windows_1.20.4-stable.zip",
"sha256": "8b52de9ae41bc2d51ca5ceb752c5fac52cd468fde5e8524a0238319d357ceaa1"
},
{
"hash": "a27c242b0eea731317cfec5bbdd9d35452ab3ecb",
"channel": "dev",
"version": "1.22.0-12.0.pre",
"release_date": "2020-09-14T21:45:02.784616Z",
"archive": "dev/windows/flutter_windows_1.22.0-12.0.pre-dev.zip",
"sha256": "65b7f68bce2f73c0881f127e68d376bffa3bbe90757a7bced19698b673085964"
},
{
"hash": "216dee60c0cc9449f0b29bcf922974d612263e24",
"channel": "stable",
"version": "1.20.3",
"release_date": "2020-09-02T18:00:39.551574Z",
"archive": "stable/windows/flutter_windows_1.20.3-stable.zip",
"sha256": "2aa3569cd268e5fd3c50e6312821708c1af17337a1b1a0beb6737bf4353d7371"
},
{
"hash": "7a4317519865146acda84702bba8775610598c0c",
"channel": "dev",
"version": "1.22.0-9.0.pre",
"release_date": "2020-09-01T19:30:46.508965Z",
"archive": "dev/windows/flutter_windows_1.22.0-9.0.pre-dev.zip",
"sha256": "bf6b52e21810388d154f8b16ecea8890ecac3d21e39577084f4426d932c0899d"
},
{
"hash": "81a45ec2e5f80fa71d5135f1702ce540558b416d",
"channel": "beta",
"version": "1.21.0-9.2.pre",
"release_date": "2020-08-28T18:32:42.466122Z",
"archive": "beta/windows/flutter_windows_1.21.0-9.2.pre-beta.zip",
"sha256": "496c23fdde65a276f8b8b7bf9e9d0735e6428e8106bd14759074601e53923076"
},
{
"hash": "ce40de69b7b4f89c66d19c8dbd3bd86ae30f1bc6",
"channel": "dev",
"version": "1.22.0-1.0.pre",
"release_date": "2020-08-21T22:00:57.926158Z",
"archive": "dev/windows/flutter_windows_1.22.0-1.0.pre-dev.zip",
"sha256": "3023efc5cf6be1276ae42f85b3b9975fa244e12776b6f96094b44a4e5b2cee31"
},
{
"hash": "be9bc8cb3942bda5d8ef4e44b44616c470625e18",
"channel": "beta",
"version": "1.21.0-9.1.pre",
"release_date": "2020-08-19T18:37:55.123838Z",
"archive": "beta/windows/flutter_windows_1.21.0-9.1.pre-beta.zip",
"sha256": "81ffd2796d04cae103ffd9480b1f0ab34eba902aa5c9a2da318f3e3d61ac6d99"
},
{
"hash": "bbfbf1770cca2da7c82e887e4e4af910034800b6",
"channel": "beta",
"version": "1.20.2",
"release_date": "2020-08-14T21:00:53.043744Z",
"archive": "beta/windows/flutter_windows_1.20.2-beta.zip",
"sha256": "a9ea4612b7c448b2f53786fcb5982699729cf3fac9ef8148e5de2708a3d3e646"
},
{
"hash": "bbfbf1770cca2da7c82e887e4e4af910034800b6",
"channel": "stable",
"version": "1.20.2",
"release_date": "2020-08-13T21:43:56.996853Z",
"archive": "stable/windows/flutter_windows_1.20.2-stable.zip",
"sha256": "479ea0d2d0b15daa6f4c2f0407aa04a886a064b3597e2bd0cb61f69249aaf16e"
},
{
"hash": "7c6f9dd2396dfe7deb6fd11edc12c10786490083",
"channel": "dev",
"version": "1.21.0-9.0.pre",
"release_date": "2020-08-13T17:29:33.581848Z",
"archive": "dev/windows/flutter_windows_1.21.0-9.0.pre-dev.zip",
"sha256": "cbeb33cc4a0961c7e282cfa512cbc15e969e62517425ea3a47e9882cacb64fd0"
},
{
"hash": "5a6dfa35caaf7bccb35488dc03677c150ebf2d97",
"channel": "dev",
"version": "1.21.0-7.0.pre",
"release_date": "2020-08-07T16:44:28.611131Z",
"archive": "dev/windows/flutter_windows_1.21.0-7.0.pre-dev.zip",
"sha256": "ae0a4e989c3ef7219bb18e95647d28948d6c48b57557560fbdd0d935971b0b26"
},
{
"hash": "2ae34518b87dd891355ed6c6ea8cb68c4d52bb9d",
"channel": "stable",
"version": "1.20.1",
"release_date": "2020-08-06T17:44:31.651593Z",
"archive": "stable/windows/flutter_windows_1.20.1-stable.zip",
"sha256": "4f64942e69805d9ae41016a4825909f19c6cdc907271cb26f1c5780d22ae482a"
},
{
"hash": "840c9205b344a59e48a5926ee2d791cc5640924c",
"channel": "stable",
"version": "1.20.0",
"release_date": "2020-08-05T14:24:47.740041Z",
"archive": "stable/windows/flutter_windows_1.20.0-stable.zip",
"sha256": "9433d4b3dcccdb88afee09be9f51f2aad60db1726577589b95f4f0975bc1d742"
},
{
"hash": "916c3ac648aa0498a70f32b5fc4f6c51447628e3",
"channel": "beta",
"version": "1.20.0-7.4.pre",
"release_date": "2020-08-03T21:42:52.456598Z",
"archive": "beta/windows/flutter_windows_1.20.0-7.4.pre-beta.zip",
"sha256": "a6d8a16dc33c4fe0648a1b67a5d0a45acb617ca8378f6167291a1255c4fd7a32"
},
{
"hash": "e606910f28be51c8151f6169072afe3b3a8b3c5e",
"channel": "beta",
"version": "1.20.0-7.3.pre",
"release_date": "2020-07-29T03:28:05.942742Z",
"archive": "beta/windows/flutter_windows_1.20.0-7.3.pre-beta.zip",
"sha256": "aa8f9c088790b164290a631cbd8e7b40632aed097a44bb051d158ededaf45008"
},
{
"hash": "a2bde82fbd52e09057a4146f46889f4e10342d32",
"channel": "beta",
"version": "1.20.0-7.2.pre",
"release_date": "2020-07-21T16:12:48.588988Z",
"archive": "beta/windows/flutter_windows_1.20.0-7.2.pre-beta.zip",
"sha256": "f6db3fb22adb60c84c649718bc7555e8fc5e84cbf6aae197e58af7c5068fe992"
},
{
"hash": "f25bd9c55c48c139524139b477d04b13e9f36b2c",
"channel": "dev",
"version": "1.21.0-1.0.pre",
"release_date": "2020-07-17T03:19:22.261393Z",
"archive": "dev/windows/flutter_windows_1.21.0-1.0.pre-dev.zip",
"sha256": "004d5aa5f0366b1eb8bc9c2767816ce6bcaa9a173a24235d8e37a0d2ed7c2b3a"
},
{
"hash": "7736f3bc90270dcb0480db2ccffbf1d13c28db85",
"channel": "dev",
"version": "1.20.0-7.1.pre",
"release_date": "2020-07-11T04:17:00.090738Z",
"archive": "dev/windows/flutter_windows_1.20.0-7.1.pre-dev.zip",
"sha256": "edd76342cf2f34b495fcbeb781101ed8ca8093972a41f55e726d0f2b55f02268"
},
{
"hash": "cc1af3afb62187cc37185afddc2d43bfef469db7",
"channel": "dev",
"version": "1.20.0-7.0.pre",
"release_date": "2020-07-09T19:12:03.422566Z",
"archive": "dev/windows/flutter_windows_1.20.0-7.0.pre-dev.zip",
"sha256": "33709a0b9d6944d20183d07f2ab4f8b387691ba5c4bcc2e51dd4af178fa18bef"
},
{
"hash": "0af027f80543302c65f99e1c1a2f3b3cbb8d04f3",
"channel": "dev",
"version": "1.20.0-3.0.pre",
"release_date": "2020-07-05T03:58:51.296714Z",
"archive": "dev/windows/flutter_windows_1.20.0-3.0.pre-dev.zip",
"sha256": "71e98dd58eecb59943dba836715487e889679459d02df8268ac1bcef489d7847"
},
{
"hash": "8fe7655ed20ffd1395f68e30539a847a01a30351",
"channel": "beta",
"version": "1.19.0-4.3.pre",
"release_date": "2020-07-01T23:41:14.600259Z",
"archive": "beta/windows/flutter_windows_1.19.0-4.3.pre-beta.zip",
"sha256": "7a6ffa058e83e736aad836232e9d089bdb0e9d0fa7ca2ff9e9b9311529060103"
},
{
"hash": "9b9b543d9265484132c798adaab6caca52055b08",
"channel": "beta",
"version": "1.19.0-4.2.pre",
"release_date": "2020-07-01T23:21:07.783044Z",
"archive": "beta/windows/flutter_windows_1.19.0-4.2.pre-beta.zip",
"sha256": "91adc51c627ba75c993eb33d43c54c1897546e03cc2dd0d2b9ddb8ea93802cbf"
},
{
"hash": "8af6b2f038c1172e61d418869363a28dffec3cb4",
"channel": "stable",
"version": "1.17.5",
"release_date": "2020-07-01T23:20:20.230478Z",
"archive": "stable/windows/flutter_windows_1.17.5-stable.zip",
"sha256": "690946999d8a88ddf41247e516d74debac11743b94c192afdc8587c2ec48a817"
},
{
"hash": "15a28159bcf4b3db13411cbc8d9b5fc51adc0a93",
"channel": "dev",
"version": "1.20.0-2.0.pre",
"release_date": "2020-06-26T21:20:45.564812Z",
"archive": "dev/windows/flutter_windows_1.20.0-2.0.pre-dev.zip",
"sha256": "c0189f6228510bfa1a46341ade13ae3a80d3e7a5b85ef63815abf0f653cbbac8"
},
{
"hash": "1ad9baa8b99a2897c20f9e6e54d3b9b359ade314",
"channel": "stable",
"version": "1.17.4",
"release_date": "2020-06-18T16:01:02.711833Z",
"archive": "stable/windows/flutter_windows_1.17.4-stable.zip",
"sha256": "eef98db85ea6170868d4c1b1fc0262dacf9207635b8191c0c7c690b58a661961"
},
{
"hash": "d9653445f4d1257b5f5adb4b271d1316469e8cf1",
"channel": "dev",
"version": "1.20.0-0.0.pre",
"release_date": "2020-06-11T15:29:25.410945Z",
"archive": "dev/windows/flutter_windows_1.20.0-0.0.pre-dev.zip",
"sha256": "02a62f577d8bbb87b40360b49a13a3530af1e769c02bb87baf5bba78ec0b3e29"
},
{
"hash": "f994b769743368b36b9c03fb359f62230b60ab92",
"channel": "beta",
"version": "1.19.0-4.1.pre",
"release_date": "2020-06-10T22:01:51.112115Z",
"archive": "beta/windows/flutter_windows_1.19.0-4.1.pre-beta.zip",
"sha256": "a7e5cd0a2725617633f6ff5eec483b756ecf560a9ed7bfdd9164a45817de2182"
},
{
"hash": "c264b70ec3b0cf9cd568eba5d65d0ce47fe57e1d",
"channel": "dev",
"version": "1.19.0-5.0.pre",
"release_date": "2020-06-09T23:55:05.402029Z",
"archive": "dev/windows/flutter_windows_1.19.0-5.0.pre-dev.zip",
"sha256": "e7d9a3557a765fdd4a816fef88e37f810f8930fd0729200abb5ddc137294cc22"
},
{
"hash": "b041144f833e05cf463b8887fa12efdec9493488",
"channel": "stable",
"version": "1.17.3",
"release_date": "2020-06-05T17:29:57.795041Z",
"archive": "stable/windows/flutter_windows_1.17.3-stable.zip",
"sha256": "44eb682c73824c0e9e3b68779079a11286108e0993aeb17d722c7a3dab6f7f98"
},
{
"hash": "2f7a59a8da20b3a7fbdfb7ac783dbca977a81653",
"channel": "dev",
"version": "1.19.0-4.0.pre",
"release_date": "2020-06-05T16:31:50.289225Z",
"archive": "dev/windows/flutter_windows_1.19.0-4.0.pre-dev.zip",
"sha256": "4fc8c8597cb77dcb1adab7af44e8c564d7857a4d57ac809e3d0cd148403f7090"
},
{
"hash": "6135091de9f8f6befc2ec7f8835d28d43a21cd05",
"channel": "dev",
"version": "1.19.0-3.0.pre",
"release_date": "2020-06-02T20:20:44.584873Z",
"archive": "dev/windows/flutter_windows_1.19.0-3.0.pre-dev.zip",
"sha256": "9e696fc4d572c7f42dc1661f247160fea80f8ca63611c9584d359c502cad107d"
},
{
"hash": "1d395c5e187370f2838bb043d3b438029b484bfc",
"channel": "dev",
"version": "1.19.0-2.0.pre",
"release_date": "2020-06-01T17:32:41.018798Z",
"archive": "dev/windows/flutter_windows_1.19.0-2.0.pre-dev.zip",
"sha256": "929db832e3504ebe92b9519938fc5ce2e28cd9a89bd2dd29709aa69d6a35c2be"
},
{
"hash": "5f21edf8b66e31a39133177319414395cc5b5f48",
"channel": "stable",
"version": "1.17.2",
"release_date": "2020-05-28T21:41:45.591652Z",
"archive": "stable/windows/flutter_windows_1.17.2-stable.zip",
"sha256": "48674906cbdf78e47b3a90e4e01d3ff7ccaff16be681e22d55a7e8db919c34d5"
},
{
"hash": "2738a1148ba6c9a6114df62358109407c3ef2553",
"channel": "beta",
"version": "1.18.0-11.1.pre",
"release_date": "2020-05-14T17:51:10.706190Z",
"archive": "beta/windows/flutter_windows_1.18.0-11.1.pre-beta.zip",
"sha256": "37724aa854e47c0603787fcea5f0b56815ca28f51192557f33a9567a413ef5f1"
},
{
"hash": "f7a6a7906be96d2288f5d63a5a54c515a6e987fe",
"channel": "stable",
"version": "1.17.1",
"release_date": "2020-05-13T18:08:40.384099Z",
"archive": "stable/windows/flutter_windows_1.17.1-stable.zip",
"sha256": "12b1e243b5a1620be7e6beaedff0fc47afeae3e8d8661fb096e5d2358b0e1566"
},
{
"hash": "456d80b9ddd74b4b5ca3b77bbfb70ab0e05d3fa8",
"channel": "dev",
"version": "1.19.0-1.0.pre",
"release_date": "2020-05-12T22:38:16.364915Z",
"archive": "dev/windows/flutter_windows_1.19.0-1.0.pre-dev.zip",
"sha256": "0115d43f1b6f1cba386dec7fca1721cab5cdf4e4c419152986e3537318ab6e72"
},
{
"hash": "a849daf2836d653ef80e01f428531b3f787671cb",
"channel": "dev",

View File

@@ -1,4 +1,5 @@
import io = require('@actions/io');
import exec = require('@actions/exec');
import fs = require('fs');
import path = require('path');
import nock = require('nock');
@@ -11,17 +12,7 @@ process.env['RUNNER_TOOL_CACHE'] = toolDir;
process.env['RUNNER_TEMP'] = tempDir;
import * as installer from '../src/installer';
function osName(): string {
switch (process.platform) {
case 'win32':
return 'windows';
case 'darwin':
return 'macos';
default:
return process.platform;
}
}
import * as release from '../src/release';
describe('installer tests', () => {
beforeAll(async () => {
@@ -29,86 +20,50 @@ describe('installer tests', () => {
await io.rmRF(tempDir);
}, 100000);
beforeEach(() => {
const platform = release.getPlatform();
nock('https://storage.googleapis.com', {allowUnmocked: true})
.get(`/flutter_infra/releases/releases_${platform}.json`)
.replyWithFile(200, path.join(dataDir, `releases_${platform}.json`));
});
afterEach(async () => {
nock.cleanAll();
nock.enableNetConnect();
await io.rmRF(toolDir);
await io.rmRF(tempDir);
}, 100000);
it('Downloads flutter', async () => {
await installer.getFlutter('1.0.0', 'stable');
const sdkDir = path.join(toolDir, 'flutter', '1.0.0-stable', 'x64');
await installer.getFlutter('2.0.0', 'stable');
const sdkDir = path.join(toolDir, 'flutter', '2.0.0-stable', 'x64');
expect(fs.existsSync(`${sdkDir}.complete`)).toBe(true);
expect(fs.existsSync(path.join(sdkDir, 'bin'))).toBe(true);
}, 300000);
it('Downloads flutter from dev channel', async () => {
await installer.getFlutter('1.17.0-dev.5.0', 'dev');
const sdkDir = path.join(toolDir, 'flutter', '1.17.0-dev.5.0-dev', 'x64');
it('Downloads flutter from master channel', async () => {
await installer.getFlutter('', 'master');
const sdkDir = path.join(toolDir, 'flutter', 'master', 'x64');
let stdout = '';
const options = {
listeners: {
stdout: (data: Buffer) => {
stdout += data.toString();
}
}
};
expect(fs.existsSync(`${sdkDir}.complete`)).toBe(true);
expect(fs.existsSync(path.join(sdkDir, 'bin'))).toBe(true);
await exec.exec(path.join(sdkDir, 'bin', 'flutter'), ['channel'], options);
expect(stdout).toContain('* master');
}, 300000);
describe('get the latest release of a flutter version', () => {
beforeEach(() => {
const platform = osName();
nock('https://storage.googleapis.com', {allowUnmocked: true})
.get(`/flutter_infra/releases/releases_${platform}.json`)
.replyWithFile(200, path.join(dataDir, `releases_${platform}.json`));
});
afterEach(() => {
nock.cleanAll();
nock.enableNetConnect();
});
it('Downloads latest flutter release from stable channel', async () => {
await installer.getFlutter('', 'stable');
const sdkDir = path.join(toolDir, 'flutter', '1.17.0-stable', 'x64');
expect(fs.existsSync(`${sdkDir}.complete`)).toBe(true);
expect(fs.existsSync(path.join(sdkDir, 'bin'))).toBe(true);
}, 300000);
it('Downloads latest flutter release from beta channel (using new release format)', async () => {
await installer.getFlutter('', 'beta');
const sdkDir = path.join(
toolDir,
'flutter',
'1.17.0-3.4.pre-beta',
'x64'
);
expect(fs.existsSync(`${sdkDir}.complete`)).toBe(true);
expect(fs.existsSync(path.join(sdkDir, 'bin'))).toBe(true);
}, 300000);
it('Downloads latest flutter release of 1.7 when using version 1.7 from dev channel', async () => {
await installer.getFlutter('1.7', 'dev');
const sdkDir = path.join(toolDir, 'flutter', '1.7.11-dev', 'x64');
expect(fs.existsSync(`${sdkDir}.complete`)).toBe(true);
expect(fs.existsSync(path.join(sdkDir, 'bin'))).toBe(true);
}, 300000);
it('Downloads latest flutter release of 1.7 when using version 1.7.x from dev channel', async () => {
await installer.getFlutter('1.7.x', 'dev');
const sdkDir = path.join(toolDir, 'flutter', '1.7.11-dev', 'x64');
expect(fs.existsSync(`${sdkDir}.complete`)).toBe(true);
expect(fs.existsSync(path.join(sdkDir, 'bin'))).toBe(true);
}, 300000);
it('Downloads latest flutter release of 1.17 when using version 1.17.x from dev channel (using new release format)', async () => {
await installer.getFlutter('1.17.x', 'dev');
const sdkDir = path.join(toolDir, 'flutter', '1.17.0-dev.5.0-dev', 'x64');
expect(fs.existsSync(`${sdkDir}.complete`)).toBe(true);
expect(fs.existsSync(path.join(sdkDir, 'bin'))).toBe(true);
}, 300000);
});
it('Throws if no location contains correct flutter version', async () => {
let thrown = false;
try {

145
__tests__/release.test.ts Normal file
View File

@@ -0,0 +1,145 @@
import fs = require('fs');
import path = require('path');
import nock = require('nock');
import * as release from '../src/release';
const platform = release.getPlatform();
describe('release tests', () => {
it('getPlatform', () => {
const platformMap: {[index: string]: string} = {
linux: 'linux',
darwin: 'macos',
win32: 'windows'
};
expect(platform).toEqual(platformMap[process.platform]);
});
describe('determineVersion', () => {
beforeEach(() => {
const dataDir = path.join(__dirname, 'data');
nock('https://storage.googleapis.com', {allowUnmocked: true})
.get(`/flutter_infra/releases/releases_${platform}.json`)
.replyWithFile(200, path.join(dataDir, `releases_${platform}.json`));
});
afterEach(() => {
nock.cleanAll();
nock.enableNetConnect();
});
it('channel: "stable", version: ""', async () => {
const result = await release.determineVersion('', 'stable', platform);
expect(result.version).toEqual('2.0.5');
expect(result.rawVersion).toEqual('2.0.5');
expect(result.downloadUrl).toContain('2.0.5');
});
it('channel: "beta", version: ""', async () => {
const result = await release.determineVersion('', 'beta', platform);
expect(result.version).toEqual('2.2.0-10.1.pre');
expect(result.rawVersion).toEqual('2.2.0-10.1.pre');
expect(result.downloadUrl).toContain('2.2.0-10.1.pre');
});
it('channel: "dev", version: ""', async () => {
const result = await release.determineVersion('', 'dev', platform);
expect(result.version).toEqual('2.2.0-10.1.pre');
expect(result.rawVersion).toEqual('2.2.0-10.1.pre');
expect(result.downloadUrl).toContain('2.2.0-10.1.pre');
});
it('channel: "dev", version: "1.17.x"', async () => {
const result = await release.determineVersion('1.17.x', 'dev', platform);
expect(result.version).toEqual('1.17.0-dev.5.0');
expect(result.rawVersion).toEqual('1.17.0-dev.5.0');
expect(result.downloadUrl).toContain('1.17.0-dev.5.0');
});
it('channel: "dev", version: "1.17"', async () => {
const result = await release.determineVersion('1.17', 'dev', platform);
expect(result.version).toEqual('1.17.0-dev.5.0');
expect(result.rawVersion).toEqual('1.17.0-dev.5.0');
expect(result.downloadUrl).toContain('1.17.0-dev.5.0');
});
it('channel: "dev", version: "1.7.x" (old format)', async () => {
const result = await release.determineVersion('1.7.x', 'dev', platform);
expect(result.version).toEqual('1.7.11');
expect(result.rawVersion).toEqual('v1.7.11');
expect(result.downloadUrl).toContain('v1.7.11');
});
it('channel: "dev", version: "1.7" (old format)', async () => {
const result = await release.determineVersion('1.7', 'dev', platform);
expect(result.version).toEqual('1.7.11');
expect(result.rawVersion).toEqual('v1.7.11');
expect(result.downloadUrl).toContain('v1.7.11');
});
it('channel: "dev", version: "0.12.x" (unknown)', async () => {
try {
await release.determineVersion('0.12.x', 'dev', platform);
} catch (e) {
expect(e.message).toEqual('unable to find release for 0.12.x');
}
});
it('channel: "dev", version: "0.12" (unknown)', async () => {
try {
await release.determineVersion('0.12', 'dev', platform);
} catch (e) {
expect(e.message).toEqual('unable to find release for 0.12');
}
});
it('channel: "dev", version: "1.17.0-dev.5.0"', async () => {
const result = await release.determineVersion(
'1.17.0-dev.5.0',
'dev',
platform
);
expect(result.version).toEqual('1.17.0-dev.5.0');
expect(result.rawVersion).toEqual('1.17.0-dev.5.0');
expect(result.downloadUrl).toContain('1.17.0-dev.5.0');
});
it('channel: "any", version: "1.17.x"', async () => {
const result = await release.determineVersion('1.17.x', 'any', platform);
expect(result.version).toEqual('1.17.5');
expect(result.rawVersion).toEqual('1.17.5');
expect(result.downloadUrl).toContain('1.17.5');
});
it('channel: "any", version: "1.19.x"', async () => {
const result = await release.determineVersion('1.19.x', 'any', platform);
expect(result.version).toEqual('1.19.0-5.0.pre');
expect(result.rawVersion).toEqual('1.19.0-5.0.pre');
expect(result.downloadUrl).toContain('1.19.0-5.0.pre');
});
it('channel: "any", version: "1.19.0-4.x"', async () => {
const result = await release.determineVersion(
'1.19.0-4.x',
'any',
platform
);
expect(result.version).toEqual('1.19.0-4.3.pre');
expect(result.rawVersion).toEqual('1.19.0-4.3.pre');
expect(result.downloadUrl).toContain('1.19.0-4.3.pre');
});
});
});

9009
dist/index.js vendored

File diff suppressed because it is too large Load Diff

3673
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -25,27 +25,27 @@
"author": "Alif Rachmawadi <arch@subosito.com>",
"license": "MIT",
"dependencies": {
"@actions/core": "^1.2.4",
"@actions/core": "^1.2.7",
"@actions/exec": "^1.0.4",
"@actions/http-client": "^1.0.8",
"@actions/io": "^1.0.2",
"@actions/tool-cache": "^1.3.4",
"semver": "^7.3.2",
"uuid": "^7.0.3"
"@actions/http-client": "^1.0.11",
"@actions/io": "^1.1.0",
"@actions/tool-cache": "^1.6.1",
"semver": "^7.3.5",
"uuid": "^8.3.2"
},
"devDependencies": {
"@types/jest": "^25.2.1",
"@types/node": "^12.12.38",
"@types/semver": "^7.1.0",
"@types/uuid": "^7.0.3",
"@zeit/ncc": "^0.22.1",
"jest": "^25.5.4",
"jest-circus": "^25.5.4",
"nock": "^12.0.3",
"@types/jest": "^26.0.23",
"@types/node": "^14.14.41",
"@types/semver": "^7.3.5",
"@types/uuid": "^8.3.0",
"@vercel/ncc": "^0.28.3",
"jest": "^26.6.3",
"jest-circus": "^26.6.3",
"nock": "^13.0.11",
"npm-run-all": "^4.1.5",
"prettier": "^1.19.1",
"ts-jest": "^25.5.0",
"typescript": "^3.8.3"
"prettier": "1.19.1",
"ts-jest": "^26.5.5",
"typescript": "^4.2.4"
},
"resolutions": {
"minimist": "^1.2.2"

View File

@@ -6,6 +6,14 @@ async function run() {
const version = core.getInput('flutter-version') || '';
const channel = core.getInput('channel') || 'stable';
if (channel == 'master' && version != '') {
core.setFailed(
'using `flutter-version` with master channel is not supported.'
);
return;
}
await installer.getFlutter(version, channel);
} catch (error) {
core.setFailed(error.message);

View File

@@ -1,269 +1,128 @@
import * as core from '@actions/core';
import * as io from '@actions/io';
import * as exec from '@actions/exec';
import * as tc from '@actions/tool-cache';
import * as fs from 'fs';
import * as path from 'path';
import * as httpm from '@actions/http-client';
import * as semver from 'semver';
const IS_WINDOWS = process.platform === 'win32';
const IS_DARWIN = process.platform === 'darwin';
const IS_LINUX = process.platform === 'linux';
const storageUrl = 'https://storage.googleapis.com/flutter_infra/releases';
let tempDirectory = process.env['RUNNER_TEMP'] || '';
if (!tempDirectory) {
let baseLocation;
if (IS_WINDOWS) {
baseLocation = process.env['USERPROFILE'] || 'C:\\';
} else {
if (process.platform === 'darwin') {
baseLocation = '/Users';
} else {
baseLocation = '/home';
}
}
tempDirectory = path.join(baseLocation, 'actions', 'temp');
}
import * as release from './release';
export async function getFlutter(
version: string,
channel: string
): Promise<void> {
const versionPart = version.split('.').filter(Boolean);
const platform = release.getPlatform();
const useMaster = channel == 'master';
if (
versionPart.length > 0 &&
(versionPart[1] == null || versionPart[2] == null)
) {
version = version.concat('.x');
}
const {version: selected, rawVersion, downloadUrl} = await determineVersion(
const {
version: selected,
downloadUrl,
channel: validatedChannel
} = await release.determineVersion(
version,
channel
useMaster ? 'dev' : channel,
platform
);
let cleanver = `${selected.replace('+', '-')}-${channel}`;
if (!useMaster && channel !== validatedChannel) {
core.debug(`Channel was identified as ${validatedChannel}`);
}
let cleanver = useMaster
? channel
: `${selected.replace('+', '-')}-${validatedChannel}`;
let toolPath = tc.find('flutter', cleanver);
if (toolPath) {
core.debug(`Tool found in cache ${toolPath}`);
} else {
core.debug('Downloading Flutter from Google storage');
core.debug(`Downloading Flutter from Google storage ${downloadUrl}`);
const sdkFile = await tc.downloadTool(downloadUrl);
let tempDir: string = generateTempDir();
const sdkDir = await extractDownload(sdkFile, tempDir);
core.debug(`Flutter sdk extracted to ${sdkDir}`);
const sdkCache = await tmpDir(platform);
const sdkDir = await extract(sdkFile, sdkCache, path.basename(downloadUrl));
toolPath = await tc.cacheDir(sdkDir, 'flutter', cleanver);
}
core.exportVariable('FLUTTER_HOME', toolPath);
core.exportVariable('FLUTTER_ROOT', toolPath);
let pubCachePath = process.env['PUB_CACHE'] || '';
if (!pubCachePath) {
pubCachePath = path.join(toolPath, '.pub-cache');
core.exportVariable('PUB_CACHE', pubCachePath);
}
core.addPath(path.join(toolPath, 'bin'));
core.addPath(path.join(toolPath, 'bin', 'cache', 'dart-sdk', 'bin'));
core.addPath(path.join(pubCachePath, 'bin'));
if (useMaster) {
await exec.exec('flutter', ['channel', 'master']);
await exec.exec('flutter', ['upgrade']);
}
}
function osName(): string {
if (IS_DARWIN) return 'macos';
if (IS_WINDOWS) return 'windows';
function tmpBaseDir(platform: string): string {
let tempDirectory = process.env['RUNNER_TEMP'] || '';
return process.platform;
if (tempDirectory) {
return tempDirectory;
}
let baseLocation;
switch (platform) {
case 'windows':
baseLocation = process.env['USERPROFILE'] || 'C:\\';
break;
case 'macos':
baseLocation = '/Users';
break;
default:
baseLocation = '/home';
break;
}
return path.join(baseLocation, 'actions', 'temp');
}
function extName(): string {
if (IS_LINUX) return 'tar.xz';
return 'zip';
}
function generateTempDir(): string {
return path.join(
tempDirectory,
async function tmpDir(platform: string): Promise<string> {
const baseDir = tmpBaseDir(platform);
const tempDir = path.join(
baseDir,
'temp_' + Math.floor(Math.random() * 2000000000)
);
await io.mkdirP(tempDir);
return tempDir;
}
async function extractDownload(
async function extract(
sdkFile: string,
destDir: string
sdkCache: string,
originalFilename: string
): Promise<string> {
await io.mkdirP(destDir);
const fileStats = fs.statSync(path.normalize(sdkFile));
const sdkPath = path.normalize(sdkFile);
const stats = fs.statSync(sdkPath);
if (fileStats.isFile()) {
const stats = fs.statSync(sdkFile);
if (stats.isFile()) {
await extractFile(sdkFile, destDir);
if (!stats) {
throw new Error(`Failed to extract ${sdkFile} - it doesn't exist`);
} else if (stats.isDirectory()) {
throw new Error(`Failed to extract ${sdkFile} - it is a directory`);
}
const sdkDir = path.join(destDir, fs.readdirSync(destDir)[0]);
if (originalFilename.endsWith('tar.xz')) {
await tc.extractTar(sdkFile, sdkCache, 'x');
} else {
await tc.extractZip(sdkFile, sdkCache);
}
return sdkDir;
return path.join(sdkCache, fs.readdirSync(sdkCache)[0]);
} else {
throw new Error(`Flutter sdk argument ${sdkFile} is not a file`);
}
}
async function extractFile(file: string, destDir: string): Promise<void> {
const stats = fs.statSync(file);
if (!stats) {
throw new Error(`Failed to extract ${file} - it doesn't exist`);
} else if (stats.isDirectory()) {
throw new Error(`Failed to extract ${file} - it is a directory`);
}
if ('tar.xz' === extName()) {
await tc.extractTar(file, destDir, 'x');
} else {
await tc.extractZip(file, destDir);
}
}
async function determineVersion(
version: string,
channel: string
): Promise<{version: string; rawVersion: string; downloadUrl: string}> {
if (version.endsWith('.x') || version === '') {
return await getLatestVersion(version, channel);
}
return await getSelectedVersion(version, channel);
}
interface IFlutterChannel {
[key: string]: string;
beta: string;
dev: string;
stable: string;
}
interface IFlutterRelease {
hash: string;
channel: string;
version: string;
archive: string;
}
interface IFlutterStorage {
current_release: IFlutterChannel;
releases: IFlutterRelease[];
}
async function getReleases(): Promise<IFlutterStorage> {
const releasesUrl: string = `${storageUrl}/releases_${osName()}.json`;
const http: httpm.HttpClient = new httpm.HttpClient('flutter-action');
const storage: IFlutterStorage | null = (
await http.getJson<IFlutterStorage | null>(releasesUrl)
).result;
if (!storage) {
throw new Error('unable to get flutter releases');
}
return storage;
}
async function getSelectedVersion(
version: string,
channel: string
): Promise<{version: string; rawVersion: string; downloadUrl: string}> {
const storage = await getReleases();
const release = storage.releases.find(release => {
if (release.channel != channel) return false;
return compare(version, release.version);
});
if (!release) {
throw new Error(`invalid flutter version ${version}, channel ${channel}`);
}
return {
version,
rawVersion: release.version,
downloadUrl: `${storageUrl}/${release.archive}`
};
}
async function getLatestVersion(
version: string,
channel: string
): Promise<{version: string; rawVersion: string; downloadUrl: string}> {
const storage = await getReleases();
if (version.endsWith('.x')) {
const sver = version.slice(0, version.length - 2);
const releases = storage.releases.filter(release => {
if (release.channel != channel) return false;
return prefixCompare(sver, release.version);
});
const versions = releases
.map(release => release.version)
.map(version =>
version.startsWith('v') ? version.slice(1, version.length) : version
);
const sortedVersions = versions.sort(semver.rcompare);
let cver = sortedVersions[0];
let release = releases.find(release => compare(cver, release.version));
if (!release) {
throw new Error(`unable to find release for ${cver}`);
}
core.debug(
`latest version of ${version} from channel ${channel} is ${release.version}`
);
return {
version: cver,
rawVersion: release.version,
downloadUrl: `${storageUrl}/${release.archive}`
};
}
const channelVersion = storage.releases.find(release => {
return (
release.hash === storage.current_release[channel] &&
release.channel == channel
);
});
if (!channelVersion) {
throw new Error(`unable to get latest version from channel ${channel}`);
}
let rver = channelVersion.version;
let cver = rver.startsWith('v') ? rver.slice(1, rver.length) : rver;
core.debug(`latest version from channel ${channel} is ${rver}`);
return {
version: cver,
rawVersion: rver,
downloadUrl: `${storageUrl}/${channelVersion.archive}`
};
}
function compare(version: string, releaseVersion: string): boolean {
if (releaseVersion.startsWith('v')) {
return releaseVersion === `v${version}`;
}
return releaseVersion === version;
}
function prefixCompare(version: string, releaseVersion: string): boolean {
if (releaseVersion.startsWith('v')) {
return releaseVersion.startsWith(`v${version}`);
}
return releaseVersion.startsWith(version);
}

199
src/release.ts Normal file
View File

@@ -0,0 +1,199 @@
import * as core from '@actions/core';
import * as httpm from '@actions/http-client';
import * as semver from 'semver';
export const storageUrl =
'https://storage.googleapis.com/flutter_infra_release/releases';
interface IFlutterData {
channel: string;
version: string;
rawVersion: string;
downloadUrl: string;
}
interface IFlutterChannel {
[key: string]: string;
beta: string;
dev: string;
stable: string;
}
interface IFlutterRelease {
hash: string;
channel: string;
version: string;
archive: string;
}
interface IFlutterStorage {
current_release: IFlutterChannel;
releases: IFlutterRelease[];
}
export function getPlatform(): string {
const platform = process.platform;
if (platform == 'win32') {
return 'windows';
}
if (platform == 'darwin') {
return 'macos';
}
return platform;
}
export async function determineVersion(
version: string,
channel: string,
platform: string
): Promise<IFlutterData> {
const storage = await getReleases(platform);
if (version === '') {
return getLatestVersion(storage, channel);
}
if (version.endsWith('.x')) {
return getWildcardVersion(storage, channel, version);
}
return getVersion(storage, channel, version);
}
async function getReleases(platform: string): Promise<IFlutterStorage> {
const releasesUrl: string = `${storageUrl}/releases_${platform}.json`;
const http: httpm.HttpClient = new httpm.HttpClient('flutter-action');
const storage: IFlutterStorage | null = (
await http.getJson<IFlutterStorage | null>(releasesUrl)
).result;
if (!storage) {
throw new Error('unable to get flutter releases');
}
return storage;
}
async function getLatestVersion(
storage: IFlutterStorage,
channel: string
): Promise<IFlutterData> {
const channelVersion = storage.releases.find(release => {
return (
release.hash === storage.current_release[channel] &&
validateChannel(release.channel, channel)
);
});
if (!channelVersion) {
throw new Error(`unable to get latest version from channel ${channel}`);
}
let rver = channelVersion.version;
let cver = rver.startsWith('v') ? rver.slice(1, rver.length) : rver;
core.debug(`latest version from channel ${channel} is ${rver}`);
const flutterData: IFlutterData = {
channel: channelVersion.channel,
version: cver,
rawVersion: rver,
downloadUrl: `${storageUrl}/${channelVersion.archive}`
};
return flutterData;
}
function validateChannel(releaseChannel: string, channel: string) {
return releaseChannel === channel || channel === 'any';
}
async function getWildcardVersion(
storage: IFlutterStorage,
channel: string,
version: string
): Promise<IFlutterData> {
let sver = version.endsWith('.x')
? version.slice(0, version.length - 2)
: version;
const releases = storage.releases.filter(release => {
return (
validateChannel(release.channel, channel) &&
prefixCompare(sver, release.version)
);
});
const versions = releases
.map(release => release.version)
.map(version =>
version.startsWith('v') ? version.slice(1, version.length) : version
);
const sortedVersions = versions.sort(semver.rcompare);
let cver = sortedVersions[0];
let release = releases.find(release => compare(cver, release.version));
if (!release) {
throw new Error(`unable to find release for ${version}`);
}
core.debug(
`latest version of ${version} from channel ${channel} is ${release.version}`
);
const flutterData = {
channel: release.channel,
version: cver,
rawVersion: release.version,
downloadUrl: `${storageUrl}/${release.archive}`
};
return flutterData;
}
async function getVersion(
storage: IFlutterStorage,
channel: string,
version: string
): Promise<IFlutterData> {
const release = storage.releases.find(release => {
return (
validateChannel(release.channel, channel) &&
compare(version, release.version)
);
});
if (!release) {
return getWildcardVersion(storage, channel, version);
}
const flutterData = {
channel: release.channel,
version,
rawVersion: release.version,
downloadUrl: `${storageUrl}/${release.archive}`
};
return flutterData;
}
function compare(version: string, releaseVersion: string): boolean {
if (releaseVersion.startsWith('v')) {
return releaseVersion === `v${version}`;
}
return releaseVersion === version;
}
function prefixCompare(version: string, releaseVersion: string): boolean {
if (releaseVersion.startsWith('v')) {
return releaseVersion.startsWith(`v${version}`);
}
return releaseVersion.startsWith(version);
}