Merge remote-tracking branch 'origin/main' into mbg/start-proxy/deprecate-fallback

This commit is contained in:
Michael B. Gale
2026-10-14 13:56:57 +01:00
17 changed files with 625 additions and 303 deletions

283
lib/entry-points.js generated
View File

@@ -21656,8 +21656,8 @@ var require_core = __commonJS({
exports2.warning = warning14;
exports2.notice = notice;
exports2.info = info8;
exports2.startGroup = startGroup4;
exports2.endGroup = endGroup4;
exports2.startGroup = startGroup3;
exports2.endGroup = endGroup3;
exports2.group = group;
exports2.saveState = saveState3;
exports2.getState = getState3;
@@ -21755,20 +21755,20 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
function info8(message) {
process.stdout.write(message + os7.EOL);
}
function startGroup4(name) {
function startGroup3(name) {
(0, command_1.issue)("group", name);
}
function endGroup4() {
function endGroup3() {
(0, command_1.issue)("endgroup");
}
function group(name, fn) {
return __awaiter2(this, void 0, void 0, function* () {
startGroup4(name);
startGroup3(name);
let result;
try {
result = yield fn();
} finally {
endGroup4();
endGroup3();
}
return result;
});
@@ -100013,7 +100013,7 @@ var require_package = __commonJS({
"node_modules/@actions/cache/package.json"(exports2, module2) {
module2.exports = {
name: "@actions/cache",
version: "5.2.0",
version: "5.3.0",
preview: true,
description: "Actions cache lib",
keywords: [
@@ -100050,22 +100050,22 @@ var require_package = __commonJS({
url: "https://github.com/actions/toolkit/issues"
},
dependencies: {
"@actions/core": "^2.0.0",
"@actions/core": "^2.0.3",
"@actions/exec": "^2.0.0",
"@actions/glob": "^0.5.1",
"@protobuf-ts/runtime-rpc": "^2.11.1",
"@actions/http-client": "^3.0.2",
"@actions/io": "^2.0.0",
"@azure/abort-controller": "^1.1.0",
"@azure/core-rest-pipeline": "^1.22.0",
"@azure/storage-blob": "^12.29.1",
"@azure/core-rest-pipeline": "^1.25.0",
"@azure/storage-blob": "^12.34.0",
"@protobuf-ts/runtime-rpc": "^2.11.1",
semver: "^6.3.1"
},
devDependencies: {
"@types/node": "^24.1.0",
"@types/semver": "^6.0.0",
"@protobuf-ts/plugin": "^2.9.4",
typescript: "^5.2.2"
"@protobuf-ts/plugin": "^2.11.1",
"@types/node": "^24.13.6",
"@types/semver": "^6.2.7",
typescript: "^5.9.3"
},
overrides: {
"uri-js": "npm:uri-js-replace@^1.0.1",
@@ -105592,6 +105592,7 @@ var require_tar = __commonJS({
exports2.listTar = listTar;
exports2.extractTar = extractTar3;
exports2.createTar = createTar;
var core29 = __importStar2(require_core());
var exec_1 = require_exec();
var io9 = __importStar2(require_io());
var fs_1 = require("fs");
@@ -105644,7 +105645,7 @@ var require_tar = __commonJS({
args.push("--posix", "-cf", BSD_TAR_ZSTD ? tarFile : cacheFileName.replace(new RegExp(`\\${path30.sep}`, "g"), "/"), "--exclude", BSD_TAR_ZSTD ? tarFile : cacheFileName.replace(new RegExp(`\\${path30.sep}`, "g"), "/"), "-P", "-C", workingDirectory.replace(new RegExp(`\\${path30.sep}`, "g"), "/"), "--files-from", constants_1.ManifestFilename);
break;
case "extract":
args.push("-xf", BSD_TAR_ZSTD ? tarFile : archivePath.replace(new RegExp(`\\${path30.sep}`, "g"), "/"), "-P", "-C", workingDirectory.replace(new RegExp(`\\${path30.sep}`, "g"), "/"));
args.push("-xf", BSD_TAR_ZSTD ? tarFile : archivePath.replace(new RegExp(`\\${path30.sep}`, "g"), "/"), "-P", "-C", BSD_TAR_ZSTD ? quoteAbsolutePath(workingDirectory) : workingDirectory.replace(new RegExp(`\\${path30.sep}`, "g"), "/"));
break;
case "list":
args.push("-tf", BSD_TAR_ZSTD ? tarFile : archivePath.replace(new RegExp(`\\${path30.sep}`, "g"), "/"), "-P");
@@ -105675,16 +105676,19 @@ var require_tar = __commonJS({
} else {
args = [[...tarArgs].join(" "), [...compressionArgs].join(" ")];
}
if (BSD_TAR_ZSTD) {
return args;
}
return [args.join(" ")];
return {
commands: BSD_TAR_ZSTD ? args : [args.join(" ")],
requiresTempDirectory: BSD_TAR_ZSTD && type !== "create"
};
});
}
function getWorkingDirectory() {
var _a6;
return (_a6 = process.env["GITHUB_WORKSPACE"]) !== null && _a6 !== void 0 ? _a6 : process.cwd();
}
function quoteAbsolutePath(filePath) {
return `"${path30.resolve(filePath).replace(new RegExp(`\\${path30.sep}`, "g"), "/")}"`;
}
function getDecompressionProgram(tarPath, compressionMethod, archivePath) {
return __awaiter2(this, void 0, void 0, function* () {
const BSD_TAR_ZSTD = tarPath.type === constants_1.ArchiveToolType.BSD && compressionMethod !== constants_1.CompressionMethod.Gzip && IS_WINDOWS;
@@ -105693,17 +105697,13 @@ var require_tar = __commonJS({
return BSD_TAR_ZSTD ? [
"zstd -d --long=30 --force -o",
constants_1.TarFilename,
archivePath.replace(new RegExp(`\\${path30.sep}`, "g"), "/")
quoteAbsolutePath(archivePath)
] : [
"--use-compress-program",
IS_WINDOWS ? '"zstd -d --long=30"' : "unzstd --long=30"
];
case constants_1.CompressionMethod.ZstdWithoutLong:
return BSD_TAR_ZSTD ? [
"zstd -d --force -o",
constants_1.TarFilename,
archivePath.replace(new RegExp(`\\${path30.sep}`, "g"), "/")
] : ["--use-compress-program", IS_WINDOWS ? '"zstd -d"' : "unzstd"];
return BSD_TAR_ZSTD ? ["zstd -d --force -o", constants_1.TarFilename, quoteAbsolutePath(archivePath)] : ["--use-compress-program", IS_WINDOWS ? '"zstd -d"' : "unzstd"];
default:
return ["-z"];
}
@@ -105748,24 +105748,39 @@ var require_tar = __commonJS({
}
});
}
function execReadCommands(archivePath, compressionMethod, type) {
return __awaiter2(this, void 0, void 0, function* () {
const { commands, requiresTempDirectory } = yield getCommands(compressionMethod, type, archivePath);
const tempDirectory = requiresTempDirectory ? yield utils.createTempDirectory() : void 0;
try {
yield execCommands(commands, tempDirectory);
} finally {
if (tempDirectory) {
try {
yield io9.rmRF(tempDirectory);
} catch (error3) {
core29.debug(`Failed to delete temporary tar directory: ${error3}`);
}
}
}
});
}
function listTar(archivePath, compressionMethod) {
return __awaiter2(this, void 0, void 0, function* () {
const commands = yield getCommands(compressionMethod, "list", archivePath);
yield execCommands(commands);
yield execReadCommands(archivePath, compressionMethod, "list");
});
}
function extractTar3(archivePath, compressionMethod) {
return __awaiter2(this, void 0, void 0, function* () {
const workingDirectory = getWorkingDirectory();
yield io9.mkdirP(workingDirectory);
const commands = yield getCommands(compressionMethod, "extract", archivePath);
yield execCommands(commands);
yield execReadCommands(archivePath, compressionMethod, "extract");
});
}
function createTar(archiveFolder, sourceDirectories, compressionMethod) {
return __awaiter2(this, void 0, void 0, function* () {
(0, fs_1.writeFileSync)(path30.join(archiveFolder, constants_1.ManifestFilename), sourceDirectories.join("\n"));
const commands = yield getCommands(compressionMethod, "create");
const { commands } = yield getCommands(compressionMethod, "create");
yield execCommands(commands, archiveFolder);
});
}
@@ -107346,6 +107361,12 @@ var require_follow_redirects = __commonJS({
RedirectableRequest.prototype._sanitizeOptions = function(options) {
if (!options.headers) {
options.headers = {};
} else if (Array.isArray(options.headers)) {
var headerList = options.headers;
options.headers = {};
for (var i = 0; i < headerList.length; i += 2) {
options.headers[headerList[i]] = headerList[i + 1];
}
}
if (!isArray2(options.sensitiveHeaders)) {
options.sensitiveHeaders = [];
@@ -107620,7 +107641,7 @@ var require_follow_redirects = __commonJS({
return URL2 && value instanceof URL2;
}
function escapeRegex(regex) {
return regex.replace(/[\]\\/()*+?.$]/g, "\\$&");
return regex.replace(/[[\]\\/()*+?.^$|]/g, "\\$&");
}
module2.exports = wrap({ http, https: https3 });
module2.exports.wrap = wrap;
@@ -145651,22 +145672,22 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
process.stdout.write(message + os7.EOL);
}
exports2.info = info8;
function startGroup4(name) {
function startGroup3(name) {
(0, command_1.issue)("group", name);
}
exports2.startGroup = startGroup4;
function endGroup4() {
exports2.startGroup = startGroup3;
function endGroup3() {
(0, command_1.issue)("endgroup");
}
exports2.endGroup = endGroup4;
exports2.endGroup = endGroup3;
function group(name, fn) {
return __awaiter2(this, void 0, void 0, function* () {
startGroup4(name);
startGroup3(name);
let result;
try {
result = yield fn();
} finally {
endGroup4();
endGroup3();
}
return result;
});
@@ -166063,6 +166084,11 @@ var toolrunner = __toESM(require_toolrunner());
var github = __toESM(require_github());
var io2 = __toESM(require_io());
// src/config/action-config.ts
function hasConfigKey(config, key) {
return config[key] !== void 0;
}
// src/environment.ts
var core = __toESM(require_core());
function getRequiredEnvVar(env, paramName) {
@@ -168107,7 +168133,7 @@ function readBlockScalar(state, parentIndent, props) {
state.position = linePosition + column;
throwError(state, "tab characters must not be used in indentation");
}
if (column < maxLeadingIndent) {
if (column >= parentIndent && column < maxLeadingIndent) {
state.position = linePosition + column;
throwError(state, "bad indentation of a mapping entry");
}
@@ -168317,13 +168343,16 @@ function readBlockMapping(state, nodeIndent, flowIndent, props) {
ch = state.input.charCodeAt(++state.position);
if (!isWsOrEolOrEnd(ch)) throwError(state, "a whitespace character is expected after the key-value separator within a block mapping");
if (!mappingOpened) {
restoreState(state, beforeKey);
addMappingEvent(state, beforeKey.position, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.BLOCK);
state.events.splice(beforeKey.eventsLength, 0, {
type: EVENT_ID.MAPPING,
start: beforeKey.position,
anchorStart: props.anchorStart,
anchorEnd: props.anchorEnd,
tagStart: props.tagStart,
tagEnd: props.tagEnd,
style: COLLECTION_STYLE.BLOCK
});
mappingOpened = true;
parseNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true);
ch = state.input.charCodeAt(state.position);
while (isWhiteSpace(ch)) ch = state.input.charCodeAt(++state.position);
state.position++;
}
detected = true;
atExplicitKey = false;
@@ -170172,27 +170201,33 @@ function getWorkflowEvent(env = getEnv()) {
);
}
}
async function printDebugLogs(config) {
async function printDebugLogs(logger2, config) {
if (!hasConfigKey(config, "languages") || !hasConfigKey(config, "dbLocation")) {
logger2.debug(
`Not printing debug logs, because the configuration does not include the 'languages' or 'dbLocation' fields.`
);
return;
}
for (const language of config.languages) {
const databaseDirectory = getCodeQLDatabasePath(config, language);
const logsDirectory = path2.join(databaseDirectory, "log");
if (!doesDirectoryExist(logsDirectory)) {
core4.info(`Directory ${logsDirectory} does not exist.`);
logger2.info(`Directory ${logsDirectory} does not exist.`);
continue;
}
const walkLogFiles = (dir) => {
const entries = fs2.readdirSync(dir, { withFileTypes: true });
if (entries.length === 0) {
core4.info(`No debug logs found at directory ${logsDirectory}.`);
logger2.info(`No debug logs found at directory ${logsDirectory}.`);
}
for (const entry of entries) {
if (entry.isFile()) {
const absolutePath = path2.resolve(dir, entry.name);
core4.startGroup(
logger2.startGroup(
`CodeQL Debug Logs - ${language} - ${entry.name} from file at path ${absolutePath}`
);
process.stdout.write(fs2.readFileSync(absolutePath));
core4.endGroup();
logger2.info(fs2.readFileSync(absolutePath, "utf-8"));
logger2.endGroup();
} else if (entry.isDirectory()) {
walkLogFiles(path2.resolve(dir, entry.name));
}
@@ -171381,9 +171416,14 @@ function getAddressString(address) {
}
// src/status-report.ts
var ACTION_DISPLAY_NAMES = {
["finish" /* Analyze */]: "analyze",
["init-post" /* InitPost */]: "init post"
};
function getDisplayActionName(actionName) {
if (actionName === "finish" /* Analyze */) {
return "analyze";
const displayName = ACTION_DISPLAY_NAMES[actionName];
if (displayName !== void 0) {
return displayName;
}
return actionName;
}
@@ -175033,20 +175073,47 @@ function getLocalConfig(logger2, configFile, validateConfig) {
function getPathToParsedConfigFile(tempDir) {
return path11.join(tempDir, "config");
}
async function saveConfig(config, logger2) {
function getPathToFailedConfigFile(tempDir) {
return path11.join(tempDir, "failed-config");
}
function saveConfigFile(logger2, configFilePath, config) {
const configString = JSON.stringify(config);
const configFile = getPathToParsedConfigFile(config.tempDir);
fs10.mkdirSync(path11.dirname(configFile), { recursive: true });
fs10.writeFileSync(configFile, configString, "utf8");
fs10.mkdirSync(path11.dirname(configFilePath), { recursive: true });
fs10.writeFileSync(configFilePath, configString, "utf8");
logger2.debug("Saved config:");
logger2.debug(configString);
}
async function getConfig(tempDir, logger2) {
const configFile = getPathToParsedConfigFile(tempDir);
if (!fs10.existsSync(configFile)) {
async function saveConfig(config, logger2) {
const configFile = getPathToParsedConfigFile(config.tempDir);
saveConfigFile(logger2, configFile, config);
}
function saveAbortedInitConfig(action, config) {
if (action.name !== "init" /* Init */) {
throw new Error(
`Internal error: 'saveAbortedInitConfig' should only be called by '${"init" /* Init */}', but was called by '${action.name}'.`
);
}
const failedConfig = {
version: config.version,
tempDir: config.tempDir,
codeQLCmd: config.codeQLCmd,
debugMode: config.debugMode,
gitHubVersion: config.gitHubVersion,
languages: config.languages,
analysisKinds: config.analysisKinds
};
action.logger.debug(`Saving config for failed init step.`);
saveConfigFile(
action.logger,
getPathToFailedConfigFile(config.tempDir),
failedConfig
);
}
function readConfigFile(logger2, configFilePath) {
if (!fs10.existsSync(configFilePath)) {
return void 0;
}
const configString = fs10.readFileSync(configFile, "utf8");
const configString = fs10.readFileSync(configFilePath, "utf8");
logger2.debug("Loaded config:");
logger2.debug(configString);
const config = JSON.parse(configString);
@@ -175067,6 +175134,18 @@ async function getConfig(tempDir, logger2) {
}
return config;
}
async function getConfig(tempDir, logger2) {
const configFile = getPathToParsedConfigFile(tempDir);
return readConfigFile(logger2, configFile);
}
function getAbortedInitConfig(action, tempDir) {
if (action.name !== "init-post" /* InitPost */) {
throw new Error(
`Internal error: 'getAbortedInitConfig' should only be called by '${"init-post" /* InitPost */}', but was called by '${action.name}'.`
);
}
return readConfigFile(action.logger, getPathToFailedConfigFile(tempDir));
}
async function generateRegistries(registriesInput, tempDir, logger2) {
const registries = parseRegistries(registriesInput);
let registriesAuthTokens;
@@ -186494,6 +186573,15 @@ async function run3(actionState) {
}
await checkInstallPython311(config.languages, codeql);
} catch (unwrappedError) {
if (config !== void 0) {
try {
saveAbortedInitConfig(actionState, config);
} catch (configSaveError) {
logger2.warning(
`Unable to save configuration for '${"init-post" /* InitPost */}' step: ${getErrorMessage(configSaveError)}`
);
}
}
const error3 = wrapError(unwrappedError);
core19.setFailed(error3.message);
const statusReportBase = await createStatusReportBase(
@@ -186922,14 +187010,14 @@ async function uploadFailureInfo(uploadAllAvailableDebugArtifacts, printDebugLog
);
}
}
if (config.debugMode) {
if (config.debugMode && hasConfigKey(config, "dbLocation")) {
logger2.info(
"Debug mode is on. Uploading available database bundles and logs as Actions debugging artifacts..."
);
await uploadAllAvailableDebugArtifacts(codeql, config, logger2);
await printDebugLogs2(config);
await printDebugLogs2(logger2, config);
}
if (isSelfHostedRunner()) {
if (isSelfHostedRunner() && config.dbLocation) {
try {
fs30.rmSync(config.dbLocation, {
recursive: true,
@@ -186944,6 +187032,10 @@ async function uploadFailureInfo(uploadAllAvailableDebugArtifacts, printDebugLog
`Failed to clean up database cluster directory ${config.dbLocation}. Details: ${e}`
);
}
} else if (config.dbLocation === void 0) {
logger2.debug(
"Skipping cleanup of database cluster directory since the configuration does not include a database path."
);
} else {
logger2.debug(
"Skipping cleanup of database cluster directory since we are running on a GitHub-hosted runner which will be automatically cleaned up."
@@ -186967,6 +187059,11 @@ function isConclusiveJobStatus(jobStatus) {
async function recordOverlayStatus(codeql, config, features, jobStatus, env, logger2) {
if (config.overlayDatabaseMode !== "overlay-base" /* OverlayBase */ || env.getOptional("CODEQL_ACTION_ANALYZE_DID_COMPLETE_SUCCESSFULLY" /* ANALYZE_DID_COMPLETE_SUCCESSFULLY */) === "true" || !await features.getValue("overlay_analysis_status_save" /* OverlayAnalysisStatusSave */)) {
return;
} else if (config.languages === void 0) {
logger2.debug(
"Not recording overlay status, because the configuration contains no 'languages'."
);
return;
}
if (!isConclusiveJobStatus(jobStatus) && !didCodeQlReportError(env)) {
logger2.info(
@@ -187069,15 +187166,19 @@ async function removeUploadedSarif(uploadFailedSarifResult, logger2) {
}
// src/init-action-post.ts
async function run4(startedAt) {
const logger2 = getActionsLogger();
async function run4(action) {
const logger2 = action.logger;
let config;
let uploadFailedSarifResult;
let dependencyCachingUsage;
try {
const jobStatus2 = getOptionalInput("job-status");
restoreInputs(logger2);
config = await getConfig(getTemporaryDirectory(), logger2);
const tmpDir = getTemporaryDirectory();
config = await getConfig(tmpDir, logger2);
if (config === void 0) {
config = getAbortedInitConfig(action, tmpDir);
}
const gitHubVersion = config?.gitHubVersion ?? await getGitHubVersion();
checkGitHubVersionInRange(gitHubVersion, logger2);
const repositoryNwo = getRepositoryNwo();
@@ -187101,10 +187202,10 @@ async function run4(startedAt) {
repositoryNwo,
features,
jobStatus2,
getEnv(),
action.env,
logger2
);
if (await isAnalyzingDefaultBranch() && config.dependencyCachingEnabled !== "none" /* None */) {
if (await isAnalyzingDefaultBranch() && hasConfigKey(config, "dependencyCachingEnabled") && config.dependencyCachingEnabled !== "none" /* None */) {
dependencyCachingUsage = await getDependencyCacheUsage(logger2);
}
}
@@ -187112,9 +187213,9 @@ async function run4(startedAt) {
const error3 = wrapApiConfigurationError(wrapError(unwrappedError));
core20.setFailed(error3.message);
const statusReportBase2 = await createStatusReportBase(
"init-post" /* InitPost */,
action.name,
getActionsStatus(error3),
startedAt,
action.startedAt,
config,
await checkDiskUsage(logger2),
logger2,
@@ -187126,12 +187227,12 @@ async function run4(startedAt) {
}
return;
}
const jobStatus = getFinalJobStatus(config);
const jobStatus = getFinalJobStatus(action, config);
logger2.info(`CodeQL job status was ${getJobStatusDisplayName(jobStatus)}.`);
const statusReportBase = await createStatusReportBase(
"init-post" /* InitPost */,
action.name,
"success",
startedAt,
action.startedAt,
config,
await checkDiskUsage(logger2),
logger2
@@ -187148,25 +187249,25 @@ async function run4(startedAt) {
logger2.info("Status report sent for init-post step.");
}
}
function getFinalJobStatus(config) {
const existingJobStatus = getJobStatusFromEnvironment();
function getFinalJobStatus(action, config) {
const existingJobStatus = getJobStatusFromEnvironment(action.env);
if (existingJobStatus !== void 0) {
return existingJobStatus;
}
let jobStatus;
if (process.env["CODEQL_ACTION_ANALYZE_DID_COMPLETE_SUCCESSFULLY" /* ANALYZE_DID_COMPLETE_SUCCESSFULLY */] === "true") {
exportEnvVar("CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, "JOB_STATUS_SUCCESS" /* SuccessStatus */);
if (action.env.getOptional("CODEQL_ACTION_ANALYZE_DID_COMPLETE_SUCCESSFULLY" /* ANALYZE_DID_COMPLETE_SUCCESSFULLY */) === "true") {
action.env.export("CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, "JOB_STATUS_SUCCESS" /* SuccessStatus */);
jobStatus = "JOB_STATUS_SUCCESS" /* SuccessStatus */;
} else if (config !== void 0) {
jobStatus = "JOB_STATUS_CONFIGURATION_ERROR" /* ConfigErrorStatus */;
} else {
jobStatus = "JOB_STATUS_UNKNOWN" /* UnknownStatus */;
}
exportEnvVar("CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, jobStatus);
action.env.export("CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, jobStatus);
return jobStatus;
}
function getJobStatusFromEnvironment() {
const jobStatusFromEnvironment = process.env["CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */];
function getJobStatusFromEnvironment(env) {
const jobStatusFromEnvironment = env.getOptional("CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */);
if (jobStatusFromEnvironment !== void 0) {
if (Object.values(JobStatus).includes(jobStatusFromEnvironment)) {
return jobStatusFromEnvironment;
@@ -187175,20 +187276,12 @@ function getJobStatusFromEnvironment() {
}
return void 0;
}
var initPost = {
name: "init-post" /* InitPost */,
run: run4
};
async function runWrapper5() {
const startedAt = /* @__PURE__ */ new Date();
const logger2 = getActionsLogger();
try {
await run4(startedAt);
} catch (error3) {
core20.setFailed(`init post action failed: ${wrapError(error3).message}`);
await sendUnhandledErrorStatusReport(
"init-post" /* InitPost */,
startedAt,
error3,
logger2
);
}
return await runInActions(initPost);
}
// src/resolve-environment-action.ts
@@ -188562,7 +188655,7 @@ tmp/lib/tmp.js:
*)
js-yaml/dist/js-yaml.mjs:
(*! js-yaml 5.4.2 https://github.com/nodeca/js-yaml @license MIT *)
(*! js-yaml 5.4.3 https://github.com/nodeca/js-yaml @license MIT *)
long/index.js:
(**