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 {
  // 1. Default invocation without subcommands: show CLI version
  if (arguments.isEmpty) {
    _output.info('$cliName $packageVersion');
    return 0;
  }

  final subCommand = arguments.first.toLowerCase();

  // Preserve CLI version display for flags or 'show' subcommand
  if (subCommand == '-v' ||
      subCommand == '--version' ||
      subCommand == 'show' ||
      subCommand == 'cli') {
    _output.info('$cliName $packageVersion');
    return 0;
  }

  String targetPath = '.';
  for (int i = 1; i < arguments.length; i++) {
    if ((arguments[i] == '--path' || arguments[i] == '-p') &&
        i + 1 < arguments.length) {
      targetPath = arguments[i + 1];
      break;
    }
  }

  Validators.validateExistingFlutterProject(Directory(targetPath));

  if (subCommand == 'get') {
    final current = _versionManager.getCurrentVersion(targetPath);
    _output.info('Project version: $current');
    return 0;
  }

  if (subCommand == 'bump') {
    VersionBumpMode mode = VersionBumpMode.patch;
    if (arguments.contains('--minor')) {
      mode = VersionBumpMode.minor;
    } else if (arguments.contains('--major')) {
      mode = VersionBumpMode.major;
    }

    final nextVersion = await _versionManager.calculateNextVersion(
      projectPath: targetPath,
      mode: mode,
    );

    _versionManager.updateVersion(targetPath, nextVersion, output: _output);
    return 0;
  }

  throw ValidationException(
    'Unknown version subcommand: "$subCommand".\n'
    'Usage:\n'
    '  flutter_setup version                   (Show CLI version)\n'
    '  flutter_setup version get               (Show project version)\n'
    '  flutter_setup version bump [--patch|--minor|--major]',
  );
}