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 isDryRun = argResults?['dry-run'] == true;
final steps = [
['learmond', 'fix'],
['learmond', 'analyze'],
['learmond', 'test'],
['learmond', 'format'],
['learmond', 'doctor'],
['learmond', 'license'],
['learmond', 'changelog'],
['learmond', 'push'],
];
for (final step in steps) {
final process = await Process.start(step[0], step.sublist(1));
stdout.addStream(process.stdout);
stderr.addStream(process.stderr);
final exitCode = await process.exitCode;
if (exitCode != 0) {
stderr.writeln(
'Error: command "${step.join(' ')}" failed with exit code $exitCode.',
);
exit(exitCode);
}
}
if (isDryRun) {
stdout.write('Dry run successful. Do you want to publish now? (yes/no) ');
// Read user input interactively.
String? answer = stdin.readLineSync();
if (answer == null || answer.trim().toLowerCase() != 'yes') {
stdout.writeln('Exiting without publishing.');
return;
}
}
// Detect project type
final isFlutterOrDart = await _isFlutterOrDartProject();
final isNpm = await _isNpmProject();
final isRuby = await _isRubyProject();
if (isFlutterOrDart) {
final process = await Process.start('flutter', [
'pub',
'publish',
], mode: ProcessStartMode.inheritStdio);
final exitCode = await process.exitCode;
if (exitCode != 0) {
stderr.writeln(
'Error: flutter pub publish failed with exit code $exitCode.',
);
exit(exitCode);
}
} else if (isNpm) {
final process = await Process.start('npm', ['publish']);
stdout.addStream(process.stdout);
stderr.addStream(process.stderr);
final exitCode = await process.exitCode;
if (exitCode != 0) {
stderr.writeln('Error: npm publish failed with exit code $exitCode.');
exit(exitCode);
}
} else if (isRuby) {
final gemspec = await _findGemspec();
if (gemspec == null) {
stderr.writeln('Error: No gemspec file found for Ruby project.');
exit(1);
}
final process = await Process.start('gem', ['push', gemspec]);
stdout.addStream(process.stdout);
stderr.addStream(process.stderr);
final exitCode = await process.exitCode;
if (exitCode != 0) {
stderr.writeln('Error: gem push failed with exit code $exitCode.');
exit(exitCode);
}
} else {
stderr.writeln('Error: Could not detect project type for publishing.');
exit(1);
}
}