flutterPackages: support beta releases
This commit is contained in:
@@ -67,6 +67,20 @@ let
|
||||
exit 1
|
||||
fi
|
||||
'';
|
||||
# https://github.com/dart-lang/pub/blob/e1fbda73d1ac597474b82882ee0bf6ecea5df108/lib/src/sdk/dart.dart#L80
|
||||
"dart" = name: runCommand "dart-sdk-${name}" { passthru.packageRoot = "."; } ''
|
||||
for path in '${flutter.dart}/pkg/${name}'; do
|
||||
if [ -d "$path" ]; then
|
||||
ln -s "$path" "$out"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ! -e "$out" ]; then
|
||||
echo 1>&2 'The Dart SDK does not contain the requested package: ${name}!'
|
||||
exit 1
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
extraPackageConfigSetup = ''
|
||||
|
||||
@@ -14,28 +14,29 @@ let
|
||||
, patches
|
||||
, pubspecLock
|
||||
, artifactHashes
|
||||
, channel
|
||||
}:
|
||||
let
|
||||
args = {
|
||||
inherit version engineVersion patches pubspecLock artifactHashes;
|
||||
inherit version engineVersion patches pubspecLock artifactHashes channel;
|
||||
|
||||
dart = dart.override {
|
||||
version = dartVersion;
|
||||
sources = {
|
||||
"${dartVersion}-x86_64-linux" = fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-linux-x64-release.zip";
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-linux-x64-release.zip";
|
||||
sha256 = dartHash.x86_64-linux;
|
||||
};
|
||||
"${dartVersion}-aarch64-linux" = fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-linux-arm64-release.zip";
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-linux-arm64-release.zip";
|
||||
sha256 = dartHash.aarch64-linux;
|
||||
};
|
||||
"${dartVersion}-x86_64-darwin" = fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-macos-x64-release.zip";
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-macos-x64-release.zip";
|
||||
sha256 = dartHash.x86_64-darwin;
|
||||
};
|
||||
"${dartVersion}-aarch64-darwin" = fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-macos-arm64-release.zip";
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-macos-arm64-release.zip";
|
||||
sha256 = dartHash.aarch64-darwin;
|
||||
};
|
||||
};
|
||||
@@ -65,8 +66,12 @@ let
|
||||
patches = (getPatches ./patches) ++ (getPatches (versionDir + "/patches"));
|
||||
} // data))))
|
||||
(builtins.readDir ./versions);
|
||||
|
||||
stableFlutterVersions = lib.attrsets.filterAttrs (_: v: v.channel == "stable") flutterVersions;
|
||||
betaFlutterVersions = lib.attrsets.filterAttrs (_: v: v.channel == "beta") flutterVersions;
|
||||
in
|
||||
flutterVersions // {
|
||||
stable = flutterVersions.${lib.last (lib.naturalSort (builtins.attrNames flutterVersions))};
|
||||
beta = flutterVersions.${lib.last (lib.naturalSort (builtins.attrNames betaFlutterVersions))};
|
||||
stable = flutterVersions.${lib.last (lib.naturalSort (builtins.attrNames stableFlutterVersions))};
|
||||
inherit wrapFlutter mkFlutter;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
, stdenv
|
||||
, systemPlatform
|
||||
, buildDartApplication
|
||||
, runCommand
|
||||
, git
|
||||
, which
|
||||
, dart
|
||||
@@ -54,5 +55,22 @@ buildDartApplication.override { inherit dart; } rec {
|
||||
popd
|
||||
'';
|
||||
|
||||
sdkSourceBuilders = {
|
||||
# https://github.com/dart-lang/pub/blob/e1fbda73d1ac597474b82882ee0bf6ecea5df108/lib/src/sdk/dart.dart#L80
|
||||
"dart" = name: runCommand "dart-sdk-${name}" { passthru.packageRoot = "."; } ''
|
||||
for path in '${dart}/pkg/${name}'; do
|
||||
if [ -d "$path" ]; then
|
||||
ln -s "$path" "$out"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ! -e "$out" ]; then
|
||||
echo 1>&2 'The Dart SDK does not contain the requested package: ${name}!'
|
||||
exit 1
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
inherit pubspecLock;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{ version
|
||||
, engineVersion
|
||||
, patches
|
||||
, channel
|
||||
, dart
|
||||
, src
|
||||
, pubspecLock
|
||||
@@ -74,7 +75,7 @@ let
|
||||
"devToolsVersion": "$(cat "${dart}/bin/resources/devtools/version.json" | jq -r .version)",
|
||||
"flutterVersion": "${version}",
|
||||
"frameworkVersion": "${version}",
|
||||
"channel": "stable",
|
||||
"channel": "${channel}",
|
||||
"repositoryUrl": "https://github.com/flutter/flutter.git",
|
||||
"frameworkRevision": "nixpkgs000000000000000000000000000000000",
|
||||
"frameworkCommitDate": "1970-01-01 00:00:00",
|
||||
@@ -124,7 +125,7 @@ let
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
inherit dart engineVersion artifactHashes;
|
||||
inherit dart engineVersion artifactHashes channel;
|
||||
tools = flutterTools;
|
||||
# The derivation containing the original Flutter SDK files.
|
||||
# When other derivations wrap this one, any unmodified files
|
||||
|
||||
@@ -1,26 +1,27 @@
|
||||
let
|
||||
dartVersion = "@dart_version@";
|
||||
platform = "@platform@";
|
||||
channel = "@channel@";
|
||||
in
|
||||
{
|
||||
x86_64-linux = { fetchzip }:
|
||||
fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-linux-x64-release.zip";
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-linux-x64-release.zip";
|
||||
sha256 = "0000000000000000000000000000000000000000000000000000";
|
||||
};
|
||||
aarch64-linux = { fetchzip }:
|
||||
fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-linux-arm64-release.zip";
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-linux-arm64-release.zip";
|
||||
sha256 = "0000000000000000000000000000000000000000000000000000";
|
||||
};
|
||||
x86_64-darwin = { fetchzip }:
|
||||
fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-macos-x64-release.zip";
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-macos-x64-release.zip";
|
||||
sha256 = "0000000000000000000000000000000000000000000000000000";
|
||||
};
|
||||
aarch64-darwin = { fetchzip }:
|
||||
fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-macos-arm64-release.zip";
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-macos-arm64-release.zip";
|
||||
sha256 = "0000000000000000000000000000000000000000000000000000";
|
||||
};
|
||||
}.${platform}
|
||||
|
||||
@@ -111,7 +111,7 @@ def get_artifact_hashes(flutter_compact_version):
|
||||
return result_dict
|
||||
|
||||
|
||||
def get_dart_hashes(dart_version):
|
||||
def get_dart_hashes(dart_version, channel):
|
||||
platforms = [
|
||||
"x86_64-linux",
|
||||
"aarch64-linux",
|
||||
@@ -122,6 +122,7 @@ def get_dart_hashes(dart_version):
|
||||
code = load_code(
|
||||
"get-dart-hashes.nix",
|
||||
dart_version=dart_version,
|
||||
channel=channel,
|
||||
platform=platform)
|
||||
stderr = nix_build_to_fail(code)
|
||||
|
||||
@@ -177,6 +178,7 @@ def get_pubspec_lock(flutter_compact_version, flutter_src):
|
||||
def write_data(
|
||||
nixpkgs_flutter_version_directory,
|
||||
flutter_version,
|
||||
channel,
|
||||
engine_hash,
|
||||
dart_version,
|
||||
dart_hash,
|
||||
@@ -187,6 +189,7 @@ def write_data(
|
||||
f.write(json.dumps({
|
||||
"version": flutter_version,
|
||||
"engineVersion": engine_hash,
|
||||
"channel": channel,
|
||||
"dartVersion": dart_version,
|
||||
"dartHash": dart_hash,
|
||||
"flutterHash": flutter_hash,
|
||||
@@ -229,18 +232,21 @@ def update_all_packages():
|
||||
# Finds Flutter version, Dart version, and Engine hash.
|
||||
# If the Flutter version is given, it uses that. Otherwise finds the
|
||||
# latest stable Flutter version.
|
||||
def find_versions(flutter_version=None):
|
||||
def find_versions(flutter_version=None, channel=None):
|
||||
engine_hash = None
|
||||
dart_version = None
|
||||
|
||||
releases = json.load(urllib.request.urlopen(
|
||||
"https://storage.googleapis.com/flutter_infra_release/releases/releases_linux.json"))
|
||||
|
||||
if not channel:
|
||||
channel = 'stable'
|
||||
|
||||
if not flutter_version:
|
||||
stable_hash = releases['current_release']['stable']
|
||||
hash = releases['current_release'][channel]
|
||||
release = next(
|
||||
filter(
|
||||
lambda release: release['hash'] == stable_hash,
|
||||
lambda release: release['hash'] == hash,
|
||||
releases['releases']))
|
||||
flutter_version = release['version']
|
||||
|
||||
@@ -265,21 +271,25 @@ def find_versions(flutter_version=None):
|
||||
filter(
|
||||
lambda release: release['version'] == flutter_version,
|
||||
releases['releases']))['dart_sdk_version']
|
||||
|
||||
if " " in dart_version:
|
||||
dart_version = dart_version.split(' ')[2][:-1]
|
||||
except StopIteration:
|
||||
exit(
|
||||
f"Couldn't find Dart version for Flutter version: {flutter_version}")
|
||||
|
||||
return (flutter_version, engine_hash, dart_version)
|
||||
return (flutter_version, engine_hash, dart_version, channel)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Update Flutter in Nixpkgs')
|
||||
parser.add_argument('--version', type=str, help='Specify Flutter version')
|
||||
parser.add_argument('--channel', type=str, help='Specify Flutter release channel')
|
||||
parser.add_argument('--artifact-hashes', action='store_true',
|
||||
help='Whether to get artifact hashes')
|
||||
args = parser.parse_args()
|
||||
|
||||
(flutter_version, engine_hash, dart_version) = find_versions(args.version)
|
||||
(flutter_version, engine_hash, dart_version, channel) = find_versions(args.version, args.channel)
|
||||
|
||||
flutter_compact_version = '_'.join(flutter_version.split('.')[:2])
|
||||
|
||||
@@ -291,11 +301,11 @@ def main():
|
||||
"\n")
|
||||
return
|
||||
|
||||
print(f"Flutter version: {flutter_version} ({flutter_compact_version})")
|
||||
print(f"Flutter version: {flutter_version} ({flutter_compact_version}) on ({channel})")
|
||||
print(f"Engine hash: {engine_hash}")
|
||||
print(f"Dart version: {dart_version}")
|
||||
|
||||
dart_hash = get_dart_hashes(dart_version)
|
||||
dart_hash = get_dart_hashes(dart_version, channel)
|
||||
(flutter_hash, flutter_src) = get_flutter_hash_and_src(flutter_version)
|
||||
|
||||
nixpkgs_flutter_version_directory = f"{NIXPKGS_ROOT}/pkgs/development/compilers/flutter/versions/{flutter_compact_version}"
|
||||
@@ -309,6 +319,7 @@ def main():
|
||||
common_data_args = {
|
||||
"nixpkgs_flutter_version_directory": nixpkgs_flutter_version_directory,
|
||||
"flutter_version": flutter_version,
|
||||
"channel": channel,
|
||||
"dart_version": dart_version,
|
||||
"engine_hash": engine_hash,
|
||||
"flutter_hash": flutter_hash,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"version": "3.13.8",
|
||||
"engineVersion": "767d8c75e898091b925519803830fc2721658d07",
|
||||
"channel": "stable",
|
||||
"dartVersion": "3.1.4",
|
||||
"dartHash": {
|
||||
"x86_64-linux": "sha256-42wrqzjRcFDWw2aEY6+/faX+QE9PA8FmRWP4M/NkgBE=",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"version": "3.16.7",
|
||||
"engineVersion": "4a585b79294e830fa89c24924d58a27cc8fbf406",
|
||||
"channel": "stable",
|
||||
"dartVersion": "3.2.4",
|
||||
"dartHash": {
|
||||
"x86_64-linux": "sha256-qslf+wgmNz9r+e45o3Bg9/vDj75GkM9gQE2tb5rbIvw=",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"version": "3.19.4",
|
||||
"engineVersion": "a5c24f538d05aaf66f7972fb23959d8cafb9f95a",
|
||||
"channel": "stable",
|
||||
"dartVersion": "3.3.2",
|
||||
"dartHash": {
|
||||
"x86_64-linux": "sha256-eO8qcSQNWGEz/5oVaJ5tjRMnGy2aq3PbcF15z/Pi3xQ=",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"version": "3.22.2",
|
||||
"engineVersion": "edd8546116457bdf1c5bdfb13ecb9463d2bb5ed4",
|
||||
"channel": "stable",
|
||||
"dartVersion": "3.4.3",
|
||||
"dartHash": {
|
||||
"x86_64-linux": "sha256-wDIdoWoKlutP8kixd12Lppzv2aYeiTJ1A1Sy6lguXgg=",
|
||||
|
||||
Reference in New Issue
Block a user