run method

  1. @override
Future<int> run()
override

Runs this command.

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

Implementation

@override
Future<int> run() async {
  final rest = argResults?.rest ?? [];
  if (rest.isEmpty) {
    printUsage();
    return 64;
  }

  final templateId = rest.first;
  final targetVersion = argResults?['version'] as String? ?? '1.0.0';
  final profile = argResults?['profile'] as String? ?? 'standard';
  final outputDir = argResults?['output'] as String? ?? 'doc/release';
  final publishOpt = argResults?['publish'] as bool? ?? false;
  final writeDisk = argResults?['write'] as bool? ?? false;
  final jsonOutput = argResults?['json'] as bool? ?? false;

  final discoveryService = _buildDiscoveryService();
  final entry = discoveryService.get(templateId);

  if (entry == null) {
    if (jsonOutput) {
      print(jsonEncode(
          {'error': 'Template "$templateId" not found.', 'success': false}));
    } else {
      print('Error: Template "$templateId" not found in catalog.');
    }
    return 1;
  }

  final tmpl = entry.template;
  final manager = PackagePublishingManager();
  final options = PublishingOptions(
    packageName: tmpl.manifest.name.toLowerCase().replaceAll(' ', '_'),
    version: targetVersion,
    profile: profile,
    publish: publishOpt,
    outputDir: outputDir,
  );

  final plan = manager.planPublishing(options);
  final result = manager.executePublishing(plan, publish: publishOpt);

  if (writeDisk) {
    final baseDir = Directory(outputDir);
    await baseDir.create(recursive: true);
    final file = File(
        '${baseDir.path}/package_publishing_report.${jsonOutput ? 'json' : 'md'}');
    await file.writeAsString(
        jsonOutput ? jsonEncode(result.toJson()) : result.toMarkdown());

    if (!jsonOutput) {
      print(
          'Successfully wrote package publishing report to "${file.path}".');
    }
  }

  if (jsonOutput) {
    print(jsonEncode(result.toJson()));
  } else if (!writeDisk) {
    print(
        'Generated Package Publishing Plan Preview for "${result.packageName}":');
    print('══════════════════════════════════════════════════════════════');
    print('Package Version : ${plan.version}');
    print('Registry Target : ${plan.target.name}');
    print(
        'Execution Mode  : ${publishOpt ? "EXECUTE PUBLISH" : "PREVIEW DRY-RUN"}');
    print(
        'Status          : ${result.isSuccess ? "PUBLISHING SUCCESS ✓" : "PUBLISHING BLOCKED / FAILED ✗"}');
    print('══════════════════════════════════════════════════════════════');
  }

  return result.isSuccess ? 0 : 1;
}