From aff7998c4abcf0bd314d082d7ae594bfdbfc8c7c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Dec 2025 16:09:09 +0000 Subject: [PATCH 01/20] Initial plan From 89753aa84b611d1d9de7c7b583c29690cb68a4d9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Dec 2025 16:22:23 +0000 Subject: [PATCH 02/20] Add git version check for overlay analysis enablement Overlay analysis depends on `getFileOidsUnderPath`, which uses `git ls-files --format` option that requires Git 2.38.0+. This change adds a check for the git version before enabling overlay analysis. Co-authored-by: henrymercer <14129055+henrymercer@users.noreply.github.com> --- lib/analyze-action-post.js | 79 +++++++++--------- lib/analyze-action.js | 91 ++++++++++----------- lib/autobuild-action.js | 71 ++++++++-------- lib/init-action-post.js | 101 +++++++++++------------ lib/init-action.js | 129 +++++++++++++++++++----------- lib/resolve-environment-action.js | 69 ++++++++-------- lib/setup-codeql-action.js | 93 ++++++++++----------- lib/start-proxy-action-post.js | 77 +++++++++--------- lib/start-proxy-action.js | 63 ++++++++------- lib/upload-lib.js | 89 +++++++++++---------- lib/upload-sarif-action-post.js | 79 +++++++++--------- lib/upload-sarif-action.js | 93 ++++++++++----------- src/config-utils.test.ts | 42 ++++++++++ src/config-utils.ts | 15 +++- src/git-utils.test.ts | 108 ++++++++++++++++++++++++- src/git-utils.ts | 53 ++++++++++++ 16 files changed, 755 insertions(+), 497 deletions(-) diff --git a/lib/analyze-action-post.js b/lib/analyze-action-post.js index 34e5865d66..bd44577264 100644 --- a/lib/analyze-action-post.js +++ b/lib/analyze-action-post.js @@ -26413,8 +26413,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare2 = require_compare(); - var gte5 = (a, b, loose) => compare2(a, b, loose) >= 0; - module2.exports = gte5; + var gte6 = (a, b, loose) => compare2(a, b, loose) >= 0; + module2.exports = gte6; } }); @@ -26435,7 +26435,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -26465,7 +26465,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -27224,7 +27224,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); - var gte5 = require_gte(); + var gte6 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -27239,7 +27239,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -27554,7 +27554,7 @@ var require_semver2 = __commonJS({ var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce3 = require_coerce(); @@ -27592,7 +27592,7 @@ var require_semver2 = __commonJS({ lt, eq, neq, - gte: gte5, + gte: gte6, lte, cmp, coerce: coerce3, @@ -30964,7 +30964,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -31009,7 +31009,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -33162,8 +33162,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare2(a, b, loose) !== 0; } - exports2.gte = gte5; - function gte5(a, b, loose) { + exports2.gte = gte6; + function gte6(a, b, loose) { return compare2(a, b, loose) >= 0; } exports2.lte = lte; @@ -33194,7 +33194,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -33739,7 +33739,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -33940,7 +33940,7 @@ var require_cacheUtils = __commonJS({ var crypto = __importStar4(require("crypto")); var fs7 = __importStar4(require("fs")); var path6 = __importStar4(require("path")); - var semver8 = __importStar4(require_semver3()); + var semver9 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants7(); var versionSalt = "1.0"; @@ -34037,7 +34037,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver8.clean(versionOutput); + const version = semver9.clean(versionOutput); core14.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -77574,7 +77574,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var core_1 = require_core(); var os = require("os"); var cp = require("child_process"); @@ -77588,7 +77588,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver8.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver9.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -77597,7 +77597,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver8.satisfies(osVersion, item.platform_version); + chk = semver9.satisfies(osVersion, item.platform_version); } } return chk; @@ -78528,7 +78528,7 @@ var require_tool_cache = __commonJS({ var os = __importStar4(require("os")); var path6 = __importStar4(require("path")); var httpm = __importStar4(require_lib5()); - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var stream = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -78802,7 +78802,7 @@ var require_tool_cache = __commonJS({ } function cacheDir(sourceDir, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch = arch || os.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch}`); core14.debug(`source dir: ${sourceDir}`); @@ -78821,7 +78821,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir; function cacheFile(sourceFile, targetFile, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch = arch || os.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch}`); core14.debug(`source file: ${sourceFile}`); @@ -78852,7 +78852,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver8.clean(versionSpec) || ""; + versionSpec = semver9.clean(versionSpec) || ""; const cachePath = path6.join(_getCacheDirectory(), toolName, versionSpec, arch); core14.debug(`checking cache: ${cachePath}`); if (fs7.existsSync(cachePath) && fs7.existsSync(`${cachePath}.complete`)) { @@ -78936,7 +78936,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path6.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch || ""); + const folderPath = path6.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch || ""); core14.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io6.rmRF(folderPath); @@ -78946,15 +78946,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch) { - const folderPath = path6.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch || ""); + const folderPath = path6.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch || ""); const markerPath = `${folderPath}.complete`; fs7.writeFileSync(markerPath, ""); core14.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver8.clean(versionSpec) || ""; + const c = semver9.clean(versionSpec) || ""; core14.debug(`isExplicit: ${c}`); - const valid3 = semver8.valid(c) != null; + const valid3 = semver9.valid(c) != null; core14.debug(`explicit? ${valid3}`); return valid3; } @@ -78963,14 +78963,14 @@ var require_tool_cache = __commonJS({ let version = ""; core14.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver8.gt(a, b)) { + if (semver9.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver8.satisfies(potential, versionSpec); + const satisfied = semver9.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -84133,7 +84133,7 @@ var require_brace_expansion2 = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -84183,7 +84183,7 @@ var require_brace_expansion2 = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -97488,7 +97488,7 @@ var require_commonjs14 = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand_(str2, isTop) { @@ -97537,7 +97537,7 @@ var require_commonjs14 = __commonJS({ const reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } const pad = n.some(isPadded); N = []; @@ -119751,7 +119751,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 fs2 = __toESM(require("fs")); @@ -119762,6 +119762,7 @@ var actionsCache = __toESM(require_cache3()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -120005,13 +120006,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 @@ -120291,20 +120292,20 @@ function appendExtraQueryExclusions(extraQueryExclusions, cliConfig) { // src/setup-codeql.ts var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); -var semver7 = __toESM(require_semver2()); +var semver8 = __toESM(require_semver2()); // src/tar.ts var import_toolrunner = __toESM(require_toolrunner()); var io4 = __toESM(require_io2()); var toolcache = __toESM(require_tool_cache()); -var semver5 = __toESM(require_semver2()); +var semver6 = __toESM(require_semver2()); // src/tools-download.ts var core9 = __toESM(require_core()); var import_http_client = __toESM(require_lib6()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); -var semver6 = __toESM(require_semver2()); +var semver7 = __toESM(require_semver2()); var STREAMING_HIGH_WATERMARK_BYTES = 4 * 1024 * 1024; // src/tracer-config.ts diff --git a/lib/analyze-action.js b/lib/analyze-action.js index 23c0f4f8d5..6b3a310990 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -26413,8 +26413,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare3 = require_compare(); - var gte5 = (a, b, loose) => compare3(a, b, loose) >= 0; - module2.exports = gte5; + var gte6 = (a, b, loose) => compare3(a, b, loose) >= 0; + module2.exports = gte6; } }); @@ -26435,7 +26435,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -26465,7 +26465,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -27224,7 +27224,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); - var gte5 = require_gte(); + var gte6 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -27239,7 +27239,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -27554,7 +27554,7 @@ var require_semver2 = __commonJS({ var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce3 = require_coerce(); @@ -27592,7 +27592,7 @@ var require_semver2 = __commonJS({ lt, eq, neq, - gte: gte5, + gte: gte6, lte, cmp, coerce: coerce3, @@ -30964,7 +30964,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -31009,7 +31009,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -33162,8 +33162,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare3(a, b, loose) !== 0; } - exports2.gte = gte5; - function gte5(a, b, loose) { + exports2.gte = gte6; + function gte6(a, b, loose) { return compare3(a, b, loose) >= 0; } exports2.lte = lte; @@ -33194,7 +33194,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -33739,7 +33739,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -33940,7 +33940,7 @@ var require_cacheUtils = __commonJS({ var crypto2 = __importStar4(require("crypto")); var fs17 = __importStar4(require("fs")); var path16 = __importStar4(require("path")); - var semver8 = __importStar4(require_semver3()); + var semver9 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants7(); var versionSalt = "1.0"; @@ -34037,7 +34037,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver8.clean(versionOutput); + const version = semver9.clean(versionOutput); core15.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -77574,7 +77574,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var core_1 = require_core(); var os5 = require("os"); var cp = require("child_process"); @@ -77588,7 +77588,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver8.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver9.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -77597,7 +77597,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver8.satisfies(osVersion, item.platform_version); + chk = semver9.satisfies(osVersion, item.platform_version); } } return chk; @@ -78528,7 +78528,7 @@ var require_tool_cache = __commonJS({ var os5 = __importStar4(require("os")); var path16 = __importStar4(require("path")); var httpm = __importStar4(require_lib5()); - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var stream2 = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -78802,7 +78802,7 @@ var require_tool_cache = __commonJS({ } function cacheDir(sourceDir, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch2 = arch2 || os5.arch(); core15.debug(`Caching tool ${tool} ${version} ${arch2}`); core15.debug(`source dir: ${sourceDir}`); @@ -78821,7 +78821,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir; function cacheFile(sourceFile, targetFile, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch2 = arch2 || os5.arch(); core15.debug(`Caching tool ${tool} ${version} ${arch2}`); core15.debug(`source file: ${sourceFile}`); @@ -78852,7 +78852,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver8.clean(versionSpec) || ""; + versionSpec = semver9.clean(versionSpec) || ""; const cachePath = path16.join(_getCacheDirectory(), toolName, versionSpec, arch2); core15.debug(`checking cache: ${cachePath}`); if (fs17.existsSync(cachePath) && fs17.existsSync(`${cachePath}.complete`)) { @@ -78936,7 +78936,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path16.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch2 || ""); + const folderPath = path16.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); core15.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io7.rmRF(folderPath); @@ -78946,15 +78946,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch2) { - const folderPath = path16.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch2 || ""); + const folderPath = path16.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); const markerPath = `${folderPath}.complete`; fs17.writeFileSync(markerPath, ""); core15.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver8.clean(versionSpec) || ""; + const c = semver9.clean(versionSpec) || ""; core15.debug(`isExplicit: ${c}`); - const valid3 = semver8.valid(c) != null; + const valid3 = semver9.valid(c) != null; core15.debug(`explicit? ${valid3}`); return valid3; } @@ -78963,14 +78963,14 @@ var require_tool_cache = __commonJS({ let version = ""; core15.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver8.gt(a, b)) { + if (semver9.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver8.satisfies(potential, versionSpec); + const satisfied = semver9.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -88208,7 +88208,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"; @@ -88223,6 +88223,7 @@ var actionsCache = __toESM(require_cache3()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -88646,7 +88647,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]; } @@ -88959,7 +88960,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.` ); @@ -89486,7 +89487,7 @@ var fs9 = __toESM(require("fs")); var path8 = __toESM(require("path")); var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); -var semver7 = __toESM(require_semver2()); +var semver8 = __toESM(require_semver2()); // node_modules/uuid/dist-node/stringify.js var byteToHex = []; @@ -89549,7 +89550,7 @@ var stream = __toESM(require("stream")); var import_toolrunner = __toESM(require_toolrunner()); var io4 = __toESM(require_io2()); var toolcache = __toESM(require_tool_cache()); -var semver5 = __toESM(require_semver2()); +var semver6 = __toESM(require_semver2()); var MIN_REQUIRED_BSD_TAR_VERSION = "3.4.3"; var MIN_REQUIRED_GNU_TAR_VERSION = "1.31"; async function getTarVersion() { @@ -89591,9 +89592,9 @@ async function isZstdAvailable(logger) { case "gnu": return { available: foundZstdBinary && // GNU tar only uses major and minor version numbers - semver5.gte( - semver5.coerce(version), - semver5.coerce(MIN_REQUIRED_GNU_TAR_VERSION) + semver6.gte( + semver6.coerce(version), + semver6.coerce(MIN_REQUIRED_GNU_TAR_VERSION) ), foundZstdBinary, version: tarVersion @@ -89602,7 +89603,7 @@ async function isZstdAvailable(logger) { return { available: foundZstdBinary && // Do a loose comparison since these version numbers don't contain // a patch version number. - semver5.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), + semver6.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), foundZstdBinary, version: tarVersion }; @@ -89709,7 +89710,7 @@ var core9 = __toESM(require_core()); var import_http_client = __toESM(require_lib6()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); -var semver6 = __toESM(require_semver2()); +var semver7 = __toESM(require_semver2()); var STREAMING_HIGH_WATERMARK_BYTES = 4 * 1024 * 1024; var TOOLCACHE_TOOL_NAME = "CodeQL"; function makeDownloadFirstToolsDownloadDurations(downloadDurationMs, extractionDurationMs) { @@ -89839,7 +89840,7 @@ function getToolcacheDirectory(version) { return path7.join( getRequiredEnvParam("RUNNER_TOOL_CACHE"), TOOLCACHE_TOOL_NAME, - semver6.clean(version) || version, + semver7.clean(version) || version, os2.arch() || "" ); } @@ -89964,13 +89965,13 @@ function tryGetTagNameFromUrl(url2, logger) { return match[1]; } function convertToSemVer(version, logger) { - if (!semver7.valid(version)) { + if (!semver8.valid(version)) { logger.debug( `Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.` ); version = `0.0.0-${version}`; } - const s = semver7.clean(version); + const s = semver8.clean(version); if (!s) { throw new Error(`Bundle version ${version} is not in SemVer format.`); } @@ -90078,7 +90079,7 @@ async function getCodeQLSource(toolsInput, defaultCliVersion, apiDetails, varian url2 = toolsInput; if (tagName) { const bundleVersion3 = tryGetBundleVersionFromTagName(tagName, logger); - if (bundleVersion3 && semver7.valid(bundleVersion3)) { + if (bundleVersion3 && semver8.valid(bundleVersion3)) { cliVersion2 = convertToSemVer(bundleVersion3, logger); } } @@ -90349,7 +90350,7 @@ async function setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, defau async function useZstdBundle(cliVersion2, tarSupportsZstd) { return ( // In testing, gzip performs better than zstd on Windows. - process.platform !== "win32" && tarSupportsZstd && semver7.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) + process.platform !== "win32" && tarSupportsZstd && semver8.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) ); } function getTempExtractionDir(tempDir) { @@ -90381,7 +90382,7 @@ async function getNightlyToolsUrl(logger) { } } function getLatestToolcacheVersion(logger) { - const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver7.compare(b, a)); + const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver8.compare(b, a)); logger.debug( `Found the following versions of the CodeQL tools in the toolcache: ${JSON.stringify( allVersions diff --git a/lib/autobuild-action.js b/lib/autobuild-action.js index a66b499faa..e396cc5023 100644 --- a/lib/autobuild-action.js +++ b/lib/autobuild-action.js @@ -26413,8 +26413,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare2 = require_compare(); - var gte5 = (a, b, loose) => compare2(a, b, loose) >= 0; - module2.exports = gte5; + var gte6 = (a, b, loose) => compare2(a, b, loose) >= 0; + module2.exports = gte6; } }); @@ -26435,7 +26435,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -26465,7 +26465,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -27224,7 +27224,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); - var gte5 = require_gte(); + var gte6 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -27239,7 +27239,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -27554,7 +27554,7 @@ var require_semver2 = __commonJS({ var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce3 = require_coerce(); @@ -27592,7 +27592,7 @@ var require_semver2 = __commonJS({ lt, eq, neq, - gte: gte5, + gte: gte6, lte, cmp, coerce: coerce3, @@ -30964,7 +30964,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -31009,7 +31009,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -33162,8 +33162,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare2(a, b, loose) !== 0; } - exports2.gte = gte5; - function gte5(a, b, loose) { + exports2.gte = gte6; + function gte6(a, b, loose) { return compare2(a, b, loose) >= 0; } exports2.lte = lte; @@ -33194,7 +33194,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -33739,7 +33739,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -33940,7 +33940,7 @@ var require_cacheUtils = __commonJS({ var crypto = __importStar4(require("crypto")); var fs7 = __importStar4(require("fs")); var path7 = __importStar4(require("path")); - var semver8 = __importStar4(require_semver3()); + var semver9 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants7(); var versionSalt = "1.0"; @@ -34037,7 +34037,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver8.clean(versionOutput); + const version = semver9.clean(versionOutput); core14.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -77574,7 +77574,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var core_1 = require_core(); var os2 = require("os"); var cp = require("child_process"); @@ -77588,7 +77588,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver8.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver9.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -77597,7 +77597,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver8.satisfies(osVersion, item.platform_version); + chk = semver9.satisfies(osVersion, item.platform_version); } } return chk; @@ -78528,7 +78528,7 @@ var require_tool_cache = __commonJS({ var os2 = __importStar4(require("os")); var path7 = __importStar4(require("path")); var httpm = __importStar4(require_lib5()); - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var stream = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -78802,7 +78802,7 @@ var require_tool_cache = __commonJS({ } function cacheDir(sourceDir, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch = arch || os2.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch}`); core14.debug(`source dir: ${sourceDir}`); @@ -78821,7 +78821,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir; function cacheFile(sourceFile, targetFile, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch = arch || os2.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch}`); core14.debug(`source file: ${sourceFile}`); @@ -78852,7 +78852,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver8.clean(versionSpec) || ""; + versionSpec = semver9.clean(versionSpec) || ""; const cachePath = path7.join(_getCacheDirectory(), toolName, versionSpec, arch); core14.debug(`checking cache: ${cachePath}`); if (fs7.existsSync(cachePath) && fs7.existsSync(`${cachePath}.complete`)) { @@ -78936,7 +78936,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path7.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch || ""); + const folderPath = path7.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch || ""); core14.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io5.rmRF(folderPath); @@ -78946,15 +78946,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch) { - const folderPath = path7.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch || ""); + const folderPath = path7.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch || ""); const markerPath = `${folderPath}.complete`; fs7.writeFileSync(markerPath, ""); core14.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver8.clean(versionSpec) || ""; + const c = semver9.clean(versionSpec) || ""; core14.debug(`isExplicit: ${c}`); - const valid3 = semver8.valid(c) != null; + const valid3 = semver9.valid(c) != null; core14.debug(`explicit? ${valid3}`); return valid3; } @@ -78963,14 +78963,14 @@ var require_tool_cache = __commonJS({ let version = ""; core14.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver8.gt(a, b)) { + if (semver9.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver8.satisfies(potential, versionSpec); + const satisfied = semver9.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -83698,7 +83698,7 @@ var PACK_IDENTIFIER_PATTERN = (function() { // 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"; @@ -83713,6 +83713,7 @@ var actionsCache = __toESM(require_cache3()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -83948,7 +83949,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]; } @@ -84260,7 +84261,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.` ); @@ -84500,20 +84501,20 @@ function appendExtraQueryExclusions(extraQueryExclusions, cliConfig) { // src/setup-codeql.ts var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); -var semver7 = __toESM(require_semver2()); +var semver8 = __toESM(require_semver2()); // src/tar.ts var import_toolrunner = __toESM(require_toolrunner()); var io4 = __toESM(require_io2()); var toolcache = __toESM(require_tool_cache()); -var semver5 = __toESM(require_semver2()); +var semver6 = __toESM(require_semver2()); // src/tools-download.ts var core9 = __toESM(require_core()); var import_http_client = __toESM(require_lib6()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); -var semver6 = __toESM(require_semver2()); +var semver7 = __toESM(require_semver2()); var STREAMING_HIGH_WATERMARK_BYTES = 4 * 1024 * 1024; // src/tracer-config.ts diff --git a/lib/init-action-post.js b/lib/init-action-post.js index 21429db2ca..5c1a89c358 100644 --- a/lib/init-action-post.js +++ b/lib/init-action-post.js @@ -26413,8 +26413,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare3 = require_compare(); - var gte5 = (a, b, loose) => compare3(a, b, loose) >= 0; - module2.exports = gte5; + var gte6 = (a, b, loose) => compare3(a, b, loose) >= 0; + module2.exports = gte6; } }); @@ -26435,7 +26435,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -26465,7 +26465,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -27224,7 +27224,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); - var gte5 = require_gte(); + var gte6 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -27239,7 +27239,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -27554,7 +27554,7 @@ var require_semver2 = __commonJS({ var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce3 = require_coerce(); @@ -27592,7 +27592,7 @@ var require_semver2 = __commonJS({ lt, eq, neq, - gte: gte5, + gte: gte6, lte, cmp, coerce: coerce3, @@ -30964,7 +30964,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -31009,7 +31009,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -33162,8 +33162,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare3(a, b, loose) !== 0; } - exports2.gte = gte5; - function gte5(a, b, loose) { + exports2.gte = gte6; + function gte6(a, b, loose) { return compare3(a, b, loose) >= 0; } exports2.lte = lte; @@ -33194,7 +33194,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -33739,7 +33739,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -33940,7 +33940,7 @@ var require_cacheUtils = __commonJS({ var crypto = __importStar4(require("crypto")); var fs17 = __importStar4(require("fs")); var path15 = __importStar4(require("path")); - var semver8 = __importStar4(require_semver3()); + var semver9 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants7(); var versionSalt = "1.0"; @@ -34037,7 +34037,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver8.clean(versionOutput); + const version = semver9.clean(versionOutput); core18.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -77574,7 +77574,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var core_1 = require_core(); var os3 = require("os"); var cp = require("child_process"); @@ -77588,7 +77588,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver8.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver9.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -77597,7 +77597,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver8.satisfies(osVersion, item.platform_version); + chk = semver9.satisfies(osVersion, item.platform_version); } } return chk; @@ -78528,7 +78528,7 @@ var require_tool_cache = __commonJS({ var os3 = __importStar4(require("os")); var path15 = __importStar4(require("path")); var httpm = __importStar4(require_lib5()); - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var stream2 = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -78802,7 +78802,7 @@ var require_tool_cache = __commonJS({ } function cacheDir(sourceDir, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch2 = arch2 || os3.arch(); core18.debug(`Caching tool ${tool} ${version} ${arch2}`); core18.debug(`source dir: ${sourceDir}`); @@ -78821,7 +78821,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir; function cacheFile(sourceFile, targetFile, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch2 = arch2 || os3.arch(); core18.debug(`Caching tool ${tool} ${version} ${arch2}`); core18.debug(`source file: ${sourceFile}`); @@ -78852,7 +78852,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver8.clean(versionSpec) || ""; + versionSpec = semver9.clean(versionSpec) || ""; const cachePath = path15.join(_getCacheDirectory(), toolName, versionSpec, arch2); core18.debug(`checking cache: ${cachePath}`); if (fs17.existsSync(cachePath) && fs17.existsSync(`${cachePath}.complete`)) { @@ -78936,7 +78936,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path15.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch2 || ""); + const folderPath = path15.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); core18.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io7.rmRF(folderPath); @@ -78946,15 +78946,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch2) { - const folderPath = path15.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch2 || ""); + const folderPath = path15.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); const markerPath = `${folderPath}.complete`; fs17.writeFileSync(markerPath, ""); core18.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver8.clean(versionSpec) || ""; + const c = semver9.clean(versionSpec) || ""; core18.debug(`isExplicit: ${c}`); - const valid3 = semver8.valid(c) != null; + const valid3 = semver9.valid(c) != null; core18.debug(`explicit? ${valid3}`); return valid3; } @@ -78963,14 +78963,14 @@ var require_tool_cache = __commonJS({ let version = ""; core18.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver8.gt(a, b)) { + if (semver9.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver8.satisfies(potential, versionSpec); + const satisfied = semver9.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -84133,7 +84133,7 @@ var require_brace_expansion2 = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -84183,7 +84183,7 @@ var require_brace_expansion2 = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -97488,7 +97488,7 @@ var require_commonjs14 = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand_(str2, isTop) { @@ -97537,7 +97537,7 @@ var require_commonjs14 = __commonJS({ const reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } const pad = n.some(isPadded); N = []; @@ -123080,7 +123080,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"; @@ -123095,6 +123095,7 @@ var actionsCache = __toESM(require_cache3()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -123383,13 +123384,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 @@ -123700,7 +123701,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.` ); @@ -123963,7 +123964,7 @@ var fs9 = __toESM(require("fs")); var path8 = __toESM(require("path")); var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); -var semver7 = __toESM(require_semver2()); +var semver8 = __toESM(require_semver2()); // node_modules/uuid/dist-node/stringify.js var byteToHex = []; @@ -124026,7 +124027,7 @@ var stream = __toESM(require("stream")); var import_toolrunner = __toESM(require_toolrunner()); var io4 = __toESM(require_io2()); var toolcache = __toESM(require_tool_cache()); -var semver5 = __toESM(require_semver2()); +var semver6 = __toESM(require_semver2()); var MIN_REQUIRED_BSD_TAR_VERSION = "3.4.3"; var MIN_REQUIRED_GNU_TAR_VERSION = "1.31"; async function getTarVersion() { @@ -124068,9 +124069,9 @@ async function isZstdAvailable(logger) { case "gnu": return { available: foundZstdBinary && // GNU tar only uses major and minor version numbers - semver5.gte( - semver5.coerce(version), - semver5.coerce(MIN_REQUIRED_GNU_TAR_VERSION) + semver6.gte( + semver6.coerce(version), + semver6.coerce(MIN_REQUIRED_GNU_TAR_VERSION) ), foundZstdBinary, version: tarVersion @@ -124079,7 +124080,7 @@ async function isZstdAvailable(logger) { return { available: foundZstdBinary && // Do a loose comparison since these version numbers don't contain // a patch version number. - semver5.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), + semver6.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), foundZstdBinary, version: tarVersion }; @@ -124186,7 +124187,7 @@ var core9 = __toESM(require_core()); var import_http_client = __toESM(require_lib6()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); -var semver6 = __toESM(require_semver2()); +var semver7 = __toESM(require_semver2()); var STREAMING_HIGH_WATERMARK_BYTES = 4 * 1024 * 1024; var TOOLCACHE_TOOL_NAME = "CodeQL"; function makeDownloadFirstToolsDownloadDurations(downloadDurationMs, extractionDurationMs) { @@ -124316,7 +124317,7 @@ function getToolcacheDirectory(version) { return path7.join( getRequiredEnvParam("RUNNER_TOOL_CACHE"), TOOLCACHE_TOOL_NAME, - semver6.clean(version) || version, + semver7.clean(version) || version, os.arch() || "" ); } @@ -124441,13 +124442,13 @@ function tryGetTagNameFromUrl(url2, logger) { return match[1]; } function convertToSemVer(version, logger) { - if (!semver7.valid(version)) { + if (!semver8.valid(version)) { logger.debug( `Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.` ); version = `0.0.0-${version}`; } - const s = semver7.clean(version); + const s = semver8.clean(version); if (!s) { throw new Error(`Bundle version ${version} is not in SemVer format.`); } @@ -124555,7 +124556,7 @@ async function getCodeQLSource(toolsInput, defaultCliVersion, apiDetails, varian url2 = toolsInput; if (tagName) { const bundleVersion3 = tryGetBundleVersionFromTagName(tagName, logger); - if (bundleVersion3 && semver7.valid(bundleVersion3)) { + if (bundleVersion3 && semver8.valid(bundleVersion3)) { cliVersion2 = convertToSemVer(bundleVersion3, logger); } } @@ -124826,7 +124827,7 @@ async function setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, defau async function useZstdBundle(cliVersion2, tarSupportsZstd) { return ( // In testing, gzip performs better than zstd on Windows. - process.platform !== "win32" && tarSupportsZstd && semver7.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) + process.platform !== "win32" && tarSupportsZstd && semver8.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) ); } function getTempExtractionDir(tempDir) { @@ -124858,7 +124859,7 @@ async function getNightlyToolsUrl(logger) { } } function getLatestToolcacheVersion(logger) { - const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver7.compare(b, a)); + const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver8.compare(b, a)); logger.debug( `Found the following versions of the CodeQL tools in the toolcache: ${JSON.stringify( allVersions diff --git a/lib/init-action.js b/lib/init-action.js index 6ec4876f4e..3bd87b605a 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -20995,8 +20995,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare2 = require_compare(); - var gte5 = (a, b, loose) => compare2(a, b, loose) >= 0; - module2.exports = gte5; + var gte6 = (a, b, loose) => compare2(a, b, loose) >= 0; + module2.exports = gte6; } }); @@ -21017,7 +21017,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lt2 = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -21047,7 +21047,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt2(a, b, loose); case "<=": @@ -21806,7 +21806,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt2 = require_lt(); var lte = require_lte(); - var gte5 = require_gte(); + var gte6 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -21821,7 +21821,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt2; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -22136,7 +22136,7 @@ var require_semver2 = __commonJS({ var lt2 = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce3 = require_coerce(); @@ -22174,7 +22174,7 @@ var require_semver2 = __commonJS({ lt: lt2, eq, neq, - gte: gte5, + gte: gte6, lte, cmp, coerce: coerce3, @@ -31115,7 +31115,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -31160,7 +31160,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -33313,8 +33313,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare2(a, b, loose) !== 0; } - exports2.gte = gte5; - function gte5(a, b, loose) { + exports2.gte = gte6; + function gte6(a, b, loose) { return compare2(a, b, loose) >= 0; } exports2.lte = lte; @@ -33345,7 +33345,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt2(a, b, loose); case "<=": @@ -33890,7 +33890,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt2; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -34091,7 +34091,7 @@ var require_cacheUtils = __commonJS({ var crypto2 = __importStar4(require("crypto")); var fs15 = __importStar4(require("fs")); var path16 = __importStar4(require("path")); - var semver9 = __importStar4(require_semver3()); + var semver10 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants7(); var versionSalt = "1.0"; @@ -34188,7 +34188,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver9.clean(versionOutput); + const version = semver10.clean(versionOutput); core14.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -78822,7 +78822,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver9 = __importStar4(require_semver2()); + var semver10 = __importStar4(require_semver2()); var core_1 = require_core(); var os5 = require("os"); var cp = require("child_process"); @@ -78836,7 +78836,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver9.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver10.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -78845,7 +78845,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver9.satisfies(osVersion, item.platform_version); + chk = semver10.satisfies(osVersion, item.platform_version); } } return chk; @@ -79776,7 +79776,7 @@ var require_tool_cache = __commonJS({ var os5 = __importStar4(require("os")); var path16 = __importStar4(require("path")); var httpm = __importStar4(require_lib5()); - var semver9 = __importStar4(require_semver2()); + var semver10 = __importStar4(require_semver2()); var stream2 = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -80050,7 +80050,7 @@ var require_tool_cache = __commonJS({ } function cacheDir(sourceDir, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver9.clean(version) || version; + version = semver10.clean(version) || version; arch2 = arch2 || os5.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch2}`); core14.debug(`source dir: ${sourceDir}`); @@ -80069,7 +80069,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir; function cacheFile(sourceFile, targetFile, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver9.clean(version) || version; + version = semver10.clean(version) || version; arch2 = arch2 || os5.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch2}`); core14.debug(`source file: ${sourceFile}`); @@ -80100,7 +80100,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver9.clean(versionSpec) || ""; + versionSpec = semver10.clean(versionSpec) || ""; const cachePath = path16.join(_getCacheDirectory(), toolName, versionSpec, arch2); core14.debug(`checking cache: ${cachePath}`); if (fs15.existsSync(cachePath) && fs15.existsSync(`${cachePath}.complete`)) { @@ -80184,7 +80184,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path16.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); + const folderPath = path16.join(_getCacheDirectory(), tool, semver10.clean(version) || version, arch2 || ""); core14.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io7.rmRF(folderPath); @@ -80194,15 +80194,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch2) { - const folderPath = path16.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); + const folderPath = path16.join(_getCacheDirectory(), tool, semver10.clean(version) || version, arch2 || ""); const markerPath = `${folderPath}.complete`; fs15.writeFileSync(markerPath, ""); core14.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver9.clean(versionSpec) || ""; + const c = semver10.clean(versionSpec) || ""; core14.debug(`isExplicit: ${c}`); - const valid3 = semver9.valid(c) != null; + const valid3 = semver10.valid(c) != null; core14.debug(`explicit? ${valid3}`); return valid3; } @@ -80211,14 +80211,14 @@ var require_tool_cache = __commonJS({ let version = ""; core14.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver9.gt(a, b)) { + if (semver10.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver9.satisfies(potential, versionSpec); + const satisfied = semver10.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -81571,7 +81571,7 @@ var fs14 = __toESM(require("fs")); var path15 = __toESM(require("path")); var core13 = __toESM(require_core()); var io6 = __toESM(require_io2()); -var semver8 = __toESM(require_semver2()); +var semver9 = __toESM(require_semver2()); // node_modules/uuid/dist-node/stringify.js var byteToHex = []; @@ -85632,7 +85632,7 @@ function parseUserConfig(logger, pathInput, contents, validateConfig) { // 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"; @@ -85647,6 +85647,33 @@ var actionsCache = __toESM(require_cache3()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); +var semver3 = __toESM(require_semver2()); +var GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0"; +async function getGitVersion() { + try { + const stdout = await runGitCommand( + void 0, + ["--version"], + "Failed to get git version." + ); + const match = stdout.match(/git version (\d+\.\d+\.\d+)/); + if (match?.[1]) { + return match[1]; + } + return void 0; + } catch { + return void 0; + } +} +async function gitVersionAtLeast(requiredVersion, logger) { + const version = await getGitVersion(); + if (version === void 0) { + logger.debug("Could not determine Git version."); + return false; + } + logger.debug(`Installed Git version is ${version}.`); + return semver3.gte(version, requiredVersion); +} var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -86060,7 +86087,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]; } @@ -86373,7 +86400,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.` ); @@ -87028,6 +87055,12 @@ async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, b ); return nonOverlayAnalysis; } + if (!await gitVersionAtLeast(GIT_MINIMUM_VERSION_FOR_OVERLAY, logger)) { + 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.` + ); + return nonOverlayAnalysis; + } return { overlayDatabaseMode, useOverlayDatabaseCaching @@ -87817,7 +87850,7 @@ var fs9 = __toESM(require("fs")); var path10 = __toESM(require("path")); var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); -var semver7 = __toESM(require_semver2()); +var semver8 = __toESM(require_semver2()); // src/tar.ts var import_child_process = require("child_process"); @@ -87826,7 +87859,7 @@ var stream = __toESM(require("stream")); var import_toolrunner = __toESM(require_toolrunner()); var io4 = __toESM(require_io2()); var toolcache = __toESM(require_tool_cache()); -var semver5 = __toESM(require_semver2()); +var semver6 = __toESM(require_semver2()); var MIN_REQUIRED_BSD_TAR_VERSION = "3.4.3"; var MIN_REQUIRED_GNU_TAR_VERSION = "1.31"; async function getTarVersion() { @@ -87868,9 +87901,9 @@ async function isZstdAvailable(logger) { case "gnu": return { available: foundZstdBinary && // GNU tar only uses major and minor version numbers - semver5.gte( - semver5.coerce(version), - semver5.coerce(MIN_REQUIRED_GNU_TAR_VERSION) + semver6.gte( + semver6.coerce(version), + semver6.coerce(MIN_REQUIRED_GNU_TAR_VERSION) ), foundZstdBinary, version: tarVersion @@ -87879,7 +87912,7 @@ async function isZstdAvailable(logger) { return { available: foundZstdBinary && // Do a loose comparison since these version numbers don't contain // a patch version number. - semver5.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), + semver6.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), foundZstdBinary, version: tarVersion }; @@ -87986,7 +88019,7 @@ var core9 = __toESM(require_core()); var import_http_client = __toESM(require_lib6()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); -var semver6 = __toESM(require_semver2()); +var semver7 = __toESM(require_semver2()); var STREAMING_HIGH_WATERMARK_BYTES = 4 * 1024 * 1024; var TOOLCACHE_TOOL_NAME = "CodeQL"; function makeDownloadFirstToolsDownloadDurations(downloadDurationMs, extractionDurationMs) { @@ -88116,7 +88149,7 @@ function getToolcacheDirectory(version) { return path9.join( getRequiredEnvParam("RUNNER_TOOL_CACHE"), TOOLCACHE_TOOL_NAME, - semver6.clean(version) || version, + semver7.clean(version) || version, os3.arch() || "" ); } @@ -88241,13 +88274,13 @@ function tryGetTagNameFromUrl(url, logger) { return match[1]; } function convertToSemVer(version, logger) { - if (!semver7.valid(version)) { + if (!semver8.valid(version)) { logger.debug( `Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.` ); version = `0.0.0-${version}`; } - const s = semver7.clean(version); + const s = semver8.clean(version); if (!s) { throw new Error(`Bundle version ${version} is not in SemVer format.`); } @@ -88355,7 +88388,7 @@ async function getCodeQLSource(toolsInput, defaultCliVersion, apiDetails, varian url = toolsInput; if (tagName) { const bundleVersion3 = tryGetBundleVersionFromTagName(tagName, logger); - if (bundleVersion3 && semver7.valid(bundleVersion3)) { + if (bundleVersion3 && semver8.valid(bundleVersion3)) { cliVersion2 = convertToSemVer(bundleVersion3, logger); } } @@ -88626,7 +88659,7 @@ async function setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, defau async function useZstdBundle(cliVersion2, tarSupportsZstd) { return ( // In testing, gzip performs better than zstd on Windows. - process.platform !== "win32" && tarSupportsZstd && semver7.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) + process.platform !== "win32" && tarSupportsZstd && semver8.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) ); } function getTempExtractionDir(tempDir) { @@ -88658,7 +88691,7 @@ async function getNightlyToolsUrl(logger) { } } function getLatestToolcacheVersion(logger) { - const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver7.compare(b, a)); + const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver8.compare(b, a)); logger.debug( `Found the following versions of the CodeQL tools in the toolcache: ${JSON.stringify( allVersions @@ -90035,12 +90068,12 @@ async function run() { const experimental = "2.19.3"; const publicPreview = "2.22.1"; const actualVer = (await codeql.getVersion()).version; - if (semver8.lt(actualVer, experimental)) { + if (semver9.lt(actualVer, experimental)) { throw new ConfigurationError( `Rust analysis is supported by CodeQL CLI version ${experimental} or higher, but found version ${actualVer}` ); } - if (semver8.lt(actualVer, publicPreview)) { + if (semver9.lt(actualVer, publicPreview)) { core13.exportVariable("CODEQL_ENABLE_EXPERIMENTAL_FEATURES" /* EXPERIMENTAL_FEATURES */, "true"); logger.info("Experimental Rust analysis enabled"); } diff --git a/lib/resolve-environment-action.js b/lib/resolve-environment-action.js index cf895cd398..17100c2c16 100644 --- a/lib/resolve-environment-action.js +++ b/lib/resolve-environment-action.js @@ -26413,8 +26413,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare2 = require_compare(); - var gte5 = (a, b, loose) => compare2(a, b, loose) >= 0; - module2.exports = gte5; + var gte6 = (a, b, loose) => compare2(a, b, loose) >= 0; + module2.exports = gte6; } }); @@ -26435,7 +26435,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -26465,7 +26465,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -27224,7 +27224,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); - var gte5 = require_gte(); + var gte6 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -27239,7 +27239,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -27554,7 +27554,7 @@ var require_semver2 = __commonJS({ var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce3 = require_coerce(); @@ -27592,7 +27592,7 @@ var require_semver2 = __commonJS({ lt, eq, neq, - gte: gte5, + gte: gte6, lte, cmp, coerce: coerce3, @@ -30964,7 +30964,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -31009,7 +31009,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -33162,8 +33162,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare2(a, b, loose) !== 0; } - exports2.gte = gte5; - function gte5(a, b, loose) { + exports2.gte = gte6; + function gte6(a, b, loose) { return compare2(a, b, loose) >= 0; } exports2.lte = lte; @@ -33194,7 +33194,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -33739,7 +33739,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -33940,7 +33940,7 @@ var require_cacheUtils = __commonJS({ var crypto = __importStar4(require("crypto")); var fs5 = __importStar4(require("fs")); var path5 = __importStar4(require("path")); - var semver8 = __importStar4(require_semver3()); + var semver9 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants7(); var versionSalt = "1.0"; @@ -34037,7 +34037,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver8.clean(versionOutput); + const version = semver9.clean(versionOutput); core13.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -77574,7 +77574,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var core_1 = require_core(); var os2 = require("os"); var cp = require("child_process"); @@ -77588,7 +77588,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver8.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver9.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -77597,7 +77597,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver8.satisfies(osVersion, item.platform_version); + chk = semver9.satisfies(osVersion, item.platform_version); } } return chk; @@ -78528,7 +78528,7 @@ var require_tool_cache = __commonJS({ var os2 = __importStar4(require("os")); var path5 = __importStar4(require("path")); var httpm = __importStar4(require_lib5()); - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var stream = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -78802,7 +78802,7 @@ var require_tool_cache = __commonJS({ } function cacheDir(sourceDir, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch = arch || os2.arch(); core13.debug(`Caching tool ${tool} ${version} ${arch}`); core13.debug(`source dir: ${sourceDir}`); @@ -78821,7 +78821,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir; function cacheFile(sourceFile, targetFile, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch = arch || os2.arch(); core13.debug(`Caching tool ${tool} ${version} ${arch}`); core13.debug(`source file: ${sourceFile}`); @@ -78852,7 +78852,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver8.clean(versionSpec) || ""; + versionSpec = semver9.clean(versionSpec) || ""; const cachePath = path5.join(_getCacheDirectory(), toolName, versionSpec, arch); core13.debug(`checking cache: ${cachePath}`); if (fs5.existsSync(cachePath) && fs5.existsSync(`${cachePath}.complete`)) { @@ -78936,7 +78936,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path5.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch || ""); + const folderPath = path5.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch || ""); core13.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io5.rmRF(folderPath); @@ -78946,15 +78946,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch) { - const folderPath = path5.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch || ""); + const folderPath = path5.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch || ""); const markerPath = `${folderPath}.complete`; fs5.writeFileSync(markerPath, ""); core13.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver8.clean(versionSpec) || ""; + const c = semver9.clean(versionSpec) || ""; core13.debug(`isExplicit: ${c}`); - const valid3 = semver8.valid(c) != null; + const valid3 = semver9.valid(c) != null; core13.debug(`explicit? ${valid3}`); return valid3; } @@ -78963,14 +78963,14 @@ var require_tool_cache = __commonJS({ let version = ""; core13.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver8.gt(a, b)) { + if (semver9.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver8.satisfies(potential, versionSpec); + const satisfied = semver9.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -83695,7 +83695,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 fs2 = __toESM(require("fs")); @@ -83706,6 +83706,7 @@ var actionsCache = __toESM(require_cache3()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -83941,7 +83942,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]; } @@ -84229,20 +84230,20 @@ var toolrunner3 = __toESM(require_toolrunner()); // src/setup-codeql.ts var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); -var semver7 = __toESM(require_semver2()); +var semver8 = __toESM(require_semver2()); // src/tar.ts var import_toolrunner = __toESM(require_toolrunner()); var io4 = __toESM(require_io2()); var toolcache = __toESM(require_tool_cache()); -var semver5 = __toESM(require_semver2()); +var semver6 = __toESM(require_semver2()); // src/tools-download.ts var core9 = __toESM(require_core()); var import_http_client = __toESM(require_lib6()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); -var semver6 = __toESM(require_semver2()); +var semver7 = __toESM(require_semver2()); var STREAMING_HIGH_WATERMARK_BYTES = 4 * 1024 * 1024; // src/tracer-config.ts diff --git a/lib/setup-codeql-action.js b/lib/setup-codeql-action.js index be78dd617d..6b5b9211d4 100644 --- a/lib/setup-codeql-action.js +++ b/lib/setup-codeql-action.js @@ -26413,8 +26413,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare2 = require_compare(); - var gte5 = (a, b, loose) => compare2(a, b, loose) >= 0; - module2.exports = gte5; + var gte6 = (a, b, loose) => compare2(a, b, loose) >= 0; + module2.exports = gte6; } }); @@ -26435,7 +26435,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -26465,7 +26465,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -27224,7 +27224,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); - var gte5 = require_gte(); + var gte6 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -27239,7 +27239,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -27554,7 +27554,7 @@ var require_semver2 = __commonJS({ var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce3 = require_coerce(); @@ -27592,7 +27592,7 @@ var require_semver2 = __commonJS({ lt, eq, neq, - gte: gte5, + gte: gte6, lte, cmp, coerce: coerce3, @@ -29667,7 +29667,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -29712,7 +29712,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -31865,8 +31865,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare2(a, b, loose) !== 0; } - exports2.gte = gte5; - function gte5(a, b, loose) { + exports2.gte = gte6; + function gte6(a, b, loose) { return compare2(a, b, loose) >= 0; } exports2.lte = lte; @@ -31897,7 +31897,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -32442,7 +32442,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -32643,7 +32643,7 @@ var require_cacheUtils = __commonJS({ var crypto = __importStar4(require("crypto")); var fs9 = __importStar4(require("fs")); var path8 = __importStar4(require("path")); - var semver8 = __importStar4(require_semver3()); + var semver9 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants7(); var versionSalt = "1.0"; @@ -32740,7 +32740,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver8.clean(versionOutput); + const version = semver9.clean(versionOutput); core13.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -77574,7 +77574,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var core_1 = require_core(); var os3 = require("os"); var cp = require("child_process"); @@ -77588,7 +77588,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver8.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver9.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -77597,7 +77597,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver8.satisfies(osVersion, item.platform_version); + chk = semver9.satisfies(osVersion, item.platform_version); } } return chk; @@ -78528,7 +78528,7 @@ var require_tool_cache = __commonJS({ var os3 = __importStar4(require("os")); var path8 = __importStar4(require("path")); var httpm = __importStar4(require_lib5()); - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var stream2 = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -78802,7 +78802,7 @@ var require_tool_cache = __commonJS({ } function cacheDir(sourceDir, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch2 = arch2 || os3.arch(); core13.debug(`Caching tool ${tool} ${version} ${arch2}`); core13.debug(`source dir: ${sourceDir}`); @@ -78821,7 +78821,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir; function cacheFile(sourceFile, targetFile, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch2 = arch2 || os3.arch(); core13.debug(`Caching tool ${tool} ${version} ${arch2}`); core13.debug(`source file: ${sourceFile}`); @@ -78852,7 +78852,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver8.clean(versionSpec) || ""; + versionSpec = semver9.clean(versionSpec) || ""; const cachePath = path8.join(_getCacheDirectory(), toolName, versionSpec, arch2); core13.debug(`checking cache: ${cachePath}`); if (fs9.existsSync(cachePath) && fs9.existsSync(`${cachePath}.complete`)) { @@ -78936,7 +78936,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path8.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch2 || ""); + const folderPath = path8.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); core13.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io6.rmRF(folderPath); @@ -78946,15 +78946,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch2) { - const folderPath = path8.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch2 || ""); + const folderPath = path8.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); const markerPath = `${folderPath}.complete`; fs9.writeFileSync(markerPath, ""); core13.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver8.clean(versionSpec) || ""; + const c = semver9.clean(versionSpec) || ""; core13.debug(`isExplicit: ${c}`); - const valid3 = semver8.valid(c) != null; + const valid3 = semver9.valid(c) != null; core13.debug(`explicit? ${valid3}`); return valid3; } @@ -78963,14 +78963,14 @@ var require_tool_cache = __commonJS({ let version = ""; core13.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver8.gt(a, b)) { + if (semver9.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver8.satisfies(potential, versionSpec); + const satisfied = semver9.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -83586,7 +83586,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"; @@ -83604,6 +83604,7 @@ var core6 = __toESM(require_core()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); +var semver2 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -83850,7 +83851,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]; } @@ -84163,7 +84164,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.` ); @@ -84586,7 +84587,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-]"; @@ -84649,7 +84650,7 @@ var fs7 = __toESM(require("fs")); var path6 = __toESM(require("path")); var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); -var semver7 = __toESM(require_semver2()); +var semver8 = __toESM(require_semver2()); // src/tar.ts var import_child_process = require("child_process"); @@ -84658,7 +84659,7 @@ var stream = __toESM(require("stream")); var import_toolrunner = __toESM(require_toolrunner()); var io4 = __toESM(require_io2()); var toolcache = __toESM(require_tool_cache()); -var semver5 = __toESM(require_semver2()); +var semver6 = __toESM(require_semver2()); var MIN_REQUIRED_BSD_TAR_VERSION = "3.4.3"; var MIN_REQUIRED_GNU_TAR_VERSION = "1.31"; async function getTarVersion() { @@ -84700,9 +84701,9 @@ async function isZstdAvailable(logger) { case "gnu": return { available: foundZstdBinary && // GNU tar only uses major and minor version numbers - semver5.gte( - semver5.coerce(version), - semver5.coerce(MIN_REQUIRED_GNU_TAR_VERSION) + semver6.gte( + semver6.coerce(version), + semver6.coerce(MIN_REQUIRED_GNU_TAR_VERSION) ), foundZstdBinary, version: tarVersion @@ -84711,7 +84712,7 @@ async function isZstdAvailable(logger) { return { available: foundZstdBinary && // Do a loose comparison since these version numbers don't contain // a patch version number. - semver5.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), + semver6.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), foundZstdBinary, version: tarVersion }; @@ -84818,7 +84819,7 @@ var core9 = __toESM(require_core()); var import_http_client = __toESM(require_lib6()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); -var semver6 = __toESM(require_semver2()); +var semver7 = __toESM(require_semver2()); var STREAMING_HIGH_WATERMARK_BYTES = 4 * 1024 * 1024; var TOOLCACHE_TOOL_NAME = "CodeQL"; function makeDownloadFirstToolsDownloadDurations(downloadDurationMs, extractionDurationMs) { @@ -84948,7 +84949,7 @@ function getToolcacheDirectory(version) { return path5.join( getRequiredEnvParam("RUNNER_TOOL_CACHE"), TOOLCACHE_TOOL_NAME, - semver6.clean(version) || version, + semver7.clean(version) || version, os.arch() || "" ); } @@ -85073,13 +85074,13 @@ function tryGetTagNameFromUrl(url, logger) { return match[1]; } function convertToSemVer(version, logger) { - if (!semver7.valid(version)) { + if (!semver8.valid(version)) { logger.debug( `Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.` ); version = `0.0.0-${version}`; } - const s = semver7.clean(version); + const s = semver8.clean(version); if (!s) { throw new Error(`Bundle version ${version} is not in SemVer format.`); } @@ -85187,7 +85188,7 @@ async function getCodeQLSource(toolsInput, defaultCliVersion, apiDetails, varian url = toolsInput; if (tagName) { const bundleVersion3 = tryGetBundleVersionFromTagName(tagName, logger); - if (bundleVersion3 && semver7.valid(bundleVersion3)) { + if (bundleVersion3 && semver8.valid(bundleVersion3)) { cliVersion2 = convertToSemVer(bundleVersion3, logger); } } @@ -85458,7 +85459,7 @@ async function setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, defau async function useZstdBundle(cliVersion2, tarSupportsZstd) { return ( // In testing, gzip performs better than zstd on Windows. - process.platform !== "win32" && tarSupportsZstd && semver7.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) + process.platform !== "win32" && tarSupportsZstd && semver8.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) ); } function getTempExtractionDir(tempDir) { @@ -85490,7 +85491,7 @@ async function getNightlyToolsUrl(logger) { } } function getLatestToolcacheVersion(logger) { - const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver7.compare(b, a)); + const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver8.compare(b, a)); logger.debug( `Found the following versions of the CodeQL tools in the toolcache: ${JSON.stringify( allVersions diff --git a/lib/start-proxy-action-post.js b/lib/start-proxy-action-post.js index b568b6aba5..cd5e20cd5e 100644 --- a/lib/start-proxy-action-post.js +++ b/lib/start-proxy-action-post.js @@ -26413,8 +26413,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare2 = require_compare(); - var gte5 = (a, b, loose) => compare2(a, b, loose) >= 0; - module2.exports = gte5; + var gte6 = (a, b, loose) => compare2(a, b, loose) >= 0; + module2.exports = gte6; } }); @@ -26435,7 +26435,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -26465,7 +26465,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -27224,7 +27224,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); - var gte5 = require_gte(); + var gte6 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -27239,7 +27239,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -27554,7 +27554,7 @@ var require_semver2 = __commonJS({ var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce3 = require_coerce(); @@ -27592,7 +27592,7 @@ var require_semver2 = __commonJS({ lt, eq, neq, - gte: gte5, + gte: gte6, lte, cmp, coerce: coerce3, @@ -30964,7 +30964,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -31009,7 +31009,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -33162,8 +33162,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare2(a, b, loose) !== 0; } - exports2.gte = gte5; - function gte5(a, b, loose) { + exports2.gte = gte6; + function gte6(a, b, loose) { return compare2(a, b, loose) >= 0; } exports2.lte = lte; @@ -33194,7 +33194,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -33739,7 +33739,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -33940,7 +33940,7 @@ var require_cacheUtils = __commonJS({ var crypto = __importStar4(require("crypto")); var fs2 = __importStar4(require("fs")); var path2 = __importStar4(require("path")); - var semver8 = __importStar4(require_semver3()); + var semver9 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants7(); var versionSalt = "1.0"; @@ -34037,7 +34037,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver8.clean(versionOutput); + const version = semver9.clean(versionOutput); core14.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -80908,7 +80908,7 @@ var require_brace_expansion2 = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -80958,7 +80958,7 @@ var require_brace_expansion2 = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -94263,7 +94263,7 @@ var require_commonjs14 = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand_(str2, isTop) { @@ -94312,7 +94312,7 @@ var require_commonjs14 = __commonJS({ const reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } const pad = n.some(isPadded); N = []; @@ -112698,7 +112698,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var core_1 = require_core(); var os = require("os"); var cp = require("child_process"); @@ -112712,7 +112712,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver8.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver9.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -112721,7 +112721,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver8.satisfies(osVersion, item.platform_version); + chk = semver9.satisfies(osVersion, item.platform_version); } } return chk; @@ -113652,7 +113652,7 @@ var require_tool_cache = __commonJS({ var os = __importStar4(require("os")); var path2 = __importStar4(require("path")); var httpm = __importStar4(require_lib8()); - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var stream = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -113926,7 +113926,7 @@ var require_tool_cache = __commonJS({ } function cacheDir(sourceDir, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch = arch || os.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch}`); core14.debug(`source dir: ${sourceDir}`); @@ -113945,7 +113945,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir; function cacheFile(sourceFile, targetFile, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch = arch || os.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch}`); core14.debug(`source file: ${sourceFile}`); @@ -113976,7 +113976,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver8.clean(versionSpec) || ""; + versionSpec = semver9.clean(versionSpec) || ""; const cachePath = path2.join(_getCacheDirectory(), toolName, versionSpec, arch); core14.debug(`checking cache: ${cachePath}`); if (fs2.existsSync(cachePath) && fs2.existsSync(`${cachePath}.complete`)) { @@ -114060,7 +114060,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path2.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch || ""); + const folderPath = path2.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch || ""); core14.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io6.rmRF(folderPath); @@ -114070,15 +114070,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch) { - const folderPath = path2.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch || ""); + const folderPath = path2.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch || ""); const markerPath = `${folderPath}.complete`; fs2.writeFileSync(markerPath, ""); core14.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver8.clean(versionSpec) || ""; + const c = semver9.clean(versionSpec) || ""; core14.debug(`isExplicit: ${c}`); - const valid3 = semver8.valid(c) != null; + const valid3 = semver9.valid(c) != null; core14.debug(`explicit? ${valid3}`); return valid3; } @@ -114087,14 +114087,14 @@ var require_tool_cache = __commonJS({ let version = ""; core14.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver8.gt(a, b)) { + if (semver9.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver8.satisfies(potential, versionSpec); + const satisfied = semver9.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -119388,7 +119388,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_cache3()); @@ -119397,6 +119397,7 @@ var actionsCache = __toESM(require_cache3()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); +var semver3 = __toESM(require_semver2()); // src/logging.ts var core8 = __toESM(require_core()); @@ -119418,7 +119419,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 = { @@ -119831,20 +119832,20 @@ var cliErrorsConfig = { // src/setup-codeql.ts var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); -var semver7 = __toESM(require_semver2()); +var semver8 = __toESM(require_semver2()); // src/tar.ts var import_toolrunner = __toESM(require_toolrunner()); var io4 = __toESM(require_io2()); var toolcache = __toESM(require_tool_cache()); -var semver5 = __toESM(require_semver2()); +var semver6 = __toESM(require_semver2()); // src/tools-download.ts var core9 = __toESM(require_core()); var import_http_client = __toESM(require_lib9()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); -var semver6 = __toESM(require_semver2()); +var semver7 = __toESM(require_semver2()); var STREAMING_HIGH_WATERMARK_BYTES = 4 * 1024 * 1024; // src/dependency-caching.ts diff --git a/lib/start-proxy-action.js b/lib/start-proxy-action.js index 0139938267..3388ae70ad 100644 --- a/lib/start-proxy-action.js +++ b/lib/start-proxy-action.js @@ -20958,8 +20958,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare = require_compare(); - var gte3 = (a, b, loose) => compare(a, b, loose) >= 0; - module2.exports = gte3; + var gte4 = (a, b, loose) => compare(a, b, loose) >= 0; + module2.exports = gte4; } }); @@ -20980,7 +20980,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte3 = require_gte(); + var gte4 = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -21010,7 +21010,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte3(a, b, loose); + return gte4(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -21769,7 +21769,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); - var gte3 = require_gte(); + var gte4 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -21784,7 +21784,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte3; + ltefn = gte4; ltfn = gt; comp = "<"; ecomp = "<="; @@ -22099,7 +22099,7 @@ var require_semver2 = __commonJS({ var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte3 = require_gte(); + var gte4 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce2 = require_coerce(); @@ -22137,7 +22137,7 @@ var require_semver2 = __commonJS({ lt, eq, neq, - gte: gte3, + gte: gte4, lte, cmp, coerce: coerce2, @@ -22227,7 +22227,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver5 = __importStar4(require_semver2()); + var semver6 = __importStar4(require_semver2()); var core_1 = require_core(); var os2 = require("os"); var cp = require("child_process"); @@ -22241,7 +22241,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver5.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver6.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -22250,7 +22250,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver5.satisfies(osVersion, item.platform_version); + chk = semver6.satisfies(osVersion, item.platform_version); } } return chk; @@ -23181,7 +23181,7 @@ var require_tool_cache = __commonJS({ var os2 = __importStar4(require("os")); var path2 = __importStar4(require("path")); var httpm = __importStar4(require_lib2()); - var semver5 = __importStar4(require_semver2()); + var semver6 = __importStar4(require_semver2()); var stream = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -23455,7 +23455,7 @@ var require_tool_cache = __commonJS({ } function cacheDir2(sourceDir, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver5.clean(version) || version; + version = semver6.clean(version) || version; arch = arch || os2.arch(); core12.debug(`Caching tool ${tool} ${version} ${arch}`); core12.debug(`source dir: ${sourceDir}`); @@ -23474,7 +23474,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir2; function cacheFile(sourceFile, targetFile, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver5.clean(version) || version; + version = semver6.clean(version) || version; arch = arch || os2.arch(); core12.debug(`Caching tool ${tool} ${version} ${arch}`); core12.debug(`source file: ${sourceFile}`); @@ -23505,7 +23505,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver5.clean(versionSpec) || ""; + versionSpec = semver6.clean(versionSpec) || ""; const cachePath = path2.join(_getCacheDirectory(), toolName, versionSpec, arch); core12.debug(`checking cache: ${cachePath}`); if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { @@ -23589,7 +23589,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path2.join(_getCacheDirectory(), tool, semver5.clean(version) || version, arch || ""); + const folderPath = path2.join(_getCacheDirectory(), tool, semver6.clean(version) || version, arch || ""); core12.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io4.rmRF(folderPath); @@ -23599,15 +23599,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch) { - const folderPath = path2.join(_getCacheDirectory(), tool, semver5.clean(version) || version, arch || ""); + const folderPath = path2.join(_getCacheDirectory(), tool, semver6.clean(version) || version, arch || ""); const markerPath = `${folderPath}.complete`; fs.writeFileSync(markerPath, ""); core12.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver5.clean(versionSpec) || ""; + const c = semver6.clean(versionSpec) || ""; core12.debug(`isExplicit: ${c}`); - const valid2 = semver5.valid(c) != null; + const valid2 = semver6.valid(c) != null; core12.debug(`explicit? ${valid2}`); return valid2; } @@ -23616,14 +23616,14 @@ var require_tool_cache = __commonJS({ let version = ""; core12.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver5.gt(a, b)) { + if (semver6.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver5.satisfies(potential, versionSpec); + const satisfied = semver6.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -50659,7 +50659,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte3(i, y) { + function gte4(i, y) { return i >= y; } function expand(str2, isTop) { @@ -50704,7 +50704,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte3; + test = gte4; } var pad = n.some(isPadded); N = []; @@ -52857,8 +52857,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare(a, b, loose) !== 0; } - exports2.gte = gte3; - function gte3(a, b, loose) { + exports2.gte = gte4; + function gte4(a, b, loose) { return compare(a, b, loose) >= 0; } exports2.lte = lte; @@ -52889,7 +52889,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte3(a, b, loose); + return gte4(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -53434,7 +53434,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte3; + ltefn = gte4; ltfn = gt; comp = "<"; ecomp = "<="; @@ -53635,7 +53635,7 @@ var require_cacheUtils = __commonJS({ var crypto = __importStar4(require("crypto")); var fs = __importStar4(require("fs")); var path2 = __importStar4(require("path")); - var semver5 = __importStar4(require_semver3()); + var semver6 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants7(); var versionSalt = "1.0"; @@ -53732,7 +53732,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver5.clean(versionOutput); + const version = semver6.clean(versionOutput); core12.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -99906,7 +99906,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_cache3()); @@ -99915,6 +99915,7 @@ var actionsCache = __toESM(require_cache3()); var core9 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io3()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -100009,7 +100010,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 b898da8486..b9ac6bbe67 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -27710,8 +27710,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare3 = require_compare(); - var gte5 = (a, b, loose) => compare3(a, b, loose) >= 0; - module2.exports = gte5; + var gte6 = (a, b, loose) => compare3(a, b, loose) >= 0; + module2.exports = gte6; } }); @@ -27732,7 +27732,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -27762,7 +27762,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -28521,7 +28521,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); - var gte5 = require_gte(); + var gte6 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -28536,7 +28536,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -28851,7 +28851,7 @@ var require_semver2 = __commonJS({ var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce3 = require_coerce(); @@ -28889,7 +28889,7 @@ var require_semver2 = __commonJS({ lt, eq, neq, - gte: gte5, + gte: gte6, lte, cmp, coerce: coerce3, @@ -30964,7 +30964,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -31009,7 +31009,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -33162,8 +33162,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare3(a, b, loose) !== 0; } - exports2.gte = gte5; - function gte5(a, b, loose) { + exports2.gte = gte6; + function gte6(a, b, loose) { return compare3(a, b, loose) >= 0; } exports2.lte = lte; @@ -33194,7 +33194,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -33739,7 +33739,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -33940,7 +33940,7 @@ var require_cacheUtils = __commonJS({ var crypto = __importStar4(require("crypto")); var fs12 = __importStar4(require("fs")); var path11 = __importStar4(require("path")); - var semver8 = __importStar4(require_semver3()); + var semver9 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants7(); var versionSalt = "1.0"; @@ -34037,7 +34037,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver8.clean(versionOutput); + const version = semver9.clean(versionOutput); core12.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -77574,7 +77574,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var core_1 = require_core(); var os2 = require("os"); var cp = require("child_process"); @@ -77588,7 +77588,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver8.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver9.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -77597,7 +77597,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver8.satisfies(osVersion, item.platform_version); + chk = semver9.satisfies(osVersion, item.platform_version); } } return chk; @@ -78528,7 +78528,7 @@ var require_tool_cache = __commonJS({ var os2 = __importStar4(require("os")); var path11 = __importStar4(require("path")); var httpm = __importStar4(require_lib5()); - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var stream2 = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -78802,7 +78802,7 @@ var require_tool_cache = __commonJS({ } function cacheDir(sourceDir, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch2 = arch2 || os2.arch(); core12.debug(`Caching tool ${tool} ${version} ${arch2}`); core12.debug(`source dir: ${sourceDir}`); @@ -78821,7 +78821,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir; function cacheFile(sourceFile, targetFile, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch2 = arch2 || os2.arch(); core12.debug(`Caching tool ${tool} ${version} ${arch2}`); core12.debug(`source file: ${sourceFile}`); @@ -78852,7 +78852,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver8.clean(versionSpec) || ""; + versionSpec = semver9.clean(versionSpec) || ""; const cachePath = path11.join(_getCacheDirectory(), toolName, versionSpec, arch2); core12.debug(`checking cache: ${cachePath}`); if (fs12.existsSync(cachePath) && fs12.existsSync(`${cachePath}.complete`)) { @@ -78936,7 +78936,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path11.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch2 || ""); + const folderPath = path11.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); core12.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io6.rmRF(folderPath); @@ -78946,15 +78946,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch2) { - const folderPath = path11.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch2 || ""); + const folderPath = path11.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); const markerPath = `${folderPath}.complete`; fs12.writeFileSync(markerPath, ""); core12.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver8.clean(versionSpec) || ""; + const c = semver9.clean(versionSpec) || ""; core12.debug(`isExplicit: ${c}`); - const valid3 = semver8.valid(c) != null; + const valid3 = semver9.valid(c) != null; core12.debug(`explicit? ${valid3}`); return valid3; } @@ -78963,14 +78963,14 @@ var require_tool_cache = __commonJS({ let version = ""; core12.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver8.gt(a, b)) { + if (semver9.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver8.satisfies(potential, versionSpec); + const satisfied = semver9.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -86721,7 +86721,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"; @@ -86736,6 +86736,7 @@ var actionsCache = __toESM(require_cache3()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); +var semver3 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -87005,7 +87006,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]; } @@ -87308,7 +87309,7 @@ var fs8 = __toESM(require("fs")); var path7 = __toESM(require("path")); var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); -var semver7 = __toESM(require_semver2()); +var semver8 = __toESM(require_semver2()); // node_modules/uuid/dist-node/stringify.js var byteToHex = []; @@ -87371,7 +87372,7 @@ var stream = __toESM(require("stream")); var import_toolrunner = __toESM(require_toolrunner()); var io4 = __toESM(require_io2()); var toolcache = __toESM(require_tool_cache()); -var semver5 = __toESM(require_semver2()); +var semver6 = __toESM(require_semver2()); var MIN_REQUIRED_BSD_TAR_VERSION = "3.4.3"; var MIN_REQUIRED_GNU_TAR_VERSION = "1.31"; async function getTarVersion() { @@ -87413,9 +87414,9 @@ async function isZstdAvailable(logger) { case "gnu": return { available: foundZstdBinary && // GNU tar only uses major and minor version numbers - semver5.gte( - semver5.coerce(version), - semver5.coerce(MIN_REQUIRED_GNU_TAR_VERSION) + semver6.gte( + semver6.coerce(version), + semver6.coerce(MIN_REQUIRED_GNU_TAR_VERSION) ), foundZstdBinary, version: tarVersion @@ -87424,7 +87425,7 @@ async function isZstdAvailable(logger) { return { available: foundZstdBinary && // Do a loose comparison since these version numbers don't contain // a patch version number. - semver5.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), + semver6.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), foundZstdBinary, version: tarVersion }; @@ -87531,7 +87532,7 @@ var core9 = __toESM(require_core()); var import_http_client = __toESM(require_lib6()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); -var semver6 = __toESM(require_semver2()); +var semver7 = __toESM(require_semver2()); var STREAMING_HIGH_WATERMARK_BYTES = 4 * 1024 * 1024; var TOOLCACHE_TOOL_NAME = "CodeQL"; function makeDownloadFirstToolsDownloadDurations(downloadDurationMs, extractionDurationMs) { @@ -87661,7 +87662,7 @@ function getToolcacheDirectory(version) { return path6.join( getRequiredEnvParam("RUNNER_TOOL_CACHE"), TOOLCACHE_TOOL_NAME, - semver6.clean(version) || version, + semver7.clean(version) || version, os.arch() || "" ); } @@ -87786,13 +87787,13 @@ function tryGetTagNameFromUrl(url2, logger) { return match[1]; } function convertToSemVer(version, logger) { - if (!semver7.valid(version)) { + if (!semver8.valid(version)) { logger.debug( `Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.` ); version = `0.0.0-${version}`; } - const s = semver7.clean(version); + const s = semver8.clean(version); if (!s) { throw new Error(`Bundle version ${version} is not in SemVer format.`); } @@ -87900,7 +87901,7 @@ async function getCodeQLSource(toolsInput, defaultCliVersion, apiDetails, varian url2 = toolsInput; if (tagName) { const bundleVersion3 = tryGetBundleVersionFromTagName(tagName, logger); - if (bundleVersion3 && semver7.valid(bundleVersion3)) { + if (bundleVersion3 && semver8.valid(bundleVersion3)) { cliVersion2 = convertToSemVer(bundleVersion3, logger); } } @@ -88171,7 +88172,7 @@ async function setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, defau async function useZstdBundle(cliVersion2, tarSupportsZstd) { return ( // In testing, gzip performs better than zstd on Windows. - process.platform !== "win32" && tarSupportsZstd && semver7.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) + process.platform !== "win32" && tarSupportsZstd && semver8.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) ); } function getTempExtractionDir(tempDir) { @@ -88203,7 +88204,7 @@ async function getNightlyToolsUrl(logger) { } } function getLatestToolcacheVersion(logger) { - const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver7.compare(b, a)); + const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver8.compare(b, a)); logger.debug( `Found the following versions of the CodeQL tools in the toolcache: ${JSON.stringify( allVersions diff --git a/lib/upload-sarif-action-post.js b/lib/upload-sarif-action-post.js index cc13354d60..39d9d6e46d 100644 --- a/lib/upload-sarif-action-post.js +++ b/lib/upload-sarif-action-post.js @@ -26413,8 +26413,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare2 = require_compare(); - var gte5 = (a, b, loose) => compare2(a, b, loose) >= 0; - module2.exports = gte5; + var gte6 = (a, b, loose) => compare2(a, b, loose) >= 0; + module2.exports = gte6; } }); @@ -26435,7 +26435,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -26465,7 +26465,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -27224,7 +27224,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); - var gte5 = require_gte(); + var gte6 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -27239,7 +27239,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -27554,7 +27554,7 @@ var require_semver2 = __commonJS({ var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce3 = require_coerce(); @@ -27592,7 +27592,7 @@ var require_semver2 = __commonJS({ lt, eq, neq, - gte: gte5, + gte: gte6, lte, cmp, coerce: coerce3, @@ -72469,7 +72469,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -72519,7 +72519,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -85824,7 +85824,7 @@ var require_commonjs14 = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand_(str2, isTop) { @@ -85873,7 +85873,7 @@ var require_commonjs14 = __commonJS({ const reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } const pad = n.some(isPadded); N = []; @@ -105436,7 +105436,7 @@ var require_brace_expansion2 = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -105481,7 +105481,7 @@ var require_brace_expansion2 = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -107634,8 +107634,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare2(a, b, loose) !== 0; } - exports2.gte = gte5; - function gte5(a, b, loose) { + exports2.gte = gte6; + function gte6(a, b, loose) { return compare2(a, b, loose) >= 0; } exports2.lte = lte; @@ -107666,7 +107666,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -108211,7 +108211,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -108412,7 +108412,7 @@ var require_cacheUtils = __commonJS({ var crypto = __importStar4(require("crypto")); var fs2 = __importStar4(require("fs")); var path2 = __importStar4(require("path")); - var semver8 = __importStar4(require_semver3()); + var semver9 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants10(); var versionSalt = "1.0"; @@ -108509,7 +108509,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver8.clean(versionOutput); + const version = semver9.clean(versionOutput); core14.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -112698,7 +112698,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var core_1 = require_core(); var os = require("os"); var cp = require("child_process"); @@ -112712,7 +112712,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver8.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver9.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -112721,7 +112721,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver8.satisfies(osVersion, item.platform_version); + chk = semver9.satisfies(osVersion, item.platform_version); } } return chk; @@ -113652,7 +113652,7 @@ var require_tool_cache = __commonJS({ var os = __importStar4(require("os")); var path2 = __importStar4(require("path")); var httpm = __importStar4(require_lib8()); - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var stream = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -113926,7 +113926,7 @@ var require_tool_cache = __commonJS({ } function cacheDir(sourceDir, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch = arch || os.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch}`); core14.debug(`source dir: ${sourceDir}`); @@ -113945,7 +113945,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir; function cacheFile(sourceFile, targetFile, tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch = arch || os.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch}`); core14.debug(`source file: ${sourceFile}`); @@ -113976,7 +113976,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver8.clean(versionSpec) || ""; + versionSpec = semver9.clean(versionSpec) || ""; const cachePath = path2.join(_getCacheDirectory(), toolName, versionSpec, arch); core14.debug(`checking cache: ${cachePath}`); if (fs2.existsSync(cachePath) && fs2.existsSync(`${cachePath}.complete`)) { @@ -114060,7 +114060,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path2.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch || ""); + const folderPath = path2.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch || ""); core14.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io6.rmRF(folderPath); @@ -114070,15 +114070,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch) { - const folderPath = path2.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch || ""); + const folderPath = path2.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch || ""); const markerPath = `${folderPath}.complete`; fs2.writeFileSync(markerPath, ""); core14.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver8.clean(versionSpec) || ""; + const c = semver9.clean(versionSpec) || ""; core14.debug(`isExplicit: ${c}`); - const valid3 = semver8.valid(c) != null; + const valid3 = semver9.valid(c) != null; core14.debug(`explicit? ${valid3}`); return valid3; } @@ -114087,14 +114087,14 @@ var require_tool_cache = __commonJS({ let version = ""; core14.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver8.gt(a, b)) { + if (semver9.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver8.satisfies(potential, versionSpec); + const satisfied = semver9.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -119542,7 +119542,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_cache3()); @@ -119551,6 +119551,7 @@ var actionsCache = __toESM(require_cache3()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); +var semver3 = __toESM(require_semver2()); // src/logging.ts var core8 = __toESM(require_core()); @@ -119580,10 +119581,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 @@ -119821,20 +119822,20 @@ var OVERLAY_ANALYSIS_CODE_SCANNING_FEATURES = { // src/setup-codeql.ts var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); -var semver7 = __toESM(require_semver2()); +var semver8 = __toESM(require_semver2()); // src/tar.ts var import_toolrunner = __toESM(require_toolrunner()); var io4 = __toESM(require_io2()); var toolcache = __toESM(require_tool_cache()); -var semver5 = __toESM(require_semver2()); +var semver6 = __toESM(require_semver2()); // src/tools-download.ts var core9 = __toESM(require_core()); var import_http_client = __toESM(require_lib9()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); -var semver6 = __toESM(require_semver2()); +var semver7 = __toESM(require_semver2()); var STREAMING_HIGH_WATERMARK_BYTES = 4 * 1024 * 1024; // src/dependency-caching.ts diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index fb874ee7da..83c50dc589 100644 --- a/lib/upload-sarif-action.js +++ b/lib/upload-sarif-action.js @@ -26413,8 +26413,8 @@ var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports2, module2) { "use strict"; var compare3 = require_compare(); - var gte5 = (a, b, loose) => compare3(a, b, loose) >= 0; - module2.exports = gte5; + var gte6 = (a, b, loose) => compare3(a, b, loose) >= 0; + module2.exports = gte6; } }); @@ -26435,7 +26435,7 @@ var require_cmp = __commonJS({ var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (a, op, b, loose) => { @@ -26465,7 +26465,7 @@ var require_cmp = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -27224,7 +27224,7 @@ var require_outside = __commonJS({ var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); - var gte5 = require_gte(); + var gte6 = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range2(range, options); @@ -27239,7 +27239,7 @@ var require_outside = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -27554,7 +27554,7 @@ var require_semver2 = __commonJS({ var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); - var gte5 = require_gte(); + var gte6 = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce3 = require_coerce(); @@ -27592,7 +27592,7 @@ var require_semver2 = __commonJS({ lt, eq, neq, - gte: gte5, + gte: gte6, lte, cmp, coerce: coerce3, @@ -29667,7 +29667,7 @@ var require_brace_expansion = __commonJS({ function lte(i, y) { return i <= y; } - function gte5(i, y) { + function gte6(i, y) { return i >= y; } function expand(str2, isTop) { @@ -29712,7 +29712,7 @@ var require_brace_expansion = __commonJS({ var reverse = y < x; if (reverse) { incr *= -1; - test = gte5; + test = gte6; } var pad = n.some(isPadded); N = []; @@ -31865,8 +31865,8 @@ var require_semver3 = __commonJS({ function neq(a, b, loose) { return compare3(a, b, loose) !== 0; } - exports2.gte = gte5; - function gte5(a, b, loose) { + exports2.gte = gte6; + function gte6(a, b, loose) { return compare3(a, b, loose) >= 0; } exports2.lte = lte; @@ -31897,7 +31897,7 @@ var require_semver3 = __commonJS({ case ">": return gt(a, b, loose); case ">=": - return gte5(a, b, loose); + return gte6(a, b, loose); case "<": return lt(a, b, loose); case "<=": @@ -32442,7 +32442,7 @@ var require_semver3 = __commonJS({ break; case "<": gtfn = lt; - ltefn = gte5; + ltefn = gte6; ltfn = gt; comp = "<"; ecomp = "<="; @@ -32643,7 +32643,7 @@ var require_cacheUtils = __commonJS({ var crypto = __importStar4(require("crypto")); var fs13 = __importStar4(require("fs")); var path12 = __importStar4(require("path")); - var semver8 = __importStar4(require_semver3()); + var semver9 = __importStar4(require_semver3()); var util = __importStar4(require("util")); var constants_1 = require_constants7(); var versionSalt = "1.0"; @@ -32740,7 +32740,7 @@ var require_cacheUtils = __commonJS({ function getCompressionMethod() { return __awaiter4(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); - const version = semver8.clean(versionOutput); + const version = semver9.clean(versionOutput); core14.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; @@ -77574,7 +77574,7 @@ var require_manifest = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2._readLinuxVersionFile = exports2._getOsVersion = exports2._findMatch = void 0; - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var core_1 = require_core(); var os3 = require("os"); var cp = require("child_process"); @@ -77588,7 +77588,7 @@ var require_manifest = __commonJS({ for (const candidate of candidates) { const version = candidate.version; (0, core_1.debug)(`check ${version} satisfies ${versionSpec}`); - if (semver8.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { + if (semver9.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find((item) => { (0, core_1.debug)(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; @@ -77597,7 +77597,7 @@ var require_manifest = __commonJS({ if (osVersion === item.platform_version) { chk = true; } else { - chk = semver8.satisfies(osVersion, item.platform_version); + chk = semver9.satisfies(osVersion, item.platform_version); } } return chk; @@ -78528,7 +78528,7 @@ var require_tool_cache = __commonJS({ var os3 = __importStar4(require("os")); var path12 = __importStar4(require("path")); var httpm = __importStar4(require_lib5()); - var semver8 = __importStar4(require_semver2()); + var semver9 = __importStar4(require_semver2()); var stream2 = __importStar4(require("stream")); var util = __importStar4(require("util")); var assert_1 = require("assert"); @@ -78802,7 +78802,7 @@ var require_tool_cache = __commonJS({ } function cacheDir(sourceDir, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch2 = arch2 || os3.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch2}`); core14.debug(`source dir: ${sourceDir}`); @@ -78821,7 +78821,7 @@ var require_tool_cache = __commonJS({ exports2.cacheDir = cacheDir; function cacheFile(sourceFile, targetFile, tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - version = semver8.clean(version) || version; + version = semver9.clean(version) || version; arch2 = arch2 || os3.arch(); core14.debug(`Caching tool ${tool} ${version} ${arch2}`); core14.debug(`source file: ${sourceFile}`); @@ -78852,7 +78852,7 @@ var require_tool_cache = __commonJS({ } let toolPath = ""; if (versionSpec) { - versionSpec = semver8.clean(versionSpec) || ""; + versionSpec = semver9.clean(versionSpec) || ""; const cachePath = path12.join(_getCacheDirectory(), toolName, versionSpec, arch2); core14.debug(`checking cache: ${cachePath}`); if (fs13.existsSync(cachePath) && fs13.existsSync(`${cachePath}.complete`)) { @@ -78936,7 +78936,7 @@ var require_tool_cache = __commonJS({ } function _createToolPath(tool, version, arch2) { return __awaiter4(this, void 0, void 0, function* () { - const folderPath = path12.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch2 || ""); + const folderPath = path12.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); core14.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io6.rmRF(folderPath); @@ -78946,15 +78946,15 @@ var require_tool_cache = __commonJS({ }); } function _completeToolPath(tool, version, arch2) { - const folderPath = path12.join(_getCacheDirectory(), tool, semver8.clean(version) || version, arch2 || ""); + const folderPath = path12.join(_getCacheDirectory(), tool, semver9.clean(version) || version, arch2 || ""); const markerPath = `${folderPath}.complete`; fs13.writeFileSync(markerPath, ""); core14.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { - const c = semver8.clean(versionSpec) || ""; + const c = semver9.clean(versionSpec) || ""; core14.debug(`isExplicit: ${c}`); - const valid3 = semver8.valid(c) != null; + const valid3 = semver9.valid(c) != null; core14.debug(`explicit? ${valid3}`); return valid3; } @@ -78963,14 +78963,14 @@ var require_tool_cache = __commonJS({ let version = ""; core14.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { - if (semver8.gt(a, b)) { + if (semver9.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; - const satisfied = semver8.satisfies(potential, versionSpec); + const satisfied = semver9.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; @@ -86502,7 +86502,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"; @@ -86520,6 +86520,7 @@ var core6 = __toESM(require_core()); var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); +var semver2 = __toESM(require_semver2()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -86800,7 +86801,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]; } @@ -87113,7 +87114,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.` ); @@ -87286,7 +87287,7 @@ var path6 = __toESM(require("path")); // 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-]"; @@ -87829,7 +87830,7 @@ var fs9 = __toESM(require("fs")); var path8 = __toESM(require("path")); var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); -var semver7 = __toESM(require_semver2()); +var semver8 = __toESM(require_semver2()); // node_modules/uuid/dist-node/stringify.js var byteToHex = []; @@ -87892,7 +87893,7 @@ var stream = __toESM(require("stream")); var import_toolrunner = __toESM(require_toolrunner()); var io4 = __toESM(require_io2()); var toolcache = __toESM(require_tool_cache()); -var semver5 = __toESM(require_semver2()); +var semver6 = __toESM(require_semver2()); var MIN_REQUIRED_BSD_TAR_VERSION = "3.4.3"; var MIN_REQUIRED_GNU_TAR_VERSION = "1.31"; async function getTarVersion() { @@ -87934,9 +87935,9 @@ async function isZstdAvailable(logger) { case "gnu": return { available: foundZstdBinary && // GNU tar only uses major and minor version numbers - semver5.gte( - semver5.coerce(version), - semver5.coerce(MIN_REQUIRED_GNU_TAR_VERSION) + semver6.gte( + semver6.coerce(version), + semver6.coerce(MIN_REQUIRED_GNU_TAR_VERSION) ), foundZstdBinary, version: tarVersion @@ -87945,7 +87946,7 @@ async function isZstdAvailable(logger) { return { available: foundZstdBinary && // Do a loose comparison since these version numbers don't contain // a patch version number. - semver5.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), + semver6.gte(version, MIN_REQUIRED_BSD_TAR_VERSION), foundZstdBinary, version: tarVersion }; @@ -88052,7 +88053,7 @@ var core10 = __toESM(require_core()); var import_http_client = __toESM(require_lib6()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); -var semver6 = __toESM(require_semver2()); +var semver7 = __toESM(require_semver2()); var STREAMING_HIGH_WATERMARK_BYTES = 4 * 1024 * 1024; var TOOLCACHE_TOOL_NAME = "CodeQL"; function makeDownloadFirstToolsDownloadDurations(downloadDurationMs, extractionDurationMs) { @@ -88182,7 +88183,7 @@ function getToolcacheDirectory(version) { return path7.join( getRequiredEnvParam("RUNNER_TOOL_CACHE"), TOOLCACHE_TOOL_NAME, - semver6.clean(version) || version, + semver7.clean(version) || version, os2.arch() || "" ); } @@ -88307,13 +88308,13 @@ function tryGetTagNameFromUrl(url2, logger) { return match[1]; } function convertToSemVer(version, logger) { - if (!semver7.valid(version)) { + if (!semver8.valid(version)) { logger.debug( `Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.` ); version = `0.0.0-${version}`; } - const s = semver7.clean(version); + const s = semver8.clean(version); if (!s) { throw new Error(`Bundle version ${version} is not in SemVer format.`); } @@ -88421,7 +88422,7 @@ async function getCodeQLSource(toolsInput, defaultCliVersion, apiDetails, varian url2 = toolsInput; if (tagName) { const bundleVersion3 = tryGetBundleVersionFromTagName(tagName, logger); - if (bundleVersion3 && semver7.valid(bundleVersion3)) { + if (bundleVersion3 && semver8.valid(bundleVersion3)) { cliVersion2 = convertToSemVer(bundleVersion3, logger); } } @@ -88692,7 +88693,7 @@ async function setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, defau async function useZstdBundle(cliVersion2, tarSupportsZstd) { return ( // In testing, gzip performs better than zstd on Windows. - process.platform !== "win32" && tarSupportsZstd && semver7.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) + process.platform !== "win32" && tarSupportsZstd && semver8.gte(cliVersion2, CODEQL_VERSION_ZSTD_BUNDLE) ); } function getTempExtractionDir(tempDir) { @@ -88724,7 +88725,7 @@ async function getNightlyToolsUrl(logger) { } } function getLatestToolcacheVersion(logger) { - const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver7.compare(b, a)); + const allVersions = toolcache3.findAllVersions("CodeQL").sort((a, b) => semver8.compare(b, a)); logger.debug( `Found the following versions of the CodeQL tools in the toolcache: ${JSON.stringify( allVersions diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index 9f4fb8f137..01f0a21d28 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -978,6 +978,7 @@ interface OverlayDatabaseModeTestSetup { languages: Language[]; codeqlVersion: string; gitRoot: string | undefined; + gitVersion: string | undefined; codeScanningConfig: configUtils.UserConfig; diskUsage: DiskUsage | undefined; memoryFlagValue: number; @@ -992,6 +993,7 @@ const defaultOverlayDatabaseModeTestSetup: OverlayDatabaseModeTestSetup = { languages: [KnownLanguage.javascript], codeqlVersion: CODEQL_OVERLAY_MINIMUM_VERSION, gitRoot: "/some/git/root", + gitVersion: "2.40.0", // Default to a version that supports overlay analysis codeScanningConfig: {}, diskUsage: { numAvailableBytes: 50_000_000_000, @@ -1057,6 +1059,20 @@ const getOverlayDatabaseModeMacro = test.macro({ sinon.stub(gitUtils, "getGitRoot").resolves(setup.gitRoot); } + // Mock git version detection - stub gitVersionAtLeast directly + // since internal calls to getGitVersion won't be stubbed + if (setup.gitVersion !== undefined) { + sinon + .stub(gitUtils, "gitVersionAtLeast") + .callsFake(async (requiredVersion: string) => { + const semver = await import("semver"); + return semver.gte(setup.gitVersion!, requiredVersion); + }); + } else { + // When git version is undefined, gitVersionAtLeast should return false + sinon.stub(gitUtils, "gitVersionAtLeast").resolves(false); + } + // Mock default branch detection sinon .stub(gitUtils, "isAnalyzingDefaultBranch") @@ -1773,6 +1789,32 @@ test( }, ); +test( + getOverlayDatabaseModeMacro, + "Fallback due to old git version", + { + overlayDatabaseEnvVar: "overlay", + gitVersion: "2.30.0", // Version below required 2.38.0 + }, + { + overlayDatabaseMode: OverlayDatabaseMode.None, + useOverlayDatabaseCaching: false, + }, +); + +test( + getOverlayDatabaseModeMacro, + "Fallback when git version cannot be determined", + { + overlayDatabaseEnvVar: "overlay", + gitVersion: undefined, + }, + { + overlayDatabaseMode: OverlayDatabaseMode.None, + useOverlayDatabaseCaching: false, + }, +); + // Exercise language-specific overlay analysis features code paths for (const language in KnownLanguage) { test( diff --git a/src/config-utils.ts b/src/config-utils.ts index 7376d5aab6..f9be6702e7 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -26,7 +26,12 @@ import { shouldPerformDiffInformedAnalysis } from "./diff-informed-analysis-util import * as errorMessages from "./error-messages"; import { Feature, FeatureEnablement } from "./feature-flags"; import { RepositoryProperties } from "./feature-flags/properties"; -import { getGitRoot, isAnalyzingDefaultBranch } from "./git-utils"; +import { + getGitRoot, + GIT_MINIMUM_VERSION_FOR_OVERLAY, + gitVersionAtLeast, + isAnalyzingDefaultBranch, +} from "./git-utils"; import { KnownLanguage, Language } from "./languages"; import { Logger } from "./logging"; import { @@ -811,6 +816,14 @@ export async function getOverlayDatabaseMode( ); return nonOverlayAnalysis; } + if (!(await gitVersionAtLeast(GIT_MINIMUM_VERSION_FOR_OVERLAY, logger))) { + 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.", + ); + return nonOverlayAnalysis; + } return { overlayDatabaseMode, diff --git a/src/git-utils.test.ts b/src/git-utils.test.ts index 06837e0223..ed1d01c157 100644 --- a/src/git-utils.test.ts +++ b/src/git-utils.test.ts @@ -7,7 +7,12 @@ import * as sinon from "sinon"; import * as actionsUtil from "./actions-util"; import * as gitUtils from "./git-utils"; -import { setupActionsVars, setupTests } from "./testing-utils"; +import { + getRecordingLogger, + LoggedMessage, + setupActionsVars, + setupTests, +} from "./testing-utils"; import { withTmpDir } from "./util"; setupTests(test); @@ -392,3 +397,104 @@ test("getFileOidsUnderPath throws on unexpected output format", async (t) => { runGitCommandStub.restore(); } }); + +test("getGitVersion returns version for valid git output", async (t) => { + const runGitCommandStub = sinon + .stub(gitUtils as any, "runGitCommand") + .resolves("git version 2.40.0\n"); + + try { + const version = await gitUtils.getGitVersion(); + t.is(version, "2.40.0"); + } finally { + runGitCommandStub.restore(); + } +}); + +test("getGitVersion returns undefined for invalid git output", async (t) => { + const runGitCommandStub = sinon + .stub(gitUtils as any, "runGitCommand") + .resolves("invalid output"); + + try { + const version = await gitUtils.getGitVersion(); + t.is(version, undefined); + } finally { + runGitCommandStub.restore(); + } +}); + +test("getGitVersion returns undefined when git command fails", async (t) => { + const runGitCommandStub = sinon + .stub(gitUtils as any, "runGitCommand") + .rejects(new Error("git not found")); + + try { + const version = await gitUtils.getGitVersion(); + t.is(version, undefined); + } finally { + runGitCommandStub.restore(); + } +}); + +test("gitVersionAtLeast returns true for version meeting requirement", async (t) => { + const runGitCommandStub = sinon + .stub(gitUtils as any, "runGitCommand") + .resolves("git version 2.40.0\n"); + + const messages: LoggedMessage[] = []; + const logger = getRecordingLogger(messages); + + try { + const result = await gitUtils.gitVersionAtLeast("2.38.0", logger); + t.true(result); + t.true( + messages.some( + (m) => + m.type === "debug" && + m.message === "Installed Git version is 2.40.0.", + ), + ); + } finally { + runGitCommandStub.restore(); + } +}); + +test("gitVersionAtLeast returns false for version not meeting requirement", async (t) => { + const runGitCommandStub = sinon + .stub(gitUtils as any, "runGitCommand") + .resolves("git version 2.30.0\n"); + + const messages: LoggedMessage[] = []; + const logger = getRecordingLogger(messages); + + try { + const result = await gitUtils.gitVersionAtLeast("2.38.0", logger); + t.false(result); + } finally { + runGitCommandStub.restore(); + } +}); + +test("gitVersionAtLeast returns false when version cannot be determined", async (t) => { + const runGitCommandStub = sinon + .stub(gitUtils as any, "runGitCommand") + .rejects(new Error("git not found")); + + const messages: LoggedMessage[] = []; + const logger = getRecordingLogger(messages); + + try { + const result = await gitUtils.gitVersionAtLeast("2.38.0", logger); + t.false(result); + t.true( + messages.some( + (m) => + m.type === "debug" && + m.message === "Could not determine Git version.", + ), + ); + } finally { + runGitCommandStub.restore(); + } +}); diff --git a/src/git-utils.ts b/src/git-utils.ts index 0d2a7df7a6..38b17099a0 100644 --- a/src/git-utils.ts +++ b/src/git-utils.ts @@ -1,14 +1,67 @@ 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, getWorkflowEvent, getWorkflowEventName, } from "./actions-util"; +import { Logger } from "./logging"; import { ConfigurationError, getRequiredEnvParam } from "./util"; +/** + * Minimum Git version required for overlay analysis. The `git ls-files --format` + * option, which is used by `getFileOidsUnderPath`, was introduced in Git 2.38.0. + */ +export const GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0"; + +/** + * Gets the version of Git installed on the system. + * + * @returns The Git version string (e.g., "2.40.0"), or undefined if the + * version could not be determined. + */ +export async function getGitVersion(): Promise { + try { + const stdout = await runGitCommand( + undefined, + ["--version"], + "Failed to get git version.", + ); + // Expected output format: "git version 2.40.0" + const match = stdout.match(/git version (\d+\.\d+\.\d+)/); + if (match?.[1]) { + return match[1]; + } + return undefined; + } catch { + return undefined; + } +} + +/** + * Checks if the installed Git version is at least the given required version. + * + * @param requiredVersion The minimum required Git version. + * @param logger A logger to use for logging. + * @returns `true` if the installed Git version is at least the required version, + * `false` otherwise. + */ +export async function gitVersionAtLeast( + requiredVersion: string, + logger: Logger, +): Promise { + const version = await getGitVersion(); + if (version === undefined) { + logger.debug("Could not determine Git version."); + return false; + } + logger.debug(`Installed Git version is ${version}.`); + return semver.gte(version, requiredVersion); +} + export const runGitCommand = async function ( workingDirectory: string | undefined, args: string[], From fc2bbb041e8c9a10058b7370807cf2b8fdf76025 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Dec 2025 16:27:41 +0000 Subject: [PATCH 03/20] Address code review feedback - Add test for Windows-style git version format - Add comment clarifying regex extracts major.minor.patch - Replace dynamic import with static import for semver Co-authored-by: henrymercer <14129055+henrymercer@users.noreply.github.com> --- src/config-utils.test.ts | 2 +- src/git-utils.test.ts | 14 ++++++++++++++ src/git-utils.ts | 3 ++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index 01f0a21d28..a9cb1802a7 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -4,6 +4,7 @@ import * as path from "path"; import * as github from "@actions/github"; import test, { ExecutionContext } from "ava"; import * as yaml from "js-yaml"; +import * as semver from "semver"; import * as sinon from "sinon"; import * as actionsUtil from "./actions-util"; @@ -1065,7 +1066,6 @@ const getOverlayDatabaseModeMacro = test.macro({ sinon .stub(gitUtils, "gitVersionAtLeast") .callsFake(async (requiredVersion: string) => { - const semver = await import("semver"); return semver.gte(setup.gitVersion!, requiredVersion); }); } else { diff --git a/src/git-utils.test.ts b/src/git-utils.test.ts index ed1d01c157..dbea5cac35 100644 --- a/src/git-utils.test.ts +++ b/src/git-utils.test.ts @@ -424,6 +424,20 @@ test("getGitVersion returns undefined for invalid git output", async (t) => { } }); +test("getGitVersion handles Windows-style git output", async (t) => { + const runGitCommandStub = sinon + .stub(gitUtils as any, "runGitCommand") + .resolves("git version 2.40.0.windows.1\n"); + + try { + const version = await gitUtils.getGitVersion(); + // Should extract just the major.minor.patch portion + t.is(version, "2.40.0"); + } finally { + runGitCommandStub.restore(); + } +}); + test("getGitVersion returns undefined when git command fails", async (t) => { const runGitCommandStub = sinon .stub(gitUtils as any, "runGitCommand") diff --git a/src/git-utils.ts b/src/git-utils.ts index 38b17099a0..6fa1369ce7 100644 --- a/src/git-utils.ts +++ b/src/git-utils.ts @@ -30,7 +30,8 @@ export async function getGitVersion(): Promise { ["--version"], "Failed to get git version.", ); - // Expected output format: "git version 2.40.0" + // 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+)/); if (match?.[1]) { return match[1]; From c3dc529aef20e50d2567365bf3bec42ca2e5a3d9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Dec 2025 17:19:46 +0000 Subject: [PATCH 04/20] Address feedback: cache git version, improve error handling, add telemetry - Cache the git version to avoid recomputing on repeated calls - Refactor getGitVersion to getGitVersionOrThrow with detailed errors - Add getGitVersion that logs errors and handles caching - Add makeTelemetryDiagnostic helper to diagnostics.ts - Add logGitVersionTelemetry function to log git version telemetry - Call logGitVersionTelemetry in init-action.ts - Add resetCachedGitVersion for testing - Update tests to work with new function signatures and caching Co-authored-by: henrymercer <14129055+henrymercer@users.noreply.github.com> --- lib/analyze-action-post.js | 54 ++--- lib/analyze-action.js | 226 ++++++++++----------- lib/autobuild-action.js | 38 ++-- lib/init-action-post.js | 76 +++---- lib/init-action.js | 321 +++++++++++++++++------------- lib/resolve-environment-action.js | 38 ++-- lib/setup-codeql-action.js | 60 +++--- lib/start-proxy-action-post.js | 18 +- lib/upload-lib.js | 38 ++-- lib/upload-sarif-action-post.js | 22 +- lib/upload-sarif-action.js | 60 +++--- src/diagnostics.ts | 25 +++ src/git-utils.test.ts | 92 ++++++++- src/git-utils.ts | 98 +++++++-- src/init-action.ts | 4 + 15 files changed, 692 insertions(+), 478 deletions(-) diff --git a/lib/analyze-action-post.js b/lib/analyze-action-post.js index bd44577264..d5d6a1646f 100644 --- a/lib/analyze-action-post.js +++ b/lib/analyze-action-post.js @@ -119759,14 +119759,38 @@ var path2 = __toESM(require("path")); var actionsCache = __toESM(require_cache3()); // src/git-utils.ts -var core7 = __toESM(require_core()); +var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); var semver3 = __toESM(require_semver2()); + +// src/logging.ts +var core7 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core7.debug, + info: core7.info, + warning: core7.warning, + error: core7.error, + isDebug: core7.isDebug, + startGroup: core7.startGroup, + endGroup: core7.endGroup + }; +} +function withGroup(groupName, f) { + core7.startGroup(groupName); + try { + return f(); + } finally { + core7.endGroup(); + } +} + +// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; - core7.debug(`Running git command: git ${args.join(" ")}`); + core8.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -119786,7 +119810,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage) { if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core7.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core8.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -119897,7 +119921,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core7.debug( + core8.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -119922,28 +119946,6 @@ async function isAnalyzingDefaultBranch() { return currentRef === defaultBranch; } -// src/logging.ts -var core8 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core8.debug, - info: core8.info, - warning: core8.warning, - error: core8.error, - isDebug: core8.isDebug, - startGroup: core8.startGroup, - endGroup: core8.endGroup - }; -} -function withGroup(groupName, f) { - core8.startGroup(groupName); - try { - return f(); - } finally { - core8.endGroup(); - } -} - // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; diff --git a/lib/analyze-action.js b/lib/analyze-action.js index 6b3a310990..fc58fc76c3 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -87925,7 +87925,7 @@ function wrapApiConfigurationError(e) { // src/codeql.ts var fs11 = __toESM(require("fs")); -var path10 = __toESM(require("path")); +var path11 = __toESM(require("path")); var core10 = __toESM(require_core()); var toolrunner3 = __toESM(require_toolrunner()); @@ -88171,7 +88171,7 @@ function wrapCliConfigurationError(cliError) { // src/config-utils.ts var fs6 = __toESM(require("fs")); -var path6 = __toESM(require("path")); +var path7 = __toESM(require("path")); // src/caching-utils.ts var crypto = __toESM(require("crypto")); @@ -88203,11 +88203,11 @@ var PACK_IDENTIFIER_PATTERN = (function() { // src/diff-informed-analysis-utils.ts var fs5 = __toESM(require("fs")); -var path5 = __toESM(require("path")); +var path6 = __toESM(require("path")); // src/feature-flags.ts var fs4 = __toESM(require("fs")); -var path4 = __toESM(require("path")); +var path5 = __toESM(require("path")); var semver5 = __toESM(require_semver2()); // src/defaults.json @@ -88216,18 +88216,100 @@ var cliVersion = "2.23.8"; // src/overlay-database-utils.ts var fs3 = __toESM(require("fs")); -var path3 = __toESM(require("path")); +var path4 = __toESM(require("path")); var actionsCache = __toESM(require_cache3()); // src/git-utils.ts -var core7 = __toESM(require_core()); +var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); var semver3 = __toESM(require_semver2()); + +// src/diagnostics.ts +var import_fs = require("fs"); +var import_path = __toESM(require("path")); + +// src/logging.ts +var core7 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core7.debug, + info: core7.info, + warning: core7.warning, + error: core7.error, + isDebug: core7.isDebug, + startGroup: core7.startGroup, + endGroup: core7.endGroup + }; +} +async function withGroupAsync(groupName, f) { + core7.startGroup(groupName); + try { + return await f(); + } finally { + core7.endGroup(); + } +} +function formatDuration(durationMs) { + if (durationMs < 1e3) { + return `${durationMs}ms`; + } + if (durationMs < 60 * 1e3) { + return `${(durationMs / 1e3).toFixed(1)}s`; + } + const minutes = Math.floor(durationMs / (60 * 1e3)); + const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); + return `${minutes}m${seconds}s`; +} + +// src/diagnostics.ts +var unwrittenDiagnostics = []; +function makeDiagnostic(id, name, data = void 0) { + return { + ...data, + timestamp: data?.timestamp ?? (/* @__PURE__ */ new Date()).toISOString(), + source: { ...data?.source, id, name } + }; +} +function addDiagnostic(config, language, diagnostic) { + const logger = getActionsLogger(); + const databasePath = language ? getCodeQLDatabasePath(config, language) : config.dbLocation; + if ((0, import_fs.existsSync)(databasePath)) { + writeDiagnostic(config, language, diagnostic); + } else { + logger.debug( + `Writing a diagnostic for ${language}, but the database at ${databasePath} does not exist yet.` + ); + unwrittenDiagnostics.push({ diagnostic, language }); + } +} +function writeDiagnostic(config, language, diagnostic) { + const logger = getActionsLogger(); + const databasePath = language ? getCodeQLDatabasePath(config, language) : config.dbLocation; + const diagnosticsPath = import_path.default.resolve( + databasePath, + "diagnostic", + "codeql-action" + ); + try { + (0, import_fs.mkdirSync)(diagnosticsPath, { recursive: true }); + const jsonPath = import_path.default.resolve( + diagnosticsPath, + // Remove colons from the timestamp as these are not allowed in Windows filenames. + `codeql-action-${diagnostic.timestamp.replaceAll(":", "")}.json` + ); + (0, import_fs.writeFileSync)(jsonPath, JSON.stringify(diagnostic)); + } catch (err) { + logger.warning(`Unable to write diagnostic message to database: ${err}`); + logger.debug(JSON.stringify(diagnostic)); + } +} + +// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; - core7.debug(`Running git command: git ${args.join(" ")}`); + core8.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -88247,7 +88329,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage) { if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core7.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core8.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -88392,7 +88474,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core7.debug( + core8.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -88417,39 +88499,6 @@ async function isAnalyzingDefaultBranch() { return currentRef === defaultBranch; } -// src/logging.ts -var core8 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core8.debug, - info: core8.info, - warning: core8.warning, - error: core8.error, - isDebug: core8.isDebug, - startGroup: core8.startGroup, - endGroup: core8.endGroup - }; -} -async function withGroupAsync(groupName, f) { - core8.startGroup(groupName); - try { - return await f(); - } finally { - core8.endGroup(); - } -} -function formatDuration(durationMs) { - if (durationMs < 1e3) { - return `${durationMs}ms`; - } - if (durationMs < 60 * 1e3) { - return `${(durationMs / 1e3).toFixed(1)}s`; - } - const minutes = Math.floor(durationMs / (60 * 1e3)); - const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); - return `${minutes}m${seconds}s`; -} - // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; @@ -88476,7 +88525,7 @@ async function readBaseDatabaseOidsFile(config, logger) { } } function getBaseDatabaseOidsFilePath(config) { - return path3.join(config.dbLocation, "base-database-oids.json"); + return path4.join(config.dbLocation, "base-database-oids.json"); } async function writeOverlayChangesFile(config, sourceRoot, logger) { const baseFileOids = await readBaseDatabaseOidsFile(config, logger); @@ -88486,7 +88535,7 @@ async function writeOverlayChangesFile(config, sourceRoot, logger) { `Found ${changedFiles.length} changed file(s) under ${sourceRoot}.` ); const changedFilesJson = JSON.stringify({ changes: changedFiles }); - const overlayChangesFile = path3.join( + const overlayChangesFile = path4.join( getTemporaryDirectory(), "overlay-changes.json" ); @@ -88861,7 +88910,7 @@ var Features = class { this.gitHubFeatureFlags = new GitHubFeatureFlags( gitHubVersion, repositoryNwo, - path4.join(tempDir, FEATURE_FLAGS_FILE_NAME), + path5.join(tempDir, FEATURE_FLAGS_FILE_NAME), logger ); } @@ -89141,7 +89190,7 @@ async function getDiffInformedAnalysisBranches(codeql, features, logger) { return branches; } function getDiffRangesJsonFilePath() { - return path5.join(getTemporaryDirectory(), "pr-diff-range.json"); + return path6.join(getTemporaryDirectory(), "pr-diff-range.json"); } function writeDiffRangesJsonFile(logger, ranges) { const jsonContents = JSON.stringify(ranges, null, 2); @@ -89221,7 +89270,7 @@ Error Response: ${JSON.stringify(error3.response, null, 2)}` } } function getDiffRanges(fileDiff, logger) { - const filename = path5.join(getRequiredInput("checkout_path"), fileDiff.filename).replaceAll(path5.sep, "/"); + const filename = path6.join(getRequiredInput("checkout_path"), fileDiff.filename).replaceAll(path6.sep, "/"); if (fileDiff.patch === void 0) { if (fileDiff.changes === 0) { return []; @@ -89428,7 +89477,7 @@ var OVERLAY_ANALYSIS_CODE_SCANNING_FEATURES = { swift: "overlay_analysis_code_scanning_swift" /* OverlayAnalysisCodeScanningSwift */ }; function getPathToParsedConfigFile(tempDir) { - return path6.join(tempDir, "config"); + return path7.join(tempDir, "config"); } async function getConfig(tempDir, logger) { const configFile = getPathToParsedConfigFile(tempDir); @@ -89484,7 +89533,7 @@ function getPrimaryAnalysisConfig(config) { // src/setup-codeql.ts var fs9 = __toESM(require("fs")); -var path8 = __toESM(require("path")); +var path9 = __toESM(require("path")); var toolcache3 = __toESM(require_tool_cache()); var import_fast_deep_equal = __toESM(require_fast_deep_equal()); var semver8 = __toESM(require_semver2()); @@ -89704,7 +89753,7 @@ function inferCompressionMethod(tarPath) { // src/tools-download.ts var fs8 = __toESM(require("fs")); var os2 = __toESM(require("os")); -var path7 = __toESM(require("path")); +var path8 = __toESM(require("path")); var import_perf_hooks = require("perf_hooks"); var core9 = __toESM(require_core()); var import_http_client = __toESM(require_lib6()); @@ -89837,7 +89886,7 @@ async function downloadAndExtractZstdWithStreaming(codeqlURL, dest, authorizatio await extractTarZst(response, dest, tarVersion, logger); } function getToolcacheDirectory(version) { - return path7.join( + return path8.join( getRequiredEnvParam("RUNNER_TOOL_CACHE"), TOOLCACHE_TOOL_NAME, semver7.clean(version) || version, @@ -89981,7 +90030,7 @@ async function findOverridingToolsInCache(humanReadableVersion, logger) { const candidates = toolcache3.findAllVersions("CodeQL").filter(isGoodVersion).map((version) => ({ folder: toolcache3.find("CodeQL", version), version - })).filter(({ folder }) => fs9.existsSync(path8.join(folder, "pinned-version"))); + })).filter(({ folder }) => fs9.existsSync(path9.join(folder, "pinned-version"))); if (candidates.length === 1) { const candidate = candidates[0]; logger.debug( @@ -90354,7 +90403,7 @@ async function useZstdBundle(cliVersion2, tarSupportsZstd) { ); } function getTempExtractionDir(tempDir) { - return path8.join(tempDir, v4_default()); + return path9.join(tempDir, v4_default()); } async function getNightlyToolsUrl(logger) { const zstdAvailability = await isZstdAvailable(logger); @@ -90403,7 +90452,7 @@ function isReservedToolsValue(tools) { // src/tracer-config.ts var fs10 = __toESM(require("fs")); -var path9 = __toESM(require("path")); +var path10 = __toESM(require("path")); async function shouldEnableIndirectTracing(codeql, config) { if (config.buildMode === "none" /* None */) { return false; @@ -90418,7 +90467,7 @@ async function endTracingForCluster(codeql, config, logger) { logger.info( "Unsetting build tracing environment variables. Subsequent steps of this job will not be traced." ); - const envVariablesFile = path9.resolve( + const envVariablesFile = path10.resolve( config.dbLocation, "temp/tracingEnvironment/end-tracing.json" ); @@ -90475,7 +90524,7 @@ async function setupCodeQL(toolsInput, apiDetails, tempDir, variant, defaultCliV toolsDownloadStatusReport )}` ); - let codeqlCmd = path10.join(codeqlFolder, "codeql", "codeql"); + let codeqlCmd = path11.join(codeqlFolder, "codeql", "codeql"); if (process.platform === "win32") { codeqlCmd += ".exe"; } else if (process.platform !== "linux" && process.platform !== "darwin") { @@ -90537,7 +90586,7 @@ async function getCodeQLForCmd(cmd, checkVersion) { }, async isTracedLanguage(language) { const extractorPath = await this.resolveExtractor(language); - const tracingConfigPath = path10.join( + const tracingConfigPath = path11.join( extractorPath, "tools", "tracing-config.lua" @@ -90613,7 +90662,7 @@ async function getCodeQLForCmd(cmd, checkVersion) { }, async runAutobuild(config, language) { applyAutobuildAzurePipelinesTimeoutFix(); - const autobuildCmd = path10.join( + const autobuildCmd = path11.join( await this.resolveExtractor(language), "tools", process.platform === "win32" ? "autobuild.cmd" : "autobuild.sh" @@ -91036,7 +91085,7 @@ async function getTrapCachingExtractorConfigArgsForLang(config, language) { ]; } function getGeneratedCodeScanningConfigPath(config) { - return path10.resolve(config.tempDir, "user-config.yaml"); + return path11.resolve(config.tempDir, "user-config.yaml"); } function getExtractionVerbosityArguments(enableDebugLogging) { return enableDebugLogging ? [`--verbosity=${EXTRACTION_DEBUG_MODE_VERBOSITY}`] : []; @@ -91104,31 +91153,31 @@ async function runAutobuild(config, language, logger) { // src/dependency-caching.ts var os3 = __toESM(require("os")); -var import_path = require("path"); +var import_path2 = require("path"); var actionsCache3 = __toESM(require_cache3()); var glob = __toESM(require_glob2()); var CODEQL_DEPENDENCY_CACHE_PREFIX = "codeql-dependencies"; var CODEQL_DEPENDENCY_CACHE_VERSION = 1; function getJavaTempDependencyDir() { - return (0, import_path.join)(getTemporaryDirectory(), "codeql_java", "repository"); + return (0, import_path2.join)(getTemporaryDirectory(), "codeql_java", "repository"); } async function getJavaDependencyDirs() { return [ // Maven - (0, import_path.join)(os3.homedir(), ".m2", "repository"), + (0, import_path2.join)(os3.homedir(), ".m2", "repository"), // Gradle - (0, import_path.join)(os3.homedir(), ".gradle", "caches"), + (0, import_path2.join)(os3.homedir(), ".gradle", "caches"), // CodeQL Java build-mode: none getJavaTempDependencyDir() ]; } function getCsharpTempDependencyDir() { - return (0, import_path.join)(getTemporaryDirectory(), "codeql_csharp", "repository"); + return (0, import_path2.join)(getTemporaryDirectory(), "codeql_csharp", "repository"); } async function getCsharpDependencyDirs(codeql, features) { const dirs = [ // Nuget - (0, import_path.join)(os3.homedir(), ".nuget", "packages") + (0, import_path2.join)(os3.homedir(), ".nuget", "packages") ]; if (await features.getValue("csharp_cache_bmn" /* CsharpCacheBuildModeNone */, codeql)) { dirs.push(getCsharpTempDependencyDir()); @@ -91183,7 +91232,7 @@ var defaultCacheConfigs = { getHashPatterns: getCsharpHashPatterns }, go: { - getDependencyPaths: async () => [(0, import_path.join)(os3.homedir(), "go", "pkg", "mod")], + getDependencyPaths: async () => [(0, import_path2.join)(os3.homedir(), "go", "pkg", "mod")], getHashPatterns: async () => internal.makePatternCheck(["**/go.sum"]) } }; @@ -91314,51 +91363,6 @@ var internal = { makePatternCheck }; -// src/diagnostics.ts -var import_fs = require("fs"); -var import_path2 = __toESM(require("path")); -var unwrittenDiagnostics = []; -function makeDiagnostic(id, name, data = void 0) { - return { - ...data, - timestamp: data?.timestamp ?? (/* @__PURE__ */ new Date()).toISOString(), - source: { ...data?.source, id, name } - }; -} -function addDiagnostic(config, language, diagnostic) { - const logger = getActionsLogger(); - const databasePath = language ? getCodeQLDatabasePath(config, language) : config.dbLocation; - if ((0, import_fs.existsSync)(databasePath)) { - writeDiagnostic(config, language, diagnostic); - } else { - logger.debug( - `Writing a diagnostic for ${language}, but the database at ${databasePath} does not exist yet.` - ); - unwrittenDiagnostics.push({ diagnostic, language }); - } -} -function writeDiagnostic(config, language, diagnostic) { - const logger = getActionsLogger(); - const databasePath = language ? getCodeQLDatabasePath(config, language) : config.dbLocation; - const diagnosticsPath = import_path2.default.resolve( - databasePath, - "diagnostic", - "codeql-action" - ); - try { - (0, import_fs.mkdirSync)(diagnosticsPath, { recursive: true }); - const jsonPath = import_path2.default.resolve( - diagnosticsPath, - // Remove colons from the timestamp as these are not allowed in Windows filenames. - `codeql-action-${diagnostic.timestamp.replaceAll(":", "")}.json` - ); - (0, import_fs.writeFileSync)(jsonPath, JSON.stringify(diagnostic)); - } catch (err) { - logger.warning(`Unable to write diagnostic message to database: ${err}`); - logger.debug(JSON.stringify(diagnostic)); - } -} - // src/analyze.ts var CodeQLAnalysisError = class extends Error { constructor(queriesStatusReport, message, error3) { diff --git a/lib/autobuild-action.js b/lib/autobuild-action.js index e396cc5023..c05d97d913 100644 --- a/lib/autobuild-action.js +++ b/lib/autobuild-action.js @@ -83710,14 +83710,30 @@ var path2 = __toESM(require("path")); var actionsCache = __toESM(require_cache3()); // src/git-utils.ts -var core7 = __toESM(require_core()); +var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); var semver3 = __toESM(require_semver2()); + +// src/logging.ts +var core7 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core7.debug, + info: core7.info, + warning: core7.warning, + error: core7.error, + isDebug: core7.isDebug, + startGroup: core7.startGroup, + endGroup: core7.endGroup + }; +} + +// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; - core7.debug(`Running git command: git ${args.join(" ")}`); + core8.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -83737,7 +83753,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage) { if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core7.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core8.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -83848,7 +83864,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core7.debug( + core8.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -83873,20 +83889,6 @@ async function isAnalyzingDefaultBranch() { return currentRef === defaultBranch; } -// src/logging.ts -var core8 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core8.debug, - info: core8.info, - warning: core8.warning, - error: core8.error, - isDebug: core8.isDebug, - startGroup: core8.startGroup, - endGroup: core8.endGroup - }; -} - // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; diff --git a/lib/init-action-post.js b/lib/init-action-post.js index 5c1a89c358..91687091f6 100644 --- a/lib/init-action-post.js +++ b/lib/init-action-post.js @@ -123092,14 +123092,49 @@ var path3 = __toESM(require("path")); var actionsCache = __toESM(require_cache3()); // src/git-utils.ts -var core7 = __toESM(require_core()); +var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); var semver3 = __toESM(require_semver2()); + +// src/logging.ts +var core7 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core7.debug, + info: core7.info, + warning: core7.warning, + error: core7.error, + isDebug: core7.isDebug, + startGroup: core7.startGroup, + endGroup: core7.endGroup + }; +} +function withGroup(groupName, f) { + core7.startGroup(groupName); + try { + return f(); + } finally { + core7.endGroup(); + } +} +function formatDuration(durationMs) { + if (durationMs < 1e3) { + return `${durationMs}ms`; + } + if (durationMs < 60 * 1e3) { + return `${(durationMs / 1e3).toFixed(1)}s`; + } + const minutes = Math.floor(durationMs / (60 * 1e3)); + const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); + return `${minutes}m${seconds}s`; +} + +// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; - core7.debug(`Running git command: git ${args.join(" ")}`); + core8.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -123119,7 +123154,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage) { if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core7.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core8.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -123264,7 +123299,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core7.debug( + core8.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -123289,39 +123324,6 @@ async function isAnalyzingDefaultBranch() { return currentRef === defaultBranch; } -// src/logging.ts -var core8 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core8.debug, - info: core8.info, - warning: core8.warning, - error: core8.error, - isDebug: core8.isDebug, - startGroup: core8.startGroup, - endGroup: core8.endGroup - }; -} -function withGroup(groupName, f) { - core8.startGroup(groupName); - try { - return f(); - } finally { - core8.endGroup(); - } -} -function formatDuration(durationMs) { - if (durationMs < 1e3) { - return `${durationMs}ms`; - } - if (durationMs < 60 * 1e3) { - return `${(durationMs / 1e3).toFixed(1)}s`; - } - const minutes = Math.floor(durationMs / (60 * 1e3)); - const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); - return `${minutes}m${seconds}s`; -} - // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; diff --git a/lib/init-action.js b/lib/init-action.js index 3bd87b605a..b814dd1545 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -85283,7 +85283,7 @@ function getDependencyCachingEnabled() { // src/config-utils.ts var fs6 = __toESM(require("fs")); -var path7 = __toESM(require("path")); +var path8 = __toESM(require("path")); var import_perf_hooks = require("perf_hooks"); // src/config/db-config.ts @@ -85631,7 +85631,7 @@ function parseUserConfig(logger, pathInput, contents, validateConfig) { // src/feature-flags.ts var fs4 = __toESM(require("fs")); -var path5 = __toESM(require("path")); +var path6 = __toESM(require("path")); var semver5 = __toESM(require_semver2()); // src/defaults.json @@ -85640,35 +85640,171 @@ var cliVersion = "2.23.8"; // src/overlay-database-utils.ts var fs3 = __toESM(require("fs")); -var path4 = __toESM(require("path")); +var path5 = __toESM(require("path")); var actionsCache = __toESM(require_cache3()); // src/git-utils.ts -var core7 = __toESM(require_core()); +var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); var semver3 = __toESM(require_semver2()); -var GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0"; -async function getGitVersion() { + +// src/diagnostics.ts +var import_fs = require("fs"); +var import_path = __toESM(require("path")); + +// src/logging.ts +var core7 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core7.debug, + info: core7.info, + warning: core7.warning, + error: core7.error, + isDebug: core7.isDebug, + startGroup: core7.startGroup, + endGroup: core7.endGroup + }; +} +async function withGroupAsync(groupName, f) { + core7.startGroup(groupName); try { - const stdout = await runGitCommand( - void 0, - ["--version"], - "Failed to get git version." + return await f(); + } finally { + core7.endGroup(); + } +} +function formatDuration(durationMs) { + if (durationMs < 1e3) { + return `${durationMs}ms`; + } + if (durationMs < 60 * 1e3) { + return `${(durationMs / 1e3).toFixed(1)}s`; + } + const minutes = Math.floor(durationMs / (60 * 1e3)); + const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); + return `${minutes}m${seconds}s`; +} + +// src/diagnostics.ts +var unwrittenDiagnostics = []; +function makeDiagnostic(id, name, data = void 0) { + return { + ...data, + timestamp: data?.timestamp ?? (/* @__PURE__ */ new Date()).toISOString(), + source: { ...data?.source, id, name } + }; +} +function addDiagnostic(config, language, diagnostic) { + const logger = getActionsLogger(); + const databasePath = language ? getCodeQLDatabasePath(config, language) : config.dbLocation; + if ((0, import_fs.existsSync)(databasePath)) { + writeDiagnostic(config, language, diagnostic); + } else { + logger.debug( + `Writing a diagnostic for ${language}, but the database at ${databasePath} does not exist yet.` + ); + unwrittenDiagnostics.push({ diagnostic, language }); + } +} +function writeDiagnostic(config, language, diagnostic) { + const logger = getActionsLogger(); + const databasePath = language ? getCodeQLDatabasePath(config, language) : config.dbLocation; + const diagnosticsPath = import_path.default.resolve( + databasePath, + "diagnostic", + "codeql-action" + ); + try { + (0, import_fs.mkdirSync)(diagnosticsPath, { recursive: true }); + const jsonPath = import_path.default.resolve( + diagnosticsPath, + // Remove colons from the timestamp as these are not allowed in Windows filenames. + `codeql-action-${diagnostic.timestamp.replaceAll(":", "")}.json` + ); + (0, import_fs.writeFileSync)(jsonPath, JSON.stringify(diagnostic)); + } catch (err) { + logger.warning(`Unable to write diagnostic message to database: ${err}`); + logger.debug(JSON.stringify(diagnostic)); + } +} +function logUnwrittenDiagnostics() { + const logger = getActionsLogger(); + const num = unwrittenDiagnostics.length; + if (num > 0) { + logger.warning( + `${num} diagnostic(s) could not be written to the database and will not appear on the Tool Status Page.` ); - const match = stdout.match(/git version (\d+\.\d+\.\d+)/); - if (match?.[1]) { - return match[1]; + for (const unwritten of unwrittenDiagnostics) { + logger.debug(JSON.stringify(unwritten.diagnostic)); } + } +} +function flushDiagnostics(config) { + const logger = getActionsLogger(); + logger.debug( + `Writing ${unwrittenDiagnostics.length} diagnostic(s) to database.` + ); + for (const unwritten of unwrittenDiagnostics) { + writeDiagnostic(config, unwritten.language, unwritten.diagnostic); + } + unwrittenDiagnostics = []; +} +function makeTelemetryDiagnostic(id, name, attributes) { + return makeDiagnostic(id, name, { + attributes, + visibility: { + cliSummaryTable: false, + statusPage: false, + telemetry: true + } + }); +} + +// src/git-utils.ts +var GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0"; +var cachedGitVersion; +async function getGitVersionOrThrow() { + const stdout = await runGitCommand( + void 0, + ["--version"], + "Failed to get git version." + ); + const match = stdout.match(/git version (\d+\.\d+\.\d+)/); + if (match?.[1]) { + return match[1]; + } + throw new Error(`Could not parse Git version from output: ${stdout.trim()}`); +} +async function getGitVersion(logger) { + if (cachedGitVersion !== void 0) { + return cachedGitVersion; + } + try { + cachedGitVersion = await getGitVersionOrThrow(); + return cachedGitVersion; + } catch (e) { + logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); return void 0; - } catch { - return void 0; + } +} +async function logGitVersionTelemetry(config, logger) { + const version = await getGitVersion(logger); + if (version !== void 0) { + addDiagnostic( + config, + config.languages[0], + makeTelemetryDiagnostic( + "codeql-action/git-version-telemetry", + "Git version telemetry", + { gitVersion: version } + ) + ); } } async function gitVersionAtLeast(requiredVersion, logger) { - const version = await getGitVersion(); + const version = await getGitVersion(logger); if (version === void 0) { - logger.debug("Could not determine Git version."); return false; } logger.debug(`Installed Git version is ${version}.`); @@ -85677,7 +85813,7 @@ async function gitVersionAtLeast(requiredVersion, logger) { var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; - core7.debug(`Running git command: git ${args.join(" ")}`); + core8.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -85697,7 +85833,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage) { if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core7.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core8.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -85820,7 +85956,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core7.debug( + core8.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -85845,39 +85981,6 @@ async function isAnalyzingDefaultBranch() { return currentRef === defaultBranch; } -// src/logging.ts -var core8 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core8.debug, - info: core8.info, - warning: core8.warning, - error: core8.error, - isDebug: core8.isDebug, - startGroup: core8.startGroup, - endGroup: core8.endGroup - }; -} -async function withGroupAsync(groupName, f) { - core8.startGroup(groupName); - try { - return await f(); - } finally { - core8.endGroup(); - } -} -function formatDuration(durationMs) { - if (durationMs < 1e3) { - return `${durationMs}ms`; - } - if (durationMs < 60 * 1e3) { - return `${(durationMs / 1e3).toFixed(1)}s`; - } - const minutes = Math.floor(durationMs / (60 * 1e3)); - const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); - return `${minutes}m${seconds}s`; -} - // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; @@ -85904,7 +86007,7 @@ async function readBaseDatabaseOidsFile(config, logger) { } } function getBaseDatabaseOidsFilePath(config) { - return path4.join(config.dbLocation, "base-database-oids.json"); + return path5.join(config.dbLocation, "base-database-oids.json"); } async function writeOverlayChangesFile(config, sourceRoot, logger) { const baseFileOids = await readBaseDatabaseOidsFile(config, logger); @@ -85914,7 +86017,7 @@ async function writeOverlayChangesFile(config, sourceRoot, logger) { `Found ${changedFiles.length} changed file(s) under ${sourceRoot}.` ); const changedFilesJson = JSON.stringify({ changes: changedFiles }); - const overlayChangesFile = path4.join( + const overlayChangesFile = path5.join( getTemporaryDirectory(), "overlay-changes.json" ); @@ -86301,7 +86404,7 @@ var Features = class { this.gitHubFeatureFlags = new GitHubFeatureFlags( gitHubVersion, repositoryNwo, - path5.join(tempDir, FEATURE_FLAGS_FILE_NAME), + path6.join(tempDir, FEATURE_FLAGS_FILE_NAME), logger ); } @@ -86601,7 +86704,7 @@ var KnownLanguage = /* @__PURE__ */ ((KnownLanguage2) => { // src/trap-caching.ts var fs5 = __toESM(require("fs")); -var path6 = __toESM(require("path")); +var path7 = __toESM(require("path")); var actionsCache2 = __toESM(require_cache3()); var CACHE_VERSION2 = 1; var CODEQL_TRAP_CACHE_PREFIX = "codeql-trap"; @@ -86617,12 +86720,12 @@ async function downloadTrapCaches(codeql, languages, logger) { `Found ${languagesSupportingCaching.length} languages that support TRAP caching` ); if (languagesSupportingCaching.length === 0) return result; - const cachesDir = path6.join( + const cachesDir = path7.join( getTemporaryDirectory(), "trapCaches" ); for (const language of languagesSupportingCaching) { - const cacheDir = path6.join(cachesDir, language); + const cacheDir = path7.join(cachesDir, language); fs5.mkdirSync(cacheDir, { recursive: true }); result[language] = cacheDir; } @@ -86635,7 +86738,7 @@ async function downloadTrapCaches(codeql, languages, logger) { let baseSha = "unknown"; const eventPath = process.env.GITHUB_EVENT_PATH; if (getWorkflowEventName() === "pull_request" && eventPath !== void 0) { - const event = JSON.parse(fs5.readFileSync(path6.resolve(eventPath), "utf-8")); + const event = JSON.parse(fs5.readFileSync(path7.resolve(eventPath), "utf-8")); baseSha = event.pull_request?.base?.sha || baseSha; } for (const language of languages) { @@ -86739,7 +86842,7 @@ async function getSupportedLanguageMap(codeql, logger) { } var baseWorkflowsPath = ".github/workflows"; function hasActionsWorkflows(sourceRoot) { - const workflowsPath = path7.resolve(sourceRoot, baseWorkflowsPath); + const workflowsPath = path8.resolve(sourceRoot, baseWorkflowsPath); const stats = fs6.lstatSync(workflowsPath, { throwIfNoEntry: false }); return stats !== void 0 && stats.isDirectory() && fs6.readdirSync(workflowsPath).length > 0; } @@ -86906,8 +87009,8 @@ async function downloadCacheWithTime(trapCachingEnabled, codeQL, languages, logg async function loadUserConfig(logger, configFile, workspacePath, apiDetails, tempDir, validateConfig) { if (isLocal(configFile)) { if (configFile !== userConfigFromActionPath(tempDir)) { - configFile = path7.resolve(workspacePath, configFile); - if (!(configFile + path7.sep).startsWith(workspacePath + path7.sep)) { + configFile = path8.resolve(workspacePath, configFile); + if (!(configFile + path8.sep).startsWith(workspacePath + path8.sep)) { throw new ConfigurationError( getConfigFileOutsideWorkspaceErrorMessage(configFile) ); @@ -87067,10 +87170,10 @@ async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, b }; } function dbLocationOrDefault(dbLocation, tempDir) { - return dbLocation || path7.resolve(tempDir, "codeql_databases"); + return dbLocation || path8.resolve(tempDir, "codeql_databases"); } function userConfigFromActionPath(tempDir) { - return path7.resolve(tempDir, "user-config-from-action.yml"); + return path8.resolve(tempDir, "user-config-from-action.yml"); } function hasQueryCustomisation(userConfig) { return isDefined(userConfig["disable-default-queries"]) || isDefined(userConfig.queries) || isDefined(userConfig["query-filters"]); @@ -87210,12 +87313,12 @@ async function getRemoteConfig(logger, configFile, apiDetails, validateConfig) { ); } function getPathToParsedConfigFile(tempDir) { - return path7.join(tempDir, "config"); + return path8.join(tempDir, "config"); } async function saveConfig(config, logger) { const configString = JSON.stringify(config); const configFile = getPathToParsedConfigFile(config.tempDir); - fs6.mkdirSync(path7.dirname(configFile), { recursive: true }); + fs6.mkdirSync(path8.dirname(configFile), { recursive: true }); fs6.writeFileSync(configFile, configString, "utf8"); logger.debug("Saved config:"); logger.debug(configString); @@ -87226,7 +87329,7 @@ async function generateRegistries(registriesInput, tempDir, logger) { let qlconfigFile; if (registries) { const qlconfig = createRegistriesBlock(registries); - qlconfigFile = path7.join(tempDir, "qlconfig.yml"); + qlconfigFile = path8.join(tempDir, "qlconfig.yml"); const qlconfigContents = dump(qlconfig); fs6.writeFileSync(qlconfigFile, qlconfigContents, "utf8"); logger.debug("Generated qlconfig.yml:"); @@ -87327,31 +87430,31 @@ function isCodeQualityEnabled(config) { // src/dependency-caching.ts var os2 = __toESM(require("os")); -var import_path = require("path"); +var import_path2 = require("path"); var actionsCache3 = __toESM(require_cache3()); var glob = __toESM(require_glob2()); var CODEQL_DEPENDENCY_CACHE_PREFIX = "codeql-dependencies"; var CODEQL_DEPENDENCY_CACHE_VERSION = 1; function getJavaTempDependencyDir() { - return (0, import_path.join)(getTemporaryDirectory(), "codeql_java", "repository"); + return (0, import_path2.join)(getTemporaryDirectory(), "codeql_java", "repository"); } async function getJavaDependencyDirs() { return [ // Maven - (0, import_path.join)(os2.homedir(), ".m2", "repository"), + (0, import_path2.join)(os2.homedir(), ".m2", "repository"), // Gradle - (0, import_path.join)(os2.homedir(), ".gradle", "caches"), + (0, import_path2.join)(os2.homedir(), ".gradle", "caches"), // CodeQL Java build-mode: none getJavaTempDependencyDir() ]; } function getCsharpTempDependencyDir() { - return (0, import_path.join)(getTemporaryDirectory(), "codeql_csharp", "repository"); + return (0, import_path2.join)(getTemporaryDirectory(), "codeql_csharp", "repository"); } async function getCsharpDependencyDirs(codeql, features) { const dirs = [ // Nuget - (0, import_path.join)(os2.homedir(), ".nuget", "packages") + (0, import_path2.join)(os2.homedir(), ".nuget", "packages") ]; if (await features.getValue("csharp_cache_bmn" /* CsharpCacheBuildModeNone */, codeql)) { dirs.push(getCsharpTempDependencyDir()); @@ -87406,7 +87509,7 @@ var defaultCacheConfigs = { getHashPatterns: getCsharpHashPatterns }, go: { - getDependencyPaths: async () => [(0, import_path.join)(os2.homedir(), "go", "pkg", "mod")], + getDependencyPaths: async () => [(0, import_path2.join)(os2.homedir(), "go", "pkg", "mod")], getHashPatterns: async () => internal.makePatternCheck(["**/go.sum"]) } }; @@ -87526,73 +87629,6 @@ var internal = { makePatternCheck }; -// src/diagnostics.ts -var import_fs = require("fs"); -var import_path2 = __toESM(require("path")); -var unwrittenDiagnostics = []; -function makeDiagnostic(id, name, data = void 0) { - return { - ...data, - timestamp: data?.timestamp ?? (/* @__PURE__ */ new Date()).toISOString(), - source: { ...data?.source, id, name } - }; -} -function addDiagnostic(config, language, diagnostic) { - const logger = getActionsLogger(); - const databasePath = language ? getCodeQLDatabasePath(config, language) : config.dbLocation; - if ((0, import_fs.existsSync)(databasePath)) { - writeDiagnostic(config, language, diagnostic); - } else { - logger.debug( - `Writing a diagnostic for ${language}, but the database at ${databasePath} does not exist yet.` - ); - unwrittenDiagnostics.push({ diagnostic, language }); - } -} -function writeDiagnostic(config, language, diagnostic) { - const logger = getActionsLogger(); - const databasePath = language ? getCodeQLDatabasePath(config, language) : config.dbLocation; - const diagnosticsPath = import_path2.default.resolve( - databasePath, - "diagnostic", - "codeql-action" - ); - try { - (0, import_fs.mkdirSync)(diagnosticsPath, { recursive: true }); - const jsonPath = import_path2.default.resolve( - diagnosticsPath, - // Remove colons from the timestamp as these are not allowed in Windows filenames. - `codeql-action-${diagnostic.timestamp.replaceAll(":", "")}.json` - ); - (0, import_fs.writeFileSync)(jsonPath, JSON.stringify(diagnostic)); - } catch (err) { - logger.warning(`Unable to write diagnostic message to database: ${err}`); - logger.debug(JSON.stringify(diagnostic)); - } -} -function logUnwrittenDiagnostics() { - const logger = getActionsLogger(); - const num = unwrittenDiagnostics.length; - if (num > 0) { - logger.warning( - `${num} diagnostic(s) could not be written to the database and will not appear on the Tool Status Page.` - ); - for (const unwritten of unwrittenDiagnostics) { - logger.debug(JSON.stringify(unwritten.diagnostic)); - } - } -} -function flushDiagnostics(config) { - const logger = getActionsLogger(); - logger.debug( - `Writing ${unwrittenDiagnostics.length} diagnostic(s) to database.` - ); - for (const unwritten of unwrittenDiagnostics) { - writeDiagnostic(config, unwritten.language, unwritten.diagnostic); - } - unwrittenDiagnostics = []; -} - // src/init.ts var fs12 = __toESM(require("fs")); var path13 = __toESM(require("path")); @@ -90170,6 +90206,7 @@ async function run() { ) ); } + await logGitVersionTelemetry(config, logger); const goFlags = process.env["GOFLAGS"]; if (goFlags) { core13.exportVariable("GOFLAGS", goFlags); diff --git a/lib/resolve-environment-action.js b/lib/resolve-environment-action.js index 17100c2c16..e73e3b40ce 100644 --- a/lib/resolve-environment-action.js +++ b/lib/resolve-environment-action.js @@ -83703,14 +83703,30 @@ var path2 = __toESM(require("path")); var actionsCache = __toESM(require_cache3()); // src/git-utils.ts -var core7 = __toESM(require_core()); +var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); var semver3 = __toESM(require_semver2()); + +// src/logging.ts +var core7 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core7.debug, + info: core7.info, + warning: core7.warning, + error: core7.error, + isDebug: core7.isDebug, + startGroup: core7.startGroup, + endGroup: core7.endGroup + }; +} + +// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; - core7.debug(`Running git command: git ${args.join(" ")}`); + core8.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -83730,7 +83746,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage) { if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core7.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core8.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -83841,7 +83857,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core7.debug( + core8.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -83866,20 +83882,6 @@ async function isAnalyzingDefaultBranch() { return currentRef === defaultBranch; } -// src/logging.ts -var core8 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core8.debug, - info: core8.info, - warning: core8.warning, - error: core8.error, - isDebug: core8.isDebug, - startGroup: core8.startGroup, - endGroup: core8.endGroup - }; -} - // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; diff --git a/lib/setup-codeql-action.js b/lib/setup-codeql-action.js index 6b5b9211d4..edcf230c92 100644 --- a/lib/setup-codeql-action.js +++ b/lib/setup-codeql-action.js @@ -83601,14 +83601,41 @@ var actionsCache = __toESM(require_cache3()); var core6 = __toESM(require_core()); // src/git-utils.ts -var core7 = __toESM(require_core()); +var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); var semver2 = __toESM(require_semver2()); + +// src/logging.ts +var core7 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core7.debug, + info: core7.info, + warning: core7.warning, + error: core7.error, + isDebug: core7.isDebug, + startGroup: core7.startGroup, + endGroup: core7.endGroup + }; +} +function formatDuration(durationMs) { + if (durationMs < 1e3) { + return `${durationMs}ms`; + } + if (durationMs < 60 * 1e3) { + return `${(durationMs / 1e3).toFixed(1)}s`; + } + const minutes = Math.floor(durationMs / (60 * 1e3)); + const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); + return `${minutes}m${seconds}s`; +} + +// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; - core7.debug(`Running git command: git ${args.join(" ")}`); + core8.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -83628,7 +83655,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage) { if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core7.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core8.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -83739,7 +83766,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core7.debug( + core8.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -83764,31 +83791,6 @@ async function isAnalyzingDefaultBranch() { return currentRef === defaultBranch; } -// src/logging.ts -var core8 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core8.debug, - info: core8.info, - warning: core8.warning, - error: core8.error, - isDebug: core8.isDebug, - startGroup: core8.startGroup, - endGroup: core8.endGroup - }; -} -function formatDuration(durationMs) { - if (durationMs < 1e3) { - return `${durationMs}ms`; - } - if (durationMs < 60 * 1e3) { - return `${(durationMs / 1e3).toFixed(1)}s`; - } - const minutes = Math.floor(durationMs / (60 * 1e3)); - const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); - return `${minutes}m${seconds}s`; -} - // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; diff --git a/lib/start-proxy-action-post.js b/lib/start-proxy-action-post.js index cd5e20cd5e..6d56d3d1a9 100644 --- a/lib/start-proxy-action-post.js +++ b/lib/start-proxy-action-post.js @@ -119394,22 +119394,22 @@ var semver5 = __toESM(require_semver2()); var actionsCache = __toESM(require_cache3()); // src/git-utils.ts -var core7 = __toESM(require_core()); +var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); var semver3 = __toESM(require_semver2()); // src/logging.ts -var core8 = __toESM(require_core()); +var core7 = __toESM(require_core()); function getActionsLogger() { return { - debug: core8.debug, - info: core8.info, - warning: core8.warning, - error: core8.error, - isDebug: core8.isDebug, - startGroup: core8.startGroup, - endGroup: core8.endGroup + debug: core7.debug, + info: core7.info, + warning: core7.warning, + error: core7.error, + isDebug: core7.isDebug, + startGroup: core7.startGroup, + endGroup: core7.endGroup }; } diff --git a/lib/upload-lib.js b/lib/upload-lib.js index b9ac6bbe67..3c7135e251 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -86733,14 +86733,30 @@ var path3 = __toESM(require("path")); var actionsCache = __toESM(require_cache3()); // src/git-utils.ts -var core7 = __toESM(require_core()); +var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); var semver3 = __toESM(require_semver2()); + +// src/logging.ts +var core7 = __toESM(require_core()); +function formatDuration(durationMs) { + if (durationMs < 1e3) { + return `${durationMs}ms`; + } + if (durationMs < 60 * 1e3) { + return `${(durationMs / 1e3).toFixed(1)}s`; + } + const minutes = Math.floor(durationMs / (60 * 1e3)); + const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); + return `${minutes}m${seconds}s`; +} + +// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; - core7.debug(`Running git command: git ${args.join(" ")}`); + core8.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -86760,7 +86776,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage) { if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core7.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core8.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -86905,7 +86921,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core7.debug( + core8.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -86930,20 +86946,6 @@ async function isAnalyzingDefaultBranch() { return currentRef === defaultBranch; } -// src/logging.ts -var core8 = __toESM(require_core()); -function formatDuration(durationMs) { - if (durationMs < 1e3) { - return `${durationMs}ms`; - } - if (durationMs < 60 * 1e3) { - return `${(durationMs / 1e3).toFixed(1)}s`; - } - const minutes = Math.floor(durationMs / (60 * 1e3)); - const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); - return `${minutes}m${seconds}s`; -} - // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; diff --git a/lib/upload-sarif-action-post.js b/lib/upload-sarif-action-post.js index 39d9d6e46d..d5dc0eda57 100644 --- a/lib/upload-sarif-action-post.js +++ b/lib/upload-sarif-action-post.js @@ -119548,30 +119548,30 @@ var semver5 = __toESM(require_semver2()); var actionsCache = __toESM(require_cache3()); // src/git-utils.ts -var core7 = __toESM(require_core()); +var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); var semver3 = __toESM(require_semver2()); // src/logging.ts -var core8 = __toESM(require_core()); +var core7 = __toESM(require_core()); function getActionsLogger() { return { - debug: core8.debug, - info: core8.info, - warning: core8.warning, - error: core8.error, - isDebug: core8.isDebug, - startGroup: core8.startGroup, - endGroup: core8.endGroup + debug: core7.debug, + info: core7.info, + warning: core7.warning, + error: core7.error, + isDebug: core7.isDebug, + startGroup: core7.startGroup, + endGroup: core7.endGroup }; } function withGroup(groupName, f) { - core8.startGroup(groupName); + core7.startGroup(groupName); try { return f(); } finally { - core8.endGroup(); + core7.endGroup(); } } diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index 83c50dc589..a37fbe62ea 100644 --- a/lib/upload-sarif-action.js +++ b/lib/upload-sarif-action.js @@ -86517,14 +86517,41 @@ var actionsCache = __toESM(require_cache3()); var core6 = __toESM(require_core()); // src/git-utils.ts -var core7 = __toESM(require_core()); +var core8 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io2()); var semver2 = __toESM(require_semver2()); + +// src/logging.ts +var core7 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core7.debug, + info: core7.info, + warning: core7.warning, + error: core7.error, + isDebug: core7.isDebug, + startGroup: core7.startGroup, + endGroup: core7.endGroup + }; +} +function formatDuration(durationMs) { + if (durationMs < 1e3) { + return `${durationMs}ms`; + } + if (durationMs < 60 * 1e3) { + return `${(durationMs / 1e3).toFixed(1)}s`; + } + const minutes = Math.floor(durationMs / (60 * 1e3)); + const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); + return `${minutes}m${seconds}s`; +} + +// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; - core7.debug(`Running git command: git ${args.join(" ")}`); + core8.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -86544,7 +86571,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage) { if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core7.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core8.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -86689,7 +86716,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core7.debug( + core8.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -86714,31 +86741,6 @@ async function isAnalyzingDefaultBranch() { return currentRef === defaultBranch; } -// src/logging.ts -var core8 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core8.debug, - info: core8.info, - warning: core8.warning, - error: core8.error, - isDebug: core8.isDebug, - startGroup: core8.startGroup, - endGroup: core8.endGroup - }; -} -function formatDuration(durationMs) { - if (durationMs < 1e3) { - return `${durationMs}ms`; - } - if (durationMs < 60 * 1e3) { - return `${(durationMs / 1e3).toFixed(1)}s`; - } - const minutes = Math.floor(durationMs / (60 * 1e3)); - const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); - return `${minutes}m${seconds}s`; -} - // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; diff --git a/src/diagnostics.ts b/src/diagnostics.ts index b3d18b23cb..65b413664c 100644 --- a/src/diagnostics.ts +++ b/src/diagnostics.ts @@ -185,3 +185,28 @@ export function flushDiagnostics(config: Config) { // Reset the unwritten diagnostics array. unwrittenDiagnostics = []; } + +/** + * Creates a telemetry-only diagnostic message. This is a convenience function + * for creating diagnostics that should only be sent to telemetry and not + * displayed on the status page or CLI summary table. + * + * @param id An identifier under which it makes sense to group this diagnostic message. + * @param name Display name for the ID. + * @param attributes Structured metadata about the diagnostic message. + * @returns Returns the new telemetry diagnostic message. + */ +export function makeTelemetryDiagnostic( + id: string, + name: string, + attributes: { [key: string]: any }, +): DiagnosticMessage { + return makeDiagnostic(id, name, { + attributes, + visibility: { + cliSummaryTable: false, + statusPage: false, + telemetry: true, + }, + }); +} diff --git a/src/git-utils.test.ts b/src/git-utils.test.ts index dbea5cac35..6d6a328675 100644 --- a/src/git-utils.test.ts +++ b/src/git-utils.test.ts @@ -398,39 +398,46 @@ test("getFileOidsUnderPath throws on unexpected output format", async (t) => { } }); -test("getGitVersion returns version for valid git output", async (t) => { +test("getGitVersionOrThrow returns version for valid git output", async (t) => { const runGitCommandStub = sinon .stub(gitUtils as any, "runGitCommand") .resolves("git version 2.40.0\n"); try { - const version = await gitUtils.getGitVersion(); + const version = await gitUtils.getGitVersionOrThrow(); t.is(version, "2.40.0"); } finally { runGitCommandStub.restore(); } }); -test("getGitVersion returns undefined for invalid git output", async (t) => { +test("getGitVersionOrThrow throws for invalid git output", async (t) => { const runGitCommandStub = sinon .stub(gitUtils as any, "runGitCommand") .resolves("invalid output"); try { - const version = await gitUtils.getGitVersion(); - t.is(version, undefined); + await t.throwsAsync( + async () => { + await gitUtils.getGitVersionOrThrow(); + }, + { + instanceOf: Error, + message: "Could not parse Git version from output: invalid output", + }, + ); } finally { runGitCommandStub.restore(); } }); -test("getGitVersion handles Windows-style git output", async (t) => { +test("getGitVersionOrThrow handles Windows-style git output", async (t) => { const runGitCommandStub = sinon .stub(gitUtils as any, "runGitCommand") .resolves("git version 2.40.0.windows.1\n"); try { - const version = await gitUtils.getGitVersion(); + const version = await gitUtils.getGitVersionOrThrow(); // Should extract just the major.minor.patch portion t.is(version, "2.40.0"); } finally { @@ -438,20 +445,79 @@ test("getGitVersion handles Windows-style git output", async (t) => { } }); -test("getGitVersion returns undefined when git command fails", async (t) => { +test("getGitVersionOrThrow throws when git command fails", async (t) => { const runGitCommandStub = sinon .stub(gitUtils as any, "runGitCommand") .rejects(new Error("git not found")); try { - const version = await gitUtils.getGitVersion(); + await t.throwsAsync( + async () => { + await gitUtils.getGitVersionOrThrow(); + }, + { + instanceOf: Error, + message: "git not found", + }, + ); + } finally { + runGitCommandStub.restore(); + } +}); + +test("getGitVersion returns version and caches it", async (t) => { + gitUtils.resetCachedGitVersion(); + const runGitCommandStub = sinon + .stub(gitUtils as any, "runGitCommand") + .resolves("git version 2.40.0\n"); + + const messages: LoggedMessage[] = []; + const logger = getRecordingLogger(messages); + + try { + // First call should fetch and cache + const version1 = await gitUtils.getGitVersion(logger); + t.is(version1, "2.40.0"); + t.is(runGitCommandStub.callCount, 1); + + // Second call should use cache + const version2 = await gitUtils.getGitVersion(logger); + t.is(version2, "2.40.0"); + t.is(runGitCommandStub.callCount, 1); // Should still be 1 + } finally { + runGitCommandStub.restore(); + gitUtils.resetCachedGitVersion(); + } +}); + +test("getGitVersion returns undefined when version cannot be determined", async (t) => { + gitUtils.resetCachedGitVersion(); + const runGitCommandStub = sinon + .stub(gitUtils as any, "runGitCommand") + .rejects(new Error("git not found")); + + const messages: LoggedMessage[] = []; + const logger = getRecordingLogger(messages); + + try { + const version = await gitUtils.getGitVersion(logger); t.is(version, undefined); + t.true( + messages.some( + (m) => + m.type === "debug" && + typeof m.message === "string" && + m.message.includes("Could not determine Git version"), + ), + ); } finally { runGitCommandStub.restore(); + gitUtils.resetCachedGitVersion(); } }); test("gitVersionAtLeast returns true for version meeting requirement", async (t) => { + gitUtils.resetCachedGitVersion(); const runGitCommandStub = sinon .stub(gitUtils as any, "runGitCommand") .resolves("git version 2.40.0\n"); @@ -471,10 +537,12 @@ test("gitVersionAtLeast returns true for version meeting requirement", async (t) ); } finally { runGitCommandStub.restore(); + gitUtils.resetCachedGitVersion(); } }); test("gitVersionAtLeast returns false for version not meeting requirement", async (t) => { + gitUtils.resetCachedGitVersion(); const runGitCommandStub = sinon .stub(gitUtils as any, "runGitCommand") .resolves("git version 2.30.0\n"); @@ -487,10 +555,12 @@ test("gitVersionAtLeast returns false for version not meeting requirement", asyn t.false(result); } finally { runGitCommandStub.restore(); + gitUtils.resetCachedGitVersion(); } }); test("gitVersionAtLeast returns false when version cannot be determined", async (t) => { + gitUtils.resetCachedGitVersion(); const runGitCommandStub = sinon .stub(gitUtils as any, "runGitCommand") .rejects(new Error("git not found")); @@ -505,10 +575,12 @@ test("gitVersionAtLeast returns false when version cannot be determined", async messages.some( (m) => m.type === "debug" && - m.message === "Could not determine Git version.", + typeof m.message === "string" && + m.message.includes("Could not determine Git version"), ), ); } finally { runGitCommandStub.restore(); + gitUtils.resetCachedGitVersion(); } }); diff --git a/src/git-utils.ts b/src/git-utils.ts index 6fa1369ce7..6bae2f40e6 100644 --- a/src/git-utils.ts +++ b/src/git-utils.ts @@ -8,8 +8,14 @@ import { getWorkflowEvent, getWorkflowEventName, } from "./actions-util"; +import type { Config } from "./config-utils"; +import { addDiagnostic, makeTelemetryDiagnostic } from "./diagnostics"; import { Logger } from "./logging"; -import { ConfigurationError, getRequiredEnvParam } from "./util"; +import { + ConfigurationError, + getErrorMessage, + getRequiredEnvParam, +} from "./util"; /** * Minimum Git version required for overlay analysis. The `git ls-files --format` @@ -17,31 +23,84 @@ import { ConfigurationError, getRequiredEnvParam } from "./util"; */ export const GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0"; +/** Cached git version to avoid recomputing it multiple times. */ +let cachedGitVersion: string | undefined; + +/** + * Resets the cached git version. This is intended for use in tests only. + */ +export function resetCachedGitVersion(): void { + cachedGitVersion = undefined; +} + +/** + * Gets the version of Git installed on the system and throws an error if + * the version cannot be determined. + * + * @returns The Git version string (e.g., "2.40.0"). + * @throws {Error} if the version could not be determined. + */ +export async function getGitVersionOrThrow(): Promise { + const stdout = await runGitCommand( + undefined, + ["--version"], + "Failed to get git version.", + ); + // 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+)/); + if (match?.[1]) { + return match[1]; + } + throw new Error(`Could not parse Git version from output: ${stdout.trim()}`); +} + /** - * Gets the version of Git installed on the system. + * Gets the cached Git version, or fetches and caches it if not yet cached. * - * @returns The Git version string (e.g., "2.40.0"), or undefined if the - * version could not be determined. + * @param logger A logger to use for logging errors. + * @returns The cached Git version, or undefined if the version could not be determined. */ -export async function getGitVersion(): Promise { +export async function getGitVersion( + logger: Logger, +): Promise { + if (cachedGitVersion !== undefined) { + return cachedGitVersion; + } try { - const stdout = await runGitCommand( - undefined, - ["--version"], - "Failed to get git version.", - ); - // 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+)/); - if (match?.[1]) { - return match[1]; - } - return undefined; - } catch { + cachedGitVersion = await getGitVersionOrThrow(); + return cachedGitVersion; + } catch (e) { + logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); return undefined; } } +/** + * Logs the Git version as a telemetry diagnostic. Should be called once during + * initialization after the config is available. + * + * @param config The configuration that tells us where to store the diagnostic. + * @param logger A logger to use for logging errors. + */ +export async function logGitVersionTelemetry( + config: Config, + logger: Logger, +): Promise { + const version = await getGitVersion(logger); + if (version !== undefined) { + addDiagnostic( + config, + config.languages[0], + makeTelemetryDiagnostic( + "codeql-action/git-version-telemetry", + "Git version telemetry", + { gitVersion: version }, + ), + ); + } +} + /** * Checks if the installed Git version is at least the given required version. * @@ -54,9 +113,8 @@ export async function gitVersionAtLeast( requiredVersion: string, logger: Logger, ): Promise { - const version = await getGitVersion(); + const version = await getGitVersion(logger); if (version === undefined) { - logger.debug("Could not determine Git version."); return false; } logger.debug(`Installed Git version is ${version}.`); diff --git a/src/init-action.ts b/src/init-action.ts index 8fa7899d8f..dbbae2ad6a 100644 --- a/src/init-action.ts +++ b/src/init-action.ts @@ -37,6 +37,7 @@ import { import { EnvVar } from "./environment"; import { Feature, Features } from "./feature-flags"; import { loadPropertiesFromApi } from "./feature-flags/properties"; +import { logGitVersionTelemetry } from "./git-utils"; import { checkInstallPython311, checkPacksForOverlayCompatibility, @@ -433,6 +434,9 @@ async function run() { ); } + // Log Git version telemetry + await logGitVersionTelemetry(config, logger); + // Forward Go flags const goFlags = process.env["GOFLAGS"]; if (goFlags) { From 393c0749651f9ef1cde5357d3a087e1544009bfe Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Dec 2025 17:24:57 +0000 Subject: [PATCH 05/20] Refactor existing telemetry diagnostics to use makeTelemetryDiagnostic Refactored bundle-download-telemetry and zstd-availability diagnostics in init-action.ts to use the new makeTelemetryDiagnostic helper function. Also added guard for empty languages array in logGitVersionTelemetry. Co-authored-by: henrymercer <14129055+henrymercer@users.noreply.github.com> --- lib/init-action.js | 26 +++++++------------------- src/git-utils.ts | 4 +++- src/init-action.ts | 23 +++++------------------ 3 files changed, 15 insertions(+), 38 deletions(-) diff --git a/lib/init-action.js b/lib/init-action.js index b814dd1545..5645c4d6dd 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -85790,9 +85790,11 @@ async function getGitVersion(logger) { } async function logGitVersionTelemetry(config, logger) { const version = await getGitVersion(logger); - if (version !== void 0) { + if (version !== void 0 && config.languages.length > 0) { addDiagnostic( config, + // Arbitrarily choose the first language. We could also choose all languages, but that + // increases the risk of misinterpreting the data. config.languages[0], makeTelemetryDiagnostic( "codeql-action/git-version-telemetry", @@ -90192,17 +90194,10 @@ async function run() { // Arbitrarily choose the first language. We could also choose all languages, but that // increases the risk of misinterpreting the data. config.languages[0], - makeDiagnostic( + makeTelemetryDiagnostic( "codeql-action/bundle-download-telemetry", "CodeQL bundle download telemetry", - { - attributes: toolsDownloadStatusReport, - visibility: { - cliSummaryTable: false, - statusPage: false, - telemetry: true - } - } + toolsDownloadStatusReport ) ); } @@ -90449,17 +90444,10 @@ async function recordZstdAvailability(config, zstdAvailability) { // Arbitrarily choose the first language. We could also choose all languages, but that // increases the risk of misinterpreting the data. config.languages[0], - makeDiagnostic( + makeTelemetryDiagnostic( "codeql-action/zstd-availability", "Zstandard availability", - { - attributes: zstdAvailability, - visibility: { - cliSummaryTable: false, - statusPage: false, - telemetry: true - } - } + zstdAvailability ) ); } diff --git a/src/git-utils.ts b/src/git-utils.ts index 6bae2f40e6..9eb1a05962 100644 --- a/src/git-utils.ts +++ b/src/git-utils.ts @@ -88,9 +88,11 @@ export async function logGitVersionTelemetry( logger: Logger, ): Promise { const version = await getGitVersion(logger); - if (version !== undefined) { + if (version !== undefined && config.languages.length > 0) { addDiagnostic( config, + // Arbitrarily choose the first language. We could also choose all languages, but that + // increases the risk of misinterpreting the data. config.languages[0], makeTelemetryDiagnostic( "codeql-action/git-version-telemetry", diff --git a/src/init-action.ts b/src/init-action.ts index dbbae2ad6a..ec1f234ddc 100644 --- a/src/init-action.ts +++ b/src/init-action.ts @@ -33,6 +33,7 @@ import { flushDiagnostics, logUnwrittenDiagnostics, makeDiagnostic, + makeTelemetryDiagnostic, } from "./diagnostics"; import { EnvVar } from "./environment"; import { Feature, Features } from "./feature-flags"; @@ -419,17 +420,10 @@ async function run() { // Arbitrarily choose the first language. We could also choose all languages, but that // increases the risk of misinterpreting the data. config.languages[0], - makeDiagnostic( + makeTelemetryDiagnostic( "codeql-action/bundle-download-telemetry", "CodeQL bundle download telemetry", - { - attributes: toolsDownloadStatusReport, - visibility: { - cliSummaryTable: false, - statusPage: false, - telemetry: true, - }, - }, + toolsDownloadStatusReport, ), ); } @@ -789,17 +783,10 @@ async function recordZstdAvailability( // Arbitrarily choose the first language. We could also choose all languages, but that // increases the risk of misinterpreting the data. config.languages[0], - makeDiagnostic( + makeTelemetryDiagnostic( "codeql-action/zstd-availability", "Zstandard availability", - { - attributes: zstdAvailability, - visibility: { - cliSummaryTable: false, - statusPage: false, - telemetry: true, - }, - }, + zstdAvailability, ), ); } From e052dbd57de3f950b01b1bb9bc13864a6cb710bc Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Wed, 17 Dec 2025 11:56:23 +0000 Subject: [PATCH 06/20] Remove caching mechanism --- src/git-utils.test.ts | 57 ---------------------------------- src/git-utils.ts | 71 ++++++++++++++----------------------------- 2 files changed, 23 insertions(+), 105 deletions(-) diff --git a/src/git-utils.test.ts b/src/git-utils.test.ts index 6d6a328675..d2072e7980 100644 --- a/src/git-utils.test.ts +++ b/src/git-utils.test.ts @@ -465,59 +465,7 @@ test("getGitVersionOrThrow throws when git command fails", async (t) => { } }); -test("getGitVersion returns version and caches it", async (t) => { - gitUtils.resetCachedGitVersion(); - const runGitCommandStub = sinon - .stub(gitUtils as any, "runGitCommand") - .resolves("git version 2.40.0\n"); - - const messages: LoggedMessage[] = []; - const logger = getRecordingLogger(messages); - - try { - // First call should fetch and cache - const version1 = await gitUtils.getGitVersion(logger); - t.is(version1, "2.40.0"); - t.is(runGitCommandStub.callCount, 1); - - // Second call should use cache - const version2 = await gitUtils.getGitVersion(logger); - t.is(version2, "2.40.0"); - t.is(runGitCommandStub.callCount, 1); // Should still be 1 - } finally { - runGitCommandStub.restore(); - gitUtils.resetCachedGitVersion(); - } -}); - -test("getGitVersion returns undefined when version cannot be determined", async (t) => { - gitUtils.resetCachedGitVersion(); - const runGitCommandStub = sinon - .stub(gitUtils as any, "runGitCommand") - .rejects(new Error("git not found")); - - const messages: LoggedMessage[] = []; - const logger = getRecordingLogger(messages); - - try { - const version = await gitUtils.getGitVersion(logger); - t.is(version, undefined); - t.true( - messages.some( - (m) => - m.type === "debug" && - typeof m.message === "string" && - m.message.includes("Could not determine Git version"), - ), - ); - } finally { - runGitCommandStub.restore(); - gitUtils.resetCachedGitVersion(); - } -}); - test("gitVersionAtLeast returns true for version meeting requirement", async (t) => { - gitUtils.resetCachedGitVersion(); const runGitCommandStub = sinon .stub(gitUtils as any, "runGitCommand") .resolves("git version 2.40.0\n"); @@ -537,12 +485,10 @@ test("gitVersionAtLeast returns true for version meeting requirement", async (t) ); } finally { runGitCommandStub.restore(); - gitUtils.resetCachedGitVersion(); } }); test("gitVersionAtLeast returns false for version not meeting requirement", async (t) => { - gitUtils.resetCachedGitVersion(); const runGitCommandStub = sinon .stub(gitUtils as any, "runGitCommand") .resolves("git version 2.30.0\n"); @@ -555,12 +501,10 @@ test("gitVersionAtLeast returns false for version not meeting requirement", asyn t.false(result); } finally { runGitCommandStub.restore(); - gitUtils.resetCachedGitVersion(); } }); test("gitVersionAtLeast returns false when version cannot be determined", async (t) => { - gitUtils.resetCachedGitVersion(); const runGitCommandStub = sinon .stub(gitUtils as any, "runGitCommand") .rejects(new Error("git not found")); @@ -581,6 +525,5 @@ test("gitVersionAtLeast returns false when version cannot be determined", async ); } finally { runGitCommandStub.restore(); - gitUtils.resetCachedGitVersion(); } }); diff --git a/src/git-utils.ts b/src/git-utils.ts index 9eb1a05962..71a19a665b 100644 --- a/src/git-utils.ts +++ b/src/git-utils.ts @@ -23,16 +23,6 @@ import { */ export const GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0"; -/** Cached git version to avoid recomputing it multiple times. */ -let cachedGitVersion: string | undefined; - -/** - * Resets the cached git version. This is intended for use in tests only. - */ -export function resetCachedGitVersion(): void { - cachedGitVersion = undefined; -} - /** * Gets the version of Git installed on the system and throws an error if * the version cannot be determined. @@ -55,27 +45,6 @@ export async function getGitVersionOrThrow(): Promise { throw new Error(`Could not parse Git version from output: ${stdout.trim()}`); } -/** - * Gets the cached Git version, or fetches and caches it if not yet cached. - * - * @param logger A logger to use for logging errors. - * @returns The cached Git version, or undefined if the version could not be determined. - */ -export async function getGitVersion( - logger: Logger, -): Promise { - if (cachedGitVersion !== undefined) { - return cachedGitVersion; - } - try { - cachedGitVersion = await getGitVersionOrThrow(); - return cachedGitVersion; - } catch (e) { - logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); - return undefined; - } -} - /** * Logs the Git version as a telemetry diagnostic. Should be called once during * initialization after the config is available. @@ -87,19 +56,23 @@ export async function logGitVersionTelemetry( config: Config, logger: Logger, ): Promise { - const version = await getGitVersion(logger); - if (version !== undefined && config.languages.length > 0) { - addDiagnostic( - config, - // Arbitrarily choose the first language. We could also choose all languages, but that - // increases the risk of misinterpreting the data. - config.languages[0], - makeTelemetryDiagnostic( - "codeql-action/git-version-telemetry", - "Git version telemetry", - { gitVersion: version }, - ), - ); + try { + const version = await getGitVersionOrThrow(); + if (config.languages.length > 0) { + addDiagnostic( + config, + // Arbitrarily choose the first language. We could also choose all languages, but that + // increases the risk of misinterpreting the data. + config.languages[0], + makeTelemetryDiagnostic( + "codeql-action/git-version-telemetry", + "Git version telemetry", + { gitVersion: version }, + ), + ); + } + } catch (e) { + logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); } } @@ -115,12 +88,14 @@ export async function gitVersionAtLeast( requiredVersion: string, logger: Logger, ): Promise { - const version = await getGitVersion(logger); - if (version === undefined) { + try { + const version = await getGitVersionOrThrow(); + logger.debug(`Installed Git version is ${version}.`); + return semver.gte(version, requiredVersion); + } catch (e) { + logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); return false; } - logger.debug(`Installed Git version is ${version}.`); - return semver.gte(version, requiredVersion); } export const runGitCommand = async function ( From 3765106c903a4fb1dd28cd5988cb8227d725a1e7 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Wed, 17 Dec 2025 12:06:41 +0000 Subject: [PATCH 07/20] Move git version logging to config utils --- lib/analyze-action-post.js | 30 ++++---- lib/analyze-action.js | 50 +++++++------ lib/autobuild-action.js | 38 +++++----- lib/init-action-post.js | 52 +++++++------- lib/init-action.js | 114 ++++++++++++++---------------- lib/resolve-environment-action.js | 28 ++++---- lib/setup-codeql-action.js | 72 +++++++++---------- lib/start-proxy-action-post.js | 26 +++---- lib/start-proxy-action.js | 8 ++- lib/upload-lib.js | 36 +++++----- lib/upload-sarif-action-post.js | 30 ++++---- lib/upload-sarif-action.js | 70 +++++++++--------- src/config-utils.test.ts | 17 +---- src/config-utils.ts | 46 +++++++++++- src/git-utils.test.ts | 70 +----------------- src/git-utils.ts | 63 +---------------- src/init-action.ts | 4 -- 17 files changed, 315 insertions(+), 439 deletions(-) diff --git a/lib/analyze-action-post.js b/lib/analyze-action-post.js index 390921ac15..56d20cd939 100644 --- a/lib/analyze-action-post.js +++ b/lib/analyze-action-post.js @@ -126689,6 +126689,7 @@ 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) => { @@ -126711,20 +126712,6 @@ var PACK_IDENTIFIER_PATTERN = (function() { return new RegExp(`^${component}/${component}$`); })(); -// src/feature-flags.ts -var semver5 = __toESM(require_semver2()); - -// src/overlay-database-utils.ts -var fs2 = __toESM(require("fs")); -var path2 = __toESM(require("path")); -var actionsCache = __toESM(require_cache4()); - -// src/git-utils.ts -var core8 = __toESM(require_core()); -var toolrunner2 = __toESM(require_toolrunner()); -var io3 = __toESM(require_io()); -var semver3 = __toESM(require_semver2()); - // src/logging.ts var core7 = __toESM(require_core()); function getActionsLogger() { @@ -126747,7 +126734,18 @@ function withGroup(groupName, f) { } } +// src/feature-flags.ts +var semver4 = __toESM(require_semver2()); + +// src/overlay-database-utils.ts +var fs2 = __toESM(require("fs")); +var path2 = __toESM(require("path")); +var actionsCache = __toESM(require_cache4()); + // src/git-utils.ts +var core8 = __toESM(require_core()); +var toolrunner2 = __toESM(require_toolrunner()); +var io3 = __toESM(require_io()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -126969,13 +126967,13 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver4 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } var SafeArtifactUploadVersion = "2.20.3"; function isSafeArtifactUpload(codeQlVersion) { - return !codeQlVersion ? true : semver4.gte(codeQlVersion, SafeArtifactUploadVersion); + return !codeQlVersion ? true : semver3.gte(codeQlVersion, SafeArtifactUploadVersion); } // src/feature-flags.ts diff --git a/lib/analyze-action.js b/lib/analyze-action.js index 2d4770b3ad..f73d56c729 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -93955,6 +93955,7 @@ 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")); @@ -93984,30 +93985,6 @@ var PACK_IDENTIFIER_PATTERN = (function() { return new RegExp(`^${component}/${component}$`); })(); -// src/diff-informed-analysis-utils.ts -var fs5 = __toESM(require("fs")); -var path6 = __toESM(require("path")); - -// src/feature-flags.ts -var fs4 = __toESM(require("fs")); -var path5 = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); - -// src/defaults.json -var bundleVersion = "codeql-bundle-v2.23.8"; -var cliVersion = "2.23.8"; - -// src/overlay-database-utils.ts -var fs3 = __toESM(require("fs")); -var path4 = __toESM(require("path")); -var actionsCache = __toESM(require_cache4()); - -// src/git-utils.ts -var core8 = __toESM(require_core()); -var toolrunner2 = __toESM(require_toolrunner()); -var io3 = __toESM(require_io()); -var semver3 = __toESM(require_semver2()); - // src/diagnostics.ts var import_fs = require("fs"); var import_path = __toESM(require("path")); @@ -94088,7 +94065,28 @@ function writeDiagnostic(config, language, diagnostic) { } } +// src/diff-informed-analysis-utils.ts +var fs5 = __toESM(require("fs")); +var path6 = __toESM(require("path")); + +// src/feature-flags.ts +var fs4 = __toESM(require("fs")); +var path5 = __toESM(require("path")); +var semver4 = __toESM(require_semver2()); + +// src/defaults.json +var bundleVersion = "codeql-bundle-v2.23.8"; +var cliVersion = "2.23.8"; + +// src/overlay-database-utils.ts +var fs3 = __toESM(require("fs")); +var path4 = __toESM(require("path")); +var actionsCache = __toESM(require_cache4()); + // src/git-utils.ts +var core8 = __toESM(require_core()); +var toolrunner2 = __toESM(require_toolrunner()); +var io3 = __toESM(require_io()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -94479,7 +94477,7 @@ async function getCacheRestoreKeyPrefix(config, codeQlVersion) { } // src/tools-features.ts -var semver4 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } @@ -94787,7 +94785,7 @@ var GitHubFeatureFlags = class { DEFAULT_VERSION_FEATURE_FLAG_PREFIX.length, f.length - DEFAULT_VERSION_FEATURE_FLAG_SUFFIX.length ).replace(/_/g, "."); - if (!semver5.valid(version)) { + if (!semver4.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 3799479554..6c627fa4dc 100644 --- a/lib/autobuild-action.js +++ b/lib/autobuild-action.js @@ -90553,6 +90553,7 @@ 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) => { @@ -90575,10 +90576,24 @@ var PACK_IDENTIFIER_PATTERN = (function() { return new RegExp(`^${component}/${component}$`); })(); +// src/logging.ts +var core7 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core7.debug, + info: core7.info, + warning: core7.warning, + error: core7.error, + isDebug: core7.isDebug, + startGroup: core7.startGroup, + endGroup: core7.endGroup + }; +} + // src/feature-flags.ts var fs3 = __toESM(require("fs")); var path3 = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); // src/defaults.json var bundleVersion = "codeql-bundle-v2.23.8"; @@ -90593,23 +90608,6 @@ 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/logging.ts -var core7 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core7.debug, - info: core7.info, - warning: core7.warning, - error: core7.error, - isDebug: core7.isDebug, - startGroup: core7.startGroup, - endGroup: core7.endGroup - }; -} - -// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -90831,7 +90829,7 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver4 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } @@ -91138,7 +91136,7 @@ var GitHubFeatureFlags = class { DEFAULT_VERSION_FEATURE_FLAG_PREFIX.length, f.length - DEFAULT_VERSION_FEATURE_FLAG_SUFFIX.length ).replace(/_/g, "."); - if (!semver5.valid(version)) { + if (!semver4.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 cb81e1f339..86bb8b831e 100644 --- a/lib/init-action-post.js +++ b/lib/init-action-post.js @@ -129997,6 +129997,7 @@ 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) => { @@ -130034,30 +130035,6 @@ var PACK_IDENTIFIER_PATTERN = (function() { return new RegExp(`^${component}/${component}$`); })(); -// src/diff-informed-analysis-utils.ts -var fs5 = __toESM(require("fs")); -var path5 = __toESM(require("path")); - -// src/feature-flags.ts -var fs4 = __toESM(require("fs")); -var path4 = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); - -// src/defaults.json -var bundleVersion = "codeql-bundle-v2.23.8"; -var cliVersion = "2.23.8"; - -// src/overlay-database-utils.ts -var fs3 = __toESM(require("fs")); -var path3 = __toESM(require("path")); -var actionsCache = __toESM(require_cache4()); - -// src/git-utils.ts -var core8 = __toESM(require_core()); -var toolrunner2 = __toESM(require_toolrunner()); -var io3 = __toESM(require_io()); -var semver3 = __toESM(require_semver2()); - // src/logging.ts var core7 = __toESM(require_core()); function getActionsLogger() { @@ -130091,7 +130068,28 @@ function formatDuration(durationMs) { return `${minutes}m${seconds}s`; } +// src/diff-informed-analysis-utils.ts +var fs5 = __toESM(require("fs")); +var path5 = __toESM(require("path")); + +// src/feature-flags.ts +var fs4 = __toESM(require("fs")); +var path4 = __toESM(require("path")); +var semver4 = __toESM(require_semver2()); + +// src/defaults.json +var bundleVersion = "codeql-bundle-v2.23.8"; +var cliVersion = "2.23.8"; + +// src/overlay-database-utils.ts +var fs3 = __toESM(require("fs")); +var path3 = __toESM(require("path")); +var actionsCache = __toESM(require_cache4()); + // src/git-utils.ts +var core8 = __toESM(require_core()); +var toolrunner2 = __toESM(require_toolrunner()); +var io3 = __toESM(require_io()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -130347,13 +130345,13 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver4 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } var SafeArtifactUploadVersion = "2.20.3"; function isSafeArtifactUpload(codeQlVersion) { - return !codeQlVersion ? true : semver4.gte(codeQlVersion, SafeArtifactUploadVersion); + return !codeQlVersion ? true : semver3.gte(codeQlVersion, SafeArtifactUploadVersion); } // src/feature-flags.ts @@ -130659,7 +130657,7 @@ var GitHubFeatureFlags = class { DEFAULT_VERSION_FEATURE_FLAG_PREFIX.length, f.length - DEFAULT_VERSION_FEATURE_FLAG_SUFFIX.length ).replace(/_/g, "."); - if (!semver5.valid(version)) { + if (!semver4.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 9b4abde3f9..b780144e65 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -91073,6 +91073,7 @@ 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")); @@ -91417,26 +91418,6 @@ function parseUserConfig(logger, pathInput, contents, validateConfig) { } } -// src/feature-flags.ts -var fs4 = __toESM(require("fs")); -var path6 = __toESM(require("path")); -var semver5 = __toESM(require_semver2()); - -// src/defaults.json -var bundleVersion = "codeql-bundle-v2.23.8"; -var cliVersion = "2.23.8"; - -// src/overlay-database-utils.ts -var fs3 = __toESM(require("fs")); -var path5 = __toESM(require("path")); -var actionsCache = __toESM(require_cache4()); - -// src/git-utils.ts -var core8 = __toESM(require_core()); -var toolrunner2 = __toESM(require_toolrunner()); -var io3 = __toESM(require_io()); -var semver3 = __toESM(require_semver2()); - // src/diagnostics.ts var import_fs = require("fs"); var import_path = __toESM(require("path")); @@ -91549,9 +91530,25 @@ function makeTelemetryDiagnostic(id, name, attributes) { }); } +// src/feature-flags.ts +var fs4 = __toESM(require("fs")); +var path6 = __toESM(require("path")); +var semver4 = __toESM(require_semver2()); + +// src/defaults.json +var bundleVersion = "codeql-bundle-v2.23.8"; +var cliVersion = "2.23.8"; + +// src/overlay-database-utils.ts +var fs3 = __toESM(require("fs")); +var path5 = __toESM(require("path")); +var actionsCache = __toESM(require_cache4()); + // src/git-utils.ts +var core8 = __toESM(require_core()); +var toolrunner2 = __toESM(require_toolrunner()); +var io3 = __toESM(require_io()); var GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0"; -var cachedGitVersion; async function getGitVersionOrThrow() { const stdout = await runGitCommand( void 0, @@ -91564,42 +91561,6 @@ async function getGitVersionOrThrow() { } throw new Error(`Could not parse Git version from output: ${stdout.trim()}`); } -async function getGitVersion(logger) { - if (cachedGitVersion !== void 0) { - return cachedGitVersion; - } - try { - cachedGitVersion = await getGitVersionOrThrow(); - return cachedGitVersion; - } catch (e) { - logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); - return void 0; - } -} -async function logGitVersionTelemetry(config, logger) { - const version = await getGitVersion(logger); - if (version !== void 0 && config.languages.length > 0) { - addDiagnostic( - config, - // Arbitrarily choose the first language. We could also choose all languages, but that - // increases the risk of misinterpreting the data. - config.languages[0], - makeTelemetryDiagnostic( - "codeql-action/git-version-telemetry", - "Git version telemetry", - { gitVersion: version } - ) - ); - } -} -async function gitVersionAtLeast(requiredVersion, logger) { - const version = await getGitVersion(logger); - if (version === void 0) { - return false; - } - logger.debug(`Installed Git version is ${version}.`); - return semver3.gte(version, requiredVersion); -} var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -91980,7 +91941,7 @@ async function getCacheRestoreKeyPrefix(config, codeQlVersion) { } // src/tools-features.ts -var semver4 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } @@ -92288,7 +92249,7 @@ var GitHubFeatureFlags = class { DEFAULT_VERSION_FEATURE_FLAG_PREFIX.length, f.length - DEFAULT_VERSION_FEATURE_FLAG_SUFFIX.length ).replace(/_/g, "."); - if (!semver5.valid(version)) { + if (!semver4.valid(version)) { this.logger.warning( `Ignoring feature flag ${f} as it does not specify a valid CodeQL version.` ); @@ -92875,7 +92836,7 @@ async function runnerSupportsOverlayAnalysis(ramInput, logger) { } return true; } -async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, buildMode, ramInput, codeScanningConfig, logger) { +async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, buildMode, ramInput, codeScanningConfig, gitVersion, logger) { let overlayDatabaseMode = "none" /* None */; let useOverlayDatabaseCaching = false; const modeEnv = process.env.CODEQL_OVERLAY_DATABASE_MODE; @@ -92943,7 +92904,13 @@ async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, b ); return nonOverlayAnalysis; } - if (!await gitVersionAtLeast(GIT_MINIMUM_VERSION_FOR_OVERLAY, logger)) { + if (gitVersion === void 0) { + logger.warning( + `Cannot build an ${overlayDatabaseMode} database because the Git version could not be determined. Falling back to creating a normal full database instead.` + ); + return nonOverlayAnalysis; + } + if (!semver5.gte(gitVersion, 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.` ); @@ -93002,6 +92969,14 @@ async function initConfig(features, inputs) { config.computedConfig.queries = queries; config.computedConfig["query-filters"] = []; } + let gitVersion = void 0; + try { + gitVersion = await getGitVersionOrThrow(); + logger.info(`Using Git version ${gitVersion}`); + await logGitVersionTelemetry(config, gitVersion); + } catch (e) { + logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); + } const { overlayDatabaseMode, useOverlayDatabaseCaching } = await getOverlayDatabaseMode( inputs.codeql, inputs.features, @@ -93010,6 +92985,7 @@ async function initConfig(features, inputs) { config.buildMode, inputs.ramInput, config.computedConfig, + gitVersion, logger ); logger.info( @@ -93212,6 +93188,21 @@ function appendExtraQueryExclusions(extraQueryExclusions, cliConfig) { function isCodeQualityEnabled(config) { return config.analysisKinds.includes("code-quality" /* CodeQuality */); } +async function logGitVersionTelemetry(config, gitVersion) { + if (config.languages.length > 0) { + addDiagnostic( + config, + // Arbitrarily choose the first language. We could also choose all languages, but that + // increases the risk of misinterpreting the data. + config.languages[0], + makeTelemetryDiagnostic( + "codeql-action/git-version-telemetry", + "Git version telemetry", + { gitVersion } + ) + ); + } +} // src/dependency-caching.ts var os2 = __toESM(require("os")); @@ -95973,7 +95964,6 @@ async function run() { ) ); } - await logGitVersionTelemetry(config, logger); const goFlags = process.env["GOFLAGS"]; if (goFlags) { core13.exportVariable("GOFLAGS", goFlags); diff --git a/lib/resolve-environment-action.js b/lib/resolve-environment-action.js index 33efad7c4f..69e614862c 100644 --- a/lib/resolve-environment-action.js +++ b/lib/resolve-environment-action.js @@ -90552,6 +90552,7 @@ 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) => { @@ -90574,20 +90575,6 @@ var PACK_IDENTIFIER_PATTERN = (function() { return new RegExp(`^${component}/${component}$`); })(); -// src/feature-flags.ts -var semver5 = __toESM(require_semver2()); - -// src/overlay-database-utils.ts -var fs2 = __toESM(require("fs")); -var path2 = __toESM(require("path")); -var actionsCache = __toESM(require_cache4()); - -// src/git-utils.ts -var core8 = __toESM(require_core()); -var toolrunner2 = __toESM(require_toolrunner()); -var io3 = __toESM(require_io()); -var semver3 = __toESM(require_semver2()); - // src/logging.ts var core7 = __toESM(require_core()); function getActionsLogger() { @@ -90602,7 +90589,18 @@ function getActionsLogger() { }; } +// src/feature-flags.ts +var semver4 = __toESM(require_semver2()); + +// src/overlay-database-utils.ts +var fs2 = __toESM(require("fs")); +var path2 = __toESM(require("path")); +var actionsCache = __toESM(require_cache4()); + // src/git-utils.ts +var core8 = __toESM(require_core()); +var toolrunner2 = __toESM(require_toolrunner()); +var io3 = __toESM(require_io()); var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -90824,7 +90822,7 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver4 = __toESM(require_semver2()); +var semver3 = __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 aec66229f9..b250357ad2 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 semver4 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); // src/defaults.json var bundleVersion = "codeql-bundle-v2.23.8"; @@ -90481,41 +90481,13 @@ var actionsCache = __toESM(require_cache4()); var core6 = __toESM(require_core()); // src/git-utils.ts -var core8 = __toESM(require_core()); +var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); -var semver2 = __toESM(require_semver2()); - -// src/logging.ts -var core7 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core7.debug, - info: core7.info, - warning: core7.warning, - error: core7.error, - isDebug: core7.isDebug, - startGroup: core7.startGroup, - endGroup: core7.endGroup - }; -} -function formatDuration(durationMs) { - if (durationMs < 1e3) { - return `${durationMs}ms`; - } - if (durationMs < 60 * 1e3) { - return `${(durationMs / 1e3).toFixed(1)}s`; - } - const minutes = Math.floor(durationMs / (60 * 1e3)); - const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); - return `${minutes}m${seconds}s`; -} - -// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; - core8.debug(`Running git command: git ${args.join(" ")}`); + core7.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -90535,7 +90507,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage) { if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core8.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core7.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -90646,7 +90618,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core8.debug( + core7.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -90671,6 +90643,31 @@ async function isAnalyzingDefaultBranch() { return currentRef === defaultBranch; } +// src/logging.ts +var core8 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core8.debug, + info: core8.info, + warning: core8.warning, + error: core8.error, + isDebug: core8.isDebug, + startGroup: core8.startGroup, + endGroup: core8.endGroup + }; +} +function formatDuration(durationMs) { + if (durationMs < 1e3) { + return `${durationMs}ms`; + } + if (durationMs < 60 * 1e3) { + return `${(durationMs / 1e3).toFixed(1)}s`; + } + const minutes = Math.floor(durationMs / (60 * 1e3)); + const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); + return `${minutes}m${seconds}s`; +} + // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; @@ -90733,7 +90730,7 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver2 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } @@ -91041,7 +91038,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 (!semver3.valid(version)) { this.logger.warning( `Ignoring feature flag ${f} as it does not specify a valid CodeQL version.` ); @@ -91454,6 +91451,9 @@ 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 +91464,7 @@ var supportedAnalysisKinds = new Set(Object.values(AnalysisKind)); // src/config/db-config.ts var jsonschema = __toESM(require_lib4()); -var semver5 = __toESM(require_semver2()); +var semver4 = __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 9d149a6cc3..d5e137b3a8 100644 --- a/lib/start-proxy-action-post.js +++ b/lib/start-proxy-action-post.js @@ -126326,6 +126326,7 @@ 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) => { @@ -126348,18 +126349,6 @@ var PACK_IDENTIFIER_PATTERN = (function() { return new RegExp(`^${component}/${component}$`); })(); -// src/feature-flags.ts -var semver5 = __toESM(require_semver2()); - -// src/overlay-database-utils.ts -var actionsCache = __toESM(require_cache4()); - -// src/git-utils.ts -var core8 = __toESM(require_core()); -var toolrunner2 = __toESM(require_toolrunner()); -var io3 = __toESM(require_io()); -var semver3 = __toESM(require_semver2()); - // src/logging.ts var core7 = __toESM(require_core()); function getActionsLogger() { @@ -126374,13 +126363,24 @@ function getActionsLogger() { }; } +// src/feature-flags.ts +var semver4 = __toESM(require_semver2()); + +// src/overlay-database-utils.ts +var actionsCache = __toESM(require_cache4()); + +// src/git-utils.ts +var core8 = __toESM(require_core()); +var toolrunner2 = __toESM(require_toolrunner()); +var io3 = __toESM(require_io()); + // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; 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 semver4 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); // src/feature-flags.ts var featureConfig = { diff --git a/lib/start-proxy-action.js b/lib/start-proxy-action.js index 85c70a06bb..c65acde800 100644 --- a/lib/start-proxy-action.js +++ b/lib/start-proxy-action.js @@ -107527,6 +107527,9 @@ 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"; @@ -107549,7 +107552,7 @@ var PACK_IDENTIFIER_PATTERN = (function() { })(); // src/feature-flags.ts -var semver5 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); // src/overlay-database-utils.ts var actionsCache = __toESM(require_cache4()); @@ -107558,7 +107561,6 @@ 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 = ""; @@ -107653,7 +107655,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 semver4 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); // src/feature-flags.ts var featureConfig = { diff --git a/lib/upload-lib.js b/lib/upload-lib.js index bf357334f9..881a8ee6d8 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -93582,6 +93582,7 @@ 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()); @@ -93596,12 +93597,26 @@ var PACK_IDENTIFIER_PATTERN = (function() { return new RegExp(`^${component}/${component}$`); })(); +// src/logging.ts +var core7 = __toESM(require_core()); +function formatDuration(durationMs) { + if (durationMs < 1e3) { + return `${durationMs}ms`; + } + if (durationMs < 60 * 1e3) { + return `${(durationMs / 1e3).toFixed(1)}s`; + } + const minutes = Math.floor(durationMs / (60 * 1e3)); + const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); + return `${minutes}m${seconds}s`; +} + // src/diff-informed-analysis-utils.ts var fs4 = __toESM(require("fs")); var path4 = __toESM(require("path")); // src/feature-flags.ts -var semver5 = __toESM(require_semver2()); +var semver4 = __toESM(require_semver2()); // src/defaults.json var bundleVersion = "codeql-bundle-v2.23.8"; @@ -93616,23 +93631,6 @@ 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/logging.ts -var core7 = __toESM(require_core()); -function formatDuration(durationMs) { - if (durationMs < 1e3) { - return `${durationMs}ms`; - } - if (durationMs < 60 * 1e3) { - return `${(durationMs / 1e3).toFixed(1)}s`; - } - const minutes = Math.floor(durationMs / (60 * 1e3)); - const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); - return `${minutes}m${seconds}s`; -} - -// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; @@ -93888,7 +93886,7 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver4 = __toESM(require_semver2()); +var semver3 = __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 56a79d0531..7c65f41610 100644 --- a/lib/upload-sarif-action-post.js +++ b/lib/upload-sarif-action-post.js @@ -126489,6 +126489,9 @@ var cliErrorsConfig = { } }; +// src/config-utils.ts +var semver5 = __toESM(require_semver2()); + // src/caching-utils.ts var core6 = __toESM(require_core()); @@ -126502,18 +126505,6 @@ var PACK_IDENTIFIER_PATTERN = (function() { return new RegExp(`^${component}/${component}$`); })(); -// src/feature-flags.ts -var semver5 = __toESM(require_semver2()); - -// src/overlay-database-utils.ts -var actionsCache = __toESM(require_cache4()); - -// src/git-utils.ts -var core8 = __toESM(require_core()); -var toolrunner2 = __toESM(require_toolrunner()); -var io3 = __toESM(require_io()); -var semver3 = __toESM(require_semver2()); - // src/logging.ts var core7 = __toESM(require_core()); function getActionsLogger() { @@ -126536,16 +126527,27 @@ function withGroup(groupName, f) { } } +// src/feature-flags.ts +var semver4 = __toESM(require_semver2()); + +// src/overlay-database-utils.ts +var actionsCache = __toESM(require_cache4()); + +// src/git-utils.ts +var core8 = __toESM(require_core()); +var toolrunner2 = __toESM(require_toolrunner()); +var io3 = __toESM(require_io()); + // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; 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 semver4 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); var SafeArtifactUploadVersion = "2.20.3"; function isSafeArtifactUpload(codeQlVersion) { - return !codeQlVersion ? true : semver4.gte(codeQlVersion, SafeArtifactUploadVersion); + return !codeQlVersion ? true : semver3.gte(codeQlVersion, SafeArtifactUploadVersion); } // src/feature-flags.ts diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index 4ee32fe284..0972175ad7 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 semver4 = __toESM(require_semver2()); +var semver3 = __toESM(require_semver2()); // src/defaults.json var bundleVersion = "codeql-bundle-v2.23.8"; @@ -93397,41 +93397,13 @@ var actionsCache = __toESM(require_cache4()); var core6 = __toESM(require_core()); // src/git-utils.ts -var core8 = __toESM(require_core()); +var core7 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); -var semver2 = __toESM(require_semver2()); - -// src/logging.ts -var core7 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core7.debug, - info: core7.info, - warning: core7.warning, - error: core7.error, - isDebug: core7.isDebug, - startGroup: core7.startGroup, - endGroup: core7.endGroup - }; -} -function formatDuration(durationMs) { - if (durationMs < 1e3) { - return `${durationMs}ms`; - } - if (durationMs < 60 * 1e3) { - return `${(durationMs / 1e3).toFixed(1)}s`; - } - const minutes = Math.floor(durationMs / (60 * 1e3)); - const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); - return `${minutes}m${seconds}s`; -} - -// src/git-utils.ts var runGitCommand = async function(workingDirectory, args, customErrorMessage) { let stdout = ""; let stderr = ""; - core8.debug(`Running git command: git ${args.join(" ")}`); + core7.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -93451,7 +93423,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage) { if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core8.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core7.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -93596,7 +93568,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core8.debug( + core7.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -93621,6 +93593,31 @@ async function isAnalyzingDefaultBranch() { return currentRef === defaultBranch; } +// src/logging.ts +var core8 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core8.debug, + info: core8.info, + warning: core8.warning, + error: core8.error, + isDebug: core8.isDebug, + startGroup: core8.startGroup, + endGroup: core8.endGroup + }; +} +function formatDuration(durationMs) { + if (durationMs < 1e3) { + return `${durationMs}ms`; + } + if (durationMs < 60 * 1e3) { + return `${(durationMs / 1e3).toFixed(1)}s`; + } + const minutes = Math.floor(durationMs / (60 * 1e3)); + const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); + return `${minutes}m${seconds}s`; +} + // src/overlay-database-utils.ts var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.5"; var OVERLAY_BASE_DATABASE_MAX_UPLOAD_SIZE_MB = 7500; @@ -93683,7 +93680,7 @@ function computeChangedFiles(baseFileOids, overlayFileOids) { } // src/tools-features.ts -var semver3 = __toESM(require_semver2()); +var semver2 = __toESM(require_semver2()); function isSupportedToolsFeature(versionInfo, feature) { return !!versionInfo.features && versionInfo.features[feature]; } @@ -93991,7 +93988,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 (!semver3.valid(version)) { this.logger.warning( `Ignoring feature flag ${f} as it does not specify a valid CodeQL version.` ); @@ -94161,10 +94158,11 @@ 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 semver5 = __toESM(require_semver2()); +var semver4 = __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 a9cb1802a7..6f45c26374 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -4,7 +4,6 @@ import * as path from "path"; import * as github from "@actions/github"; import test, { ExecutionContext } from "ava"; import * as yaml from "js-yaml"; -import * as semver from "semver"; import * as sinon from "sinon"; import * as actionsUtil from "./actions-util"; @@ -994,7 +993,7 @@ const defaultOverlayDatabaseModeTestSetup: OverlayDatabaseModeTestSetup = { languages: [KnownLanguage.javascript], codeqlVersion: CODEQL_OVERLAY_MINIMUM_VERSION, gitRoot: "/some/git/root", - gitVersion: "2.40.0", // Default to a version that supports overlay analysis + gitVersion: gitUtils.GIT_MINIMUM_VERSION_FOR_OVERLAY, codeScanningConfig: {}, diskUsage: { numAvailableBytes: 50_000_000_000, @@ -1060,19 +1059,6 @@ const getOverlayDatabaseModeMacro = test.macro({ sinon.stub(gitUtils, "getGitRoot").resolves(setup.gitRoot); } - // Mock git version detection - stub gitVersionAtLeast directly - // since internal calls to getGitVersion won't be stubbed - if (setup.gitVersion !== undefined) { - sinon - .stub(gitUtils, "gitVersionAtLeast") - .callsFake(async (requiredVersion: string) => { - return semver.gte(setup.gitVersion!, requiredVersion); - }); - } else { - // When git version is undefined, gitVersionAtLeast should return false - sinon.stub(gitUtils, "gitVersionAtLeast").resolves(false); - } - // Mock default branch detection sinon .stub(gitUtils, "isAnalyzingDefaultBranch") @@ -1086,6 +1072,7 @@ const getOverlayDatabaseModeMacro = test.macro({ setup.buildMode, undefined, setup.codeScanningConfig, + setup.gitVersion, logger, ); diff --git a/src/config-utils.ts b/src/config-utils.ts index f9be6702e7..de72474cd8 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -3,6 +3,7 @@ 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 { @@ -22,14 +23,15 @@ import { parseUserConfig, UserConfig, } from "./config/db-config"; +import { addDiagnostic, makeTelemetryDiagnostic } from "./diagnostics"; import { shouldPerformDiffInformedAnalysis } from "./diff-informed-analysis-utils"; import * as errorMessages from "./error-messages"; import { Feature, FeatureEnablement } from "./feature-flags"; import { RepositoryProperties } from "./feature-flags/properties"; import { getGitRoot, + getGitVersionOrThrow, GIT_MINIMUM_VERSION_FOR_OVERLAY, - gitVersionAtLeast, isAnalyzingDefaultBranch, } from "./git-utils"; import { KnownLanguage, Language } from "./languages"; @@ -50,6 +52,7 @@ import { isDefined, checkDiskUsage, getCodeQLMemoryLimit, + getErrorMessage, } from "./util"; export * from "./config/db-config"; @@ -714,6 +717,7 @@ export async function getOverlayDatabaseMode( buildMode: BuildMode | undefined, ramInput: string | undefined, codeScanningConfig: UserConfig, + gitVersion: string | undefined, logger: Logger, ): Promise<{ overlayDatabaseMode: OverlayDatabaseMode; @@ -816,7 +820,15 @@ export async function getOverlayDatabaseMode( ); return nonOverlayAnalysis; } - if (!(await gitVersionAtLeast(GIT_MINIMUM_VERSION_FOR_OVERLAY, logger))) { + if (gitVersion === undefined) { + logger.warning( + `Cannot build an ${overlayDatabaseMode} database because ` + + "the Git version could not be determined. " + + "Falling back to creating a normal full database instead.", + ); + return nonOverlayAnalysis; + } + if (!semver.gte(gitVersion, 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}. ` + @@ -916,6 +928,15 @@ export async function initConfig( config.computedConfig["query-filters"] = []; } + let gitVersion: string | undefined = undefined; + try { + gitVersion = await getGitVersionOrThrow(); + logger.info(`Using Git version ${gitVersion}`); + await logGitVersionTelemetry(config, gitVersion); + } catch (e) { + logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); + } + // The choice of overlay database mode depends on the selection of languages // and queries, which in turn depends on the user config and the augmentation // properties. So we need to calculate the overlay database mode after the @@ -929,6 +950,7 @@ export async function initConfig( config.buildMode, inputs.ramInput, config.computedConfig, + gitVersion, logger, ); logger.info( @@ -1329,3 +1351,23 @@ export function getPrimaryAnalysisConfig(config: Config): AnalysisConfig { ? CodeScanning : CodeQuality; } + +/** Logs the Git version as a telemetry diagnostic. */ +async function logGitVersionTelemetry( + config: Config, + gitVersion: string, +): Promise { + if (config.languages.length > 0) { + addDiagnostic( + config, + // Arbitrarily choose the first language. We could also choose all languages, but that + // increases the risk of misinterpreting the data. + config.languages[0], + makeTelemetryDiagnostic( + "codeql-action/git-version-telemetry", + "Git version telemetry", + { gitVersion }, + ), + ); + } +} diff --git a/src/git-utils.test.ts b/src/git-utils.test.ts index d2072e7980..d00a7cba8f 100644 --- a/src/git-utils.test.ts +++ b/src/git-utils.test.ts @@ -7,12 +7,7 @@ import * as sinon from "sinon"; import * as actionsUtil from "./actions-util"; import * as gitUtils from "./git-utils"; -import { - getRecordingLogger, - LoggedMessage, - setupActionsVars, - setupTests, -} from "./testing-utils"; +import { setupActionsVars, setupTests } from "./testing-utils"; import { withTmpDir } from "./util"; setupTests(test); @@ -464,66 +459,3 @@ test("getGitVersionOrThrow throws when git command fails", async (t) => { runGitCommandStub.restore(); } }); - -test("gitVersionAtLeast returns true for version meeting requirement", async (t) => { - const runGitCommandStub = sinon - .stub(gitUtils as any, "runGitCommand") - .resolves("git version 2.40.0\n"); - - const messages: LoggedMessage[] = []; - const logger = getRecordingLogger(messages); - - try { - const result = await gitUtils.gitVersionAtLeast("2.38.0", logger); - t.true(result); - t.true( - messages.some( - (m) => - m.type === "debug" && - m.message === "Installed Git version is 2.40.0.", - ), - ); - } finally { - runGitCommandStub.restore(); - } -}); - -test("gitVersionAtLeast returns false for version not meeting requirement", async (t) => { - const runGitCommandStub = sinon - .stub(gitUtils as any, "runGitCommand") - .resolves("git version 2.30.0\n"); - - const messages: LoggedMessage[] = []; - const logger = getRecordingLogger(messages); - - try { - const result = await gitUtils.gitVersionAtLeast("2.38.0", logger); - t.false(result); - } finally { - runGitCommandStub.restore(); - } -}); - -test("gitVersionAtLeast returns false when version cannot be determined", async (t) => { - const runGitCommandStub = sinon - .stub(gitUtils as any, "runGitCommand") - .rejects(new Error("git not found")); - - const messages: LoggedMessage[] = []; - const logger = getRecordingLogger(messages); - - try { - const result = await gitUtils.gitVersionAtLeast("2.38.0", logger); - t.false(result); - t.true( - messages.some( - (m) => - m.type === "debug" && - typeof m.message === "string" && - m.message.includes("Could not determine Git version"), - ), - ); - } finally { - runGitCommandStub.restore(); - } -}); diff --git a/src/git-utils.ts b/src/git-utils.ts index 71a19a665b..6c097bf4bd 100644 --- a/src/git-utils.ts +++ b/src/git-utils.ts @@ -1,21 +1,13 @@ 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, getWorkflowEvent, getWorkflowEventName, } from "./actions-util"; -import type { Config } from "./config-utils"; -import { addDiagnostic, makeTelemetryDiagnostic } from "./diagnostics"; -import { Logger } from "./logging"; -import { - ConfigurationError, - getErrorMessage, - getRequiredEnvParam, -} from "./util"; +import { ConfigurationError, getRequiredEnvParam } from "./util"; /** * Minimum Git version required for overlay analysis. The `git ls-files --format` @@ -45,59 +37,6 @@ export async function getGitVersionOrThrow(): Promise { throw new Error(`Could not parse Git version from output: ${stdout.trim()}`); } -/** - * Logs the Git version as a telemetry diagnostic. Should be called once during - * initialization after the config is available. - * - * @param config The configuration that tells us where to store the diagnostic. - * @param logger A logger to use for logging errors. - */ -export async function logGitVersionTelemetry( - config: Config, - logger: Logger, -): Promise { - try { - const version = await getGitVersionOrThrow(); - if (config.languages.length > 0) { - addDiagnostic( - config, - // Arbitrarily choose the first language. We could also choose all languages, but that - // increases the risk of misinterpreting the data. - config.languages[0], - makeTelemetryDiagnostic( - "codeql-action/git-version-telemetry", - "Git version telemetry", - { gitVersion: version }, - ), - ); - } - } catch (e) { - logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); - } -} - -/** - * Checks if the installed Git version is at least the given required version. - * - * @param requiredVersion The minimum required Git version. - * @param logger A logger to use for logging. - * @returns `true` if the installed Git version is at least the required version, - * `false` otherwise. - */ -export async function gitVersionAtLeast( - requiredVersion: string, - logger: Logger, -): Promise { - try { - const version = await getGitVersionOrThrow(); - logger.debug(`Installed Git version is ${version}.`); - return semver.gte(version, requiredVersion); - } catch (e) { - logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); - return false; - } -} - export const runGitCommand = async function ( workingDirectory: string | undefined, args: string[], diff --git a/src/init-action.ts b/src/init-action.ts index c7b6066141..c363494566 100644 --- a/src/init-action.ts +++ b/src/init-action.ts @@ -38,7 +38,6 @@ import { import { EnvVar } from "./environment"; import { Feature, Features } from "./feature-flags"; import { loadPropertiesFromApi } from "./feature-flags/properties"; -import { logGitVersionTelemetry } from "./git-utils"; import { checkInstallPython311, checkPacksForOverlayCompatibility, @@ -435,9 +434,6 @@ async function run() { ); } - // Log Git version telemetry - await logGitVersionTelemetry(config, logger); - // Forward Go flags const goFlags = process.env["GOFLAGS"]; if (goFlags) { From 9c5588d006ff90f1e1046f4949a25a446ac91b58 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Wed, 17 Dec 2025 12:12:04 +0000 Subject: [PATCH 08/20] Remove unnecessary stub restores --- src/git-utils.test.ts | 166 ++++++++++++++++-------------------------- 1 file changed, 64 insertions(+), 102 deletions(-) diff --git a/src/git-utils.test.ts b/src/git-utils.test.ts index d00a7cba8f..ff36ac6685 100644 --- a/src/git-utils.test.ts +++ b/src/git-utils.test.ts @@ -315,27 +315,23 @@ test("getFileOidsUnderPath returns correct file mapping", async (t) => { "a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96_src/git-utils.ts", ); - try { - const result = await gitUtils.getFileOidsUnderPath("/fake/path"); - - t.deepEqual(result, { - "lib/git-utils.js": "30d998ded095371488be3a729eb61d86ed721a18", - "lib/git-utils.js.map": "d89514599a9a99f22b4085766d40af7b99974827", - "src/git-utils.ts": "a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96", - }); - - t.deepEqual(runGitCommandStub.firstCall.args, [ - "/fake/path", - ["ls-files", "--recurse-submodules", "--format=%(objectname)_%(path)"], - "Cannot list Git OIDs of tracked files.", - ]); - } finally { - runGitCommandStub.restore(); - } + const result = await gitUtils.getFileOidsUnderPath("/fake/path"); + + t.deepEqual(result, { + "lib/git-utils.js": "30d998ded095371488be3a729eb61d86ed721a18", + "lib/git-utils.js.map": "d89514599a9a99f22b4085766d40af7b99974827", + "src/git-utils.ts": "a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96", + }); + + t.deepEqual(runGitCommandStub.firstCall.args, [ + "/fake/path", + ["ls-files", "--recurse-submodules", "--format=%(objectname)_%(path)"], + "Cannot list Git OIDs of tracked files.", + ]); }); test("getFileOidsUnderPath handles quoted paths", async (t) => { - const runGitCommandStub = sinon + sinon .stub(gitUtils as any, "runGitCommand") .resolves( "30d998ded095371488be3a729eb61d86ed721a18_lib/normal-file.js\n" + @@ -343,34 +339,24 @@ test("getFileOidsUnderPath handles quoted paths", async (t) => { 'a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96_"lib/file\\twith\\ttabs.js"', ); - try { - const result = await gitUtils.getFileOidsUnderPath("/fake/path"); - - t.deepEqual(result, { - "lib/normal-file.js": "30d998ded095371488be3a729eb61d86ed721a18", - "lib/file with spaces.js": "d89514599a9a99f22b4085766d40af7b99974827", - "lib/file\twith\ttabs.js": "a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96", - }); - } finally { - runGitCommandStub.restore(); - } + const result = await gitUtils.getFileOidsUnderPath("/fake/path"); + + t.deepEqual(result, { + "lib/normal-file.js": "30d998ded095371488be3a729eb61d86ed721a18", + "lib/file with spaces.js": "d89514599a9a99f22b4085766d40af7b99974827", + "lib/file\twith\ttabs.js": "a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96", + }); }); test("getFileOidsUnderPath handles empty output", async (t) => { - const runGitCommandStub = sinon - .stub(gitUtils as any, "runGitCommand") - .resolves(""); - - try { - const result = await gitUtils.getFileOidsUnderPath("/fake/path"); - t.deepEqual(result, {}); - } finally { - runGitCommandStub.restore(); - } + sinon.stub(gitUtils as any, "runGitCommand").resolves(""); + + const result = await gitUtils.getFileOidsUnderPath("/fake/path"); + t.deepEqual(result, {}); }); test("getFileOidsUnderPath throws on unexpected output format", async (t) => { - const runGitCommandStub = sinon + sinon .stub(gitUtils as any, "runGitCommand") .resolves( "30d998ded095371488be3a729eb61d86ed721a18_lib/git-utils.js\n" + @@ -378,84 +364,60 @@ test("getFileOidsUnderPath throws on unexpected output format", async (t) => { "a47c11f5bfdca7661942d2c8f1b7209fb0dfdf96_src/git-utils.ts", ); - try { - await t.throwsAsync( - async () => { - await gitUtils.getFileOidsUnderPath("/fake/path"); - }, - { - instanceOf: Error, - message: 'Unexpected "git ls-files" output: invalid-line-format', - }, - ); - } finally { - runGitCommandStub.restore(); - } + await t.throwsAsync( + async () => { + await gitUtils.getFileOidsUnderPath("/fake/path"); + }, + { + instanceOf: Error, + message: 'Unexpected "git ls-files" output: invalid-line-format', + }, + ); }); test("getGitVersionOrThrow returns version for valid git output", async (t) => { - const runGitCommandStub = sinon - .stub(gitUtils as any, "runGitCommand") - .resolves("git version 2.40.0\n"); - - try { - const version = await gitUtils.getGitVersionOrThrow(); - t.is(version, "2.40.0"); - } finally { - runGitCommandStub.restore(); - } + sinon.stub(gitUtils as any, "runGitCommand").resolves("git version 2.40.0\n"); + + const version = await gitUtils.getGitVersionOrThrow(); + t.is(version, "2.40.0"); }); test("getGitVersionOrThrow throws for invalid git output", async (t) => { - const runGitCommandStub = sinon - .stub(gitUtils as any, "runGitCommand") - .resolves("invalid output"); - - try { - await t.throwsAsync( - async () => { - await gitUtils.getGitVersionOrThrow(); - }, - { - instanceOf: Error, - message: "Could not parse Git version from output: invalid output", - }, - ); - } finally { - runGitCommandStub.restore(); - } + sinon.stub(gitUtils as any, "runGitCommand").resolves("invalid output"); + + await t.throwsAsync( + async () => { + await gitUtils.getGitVersionOrThrow(); + }, + { + instanceOf: Error, + message: "Could not parse Git version from output: invalid output", + }, + ); }); test("getGitVersionOrThrow handles Windows-style git output", async (t) => { - const runGitCommandStub = sinon + sinon .stub(gitUtils as any, "runGitCommand") .resolves("git version 2.40.0.windows.1\n"); - try { - const version = await gitUtils.getGitVersionOrThrow(); - // Should extract just the major.minor.patch portion - t.is(version, "2.40.0"); - } finally { - runGitCommandStub.restore(); - } + const version = await gitUtils.getGitVersionOrThrow(); + // Should extract just the major.minor.patch portion + t.is(version, "2.40.0"); }); test("getGitVersionOrThrow throws when git command fails", async (t) => { - const runGitCommandStub = sinon + sinon .stub(gitUtils as any, "runGitCommand") .rejects(new Error("git not found")); - try { - await t.throwsAsync( - async () => { - await gitUtils.getGitVersionOrThrow(); - }, - { - instanceOf: Error, - message: "git not found", - }, - ); - } finally { - runGitCommandStub.restore(); - } + await t.throwsAsync( + async () => { + await gitUtils.getGitVersionOrThrow(); + }, + { + instanceOf: Error, + message: "git not found", + }, + ); }); From 056581e05b688858f2775ab9387e6b62616a09b1 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Wed, 17 Dec 2025 12:15:37 +0000 Subject: [PATCH 09/20] Update `makeTelemetryDiagnostic` doc --- src/diagnostics.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/diagnostics.ts b/src/diagnostics.ts index 65b413664c..493479e64a 100644 --- a/src/diagnostics.ts +++ b/src/diagnostics.ts @@ -191,10 +191,9 @@ export function flushDiagnostics(config: Config) { * for creating diagnostics that should only be sent to telemetry and not * displayed on the status page or CLI summary table. * - * @param id An identifier under which it makes sense to group this diagnostic message. - * @param name Display name for the ID. - * @param attributes Structured metadata about the diagnostic message. - * @returns Returns the new telemetry diagnostic message. + * @param id An identifier under which it makes sense to group this diagnostic message + * @param name Display name + * @param attributes Structured metadata */ export function makeTelemetryDiagnostic( id: string, From a13b404670f41e9eecd8918d99f3890336bb3d03 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Wed, 17 Dec 2025 17:27:14 +0000 Subject: [PATCH 10/20] Record both truncated and full git versions --- lib/analyze-action-post.js | 8 ++++---- lib/analyze-action.js | 8 ++++---- lib/autobuild-action.js | 8 ++++---- lib/init-action-post.js | 10 +++++----- lib/init-action.js | 30 +++++++++++++++++++++--------- lib/resolve-environment-action.js | 6 +++--- lib/setup-codeql-action.js | 12 +++++------- lib/start-proxy-action-post.js | 6 +++--- lib/start-proxy-action.js | 8 +++----- lib/upload-lib.js | 6 +++--- lib/upload-sarif-action-post.js | 10 ++++------ lib/upload-sarif-action.js | 10 +++++----- src/config-utils.test.ts | 10 +++++++--- src/config-utils.ts | 17 ++++++++++------- src/git-utils.test.ts | 19 +++++++++++++++---- src/git-utils.ts | 28 +++++++++++++++++++++++++--- 16 files changed, 121 insertions(+), 75 deletions(-) diff --git a/lib/analyze-action-post.js b/lib/analyze-action-post.js index 56d20cd939..113f20ceab 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 f73d56c729..a3bbbc4066 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 6c627fa4dc..1f30d6aaa0 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 86bb8b831e..64d27e85db 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 b780144e65..0369036ac3 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 69e614862c..abc71d65a8 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 b250357ad2..c8cc59796e 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 d5e137b3a8..e7769f5338 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 c65acde800..85c70a06bb 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 881a8ee6d8..704c6d8d67 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 7c65f41610..6d0ab14a89 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 0972175ad7..fe48e98573 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 6f45c26374..337eb85c59 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 de72474cd8..09583ddf07 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 ff36ac6685..618c12c425 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 6c097bf4bd..46bb5b8b1e 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()}`); } From a2c3c8e3e2ca42eb45df984521d33adbc3b9a966 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Wed, 17 Dec 2025 17:28:13 +0000 Subject: [PATCH 11/20] Bump log level for failing to parse git version --- lib/init-action.js | 2 +- src/config-utils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/init-action.js b/lib/init-action.js index 0369036ac3..bb695fa989 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -92984,7 +92984,7 @@ async function initConfig(features, inputs) { logger.info(`Using Git version ${gitVersion.fullVersion}`); await logGitVersionTelemetry(config, gitVersion); } catch (e) { - logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); + logger.warning(`Could not determine Git version: ${getErrorMessage(e)}`); } const { overlayDatabaseMode, useOverlayDatabaseCaching } = await getOverlayDatabaseMode( inputs.codeql, diff --git a/src/config-utils.ts b/src/config-utils.ts index 09583ddf07..ed19735711 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -934,7 +934,7 @@ export async function initConfig( logger.info(`Using Git version ${gitVersion.fullVersion}`); await logGitVersionTelemetry(config, gitVersion); } catch (e) { - logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`); + logger.warning(`Could not determine Git version: ${getErrorMessage(e)}`); } // The choice of overlay database mode depends on the selection of languages From 003ddaeef560d844ae408a91b7339c8e804d098a Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Thu, 18 Dec 2025 12:35:06 +0000 Subject: [PATCH 12/20] Avoid non-determinism in PR checks due to overlay FFs --- .github/workflows/codescanning-config-cli.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/codescanning-config-cli.yml b/.github/workflows/codescanning-config-cli.yml index 2f4b67cc1f..fe6d976f09 100644 --- a/.github/workflows/codescanning-config-cli.yml +++ b/.github/workflows/codescanning-config-cli.yml @@ -6,6 +6,9 @@ env: # Diff informed queries add an additional query filter which is not yet # taken into account by these tests. CODEQL_ACTION_DIFF_INFORMED_QUERIES: false + # Enable overlay to ensure stability around the exclude-from-incremental query filter. + CODEQL_ACTION_OVERLAY_ANALYSIS: true + CODEQL_ACTION_OVERLAY_ANALYSIS_JAVASCRIPT: true on: push: From 358a55e232d0152d14b1529dcdde326941190c91 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Thu, 18 Dec 2025 12:52:13 +0000 Subject: [PATCH 13/20] Throw in test mode if can't compute git version --- lib/init-action.js | 5 ++++- src/config-utils.ts | 5 +++++ src/git-utils.ts | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/init-action.js b/lib/init-action.js index bb695fa989..d1962bdb9b 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -91565,7 +91565,7 @@ async function getGitVersionOrThrow() { "Failed to get git version." ); const match = stdout.match(/^git version ((\d+\.\d+\.\d+).*)$/); - if (match?.[1]) { + if (match?.[1] && match?.[2]) { return new GitVersionInfo(match[2], match[1]); } throw new Error(`Could not parse Git version from output: ${stdout.trim()}`); @@ -92985,6 +92985,9 @@ async function initConfig(features, inputs) { await logGitVersionTelemetry(config, gitVersion); } catch (e) { logger.warning(`Could not determine Git version: ${getErrorMessage(e)}`); + if (isInTestMode()) { + throw e; + } } const { overlayDatabaseMode, useOverlayDatabaseCaching } = await getOverlayDatabaseMode( inputs.codeql, diff --git a/src/config-utils.ts b/src/config-utils.ts index ed19735711..0ae1ca77e3 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -53,6 +53,7 @@ import { checkDiskUsage, getCodeQLMemoryLimit, getErrorMessage, + isInTestMode, } from "./util"; export * from "./config/db-config"; @@ -935,6 +936,10 @@ export async function initConfig( await logGitVersionTelemetry(config, gitVersion); } catch (e) { logger.warning(`Could not determine Git version: ${getErrorMessage(e)}`); + // Throw the error in test mode so it's more visible. + if (isInTestMode()) { + throw e; + } } // The choice of overlay database mode depends on the selection of languages diff --git a/src/git-utils.ts b/src/git-utils.ts index 46bb5b8b1e..c2be2ec659 100644 --- a/src/git-utils.ts +++ b/src/git-utils.ts @@ -53,7 +53,7 @@ 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+).*)$/); - if (match?.[1]) { + if (match?.[1] && match?.[2]) { return new GitVersionInfo(match[2], match[1]); } throw new Error(`Could not parse Git version from output: ${stdout.trim()}`); From cec3cc57827755faed13f01dc96801a5a238d1b6 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Thu, 18 Dec 2025 12:52:30 +0000 Subject: [PATCH 14/20] Trim git version output --- lib/init-action.js | 2 +- src/git-utils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/init-action.js b/lib/init-action.js index d1962bdb9b..1143c6e7a2 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -91564,7 +91564,7 @@ async function getGitVersionOrThrow() { ["--version"], "Failed to get git version." ); - const match = stdout.match(/^git version ((\d+\.\d+\.\d+).*)$/); + const match = stdout.trim().match(/^git version ((\d+\.\d+\.\d+).*)$/); if (match?.[1] && match?.[2]) { return new GitVersionInfo(match[2], match[1]); } diff --git a/src/git-utils.ts b/src/git-utils.ts index c2be2ec659..7902f845f4 100644 --- a/src/git-utils.ts +++ b/src/git-utils.ts @@ -52,7 +52,7 @@ 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.trim().match(/^git version ((\d+\.\d+\.\d+).*)$/); if (match?.[1] && match?.[2]) { return new GitVersionInfo(match[2], match[1]); } From 948c7fbf11e781ea0f4d7b5d2793fcc48fceef9a Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Thu, 18 Dec 2025 13:01:00 +0000 Subject: [PATCH 15/20] Test mode: Tolerate missing git binary --- lib/init-action.js | 2 +- src/config-utils.ts | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/init-action.js b/lib/init-action.js index 1143c6e7a2..cb447eeb6b 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -92985,7 +92985,7 @@ async function initConfig(features, inputs) { await logGitVersionTelemetry(config, gitVersion); } catch (e) { logger.warning(`Could not determine Git version: ${getErrorMessage(e)}`); - if (isInTestMode()) { + if (isInTestMode() && await isBinaryAccessible("git", logger)) { throw e; } } diff --git a/src/config-utils.ts b/src/config-utils.ts index 0ae1ca77e3..d65fffdb2f 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -54,6 +54,7 @@ import { getCodeQLMemoryLimit, getErrorMessage, isInTestMode, + isBinaryAccessible, } from "./util"; export * from "./config/db-config"; @@ -936,8 +937,10 @@ export async function initConfig( await logGitVersionTelemetry(config, gitVersion); } catch (e) { logger.warning(`Could not determine Git version: ${getErrorMessage(e)}`); - // Throw the error in test mode so it's more visible. - if (isInTestMode()) { + // Throw the error in test mode so it's more visible, but tolerate cases + // where the git binary is not present, for example because we're running + // in a Docker container. + if (isInTestMode() && (await isBinaryAccessible("git", logger))) { throw e; } } From ff84c6f23c0f711f22ca26035844d92a81c1c7c3 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Thu, 18 Dec 2025 13:03:52 +0000 Subject: [PATCH 16/20] Improve comment --- src/git-utils.test.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/git-utils.test.ts b/src/git-utils.test.ts index 618c12c425..1c96571c27 100644 --- a/src/git-utils.test.ts +++ b/src/git-utils.test.ts @@ -1,4 +1,5 @@ import * as fs from "fs"; +import * as os from "os"; import * as path from "path"; import * as core from "@actions/core"; @@ -376,7 +377,9 @@ 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"); + sinon + .stub(gitUtils as any, "runGitCommand") + .resolves(`git version 2.40.0${os.EOL}`); const version = await gitUtils.getGitVersionOrThrow(); t.is(version.truncatedVersion, "2.40.0"); @@ -403,7 +406,7 @@ test("getGitVersionOrThrow handles Windows-style git output", async (t) => { .resolves("git version 2.40.0.windows.1"); const version = await gitUtils.getGitVersionOrThrow(); - // Should extract just the major.minor.patch portion + // The truncated version should contain just the major.minor.patch portion t.is(version.truncatedVersion, "2.40.0"); t.is(version.fullVersion, "2.40.0.windows.1"); }); From a7e88a44f8ddbd93a8a7d3c158e641a3e4e5d26d Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Thu, 18 Dec 2025 13:06:44 +0000 Subject: [PATCH 17/20] Only enable overlay for the code scanning suite --- .github/workflows/codescanning-config-cli.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codescanning-config-cli.yml b/.github/workflows/codescanning-config-cli.yml index fe6d976f09..cbac3a8a91 100644 --- a/.github/workflows/codescanning-config-cli.yml +++ b/.github/workflows/codescanning-config-cli.yml @@ -6,9 +6,11 @@ env: # Diff informed queries add an additional query filter which is not yet # taken into account by these tests. CODEQL_ACTION_DIFF_INFORMED_QUERIES: false - # Enable overlay to ensure stability around the exclude-from-incremental query filter. + # Specify overlay enablement manually to ensure stability around the exclude-from-incremental + # query filter. Here we only enable for the default code scanning suite. CODEQL_ACTION_OVERLAY_ANALYSIS: true - CODEQL_ACTION_OVERLAY_ANALYSIS_JAVASCRIPT: true + CODEQL_ACTION_OVERLAY_ANALYSIS_JAVASCRIPT: false + CODEQL_ACTION_OVERLAY_ANALYSIS_CODE_SCANNING_JAVASCRIPT: true on: push: From 95246ce0191344386c3e0cdafb6a3ef2d82ce8dc Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Thu, 18 Dec 2025 14:05:12 +0000 Subject: [PATCH 18/20] Prefer explicit env var to binary accessibility check --- .github/workflows/__global-proxy.yml | 1 + lib/init-action.js | 2 +- pr-checks/checks/global-proxy.yml | 1 + src/config-utils.ts | 12 +++++++----- src/environment.ts | 6 ++++++ src/git-utils.ts | 3 --- 6 files changed, 16 insertions(+), 9 deletions(-) diff --git a/.github/workflows/__global-proxy.yml b/.github/workflows/__global-proxy.yml index 35f1f08fc9..3987966496 100644 --- a/.github/workflows/__global-proxy.yml +++ b/.github/workflows/__global-proxy.yml @@ -76,6 +76,7 @@ jobs: - uses: ./../action/analyze env: https_proxy: http://squid-proxy:3128 + CODEQL_ACTION_TOLERATE_MISSING_GIT_VERSION: true CODEQL_ACTION_TEST_MODE: true container: image: ubuntu:22.04 diff --git a/lib/init-action.js b/lib/init-action.js index cb447eeb6b..9941f85b57 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -92985,7 +92985,7 @@ async function initConfig(features, inputs) { await logGitVersionTelemetry(config, gitVersion); } catch (e) { logger.warning(`Could not determine Git version: ${getErrorMessage(e)}`); - if (isInTestMode() && await isBinaryAccessible("git", logger)) { + if (isInTestMode() && process.env.CODEQL_ACTION_TOLERATE_MISSING_GIT_VERSION !== "true") { throw e; } } diff --git a/pr-checks/checks/global-proxy.yml b/pr-checks/checks/global-proxy.yml index 1d64125748..b965eec3b0 100644 --- a/pr-checks/checks/global-proxy.yml +++ b/pr-checks/checks/global-proxy.yml @@ -23,6 +23,7 @@ services: - 3128:3128 env: https_proxy: http://squid-proxy:3128 + CODEQL_ACTION_TOLERATE_MISSING_GIT_VERSION: true steps: - uses: ./../action/init with: diff --git a/src/config-utils.ts b/src/config-utils.ts index d65fffdb2f..406a63a6fc 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -54,7 +54,6 @@ import { getCodeQLMemoryLimit, getErrorMessage, isInTestMode, - isBinaryAccessible, } from "./util"; export * from "./config/db-config"; @@ -937,10 +936,13 @@ export async function initConfig( await logGitVersionTelemetry(config, gitVersion); } catch (e) { logger.warning(`Could not determine Git version: ${getErrorMessage(e)}`); - // Throw the error in test mode so it's more visible, but tolerate cases - // where the git binary is not present, for example because we're running - // in a Docker container. - if (isInTestMode() && (await isBinaryAccessible("git", logger))) { + // Throw the error in test mode so it's more visible, unless the environment + // variable is set to tolerate this, for example because we're running in a + // Docker container where git may not be available. + if ( + isInTestMode() && + process.env.CODEQL_ACTION_TOLERATE_MISSING_GIT_VERSION !== "true" + ) { throw e; } } diff --git a/src/environment.ts b/src/environment.ts index 1d33c68a67..16617c647b 100644 --- a/src/environment.ts +++ b/src/environment.ts @@ -129,4 +129,10 @@ export enum EnvVar { * the workflow is valid and validation is not necessary. */ SKIP_WORKFLOW_VALIDATION = "CODEQL_ACTION_SKIP_WORKFLOW_VALIDATION", + + /** + * Whether to tolerate failure to determine the git version (only applicable in test mode). + * Intended for use in environments where git may not be installed, such as Docker containers. + */ + TOLERATE_MISSING_GIT_VERSION = "CODEQL_ACTION_TOLERATE_MISSING_GIT_VERSION", } diff --git a/src/git-utils.ts b/src/git-utils.ts index 7902f845f4..eb9d8c695e 100644 --- a/src/git-utils.ts +++ b/src/git-utils.ts @@ -40,9 +40,6 @@ export class GitVersionInfo { /** * Gets the version of Git installed on the system and throws an error if * the version cannot be determined. - * - * @returns The Git version string (e.g., "2.40.0"). - * @throws {Error} if the version could not be determined. */ export async function getGitVersionOrThrow(): Promise { const stdout = await runGitCommand( From 8b428c0d4c4ca79da1ac3f1d8425b8aeb627fa68 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Thu, 18 Dec 2025 14:34:50 +0000 Subject: [PATCH 19/20] Use `EnvVar` --- lib/init-action.js | 2 +- src/config-utils.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/init-action.js b/lib/init-action.js index 978992de45..5cf78ad20c 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -92986,7 +92986,7 @@ async function initConfig(features, inputs) { await logGitVersionTelemetry(config, gitVersion); } catch (e) { logger.warning(`Could not determine Git version: ${getErrorMessage(e)}`); - if (isInTestMode() && process.env.CODEQL_ACTION_TOLERATE_MISSING_GIT_VERSION !== "true") { + if (isInTestMode() && process.env["CODEQL_ACTION_TOLERATE_MISSING_GIT_VERSION" /* TOLERATE_MISSING_GIT_VERSION */] !== "true") { throw e; } } diff --git a/src/config-utils.ts b/src/config-utils.ts index 406a63a6fc..b91caaac95 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -55,6 +55,7 @@ import { getErrorMessage, isInTestMode, } from "./util"; +import { EnvVar } from "./environment"; export * from "./config/db-config"; @@ -941,7 +942,7 @@ export async function initConfig( // Docker container where git may not be available. if ( isInTestMode() && - process.env.CODEQL_ACTION_TOLERATE_MISSING_GIT_VERSION !== "true" + process.env[EnvVar.TOLERATE_MISSING_GIT_VERSION] !== "true" ) { throw e; } From 3b6fef64d5ef5288d6b13c7ea69fdd2b0d909080 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Thu, 18 Dec 2025 14:39:01 +0000 Subject: [PATCH 20/20] Fix import order --- src/config-utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config-utils.ts b/src/config-utils.ts index b91caaac95..5f32406ba1 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -24,6 +24,7 @@ import { } from "./config/db-config"; import { addDiagnostic, makeTelemetryDiagnostic } from "./diagnostics"; import { shouldPerformDiffInformedAnalysis } from "./diff-informed-analysis-utils"; +import { EnvVar } from "./environment"; import * as errorMessages from "./error-messages"; import { Feature, FeatureEnablement } from "./feature-flags"; import { RepositoryProperties } from "./feature-flags/properties"; @@ -55,7 +56,6 @@ import { getErrorMessage, isInTestMode, } from "./util"; -import { EnvVar } from "./environment"; export * from "./config/db-config";