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