run method
Runs this command.
The return value is wrapped in a Future if necessary and returned by
CommandRunner.runCommand.
Implementation
@override
Future<void> run() async {
final createBackup = argResults!['backup'] as bool;
final dryRun = argResults!['dry-run'] as bool;
final projectDir = findNitroProjectRoot();
if (projectDir == null) {
stderr.writeln('❌ No Nitro project found in . or its subdirectories.');
exit(1);
}
final originalCwd = Directory.current;
Directory.current = projectDir;
if (projectDir.path != originalCwd.path) {
stdout.writeln(' \x1B[90m📂 Found project in: ${projectDir.path}\x1B[0m');
}
// Read plugin name from pubspec
final pubspec = File(p.join(projectDir.path, 'pubspec.yaml'));
String pluginName = 'unknown';
for (final line in pubspec.readAsLinesSync()) {
if (line.trim().startsWith('name: ')) {
pluginName = line.replaceFirst('name: ', '').trim();
break;
}
}
// Detect current SPM status
final spmStatus = detectSpmStatus(projectDir.path);
if (dryRun) {
_printDryRun(pluginName, spmStatus);
exit(0);
}
final result = MigrationResult();
await runApp(
MigrateView(
pluginName: pluginName,
result: result,
spmStatus: spmStatus,
createBackup: createBackup,
),
);
if (result.success) {
if (result.migratedPlatforms.isNotEmpty) {
stdout.writeln(' \x1B[1;32m✨ Migration complete: ${result.migratedPlatforms.join(", ")}\x1B[0m');
} else {
stdout.writeln(' \x1B[1;32m✨ Already using SPM — no migration needed\x1B[0m');
}
} else {
exit(1);
}
}