diff options
author | Tristan Ross <tristan.ross@midstall.com> | 2024-06-13 14:42:37 -0700 |
---|---|---|
committer | Tristan Ross <tristan.ross@midstall.com> | 2024-06-13 14:47:30 -0700 |
commit | cdd31bb7265194b7ee2dbed5ab8fce45c079bb17 (patch) | |
tree | 07b91f998085567dbba6004099aa2e51dae55c53 | |
parent | 5dde575c3c4afb618781387b0db6d1c08a206c92 (diff) |
flutterPackages: support beta releases
10 files changed, 74 insertions, 20 deletions
diff --git a/pkgs/build-support/flutter/default.nix b/pkgs/build-support/flutter/default.nix index 49929fd877544..dd4341c675dca 100644 --- a/pkgs/build-support/flutter/default.nix +++ b/pkgs/build-support/flutter/default.nix @@ -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 = '' diff --git a/pkgs/development/compilers/flutter/default.nix b/pkgs/development/compilers/flutter/default.nix index 6d2d904660338..fd18f9500288b 100644 --- a/pkgs/development/compilers/flutter/default.nix +++ b/pkgs/development/compilers/flutter/default.nix @@ -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; } diff --git a/pkgs/development/compilers/flutter/flutter-tools.nix b/pkgs/development/compilers/flutter/flutter-tools.nix index cf35ed8cbc455..306765cd0a42a 100644 --- a/pkgs/development/compilers/flutter/flutter-tools.nix +++ b/pkgs/development/compilers/flutter/flutter-tools.nix @@ -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; } diff --git a/pkgs/development/compilers/flutter/flutter.nix b/pkgs/development/compilers/flutter/flutter.nix index 3eabf71a8912e..2db287a45a901 100644 --- a/pkgs/development/compilers/flutter/flutter.nix +++ b/pkgs/development/compilers/flutter/flutter.nix @@ -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 diff --git a/pkgs/development/compilers/flutter/update/get-dart-hashes.nix.in b/pkgs/development/compilers/flutter/update/get-dart-hashes.nix.in index f900c863195ab..941a9769a9cb2 100644 --- a/pkgs/development/compilers/flutter/update/get-dart-hashes.nix.in +++ b/pkgs/development/compilers/flutter/update/get-dart-hashes.nix.in @@ -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} diff --git a/pkgs/development/compilers/flutter/update/update.py b/pkgs/development/compilers/flutter/update/update.py index 618fae5468e5b..1e6fbe1354565 100755 --- a/pkgs/development/compilers/flutter/update/update.py +++ b/pkgs/development/compilers/flutter/update/update.py @@ -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, diff --git a/pkgs/development/compilers/flutter/versions/3_13/data.json b/pkgs/development/compilers/flutter/versions/3_13/data.json index 7d8f285f0b211..3f68f86133684 100644 --- a/pkgs/development/compilers/flutter/versions/3_13/data.json +++ b/pkgs/development/compilers/flutter/versions/3_13/data.json @@ -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=", diff --git a/pkgs/development/compilers/flutter/versions/3_16/data.json b/pkgs/development/compilers/flutter/versions/3_16/data.json index afc0225d49a7f..fcd5975778d0d 100644 --- a/pkgs/development/compilers/flutter/versions/3_16/data.json +++ b/pkgs/development/compilers/flutter/versions/3_16/data.json @@ -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=", diff --git a/pkgs/development/compilers/flutter/versions/3_19/data.json b/pkgs/development/compilers/flutter/versions/3_19/data.json index 9eeddd3361ddf..e4bcedc110d82 100644 --- a/pkgs/development/compilers/flutter/versions/3_19/data.json +++ b/pkgs/development/compilers/flutter/versions/3_19/data.json @@ -1,6 +1,7 @@ { "version": "3.19.4", "engineVersion": "a5c24f538d05aaf66f7972fb23959d8cafb9f95a", + "channel": "stable", "dartVersion": "3.3.2", "dartHash": { "x86_64-linux": "sha256-eO8qcSQNWGEz/5oVaJ5tjRMnGy2aq3PbcF15z/Pi3xQ=", diff --git a/pkgs/development/compilers/flutter/versions/3_22/data.json b/pkgs/development/compilers/flutter/versions/3_22/data.json index 19c1ddd532b8f..12da5e9b418a8 100644 --- a/pkgs/development/compilers/flutter/versions/3_22/data.json +++ b/pkgs/development/compilers/flutter/versions/3_22/data.json @@ -1,6 +1,7 @@ { "version": "3.22.2", "engineVersion": "edd8546116457bdf1c5bdfb13ecb9463d2bb5ed4", + "channel": "stable", "dartVersion": "3.4.3", "dartHash": { "x86_64-linux": "sha256-wDIdoWoKlutP8kixd12Lppzv2aYeiTJ1A1Sy6lguXgg=", |