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 deploy [--platform android|ios|all] [--artifact <path>] [--lane <lane>] [--dry-run]',
);
}
final targetPath = results['path'] as String? ?? '.';
final dryRun = results['dry-run'] as bool? ?? false;
final retry = results['retry'] as bool? ?? false;
if (retry) {
final recoveryManager = _recoveryManager ??
ReleaseRecoveryManager(output: _output, deploymentManager: _manager);
final success = await recoveryManager.recoverRelease(targetPath,
stage: 'deployment', dryRun: dryRun);
return success ? 0 : 1;
}
final platformRaw = results['platform'] as String? ?? 'android';
final artifactPath = results['artifact'] as String?;
final lane = results['lane'] as String?;
final envArg =
results['environment'] as String? ?? results['env'] as String?;
final resolver = const EnvironmentResolver();
final envConfig = resolver.resolve(
cliEnvironment: envArg,
cliFlavor: results['flavor'] as String?,
envVars: Platform.environment,
);
Validators.validateExistingFlutterProject(Directory(targetPath));
final platform = BuildPlatform.parse(platformRaw);
final context = DeploymentContext(
projectPath: targetPath,
platform: platform,
artifactPath: artifactPath,
lane: lane ?? envConfig.lane,
flavor: envConfig.flavor,
dryRun: dryRun,
);
final deployResults = await _manager.deploy(context);
final allSuccessful = deployResults.every((r) => r.success);
for (final res in deployResults) {
if (dryRun) {
_output.info('--- DRY RUN DEPLOYMENT PREVIEW ---');
_output.info('Platform: ${res.platform.name}');
_output.info('Artifact: ${res.artifactPath ?? 'Auto-discover'}');
_output.info('Lane: ${res.lane}');
if (res.commandString != null) {
_output.info('Command Preview: ${res.commandString}');
}
_output.info('----------------------------------');
} else if (res.success) {
_output.success(res.message);
}
for (final step in res.executedSteps) {
_output.info(' • $step');
}
for (final warning in res.warnings) {
_output.warning('Warning: $warning');
}
if (!res.success) {
for (final error in res.errors) {
_output.error('Error: $error');
}
}
}
return allSuccessful ? 0 : 1;
}