diff --git a/lib/analyze-action-post.js b/lib/analyze-action-post.js index 56d20cd93..113f20cea 100644 --- a/lib/analyze-action-post.js +++ b/lib/analyze-action-post.js @@ -126689,7 +126689,6 @@ function wrapCliConfigurationError(cliError) { // src/config-utils.ts var fs3 = __toESM(require("fs")); var path3 = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); // src/analyses.ts var AnalysisKind = /* @__PURE__ */ ((AnalysisKind2) => { @@ -126735,7 +126734,7 @@ function withGroup(groupName, f) { } // src/feature-flags.ts -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); // src/overlay-database-utils.ts var fs2 = __toESM(require("fs")); @@ -126746,6 +126745,7 @@ var actionsCache = __toESM(require_cache4()); var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -126967,13 +126967,13 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } var SafeArtifactUploadVersion = "2.20.3"; function isSafeArtifactUpload(codeQlVersion) { - return !codeQlVersion ? true : semver3.gte(codeQlVersion, SafeArtifactUploadVersion); + return !codeQlVersion ? true : semver4.gte(codeQlVersion, SafeArtifactUploadVersion); } // src/feature-flags.ts diff --git a/lib/analyze-action.js b/lib/analyze-action.js index f73d56c72..a3bbbc406 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -93955,7 +93955,6 @@ function wrapCliConfigurationError(cliError) { // src/config-utils.ts var fs6 = __toESM(require("fs")); var path7 = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); // src/caching-utils.ts var crypto2 = __toESM(require("crypto")); @@ -94072,7 +94071,7 @@ var path6 = __toESM(require("path")); // src/feature-flags.ts var fs4 = __toESM(require("fs")); var path5 = __toESM(require("path")); -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); // src/defaults.json var bundleVersion = "codeql-bundle-v2.23.8"; @@ -94087,6 +94086,7 @@ var actionsCache = __toESM(require_cache4()); var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -94477,7 +94477,7 @@ async function getCacheRestoreKeyPrefix(config, codeQlVersion) { } // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } @@ -94785,7 +94785,7 @@ var GitHubFeatureFlags = class { DEFAULT_VERSION_FEATURE_FLAG_PREFIX.length, f.length - DEFAULT_VERSION_FEATURE_FLAG_SUFFIX.length ).replace(/_/g, "."); - if (!semver4.valid(version)) { + if (!semver5.valid(version)) { this.logger.warning( `Ignoring feature flag ${f} as it does not specify a valid CodeQL version.` ); diff --git a/lib/autobuild-action.js b/lib/autobuild-action.js index 6c627fa4d..1f30d6aaa 100644 --- a/lib/autobuild-action.js +++ b/lib/autobuild-action.js @@ -90553,7 +90553,6 @@ function wrapCliConfigurationError(cliError) { // src/config-utils.ts var fs4 = __toESM(require("fs")); var path4 = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); // src/analyses.ts var AnalysisKind = /* @__PURE__ */ ((AnalysisKind2) => { @@ -90593,7 +90592,7 @@ function getActionsLogger() { // src/feature-flags.ts var fs3 = __toESM(require("fs")); var path3 = __toESM(require("path")); -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); // src/defaults.json var bundleVersion = "codeql-bundle-v2.23.8"; @@ -90608,6 +90607,7 @@ var actionsCache = __toESM(require_cache4()); var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -90829,7 +90829,7 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } @@ -91136,7 +91136,7 @@ var GitHubFeatureFlags = class { DEFAULT_VERSION_FEATURE_FLAG_PREFIX.length, f.length - DEFAULT_VERSION_FEATURE_FLAG_SUFFIX.length ).replace(/_/g, "."); - if (!semver4.valid(version)) { + if (!semver5.valid(version)) { this.logger.warning( `Ignoring feature flag ${f} as it does not specify a valid CodeQL version.` ); diff --git a/lib/init-action-post.js b/lib/init-action-post.js index 86bb8b831..64d27e85d 100644 --- a/lib/init-action-post.js +++ b/lib/init-action-post.js @@ -129997,7 +129997,6 @@ function wrapCliConfigurationError(cliError) { // src/config-utils.ts var fs6 = __toESM(require("fs")); var path6 = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); // src/analyses.ts var AnalysisKind = /* @__PURE__ */ ((AnalysisKind2) => { @@ -130075,7 +130074,7 @@ var path5 = __toESM(require("path")); // src/feature-flags.ts var fs4 = __toESM(require("fs")); var path4 = __toESM(require("path")); -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); // src/defaults.json var bundleVersion = "codeql-bundle-v2.23.8"; @@ -130090,6 +130089,7 @@ var actionsCache = __toESM(require_cache4()); var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -130345,13 +130345,13 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } var SafeArtifactUploadVersion = "2.20.3"; function isSafeArtifactUpload(codeQlVersion) { - return !codeQlVersion ? true : semver3.gte(codeQlVersion, SafeArtifactUploadVersion); + return !codeQlVersion ? true : semver4.gte(codeQlVersion, SafeArtifactUploadVersion); } // src/feature-flags.ts @@ -130657,7 +130657,7 @@ var GitHubFeatureFlags = class { DEFAULT_VERSION_FEATURE_FLAG_PREFIX.length, f.length - DEFAULT_VERSION_FEATURE_FLAG_SUFFIX.length ).replace(/_/g, "."); - if (!semver4.valid(version)) { + if (!semver5.valid(version)) { this.logger.warning( `Ignoring feature flag ${f} as it does not specify a valid CodeQL version.` ); diff --git a/lib/init-action.js b/lib/init-action.js index b780144e6..0369036ac 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -91073,7 +91073,6 @@ function getDependencyCachingEnabled() { var fs6 = __toESM(require("fs")); var path8 = __toESM(require("path")); var import_perf_hooks = require("perf_hooks"); -var semver5 = __toESM(require_semver2()); // src/config/db-config.ts var path3 = __toESM(require("path")); @@ -91533,7 +91532,7 @@ function makeTelemetryDiagnostic(id, name, attributes) { // src/feature-flags.ts var fs4 = __toESM(require("fs")); var path6 = __toESM(require("path")); -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); // src/defaults.json var bundleVersion = "codeql-bundle-v2.23.8"; @@ -91548,16 +91547,26 @@ var actionsCache = __toESM(require_cache4()); var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver3 = __toESM(require_semver2()); var GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0"; +var GitVersionInfo = class { + constructor(truncatedVersion, fullVersion) { + this.truncatedVersion = truncatedVersion; + this.fullVersion = fullVersion; + } + isAtLeast(minVersion) { + return semver3.gte(this.truncatedVersion, minVersion); + } +}; async function getGitVersionOrThrow() { const stdout = await runGitCommand( void 0, ["--version"], "Failed to get git version." ); - const match = stdout.match(/git version (\d+\.\d+\.\d+)/); + const match = stdout.match(/^git version ((\d+\.\d+\.\d+).*)$/); if (match?.[1]) { - return match[1]; + return new GitVersionInfo(match[2], match[1]); } throw new Error(`Could not parse Git version from output: ${stdout.trim()}`); } @@ -91941,7 +91950,7 @@ async function getCacheRestoreKeyPrefix(config, codeQlVersion) { } // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } @@ -92249,7 +92258,7 @@ var GitHubFeatureFlags = class { DEFAULT_VERSION_FEATURE_FLAG_PREFIX.length, f.length - DEFAULT_VERSION_FEATURE_FLAG_SUFFIX.length ).replace(/_/g, "."); - if (!semver4.valid(version)) { + if (!semver5.valid(version)) { this.logger.warning( `Ignoring feature flag ${f} as it does not specify a valid CodeQL version.` ); @@ -92910,7 +92919,7 @@ async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, b ); return nonOverlayAnalysis; } - if (!semver5.gte(gitVersion, GIT_MINIMUM_VERSION_FOR_OVERLAY)) { + if (!gitVersion.isAtLeast(GIT_MINIMUM_VERSION_FOR_OVERLAY)) { logger.warning( `Cannot build an ${overlayDatabaseMode} database because the installed Git version is older than ${GIT_MINIMUM_VERSION_FOR_OVERLAY}. Falling back to creating a normal full database instead.` ); @@ -92972,7 +92981,7 @@ async function initConfig(features, inputs) { let gitVersion = void 0; try { gitVersion = await getGitVersionOrThrow(); - logger.info(`Using Git version ${gitVersion}`); + logger.info(`Using Git version ${gitVersion.fullVersion}`); await logGitVersionTelemetry(config, gitVersion); } catch (e) { logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); @@ -93198,7 +93207,10 @@ async function logGitVersionTelemetry(config, gitVersion) { makeTelemetryDiagnostic( "codeql-action/git-version-telemetry", "Git version telemetry", - { gitVersion } + { + fullVersion: gitVersion.fullVersion, + truncatedVersion: gitVersion.truncatedVersion + } ) ); } diff --git a/lib/resolve-environment-action.js b/lib/resolve-environment-action.js index 69e614862..abc71d65a 100644 --- a/lib/resolve-environment-action.js +++ b/lib/resolve-environment-action.js @@ -90552,7 +90552,6 @@ function wrapCliConfigurationError(cliError) { // src/config-utils.ts var fs3 = __toESM(require("fs")); var path3 = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); // src/analyses.ts var AnalysisKind = /* @__PURE__ */ ((AnalysisKind2) => { @@ -90590,7 +90589,7 @@ function getActionsLogger() { } // src/feature-flags.ts -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); // src/overlay-database-utils.ts var fs2 = __toESM(require("fs")); @@ -90601,6 +90600,7 @@ var actionsCache = __toESM(require_cache4()); var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -90822,7 +90822,7 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } diff --git a/lib/setup-codeql-action.js b/lib/setup-codeql-action.js index b250357ad..c8cc59796 100644 --- a/lib/setup-codeql-action.js +++ b/lib/setup-codeql-action.js @@ -90466,7 +90466,7 @@ function wrapApiConfigurationError(e) { // src/feature-flags.ts var fs4 = __toESM(require("fs")); var path4 = __toESM(require("path")); -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); // src/defaults.json var bundleVersion = "codeql-bundle-v2.23.8"; @@ -90484,6 +90484,7 @@ var core6 = __toESM(require_core()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver2 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -90730,7 +90731,7 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver2 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } @@ -91038,7 +91039,7 @@ var GitHubFeatureFlags = class { DEFAULT_VERSION_FEATURE_FLAG_PREFIX.length, f.length - DEFAULT_VERSION_FEATURE_FLAG_SUFFIX.length ).replace(/_/g, "."); - if (!semver3.valid(version)) { + if (!semver4.valid(version)) { this.logger.warning( `Ignoring feature flag ${f} as it does not specify a valid CodeQL version.` ); @@ -91451,9 +91452,6 @@ function wrapCliConfigurationError(cliError) { return new ConfigurationError(errorMessageBuilder); } -// src/config-utils.ts -var semver5 = __toESM(require_semver2()); - // src/analyses.ts var AnalysisKind = /* @__PURE__ */ ((AnalysisKind2) => { AnalysisKind2["CodeScanning"] = "code-scanning"; @@ -91464,7 +91462,7 @@ var supportedAnalysisKinds = new Set(Object.values(AnalysisKind)); // src/config/db-config.ts var jsonschema = __toESM(require_lib4()); -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); var PACK_IDENTIFIER_PATTERN = (function() { const alphaNumeric = "[a-z0-9]"; const alphaNumericDash = "[a-z0-9-]"; diff --git a/lib/start-proxy-action-post.js b/lib/start-proxy-action-post.js index d5e137b3a..e7769f533 100644 --- a/lib/start-proxy-action-post.js +++ b/lib/start-proxy-action-post.js @@ -126326,7 +126326,6 @@ async function getGitHubVersion() { // src/config-utils.ts var fs = __toESM(require("fs")); var path = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); // src/analyses.ts var AnalysisKind = /* @__PURE__ */ ((AnalysisKind2) => { @@ -126364,7 +126363,7 @@ function getActionsLogger() { } // src/feature-flags.ts -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); // src/overlay-database-utils.ts var actionsCache = __toESM(require_cache4()); @@ -126373,6 +126372,7 @@ var actionsCache = __toESM(require_cache4()); var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver3 = __toESM(require_semver2()); // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; @@ -126380,7 +126380,7 @@ var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_BYTES = OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB * 1e6; // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); // src/feature-flags.ts var featureConfig = { diff --git a/lib/start-proxy-action.js b/lib/start-proxy-action.js index c65acde80..85c70a06b 100644 --- a/lib/start-proxy-action.js +++ b/lib/start-proxy-action.js @@ -107527,9 +107527,6 @@ async function getDownloadUrl(logger) { var os = __toESM(require("os")); var core10 = __toESM(require_core()); -// src/config-utils.ts -var semver5 = __toESM(require_semver2()); - // src/analyses.ts var AnalysisKind = /* @__PURE__ */ ((AnalysisKind2) => { AnalysisKind2["CodeScanning"] = "code-scanning"; @@ -107552,7 +107549,7 @@ var PACK_IDENTIFIER_PATTERN = (function() { })(); // src/feature-flags.ts -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); // src/overlay-database-utils.ts var actionsCache = __toESM(require_cache4()); @@ -107561,6 +107558,7 @@ var actionsCache = __toESM(require_cache4()); var core9 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -107655,7 +107653,7 @@ var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_BYTES = OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB * 1e6; // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); // src/feature-flags.ts var featureConfig = { diff --git a/lib/upload-lib.js b/lib/upload-lib.js index 881a8ee6d..704c6d8d6 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -93582,7 +93582,6 @@ function wrapCliConfigurationError(cliError) { // src/config-utils.ts var fs5 = __toESM(require("fs")); var path5 = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); // src/caching-utils.ts var core6 = __toESM(require_core()); @@ -93616,7 +93615,7 @@ var fs4 = __toESM(require("fs")); var path4 = __toESM(require("path")); // src/feature-flags.ts -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); // src/defaults.json var bundleVersion = "codeql-bundle-v2.23.8"; @@ -93631,6 +93630,7 @@ var actionsCache = __toESM(require_cache4()); var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -93886,7 +93886,7 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } diff --git a/lib/upload-sarif-action-post.js b/lib/upload-sarif-action-post.js index 7c65f4161..6d0ab14a8 100644 --- a/lib/upload-sarif-action-post.js +++ b/lib/upload-sarif-action-post.js @@ -126489,9 +126489,6 @@ var cliErrorsConfig = { } }; -// src/config-utils.ts -var semver5 = __toESM(require_semver2()); - // src/caching-utils.ts var core6 = __toESM(require_core()); @@ -126528,7 +126525,7 @@ function withGroup(groupName, f) { } // src/feature-flags.ts -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); // src/overlay-database-utils.ts var actionsCache = __toESM(require_cache4()); @@ -126537,6 +126534,7 @@ var actionsCache = __toESM(require_cache4()); var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver3 = __toESM(require_semver2()); // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; @@ -126544,10 +126542,10 @@ var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_BYTES = OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB * 1e6; // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); var SafeArtifactUploadVersion = "2.20.3"; function isSafeArtifactUpload(codeQlVersion) { - return !codeQlVersion ? true : semver3.gte(codeQlVersion, SafeArtifactUploadVersion); + return !codeQlVersion ? true : semver4.gte(codeQlVersion, SafeArtifactUploadVersion); } // src/feature-flags.ts diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index 0972175ad..fe48e9857 100644 --- a/lib/upload-sarif-action.js +++ b/lib/upload-sarif-action.js @@ -93382,7 +93382,7 @@ function wrapApiConfigurationError(e) { // src/feature-flags.ts var fs4 = __toESM(require("fs")); var path4 = __toESM(require("path")); -var semver3 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); // src/defaults.json var bundleVersion = "codeql-bundle-v2.23.8"; @@ -93400,6 +93400,7 @@ var core6 = __toESM(require_core()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); +var semver2 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -93680,7 +93681,7 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver2 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } @@ -93988,7 +93989,7 @@ var GitHubFeatureFlags = class { DEFAULT_VERSION_FEATURE_FLAG_PREFIX.length, f.length - DEFAULT_VERSION_FEATURE_FLAG_SUFFIX.length ).replace(/_/g, "."); - if (!semver3.valid(version)) { + if (!semver4.valid(version)) { this.logger.warning( `Ignoring feature flag ${f} as it does not specify a valid CodeQL version.` ); @@ -94158,11 +94159,10 @@ var core9 = __toESM(require_core()); // src/config-utils.ts var fs6 = __toESM(require("fs")); var path6 = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); // src/config/db-config.ts var jsonschema = __toESM(require_lib4()); -var semver4 = __toESM(require_semver2()); +var semver5 = __toESM(require_semver2()); var PACK_IDENTIFIER_PATTERN = (function() { const alphaNumeric = "[a-z0-9]"; const alphaNumericDash = "[a-z0-9-]"; diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index 6f45c2637..337eb85c5 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -15,6 +15,7 @@ import * as configUtils from "./config-utils"; import * as errorMessages from "./error-messages"; import { Feature } from "./feature-flags"; import * as gitUtils from "./git-utils"; +import { GitVersionInfo } from "./git-utils"; import { KnownLanguage, Language } from "./languages"; import { getRunnerLogger } from "./logging"; import { @@ -978,7 +979,7 @@ interface OverlayDatabaseModeTestSetup { languages: Language[]; codeqlVersion: string; gitRoot: string | undefined; - gitVersion: string | undefined; + gitVersion: GitVersionInfo | undefined; codeScanningConfig: configUtils.UserConfig; diskUsage: DiskUsage | undefined; memoryFlagValue: number; @@ -993,7 +994,10 @@ const defaultOverlayDatabaseModeTestSetup: OverlayDatabaseModeTestSetup = { languages: [KnownLanguage.javascript], codeqlVersion: CODEQL_OVERLAY_MINIMUM_VERSION, gitRoot: "/some/git/root", - gitVersion: gitUtils.GIT_MINIMUM_VERSION_FOR_OVERLAY, + gitVersion: new GitVersionInfo( + gitUtils.GIT_MINIMUM_VERSION_FOR_OVERLAY, + gitUtils.GIT_MINIMUM_VERSION_FOR_OVERLAY, + ), codeScanningConfig: {}, diskUsage: { numAvailableBytes: 50_000_000_000, @@ -1781,7 +1785,7 @@ test( "Fallback due to old git version", { overlayDatabaseEnvVar: "overlay", - gitVersion: "2.30.0", // Version below required 2.38.0 + gitVersion: new GitVersionInfo("2.30.0", "2.30.0"), // Version below required 2.38.0 }, { overlayDatabaseMode: OverlayDatabaseMode.None, diff --git a/src/config-utils.ts b/src/config-utils.ts index de72474cd..09583ddf0 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -3,7 +3,6 @@ import * as path from "path"; import { performance } from "perf_hooks"; import * as yaml from "js-yaml"; -import * as semver from "semver"; import { getActionVersion, isAnalyzingPullRequest } from "./actions-util"; import { @@ -32,6 +31,7 @@ import { getGitRoot, getGitVersionOrThrow, GIT_MINIMUM_VERSION_FOR_OVERLAY, + GitVersionInfo, isAnalyzingDefaultBranch, } from "./git-utils"; import { KnownLanguage, Language } from "./languages"; @@ -717,7 +717,7 @@ export async function getOverlayDatabaseMode( buildMode: BuildMode | undefined, ramInput: string | undefined, codeScanningConfig: UserConfig, - gitVersion: string | undefined, + gitVersion: GitVersionInfo | undefined, logger: Logger, ): Promise<{ overlayDatabaseMode: OverlayDatabaseMode; @@ -828,7 +828,7 @@ export async function getOverlayDatabaseMode( ); return nonOverlayAnalysis; } - if (!semver.gte(gitVersion, GIT_MINIMUM_VERSION_FOR_OVERLAY)) { + if (!gitVersion.isAtLeast(GIT_MINIMUM_VERSION_FOR_OVERLAY)) { logger.warning( `Cannot build an ${overlayDatabaseMode} database because ` + `the installed Git version is older than ${GIT_MINIMUM_VERSION_FOR_OVERLAY}. ` + @@ -928,10 +928,10 @@ export async function initConfig( config.computedConfig["query-filters"] = []; } - let gitVersion: string | undefined = undefined; + let gitVersion: GitVersionInfo | undefined = undefined; try { gitVersion = await getGitVersionOrThrow(); - logger.info(`Using Git version ${gitVersion}`); + logger.info(`Using Git version ${gitVersion.fullVersion}`); await logGitVersionTelemetry(config, gitVersion); } catch (e) { logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); @@ -1355,7 +1355,7 @@ export function getPrimaryAnalysisConfig(config: Config): AnalysisConfig { /** Logs the Git version as a telemetry diagnostic. */ async function logGitVersionTelemetry( config: Config, - gitVersion: string, + gitVersion: GitVersionInfo, ): Promise { if (config.languages.length > 0) { addDiagnostic( @@ -1366,7 +1366,10 @@ async function logGitVersionTelemetry( makeTelemetryDiagnostic( "codeql-action/git-version-telemetry", "Git version telemetry", - { gitVersion }, + { + fullVersion: gitVersion.fullVersion, + truncatedVersion: gitVersion.truncatedVersion, + }, ), ); } diff --git a/src/git-utils.test.ts b/src/git-utils.test.ts index ff36ac668..618c12c42 100644 --- a/src/git-utils.test.ts +++ b/src/git-utils.test.ts @@ -376,10 +376,11 @@ test("getFileOidsUnderPath throws on unexpected output format", async (t) => { }); test("getGitVersionOrThrow returns version for valid git output", async (t) => { - sinon.stub(gitUtils as any, "runGitCommand").resolves("git version 2.40.0\n"); + sinon.stub(gitUtils as any, "runGitCommand").resolves("git version 2.40.0"); const version = await gitUtils.getGitVersionOrThrow(); - t.is(version, "2.40.0"); + t.is(version.truncatedVersion, "2.40.0"); + t.is(version.fullVersion, "2.40.0"); }); test("getGitVersionOrThrow throws for invalid git output", async (t) => { @@ -399,11 +400,12 @@ test("getGitVersionOrThrow throws for invalid git output", async (t) => { test("getGitVersionOrThrow handles Windows-style git output", async (t) => { sinon .stub(gitUtils as any, "runGitCommand") - .resolves("git version 2.40.0.windows.1\n"); + .resolves("git version 2.40.0.windows.1"); const version = await gitUtils.getGitVersionOrThrow(); // Should extract just the major.minor.patch portion - t.is(version, "2.40.0"); + t.is(version.truncatedVersion, "2.40.0"); + t.is(version.fullVersion, "2.40.0.windows.1"); }); test("getGitVersionOrThrow throws when git command fails", async (t) => { @@ -421,3 +423,12 @@ test("getGitVersionOrThrow throws when git command fails", async (t) => { }, ); }); + +test("GitVersionInfo.isAtLeast correctly compares versions", async (t) => { + const version = new gitUtils.GitVersionInfo("2.40.0", "2.40.0"); + + t.true(version.isAtLeast("2.38.0")); + t.true(version.isAtLeast("2.40.0")); + t.false(version.isAtLeast("2.41.0")); + t.false(version.isAtLeast("3.0.0")); +}); diff --git a/src/git-utils.ts b/src/git-utils.ts index 6c097bf4b..46bb5b8b1 100644 --- a/src/git-utils.ts +++ b/src/git-utils.ts @@ -1,6 +1,7 @@ import * as core from "@actions/core"; import * as toolrunner from "@actions/exec/lib/toolrunner"; import * as io from "@actions/io"; +import * as semver from "semver"; import { getOptionalInput, @@ -15,6 +16,27 @@ import { ConfigurationError, getRequiredEnvParam } from "./util"; */ export const GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0"; +/** + * Git version information + * + * The full version string as reported by `git --version` may not be + * semver-compatible (e.g., "2.40.0.windows.1"). This class captures both + * the full version string and a truncated semver-compatible version string + * (e.g., "2.40.0"). + */ +export class GitVersionInfo { + constructor( + /** Truncated semver-compatible version */ + public truncatedVersion: string, + /** Full version string as reported by `git --version` */ + public fullVersion: string, + ) {} + + isAtLeast(minVersion: string): boolean { + return semver.gte(this.truncatedVersion, minVersion); + } +} + /** * Gets the version of Git installed on the system and throws an error if * the version cannot be determined. @@ -22,7 +44,7 @@ export const GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0"; * @returns The Git version string (e.g., "2.40.0"). * @throws {Error} if the version could not be determined. */ -export async function getGitVersionOrThrow(): Promise { +export async function getGitVersionOrThrow(): Promise { const stdout = await runGitCommand( undefined, ["--version"], @@ -30,9 +52,9 @@ export async function getGitVersionOrThrow(): Promise { ); // Git version output can vary: "git version 2.40.0" or "git version 2.40.0.windows.1" // We capture just the major.minor.patch portion to ensure semver compatibility. - const match = stdout.match(/git version (\d+\.\d+\.\d+)/); + const match = stdout.match(/^git version ((\d+\.\d+\.\d+).*)$/); if (match?.[1]) { - return match[1]; + return new GitVersionInfo(match[2], match[1]); } throw new Error(`Could not parse Git version from output: ${stdout.trim()}`); }