execute method
Executes the command with the provided arguments.
Returns an integer exit code (0 for success).
Implementation
@override
Future<int> execute(List<String> arguments) async {
final ArgResults results;
try {
results = _argParser.parse(arguments);
} on FormatException catch (e) {
throw ValidationException(
'Error: ${e.message}\n\nUsage:\n flutter_setup patch [--platform android|ios|all] [--release <ver>] [--dry-run]',
);
}
final targetPath = results['path'] as String? ?? '.';
final dryRun = results['dry-run'] as bool? ?? false;
final allowDirty = results['allow-dirty'] as bool? ?? false;
final ciFlag = results['ci'] as bool? ?? false;
final platformRaw = results['platform'] as String? ?? 'android';
final releaseRaw = results['release'] as String?;
final envArg =
results['environment'] as String? ?? results['env'] as String?;
final rawDefines =
(results['dart-define'] as List<String>?) ?? const <String>[];
final parsedDefines = EnvironmentResolver.parseDartDefines(rawDefines);
final resolver = const EnvironmentResolver();
final envConfig = resolver.resolve(
cliEnvironment: envArg,
cliFlavor: results['flavor'] as String?,
cliDartDefines: parsedDefines,
envVars: Platform.environment,
);
// Validate that projectPath points to a valid Flutter project
Validators.validateExistingFlutterProject(Directory(targetPath));
final context = ReleaseContext(
projectPath: targetPath,
type: ReleaseType.shorebirdPatch,
dryRun: dryRun,
allowDirty: allowDirty,
targetPlatform: platformRaw,
versionName: releaseRaw,
config: ReleaseConfig(
targetPlatform: platformRaw,
isCi: ciFlag,
environmentName: envArg != null ? envConfig.name : null,
flavor: envConfig.flavor,
dartDefines: envConfig.dartDefines,
),
);
final result = await _manager.executeRelease(context);
if (!result.success) {
for (final err in result.errors) {
_output.error('Error: $err');
}
return 1;
}
return 0;
}