execute method

  1. @override
Future<int> execute(
  1. List<String> arguments
)
override

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