diff --git a/pkgs/development/compilers/flutter/default.nix b/pkgs/development/compilers/flutter/default.nix index 9eba6773448..f51aeb8b624 100644 --- a/pkgs/development/compilers/flutter/default.nix +++ b/pkgs/development/compilers/flutter/default.nix @@ -4,20 +4,20 @@ let getPatches = dir: let files = builtins.attrNames (builtins.readDir dir); in map (f: dir + ("/" + f)) files; - version = "2.10.1"; + version = "3.0.0"; channel = "stable"; filename = "flutter_linux_${version}-${channel}.tar.xz"; # Decouples flutter derivation from dart derivation, # use specific dart version to not need to bump dart derivation when bumping flutter. - dartVersion = "2.16.1"; + dartVersion = "2.17.0"; dartSourceBase = "https://storage.googleapis.com/dart-archive/channels"; dartForFlutter = dart.override { version = dartVersion; sources = { "${dartVersion}-x86_64-linux" = fetchurl { url = "${dartSourceBase}/stable/release/${dartVersion}/sdk/dartsdk-linux-x64-release.zip"; - sha256 = "sha256-PMY6DCFQC8XrlnFzOEPcwgBAs5/cAvNd78969Z+I1Fk="; + sha256 = "57b8fd964e47c81d467aeb95b099a670ab7e8f54a1cd74d45bcd1fdc77913d86"; }; }; }; @@ -29,7 +29,7 @@ in { pname = "flutter"; src = fetchurl { url = "https://storage.googleapis.com/flutter_infra_release/releases/${channel}/linux/${filename}"; - sha256 = "sha256-rSfwcglDV2rvJl10j7FByAWmghd2FYxrlkgYnvRO54Y="; + sha256 = "e96d75ec8e7dc2a46bc8dad5a9e01c391ab9310ad01c4e3940c963dd263788a0"; }; patches = getPatches ./patches; }; diff --git a/pkgs/development/compilers/flutter/flutter.nix b/pkgs/development/compilers/flutter/flutter.nix index 43538ede339..ece25c14b55 100644 --- a/pkgs/development/compilers/flutter/flutter.nix +++ b/pkgs/development/compilers/flutter/flutter.nix @@ -56,12 +56,15 @@ let export STAMP_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.stamp" export DART_SDK_PATH="${dart}" + export DART="${dart}/bin/dart" HOME=../.. # required for pub upgrade --offline, ~/.pub-cache # path is relative otherwise it's replaced by /build/flutter + # mkdir -p "$HOME/.cache" + # ln -sf "$FLUTTER_ROOT" "$HOME/.cache/flutter" pushd "$FLUTTER_TOOLS_DIR" - ${dart}/bin/pub get --offline + ${dart}/bin/dart pub get --offline popd local revision="$(cd "$FLUTTER_ROOT"; git rev-parse HEAD)" diff --git a/pkgs/development/compilers/flutter/patches/git-dir.patch b/pkgs/development/compilers/flutter/patches/git-dir.patch new file mode 100644 index 00000000000..0c736f945ea --- /dev/null +++ b/pkgs/development/compilers/flutter/patches/git-dir.patch @@ -0,0 +1,102 @@ +diff --git a/dev/bots/prepare_package.dart b/dev/bots/prepare_package.dart +index 468a91a954..5def6897ce 100644 +--- a/dev/bots/prepare_package.dart ++++ b/dev/bots/prepare_package.dart +@@ -525,7 +525,7 @@ class ArchiveCreator { + + Future _runGit(List args, {Directory? workingDirectory}) { + return _processRunner.runProcess( +- ['git', ...args], ++ ['git', '--git-dir', '.git', ...args], + workingDirectory: workingDirectory ?? flutterRoot, + ); + } +diff --git a/packages/flutter_tools/lib/src/commands/downgrade.dart b/packages/flutter_tools/lib/src/commands/downgrade.dart +index bb0eb428a9..4a2a48bb5e 100644 +--- a/packages/flutter_tools/lib/src/commands/downgrade.dart ++++ b/packages/flutter_tools/lib/src/commands/downgrade.dart +@@ -118,7 +118,7 @@ class DowngradeCommand extends FlutterCommand { + // Detect unknown versions. + final ProcessUtils processUtils = _processUtils!; + final RunResult parseResult = await processUtils.run([ +- 'git', 'describe', '--tags', lastFlutterVersion, ++ 'git', '--git-dir', '.git', 'describe', '--tags', lastFlutterVersion, + ], workingDirectory: workingDirectory); + if (parseResult.exitCode != 0) { + throwToolExit('Failed to parse version for downgrade:\n${parseResult.stderr}'); +@@ -191,7 +191,7 @@ class DowngradeCommand extends FlutterCommand { + continue; + } + final RunResult parseResult = await _processUtils!.run([ +- 'git', 'describe', '--tags', sha, ++ 'git', '--git-dir', '.git', 'describe', '--tags', sha, + ], workingDirectory: workingDirectory); + if (parseResult.exitCode == 0) { + buffer.writeln('Channel "${getNameForChannel(channel)}" was previously on: ${parseResult.stdout}.'); +diff --git a/packages/flutter_tools/lib/src/version.dart b/packages/flutter_tools/lib/src/version.dart +index f2068a6ca2..99b161689e 100644 +--- a/packages/flutter_tools/lib/src/version.dart ++++ b/packages/flutter_tools/lib/src/version.dart +@@ -106,7 +106,7 @@ class FlutterVersion { + String? channel = _channel; + if (channel == null) { + final String gitChannel = _runGit( +- 'git rev-parse --abbrev-ref --symbolic @{u}', ++ 'git --git-dir .git rev-parse --abbrev-ref --symbolic @{u}', + globals.processUtils, + _workingDirectory, + ); +@@ -114,7 +114,7 @@ class FlutterVersion { + if (slash != -1) { + final String remote = gitChannel.substring(0, slash); + _repositoryUrl = _runGit( +- 'git ls-remote --get-url $remote', ++ 'git --git-dir .git ls-remote --get-url $remote', + globals.processUtils, + _workingDirectory, + ); +@@ -326,7 +326,7 @@ class FlutterVersion { + /// the branch name will be returned as `'[user-branch]'`. + String getBranchName({ bool redactUnknownBranches = false }) { + _branch ??= () { +- final String branch = _runGit('git rev-parse --abbrev-ref HEAD', globals.processUtils); ++ final String branch = _runGit('git --git-dir .git rev-parse --abbrev-ref HEAD', globals.processUtils); + return branch == 'HEAD' ? channel : branch; + }(); + if (redactUnknownBranches || _branch!.isEmpty) { +@@ -359,7 +359,7 @@ class FlutterVersion { + /// wrapper that does that. + @visibleForTesting + static List gitLog(List args) { +- return ['git', '-c', 'log.showSignature=false', 'log'] + args; ++ return ['git', '-c', 'log.showSignature=false', '--git-dir', '.git', 'log'] + args; + } + + /// Gets the release date of the latest available Flutter version. +@@ -730,7 +730,7 @@ class GitTagVersion { + + static GitTagVersion determine(ProcessUtils processUtils, {String? workingDirectory, bool fetchTags = false, String gitRef = 'HEAD'}) { + if (fetchTags) { +- final String channel = _runGit('git rev-parse --abbrev-ref HEAD', processUtils, workingDirectory); ++ final String channel = _runGit('git --git-dir .git rev-parse --abbrev-ref HEAD', processUtils, workingDirectory); + if (channel == 'dev' || channel == 'beta' || channel == 'stable') { + globals.printTrace('Skipping request to fetchTags - on well known channel $channel.'); + } else { +@@ -739,7 +739,7 @@ class GitTagVersion { + } + // find all tags attached to the given [gitRef] + final List tags = _runGit( +- 'git tag --points-at $gitRef', processUtils, workingDirectory).trim().split('\n'); ++ 'git --git-dir .git tag --points-at $gitRef', processUtils, workingDirectory).trim().split('\n'); + + // Check first for a stable tag + final RegExp stableTagPattern = RegExp(r'^\d+\.\d+\.\d+$'); +@@ -760,7 +760,7 @@ class GitTagVersion { + // recent tag and number of commits past. + return parse( + _runGit( +- 'git describe --match *.*.* --long --tags $gitRef', ++ 'git --git-dir .git describe --match *.*.* --long --tags $gitRef', + processUtils, + workingDirectory, + ) diff --git a/pkgs/development/compilers/flutter/patches/revert-frontend_server_cache.patch b/pkgs/development/compilers/flutter/patches/revert-frontend_server_cache.patch new file mode 100644 index 00000000000..f68029eb7a1 --- /dev/null +++ b/pkgs/development/compilers/flutter/patches/revert-frontend_server_cache.patch @@ -0,0 +1,130 @@ +diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart +index 2aac9686e8..32c4b98b88 100644 +--- a/packages/flutter_tools/lib/src/artifacts.dart ++++ b/packages/flutter_tools/lib/src/artifacts.dart +@@ -346,10 +346,10 @@ class CachedArtifacts implements Artifacts { + ) { + switch (artifact) { + case HostArtifact.engineDartSdkPath: +- final String path = _dartSdkPath(_cache); ++ final String path = _dartSdkPath(_fileSystem); + return _fileSystem.directory(path); + case HostArtifact.engineDartBinary: +- final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', _hostArtifactToFileName(artifact, _platform.isWindows)); ++ final String path = _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', _hostArtifactToFileName(artifact, _platform.isWindows)); + return _fileSystem.file(path); + case HostArtifact.flutterWebSdk: + final String path = _getFlutterWebSdkPath(); +@@ -398,7 +398,7 @@ class CachedArtifacts implements Artifacts { + case HostArtifact.dart2jsSnapshot: + case HostArtifact.dartdevcSnapshot: + case HostArtifact.kernelWorkerSnapshot: +- final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); ++ final String path = _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); + return _fileSystem.file(path); + case HostArtifact.iosDeploy: + final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows); +@@ -461,11 +461,13 @@ class CachedArtifacts implements Artifacts { + String _getAndroidArtifactPath(Artifact artifact, TargetPlatform platform, BuildMode mode) { + final String engineDir = _getEngineArtifactsPath(platform, mode)!; + switch (artifact) { ++ case Artifact.frontendServerSnapshotForEngineDartSdk: ++ assert(mode != BuildMode.debug, 'Artifact $artifact only available in non-debug mode.'); ++ return _fileSystem.path.join(engineDir, _artifactToFileName(artifact)); + case Artifact.genSnapshot: + assert(mode != BuildMode.debug, 'Artifact $artifact only available in non-debug mode.'); + final String hostPlatform = getNameForHostPlatform(getCurrentHostPlatform()); + return _fileSystem.path.join(engineDir, hostPlatform, _artifactToFileName(artifact)); +- case Artifact.frontendServerSnapshotForEngineDartSdk: + case Artifact.constFinder: + case Artifact.flutterFramework: + case Artifact.flutterMacOSFramework: +@@ -497,13 +499,13 @@ class CachedArtifacts implements Artifacts { + switch (artifact) { + case Artifact.genSnapshot: + case Artifact.flutterXcframework: ++ case Artifact.frontendServerSnapshotForEngineDartSdk: + final String artifactFileName = _artifactToFileName(artifact)!; + final String engineDir = _getEngineArtifactsPath(platform, mode)!; + return _fileSystem.path.join(engineDir, artifactFileName); + case Artifact.flutterFramework: + final String engineDir = _getEngineArtifactsPath(platform, mode)!; + return _getIosEngineArtifactPath(engineDir, environmentType, _fileSystem); +- case Artifact.frontendServerSnapshotForEngineDartSdk: + case Artifact.constFinder: + case Artifact.flutterMacOSFramework: + case Artifact.flutterMacOSPodspec: +@@ -594,14 +596,10 @@ class CachedArtifacts implements Artifacts { + // For script snapshots any gen_snapshot binary will do. Returning gen_snapshot for + // android_arm in profile mode because it is available on all supported host platforms. + return _getAndroidArtifactPath(artifact, TargetPlatform.android_arm, BuildMode.profile); +- case Artifact.frontendServerSnapshotForEngineDartSdk: +- return _fileSystem.path.join( +- _dartSdkPath(_cache), 'bin', 'snapshots', +- _artifactToFileName(artifact), +- ); + case Artifact.flutterTester: + case Artifact.vmSnapshotData: + case Artifact.isolateSnapshotData: ++ case Artifact.frontendServerSnapshotForEngineDartSdk: + case Artifact.icuData: + final String engineArtifactsPath = _cache.getArtifactDirectory('engine').path; + final String platformDirName = _enginePlatformDirectoryName(platform); +@@ -797,7 +795,7 @@ class CachedLocalEngineArtifacts implements LocalEngineArtifacts { + final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); + return _fileSystem.file(path); + case HostArtifact.dartdevcSnapshot: +- final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); ++ final String path = _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); + return _fileSystem.file(path); + case HostArtifact.kernelWorkerSnapshot: + final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); +@@ -922,9 +920,7 @@ class CachedLocalEngineArtifacts implements LocalEngineArtifacts { + case Artifact.windowsUwpCppClientWrapper: + return _fileSystem.path.join(_hostEngineOutPath, artifactFileName); + case Artifact.frontendServerSnapshotForEngineDartSdk: +- return _fileSystem.path.join( +- _hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', artifactFileName, +- ); ++ return _fileSystem.path.join(_hostEngineOutPath, 'gen', artifactFileName); + case Artifact.uwptool: + return _fileSystem.path.join(_hostEngineOutPath, artifactFileName); + } +@@ -1034,8 +1030,8 @@ class OverrideArtifacts implements Artifacts { + } + + /// Locate the Dart SDK. +-String _dartSdkPath(Cache cache) { +- return cache.getRoot().childDirectory('dart-sdk').path; ++String _dartSdkPath(FileSystem fileSystem) { ++ return fileSystem.path.join(Cache.flutterRoot!, 'bin', 'cache', 'dart-sdk'); + } + + class _TestArtifacts implements Artifacts { +diff --git a/packages/flutter_tools/test/general.shard/artifacts_test.dart b/packages/flutter_tools/test/general.shard/artifacts_test.dart +index d906511a15..adfdd4bb42 100644 +--- a/packages/flutter_tools/test/general.shard/artifacts_test.dart ++++ b/packages/flutter_tools/test/general.shard/artifacts_test.dart +@@ -153,10 +153,6 @@ void main() { + artifacts.getArtifactPath(Artifact.windowsUwpDesktopPath, platform: TargetPlatform.windows_uwp_x64, mode: BuildMode.release), + fileSystem.path.join('root', 'bin', 'cache', 'artifacts', 'engine', 'windows-uwp-x64-release'), + ); +- expect( +- artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk), +- fileSystem.path.join('root', 'bin', 'cache', 'dart-sdk', 'bin', 'snapshots', 'frontend_server.dart.snapshot') +- ); + }); + + testWithoutContext('precompiled web artifact paths are correct', () { +@@ -322,11 +318,6 @@ void main() { + artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path, + fileSystem.path.join('/out', 'host_debug_unopt', 'dart-sdk'), + ); +- expect( +- artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk), +- fileSystem.path.join('/out', 'host_debug_unopt', 'dart-sdk', 'bin', +- 'snapshots', 'frontend_server.dart.snapshot') +- ); + }); + + testWithoutContext('getEngineType', () {