ciCd method

Future<void> ciCd()

Add GitLab CI or GitHub Actions, optionally with Fastlane deploy lanes.

When a CI file already exists, asks before overwriting it.

Implementation

Future<void> ciCd() async {
  final inspected = await ProjectInspector.inspect();
  final existing = CiCdIntegrator.existingFiles(inspected.root.path);
  var overwrite = false;
  if (existing.isNotEmpty) {
    logger.info('CI/CD files already present: ${existing.join(', ')}');
    overwrite = promptYesNo(
      'Overwrite existing CI/CD files (including fastlane and smoke_test.dart)',
    );
    if (!overwrite) {
      logger.info('Cancelled. Existing CI/CD files were left unchanged.');
      return;
    }
  }

  final scope = promptCiCdScopeChoice();
  final provider = promptCiCdProvider();
  var runnerMode = GitLabRunnerMode.sharedFlutterImage;
  if (provider == CiCdProvider.gitlab) {
    runnerMode = promptGitLabRunnerMode();
  }
  var deployTargets = <DeployTarget>{};
  if (scope == CiCdScope.ciAndDeploy) {
    deployTargets = promptDeployTargets();
  }

  final report = await runWithStepProgress(
    logger,
    'Writing CI/CD files...',
    '🛠',
    () => CiCdIntegrator.apply(
      inspected.config.copyWith(
        ciCdScope: scope,
        ciCdProvider: provider,
        gitlabRunnerMode: runnerMode,
        deployTargets: deployTargets,
      ),
      overwrite: overwrite,
    ),
  );
  _printReport(report);
}