execute method
Implementation
@override
Future<int> execute(List<String> arguments) async {
final projectName = _projectName(arguments);
if (projectName == null) return ExitCode.usage;
final kit = _selectStarterKit();
final initializeGit =
Confirm(
prompt: 'Would you like to initialize a Git repository?',
defaultValue: true,
waitForNewLine: true,
).interact();
final project = Directory('${workingDirectory.path}/$projectName');
if (project.existsSync()) {
Console.error('"$projectName" already exists.');
return ExitCode.failure;
}
Console.info('Creating a Vania project at ./$projectName');
final cloned = await Process.run('git', [
'clone',
'--branch',
kit.branch,
'https://github.com/vania-dart/sample.git',
projectName,
], workingDirectory: workingDirectory.path);
if (cloned.exitCode != 0) {
Console.error('Could not clone the Vania starter project.');
Console.line(Console.dim(cloned.stderr.toString().trim()));
return ExitCode.failure;
}
final clonedGit = Directory('${project.path}/.git');
if (clonedGit.existsSync()) clonedGit.deleteSync(recursive: true);
_replaceProjectName(project, projectName);
final vaniaAdded = await runStreaming('dart', const [
'pub',
'add',
'vania',
], workingDirectory: project.path);
if (vaniaAdded != 0) {
Console.warn('Project created, but adding vania failed.');
return ExitCode.failure;
}
if (kit.needsMongo) {
final mongoAdded = await runStreaming('dart', const [
'pub',
'add',
'mongo_dart',
], workingDirectory: project.path);
if (mongoAdded != 0) {
Console.warn('Project created, but adding mongo_dart failed.');
return ExitCode.failure;
}
}
if (initializeGit) {
final initialized = await Process.run('git', const [
'init',
], workingDirectory: project.path);
if (initialized.exitCode != 0) {
Console.warn('Project created, but git init failed.');
}
}
_configureEnvironment(project, projectName, kit);
Console.success('Created ${Console.cyan(projectName)}');
Console.line('Next:');
Console.line(' cd $projectName');
Console.line(' vania serve');
return ExitCode.success;
}