mirror of
https://github.com/webinstall/webi-installers.git
synced 2026-08-19 03:56:16 +00:00
ref(flutter): cleanup releases.js, add hash, don't resort
This commit is contained in:
+89
-45
@@ -1,55 +1,99 @@
|
||||
'use strict';
|
||||
|
||||
var map = {};
|
||||
var FLUTTER_OSES = ['macos', 'linux', 'windows'];
|
||||
|
||||
module.exports = function (request) {
|
||||
var all = {
|
||||
// stable, beta, dev
|
||||
var channelMap = {};
|
||||
|
||||
// This can be spot-checked against
|
||||
// https://docs.flutter.dev/release/archive?tab=windows
|
||||
|
||||
// The release URLs are
|
||||
// - https://storage.googleapis.com/flutter_infra_release/releases/releases_macos.json
|
||||
// - https://storage.googleapis.com/flutter_infra_release/releases/releases_linux.json
|
||||
// - https://storage.googleapis.com/flutter_infra_release/releases/releases_windows.json
|
||||
// The old release URLs are
|
||||
// - https://storage.googleapis.com/flutter_infra/releases/releases_macos.json
|
||||
// - https://storage.googleapis.com/flutter_infra/releases/releases_linux.json
|
||||
// - https://storage.googleapis.com/flutter_infra/releases/releases_windows.json
|
||||
|
||||
// The data looks like
|
||||
// {
|
||||
// "base_url": "https://storage.googleapis.com/flutter_infra/releases",
|
||||
// "current_release": {
|
||||
// "beta": "b22742018b3edf16c6cadd7b76d9db5e7f9064b5",
|
||||
// "dev": "fa5883b78e566877613ad1ccb48dd92075cb5c23",
|
||||
// "stable": "02c026b03cd31dd3f867e5faeb7e104cce174c5f"
|
||||
// },
|
||||
// "releases": [
|
||||
// {
|
||||
// "hash": "fa5883b78e566877613ad1ccb48dd92075cb5c23",
|
||||
// "channel": "dev",
|
||||
// "version": "2.3.0-16.0.pre",
|
||||
// "release_date": "2021-05-27T23:58:47.683121Z",
|
||||
// "archive": "dev/macos/flutter_macos_2.3.0-16.0.pre-dev.zip",
|
||||
// "sha256": "f572b42d36714e6c58a3ed170b93bb414e2ced3ca4bde5094fbe18061cbcba6c"
|
||||
// },
|
||||
// {
|
||||
// "hash": "02c026b03cd31dd3f867e5faeb7e104cce174c5f",
|
||||
// "channel": "stable",
|
||||
// "version": "2.2.1",
|
||||
// "release_date": "2021-05-27T23:06:07.243882Z",
|
||||
// "archive": "stable/macos/flutter_macos_2.2.1-stable.zip",
|
||||
// "sha256": "6373d39ec563c337600baf42a42b258420208e4523d85479373e113d61d748df"
|
||||
// },
|
||||
// {
|
||||
// "hash": "b22742018b3edf16c6cadd7b76d9db5e7f9064b5",
|
||||
// "channel": "beta",
|
||||
// "version": "2.2.0",
|
||||
// "release_date": "2021-05-19T21:14:59.281482Z",
|
||||
// "archive": "beta/macos/flutter_macos_2.2.0-beta.zip",
|
||||
// "sha256": "31ab530e708f8d1274712211253a27a4ce7d676f139d30f2ec021df22382f052"
|
||||
// }
|
||||
// ]
|
||||
// }
|
||||
|
||||
module.exports = async function (request) {
|
||||
let all = {
|
||||
download: '',
|
||||
releases: [],
|
||||
channels: [],
|
||||
};
|
||||
return Promise.all(
|
||||
['macos', 'linux', 'windows'].map(function (osname) {
|
||||
return request({
|
||||
url: `https://storage.googleapis.com/flutter_infra_release/releases/releases_${osname}.json`,
|
||||
json: true,
|
||||
}).then(function (resp) {
|
||||
var body = resp.body;
|
||||
all.download = body.base_url + '/{{ download }}';
|
||||
body.releases.forEach(function (asset) {
|
||||
if (!map[asset.channel]) {
|
||||
map[asset.channel] = true;
|
||||
}
|
||||
all.releases.push({
|
||||
version: asset.version,
|
||||
lts: false,
|
||||
channel: asset.channel,
|
||||
date: asset.release_date.replace(/T.*/, ''),
|
||||
os: osname,
|
||||
arch: 'amd64',
|
||||
hash: '-', // not sure about including hash / sha256 yet
|
||||
download: asset.archive,
|
||||
});
|
||||
});
|
||||
});
|
||||
}),
|
||||
).then(function () {
|
||||
all.releases.sort(function (a, b) {
|
||||
if ('stable' === a.channel && a.channel !== b.channel) {
|
||||
return -1;
|
||||
}
|
||||
if ('stable' === b.channel && a.channel !== b.channel) {
|
||||
return 1;
|
||||
}
|
||||
if ('beta' === a.channel && a.channel !== b.channel) {
|
||||
return -1;
|
||||
}
|
||||
if ('beta' === b.channel && a.channel !== b.channel) {
|
||||
return 1;
|
||||
}
|
||||
return new Date(b.date).valueOf() - new Date(a.date).valueOf();
|
||||
|
||||
for (let osname of FLUTTER_OSES) {
|
||||
let resp = await request({
|
||||
url: `https://storage.googleapis.com/flutter_infra_release/releases/releases_${osname}.json`,
|
||||
json: true,
|
||||
});
|
||||
return all;
|
||||
});
|
||||
|
||||
let body = resp.body;
|
||||
all.download = `${body.base_url}/{{ download }}`;
|
||||
|
||||
for (let asset of body.releases) {
|
||||
if (!channelMap[asset.channel]) {
|
||||
channelMap[asset.channel] = true;
|
||||
}
|
||||
|
||||
all.releases.push({
|
||||
version: asset.version,
|
||||
lts: false,
|
||||
channel: asset.channel,
|
||||
date: asset.release_date.replace(/T.*/, ''),
|
||||
os: osname,
|
||||
arch: 'amd64',
|
||||
hash: asset.hash,
|
||||
download: asset.archive,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
all.channels = Object.keys(channelMap);
|
||||
|
||||
// note: versions have a waterfall relationship with channels:
|
||||
// - a release that is in beta today may become stable tomorrow
|
||||
// - semver prereleases are either beta or dev
|
||||
|
||||
return all;
|
||||
};
|
||||
|
||||
if (module === require.main) {
|
||||
|
||||
Reference in New Issue
Block a user