performLaunch static method

Future<void> performLaunch(
  1. Client cloudApiClient,
  2. FileUploaderFactory fileUploaderFactory,
  3. CommandLogger logger,
  4. ProjectLaunch projectSetup, {
  5. required String consoleServer,
  6. required bool openBrowser,
  7. required int deployConcurrency,
  8. required bool deployDryRun,
  9. required bool deployShowFiles,
  10. String? deployOutputPath,
  11. bool deploySkipTailingStatus = false,
  12. IOSink? stdout,
  13. IOSink? stderr,
})

Implementation

static Future<void> performLaunch(
  final Client cloudApiClient,
  final FileUploaderFactory fileUploaderFactory,
  final CommandLogger logger,
  final ProjectLaunch projectSetup, {
  required final String consoleServer,
  required final bool openBrowser,
  required final int deployConcurrency,
  required final bool deployDryRun,
  required final bool deployShowFiles,
  final String? deployOutputPath,
  final bool deploySkipTailingStatus = false,
  final IOSink? stdout,
  final IOSink? stderr,
}) async {
  final projectId = projectSetup.projectId;
  final projectDir = projectSetup.projectDir;
  final usesDb = projectSetup.usesDb;
  final configFilePath = projectSetup.configFilePath;
  final performDeploy = projectSetup.performDeploy;

  if (projectId == null) {
    throw StateError('ProjectId must be set.');
  }

  logger.info(' ');

  String actualProjectId;
  if (projectSetup.preexistingProject != true) {
    actualProjectId = await createProject(
      logger,
      consoleServer: consoleServer,
      openBrowser: openBrowser,
      projectName: projectId,
      usesDb: usesDb,
    );
  } else {
    actualProjectId = projectId;
  }

  final safeDartSdk = await ProjectCommands.linkProject(
    cloudApiClient,
    logger: logger,
    projectId: actualProjectId,
    projectDirectory: projectDir.path,
    configFilePath: configFilePath,
    dartVersionOverride: projectSetup.dartVersionOverride,
    preDeployScripts: projectSetup.suggestedPreDeployScripts,
    suppressCommandMessages: true,
  );

  logger.info(
    'When the server has started, you can access it at:\n'
    '   Web:      https://$actualProjectId.${HostConstants.tenantDomain}/\n'
    '   API:      https://$actualProjectId.api.${HostConstants.tenantDomain}/\n'
    '   Insights: https://$actualProjectId.insights.${HostConstants.tenantDomain}/',
    newParagraph: true,
  );

  if (!performDeploy) {
    logger.terminalCommand(
      'scloud launch',
      message:
          'Deployment skipped. Run this command again to deploy to the cloud:',
      newParagraph: true,
    );
    return;
  }

  await Deploy.deploy(
    cloudApiClient,
    fileUploaderFactory,
    logger: logger,
    projectId: actualProjectId,
    projectDir: projectDir.path,
    projectConfigFilePath: configFilePath,
    concurrency: deployConcurrency,
    dryRun: deployDryRun,
    showFiles: deployShowFiles,
    outputPath: deployOutputPath,
    skipTailingStatus: deploySkipTailingStatus,
    suppressCommandMessages: true,
    dartVersionOverride: safeDartSdk,
    stdout: stdout,
    stderr: stderr,
  );

  logger.terminalCommand(
    'scloud help deployment',
    message: 'To see how to view deployment statuses, run this command:',
    newParagraph: true,
  );
}