run method

  1. @override
FutureOr? run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
FutureOr? run() async {
  final rootDir = root;
  final gitRoot = Directory(GitUtils.getRepositoryRoot(rootDir.path));

  // Detect workspace
  final workspace = detectWorkspace(rootDir);
  if (workspace == null) {
    logger.err('No workspace detected. Root pubspec.yaml must contain a "workspace" property.');
    logger.info('For single-package projects, use the "version" command instead.');
    exit(1);
  }

  logger.info('Detected workspace with ${workspace.memberPaths.length} members');

  final result = await versionWorkspace(
    gitRoot: gitRoot,
    workspace: workspace,
    badge: badge,
    baseRef: baseRef,
    tag: tag,
    newRef: newRef,
    commit: commit,
    generateChangelog: generateChangelog,
    cache: cache,
    isPreRelease: preRelease,
    preReleasePrefix: preReleasePrefix,
    dartFile: dartFile,
  );

  if (json != null) {
    final jsonFile = File(json!);
    if (!jsonFile.existsSync()) {
      jsonFile.createSync(recursive: true);
    }
    await jsonFile.writeAsString(jsonEncode(result.toJson()));
  }

  logger.success('Workspace versioning completed. Versioned ${result.packageVersions.length} package(s).');
}