Future<int> setupHerokuProject()

Source

Future<int> setupHerokuProject() async {
  if (!hasHerokuCLI) {
    displayError("The application 'heroku' was not found in \$PATH.");
    displayProgress(
        "Install 'heroku' from https://devcenter.heroku.com/articles/heroku-cli.");
    return -1;
  }

  if (!hasGitCLI) {
    displayError("The application 'git' was not found in \$PATH.");
    displayProgress("Install 'git' from https://git-scm.com/downloads.");
  }

  displayInfo("Setting up Heroku for $herokuName");

  var commands = [
    ["git:remote", "-a", herokuName],
    [
      "config:set",
      "DART_SDK_URL=https://storage.googleapis.com/dart-archive/channels/stable/release/latest/sdk/dartsdk-linux-x64-release.zip"
    ],
    [
      "config:add",
      "BUILDPACK_URL=https://github.com/stablekernel/heroku-buildpack-dart.git"
    ],
    [
      "config:set",
      "PATH=/app/bin:/usr/local/bin:/usr/bin:/bin:/app/.pub-cache/bin:/app/dart-sdk/bin"
    ],
    ["config:set", "PUB_CACHE=/app/pub-cache"],
  ];

  for (var cmd in commands) {
    displayProgress(
        "Running heroku ${cmd.join(" ")} in ${projectDirectory.path}");
    var result = await Process.run("heroku", cmd,
        workingDirectory: projectDirectory.path);
    if (result.exitCode != 0) {
      throw new CLIException("Heroku command failed",
          instructions: ["${result.stdout} ${result.stderr}"]);
    }
  }

  displayProgress("Removing config.yaml from .gitignore");
  var gitIgnore = fileInProjectDirectory(".gitignore");
  var contents = gitIgnore
      .readAsStringSync()
      .replaceAll(new RegExp("config.yaml\\n"), "");
  gitIgnore.writeAsStringSync(contents);

  var procFile = fileInProjectDirectory("Procfile");
  procFile.writeAsStringSync("""
release: /app/dart-sdk/bin/pub global run aqueduct:aqueduct db upgrade --connect \$DATABASE_URL
web: /app/dart-sdk/bin/pub global run aqueduct:aqueduct serve --port \$PORT --no-monitor
  """);

  return 0;
}