flutterPackages: support beta releases

Changed files
+74 -20
pkgs
build-support
flutter
development
+14
pkgs/build-support/flutter/default.nix
···
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
pkgs/development/compilers/flutter/default.nix
···
, 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;
};
};
···
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;
}
+18
pkgs/development/compilers/flutter/flutter-tools.nix
···
, stdenv
, systemPlatform
, buildDartApplication
+
, runCommand
, git
, which
, dart
···
rm ${builtins.concatStringsSep " " (builtins.attrNames dartEntryPoints)}
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;
}
+3 -2
pkgs/development/compilers/flutter/flutter.nix
···
{ version
, engineVersion
, patches
+
, channel
, dart
, src
, pubspecLock
···
"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",
···
'';
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
+5 -4
pkgs/development/compilers/flutter/update/get-dart-hashes.nix.in
···
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}
+19 -8
pkgs/development/compilers/flutter/update/update.py
···
return result_dict
-
def get_dart_hashes(dart_version):
+
def get_dart_hashes(dart_version, channel):
platforms = [
"x86_64-linux",
"aarch64-linux",
···
code = load_code(
"get-dart-hashes.nix",
dart_version=dart_version,
+
channel=channel,
platform=platform)
stderr = nix_build_to_fail(code)
···
def write_data(
nixpkgs_flutter_version_directory,
flutter_version,
+
channel,
engine_hash,
dart_version,
dart_hash,
···
f.write(json.dumps({
"version": flutter_version,
"engineVersion": engine_hash,
+
"channel": channel,
"dartVersion": dart_version,
"dartHash": dart_hash,
"flutterHash": flutter_hash,
···
# 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']
···
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])
···
"\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}"
···
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
pkgs/development/compilers/flutter/versions/3_13/data.json
···
{
"version": "3.13.8",
"engineVersion": "767d8c75e898091b925519803830fc2721658d07",
+
"channel": "stable",
"dartVersion": "3.1.4",
"dartHash": {
"x86_64-linux": "sha256-42wrqzjRcFDWw2aEY6+/faX+QE9PA8FmRWP4M/NkgBE=",
+1
pkgs/development/compilers/flutter/versions/3_16/data.json
···
{
"version": "3.16.7",
"engineVersion": "4a585b79294e830fa89c24924d58a27cc8fbf406",
+
"channel": "stable",
"dartVersion": "3.2.4",
"dartHash": {
"x86_64-linux": "sha256-qslf+wgmNz9r+e45o3Bg9/vDj75GkM9gQE2tb5rbIvw=",
+1
pkgs/development/compilers/flutter/versions/3_19/data.json
···
{
"version": "3.19.4",
"engineVersion": "a5c24f538d05aaf66f7972fb23959d8cafb9f95a",
+
"channel": "stable",
"dartVersion": "3.3.2",
"dartHash": {
"x86_64-linux": "sha256-eO8qcSQNWGEz/5oVaJ5tjRMnGy2aq3PbcF15z/Pi3xQ=",
+1
pkgs/development/compilers/flutter/versions/3_22/data.json
···
{
"version": "3.22.2",
"engineVersion": "edd8546116457bdf1c5bdfb13ecb9463d2bb5ed4",
+
"channel": "stable",
"dartVersion": "3.4.3",
"dartHash": {
"x86_64-linux": "sha256-wDIdoWoKlutP8kixd12Lppzv2aYeiTJ1A1Sy6lguXgg=",