ciCd method
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);
}