flutterPackages: support beta releases

This commit is contained in:
Tristan Ross
2024-06-13 14:47:30 -07:00
parent 5dde575c3c
commit cdd31bb726
10 changed files with 74 additions and 20 deletions
+14
View File
@@ -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 = ''
+11 -6
View File
@@ -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=",