launch static method

Future<void> launch(
  1. Client cloudApiClient,
  2. FileUploaderFactory fileUploaderFactory, {
  3. required CommandLogger logger,
  4. required String? specifiedProjectDir,
  5. required String? foundProjectDir,
  6. required String? newProjectId,
  7. required String? existingProjectId,
  8. required bool? enableDb,
  9. required bool? performDeploy,
})

Implementation

static Future<void> launch(
  final Client cloudApiClient,
  final FileUploaderFactory fileUploaderFactory, {
  required final CommandLogger logger,
  required final String? specifiedProjectDir,
  required final String? foundProjectDir,
  required final String? newProjectId,
  required final String? existingProjectId,
  required final bool? enableDb,
  required final bool? performDeploy,
}) async {
  await ProjectCommands.checkPlanAvailability(cloudApiClient, logger: logger);

  if (newProjectId != null && existingProjectId != null) {
    throw ArgumentError(
      'Cannot specify both newProjectId and existingProjectId.',
    );
  }

  logger.init('Launching new Serverpod Cloud project.\n');

  final projectSetup = ProjectLaunch(
    projectDir: specifiedProjectDir,
    projectId: newProjectId ?? existingProjectId,
    enableDb: enableDb,
    preexistingProject: existingProjectId != null,
    performDeploy: performDeploy,
  );

  await selectProjectDir(logger, projectSetup, foundProjectDir);

  await selectProjectId(cloudApiClient, logger, projectSetup);

  if (projectSetup.preexistingProject != true) {
    await selectEnableDb(logger, projectSetup);
  }

  await selectPerformDeploy(logger, projectSetup);

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

  await suggestFlutterBuildPreDeployHook(
    logger,
    projectSetup,
    configFilePath,
  );

  await confirmSetupAndContinue(logger, projectSetup);

  await performLaunch(
    cloudApiClient,
    fileUploaderFactory,
    logger,
    projectSetup,
  );
}