performLaunch static method

Future<void> performLaunch(
  1. Client cloudApiClient,
  2. FileUploaderFactory fileUploaderFactory,
  3. CommandLogger logger,
  4. ProjectLaunch projectSetup,
)

Implementation

static Future<void> performLaunch(
  final Client cloudApiClient,
  final FileUploaderFactory fileUploaderFactory,
  final CommandLogger logger,
  final ProjectLaunch projectSetup,
) async {
  logger.info('Launching project...');

  final projectId = projectSetup.projectId;
  final projectDir = projectSetup.projectDir;
  final configFilePath = projectSetup.configFilePath;
  final performDeploy = projectSetup.performDeploy;

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

  if (projectDir == null) {
    throw StateError('ProjectDir must be set.');
  }

  if (configFilePath == null) {
    throw StateError('ConfigFilePath must be set.');
  }

  if (performDeploy == null) {
    throw StateError('PerformDeploy must be set.');
  }

  if (projectSetup.preexistingProject != true) {
    final enableDb = projectSetup.enableDb!;
    await ProjectCommands.createProject(
      cloudApiClient,
      logger: logger,
      projectId: projectId,
      enableDb: enableDb,
      projectDir: projectDir,
      configFilePath: configFilePath,
      skipConfirmation: true,
    );
  }

  await logger.progress(
    'Writing cloud project configuration files.',
    () async {
      ProjectFilesWriter.writeFiles(
        projectId: projectId,
        preDeployScripts: projectSetup.suggestedPreDeployScripts,
        configFilePath: configFilePath,
        projectDirectory: projectDir,
      );
      return true;
    },
  );

  if (!performDeploy) {
    logger.terminalCommand(
      'scloud deploy',
      message: 'Run this command to deploy the project to the cloud:',
    );
    return;
  }

  await Deploy.deploy(
    cloudApiClient,
    fileUploaderFactory,
    logger: logger,
    projectId: projectId,
    projectDir: projectDir,
    projectConfigFilePath: configFilePath,
    concurrency: 5,
    dryRun: false,
    showFiles: false,
  );

  logger.info(' '); // blank line

  final attemptId = await _getDeployAttemptId(
    cloudApiClient,
    logger,
    projectId,
  );

  await StatusCommands.showDeploymentStatus(
    cloudApiClient,
    logger: logger,
    cloudCapsuleId: projectId,
    attemptId: attemptId,
  );

  const tenantHost = 'serverpod.space';

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

  logger.terminalCommand(
    'scloud deployment show',
    message: 'View the deployment status:',
    newParagraph: true,
  );
}