execute method

  1. @override
Future<int> execute(
  1. List<String> arguments
)
override

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;
}