From 9d9ec70b4ead580ba83f390c4f4fd888d4ae1f8a Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Fri, 6 Sep 2024 14:07:09 -0400 Subject: [PATCH] [Conductor] Add ability to override mirror, add tests for default arg parsing and custom arg parsing (#154363) fixes #154342 --- dev/conductor/core/lib/src/start.dart | 37 +++++++---- dev/conductor/core/test/start_test.dart | 82 ++++++++++++++++++++++++- 2 files changed, 106 insertions(+), 13 deletions(-) diff --git a/dev/conductor/core/lib/src/start.dart b/dev/conductor/core/lib/src/start.dart index 01446d846e..669afb4bd2 100644 --- a/dev/conductor/core/lib/src/start.dart +++ b/dev/conductor/core/lib/src/start.dart @@ -60,6 +60,11 @@ class StartCommand extends Command { help: 'The target release channel for the release.', allowed: kBaseReleaseChannels, ); + argParser.addOption( + kFrameworkMirrorOption, + help: + 'Configurable Framework repo mirror remote.', + ); argParser.addOption( kFrameworkUpstreamOption, defaultsTo: FrameworkRepository.defaultUpstream, @@ -112,14 +117,8 @@ class StartCommand extends Command { @override String get description => 'Initialize a new Flutter release.'; - @override - Future run() async { - final ArgResults argumentResults = argResults!; - if (!platform.isMacOS && !platform.isLinux) { - throw ConductorException( - 'Error! This tool is only supported on macOS and Linux', - ); - } + @visibleForTesting + StartContext createContext(ArgResults argumentResults) { final String frameworkUpstream = getValueFromEnvOrArgs( kFrameworkUpstreamOption, @@ -131,7 +130,12 @@ class StartCommand extends Command { argumentResults, platform.environment, )!; - final String frameworkMirror = + final String frameworkMirror = getValueFromEnvOrArgs( + kFrameworkMirrorOption, + argumentResults, + platform.environment, + allowNull: true, + ) ?? 'git@github.com:$githubUsername/flutter.git'; final String engineUpstream = getValueFromEnvOrArgs( kEngineUpstreamOption, @@ -175,7 +179,7 @@ class StartCommand extends Command { versionOverride = Version.fromString(versionOverrideString); } - final StartContext context = StartContext( + return StartContext( candidateBranch: candidateBranch, checkouts: checkouts, dartRevision: dartRevision, @@ -191,7 +195,18 @@ class StartCommand extends Command { versionOverride: versionOverride, githubUsername: githubUsername, ); - return context.run(); + } + + @override + Future run() async { + final ArgResults argumentResults = argResults!; + if (!platform.isMacOS && !platform.isLinux) { + throw ConductorException( + 'Error! This tool is only supported on macOS and Linux', + ); + } + + return createContext(argumentResults).run(); } } diff --git a/dev/conductor/core/test/start_test.dart b/dev/conductor/core/test/start_test.dart index 0a23e772f0..f2db86b9cb 100644 --- a/dev/conductor/core/test/start_test.dart +++ b/dev/conductor/core/test/start_test.dart @@ -23,8 +23,7 @@ void main() { const String flutterRoot = '/flutter'; const String checkoutsParentDirectory = '$flutterRoot/dev/tools/'; const String githubUsername = 'user'; - const String frameworkMirror = - 'git@github.com:$githubUsername/flutter.git'; + const String frameworkMirror = 'git@github.com:$githubUsername/flutter.git'; const String engineMirror = 'git@github.com:$githubUsername/engine.git'; const String candidateBranch = 'flutter-1.2-candidate.3'; const String releaseChannel = 'beta'; @@ -76,6 +75,85 @@ void main() { return CommandRunner('codesign-test', '')..addCommand(command); } + group('start arg parser', () { + const String nextDartRevision = + 'f6c91128be6b77aef8351e1e3a9d07c85bc2e46e'; + late StartCommand startCommand; + setUp(() { + final String operatingSystem = const LocalPlatform().operatingSystem; + final Map environment = { + 'HOME': '/path/to/user/home', + }; + final Directory homeDir = fileSystem.directory( + environment['HOME'], + ); + // Tool assumes this exists + homeDir.createSync(recursive: true); + platform = FakePlatform( + environment: environment, + operatingSystem: operatingSystem, + pathSeparator: '/', + ); + processManager = FakeProcessManager.list([]); + checkouts = Checkouts( + fileSystem: fileSystem, + parentDirectory: fileSystem.directory(checkoutsParentDirectory), + platform: platform, + processManager: processManager, + stdio: stdio, + ); + startCommand = StartCommand( + checkouts: checkouts, conductorVersion: conductorVersion); + }); + + test('default args', () async { + final List args = [ + 'start', + '--$kCandidateOption', + candidateBranch, + '--$kReleaseOption', + 'stable', + '--$kStateOption', + '/path/to/statefile.json', + '--$kDartRevisionOption', + nextDartRevision, + '--$kGithubUsernameOption', + githubUsername, + ]; + final StartContext context = + startCommand.createContext(startCommand.argParser.parse(args)); + expect(context.frameworkUpstream, FrameworkRepository.defaultUpstream); + expect(context.frameworkMirror, contains(githubUsername)); + expect(context.frameworkMirror, contains('/flutter.git')); + expect(context.engineUpstream, EngineRepository.defaultUpstream); + }); + + test('overridden mirror', () async { + const String customFrameworkMirror = + 'git@github.com:$githubUsername/flutter-work.git'; + final List args = [ + 'start', + '--$kCandidateOption', + candidateBranch, + '--$kReleaseOption', + 'stable', + '--$kStateOption', + '/path/to/statefile.json', + '--$kDartRevisionOption', + nextDartRevision, + '--$kGithubUsernameOption', + githubUsername, + '--$kFrameworkMirrorOption', + customFrameworkMirror, + ]; + final StartContext context = + startCommand.createContext(startCommand.argParser.parse(args)); + expect( + context.frameworkMirror, customFrameworkMirror + ); + }); + }); + test('throws exception if run from Windows', () async { final CommandRunner runner = createRunner( commands: [