resolveBuildNumber method

Future<int> resolveBuildNumber({
  1. required String projectPath,
  2. required ProjectVersion currentVersion,
  3. int? explicitBuildNumber,
})

Resolves the next build number for currentVersion based on strategy rules.

Implementation

Future<int> resolveBuildNumber({
  required String projectPath,
  required ProjectVersion currentVersion,
  int? explicitBuildNumber,
}) async {
  // 1. Explicit build number argument passed directly
  if (explicitBuildNumber != null && explicitBuildNumber > 0) {
    return explicitBuildNumber;
  }

  // 2. CI environment variables (e.g. BUILD_NUMBER, GITHUB_RUN_NUMBER)
  final env = _environment ?? Platform.environment;
  final ciEnvBuild = env['BUILD_NUMBER'] ?? env['GITHUB_RUN_NUMBER'];
  if (ciEnvBuild != null && ciEnvBuild.isNotEmpty) {
    final parsed = int.tryParse(ciEnvBuild);
    if (parsed != null && parsed > 0) {
      return parsed;
    }
  }

  // 3. Git commit count fallback if running inside a git repository
  final commitCount = await _gitClient.getCommitCount(projectPath);
  if (commitCount != null && commitCount > 0) {
    return commitCount;
  }

  // 4. Default fallback: increment current version build number by 1
  final currentBuild = currentVersion.buildNumber ?? 0;
  return currentBuild + 1;
}