run method
Runs this command.
The return value is wrapped in a Future if necessary and returned by
CommandRunner.runCommand.
Implementation
@override
Future<void> run() async {
final configPath = argResults?['config'];
final showConfig = argResults?['show-config'] ?? false;
final target = argResults?['target'] as String;
final pipelineName = argResults?['pipeline'] as String?;
// Load config dynamically or use persisted one
FlutterReleaseXConfig().loadConfig(configPath);
if (showConfig) {
FlutterReleaseXHelpers.showUserConfig();
return;
}
/// Supported platforms for flutter default flow.
const validPlatforms = {
'ios',
'android',
'web',
'macos',
'windows',
'linux',
};
final platforms = target.toLowerCase() == 'all'
? validPlatforms
: target.split(',').map((e) => e.trim()).toSet();
// Validate platform input
for (var platform in platforms) {
if (!validPlatforms.contains(platform)) {
print('❌ Unsupported platform: $platform');
exit(1);
}
}
final resolvedPipelines = FlutterReleaseXConfig().config.resolvedPipelines;
// If a specific pipeline was requested via --pipeline flag
if (pipelineName != null) {
if (resolvedPipelines == null || resolvedPipelines.isEmpty) {
print('❌ No pipelines configured in config.');
print(
' Add "pipelines:" or "pipeline_steps:" to your config.yaml first.');
print(
' Run "frx pipeline help-all" for complete configuration guide.');
exit(1);
}
// Validate before running
final errors = PipelineConfigValidator.validate(resolvedPipelines);
final criticalErrors = errors.where((e) => !e.isWarning).toList();
if (criticalErrors.isNotEmpty) {
print(
'❌ Pipeline validation failed. Run "frx pipeline validate" for details.');
exit(1);
}
await FlutterReleaseXHelpers.executePipeline(pipelineName: pipelineName);
exit(0);
}
/// If Advance Pipeline is disabled, use Default Flow
if (resolvedPipelines == null || resolvedPipelines.isEmpty) {
await FlutterReleaseXKplatforms.buildAndProcessPlatforms(platforms);
} else {
// Validate before running
final errors = PipelineConfigValidator.validate(resolvedPipelines);
final criticalErrors = errors.where((e) => !e.isWarning).toList();
if (criticalErrors.isNotEmpty) {
print(
'❌ Pipeline validation failed. Run "frx pipeline validate" for details.');
exit(1);
}
/// Advance Pipeline is enabled, go with user's custom flow
await FlutterReleaseXHelpers.executePipeline();
exit(0);
}
}