Merge pull request #4050 from github/mbg/status/registries

Include `registry_types` in more status reports
This commit is contained in:
Michael B. Gale
2026-07-31 15:32:50 +00:00
committed by GitHub
6 changed files with 347 additions and 166 deletions

337
lib/entry-points.js generated
View File

@@ -92812,10 +92812,10 @@ var require_util12 = __commonJS({
return objectToString(arg) === "[object Array]";
}
exports2.isArray = isArray2;
function isBoolean(arg) {
function isBoolean2(arg) {
return typeof arg === "boolean";
}
exports2.isBoolean = isBoolean;
exports2.isBoolean = isBoolean2;
function isNull(arg) {
return arg === null;
}
@@ -96885,7 +96885,7 @@ var require_validators = __commonJS({
throw new ERR_INVALID_ARG_TYPE(name, "a dictionary", value);
}
});
var validateArray = hideStackFrames((value, name, minLength = 0) => {
var validateArray2 = hideStackFrames((value, name, minLength = 0) => {
if (!ArrayIsArray(value)) {
throw new ERR_INVALID_ARG_TYPE(name, "Array", value);
}
@@ -96895,19 +96895,19 @@ var require_validators = __commonJS({
}
});
function validateStringArray(value, name) {
validateArray(value, name);
validateArray2(value, name);
for (let i = 0; i < value.length; i++) {
validateString(value[i], `${name}[${i}]`);
}
}
function validateBooleanArray(value, name) {
validateArray(value, name);
validateArray2(value, name);
for (let i = 0; i < value.length; i++) {
validateBoolean(value[i], `${name}[${i}]`);
}
}
function validateAbortSignalArray(value, name) {
validateArray(value, name);
validateArray2(value, name);
for (let i = 0; i < value.length; i++) {
const signal = value[i];
const indexedName = `${name}[${i}]`;
@@ -97003,7 +97003,7 @@ var require_validators = __commonJS({
isInt32,
isUint32,
parseFileMode,
validateArray,
validateArray: validateArray2,
validateStringArray,
validateBooleanArray,
validateAbortSignalArray,
@@ -144596,21 +144596,25 @@ function isString(value) {
function isNumber(value) {
return typeof value === "number";
}
function isBoolean(value) {
return typeof value === "boolean";
}
function isStringOrUndefined(value) {
return value === void 0 || isString(value);
}
function defaultCheck(validate2) {
return (arg) => ({ unknownKeys: [], invalidKeys: [], valid: validate2(arg) });
}
function makeValidator(validate2, required = true) {
function makeValidator(validate2) {
return {
validate: validate2,
check: defaultCheck(validate2),
required
required: true
};
}
var string = makeValidator(isString);
var number = makeValidator(isNumber);
var boolean = makeValidator(isBoolean);
function array(validator) {
const validate2 = (val) => {
return isArray(val) && val.every((e) => validator.validate(e));
@@ -144692,6 +144696,10 @@ function validateSchema(schema, obj) {
const result = checkSchema(schema, obj, { failFast: true });
return result.valid;
}
function validateArray(elementSchema, arr) {
const elementValidator = object(elementSchema);
return array(elementValidator).validate(arr);
}
function successfulCheckSchema() {
return {
valid: true,
@@ -146400,6 +146408,148 @@ async function getGeneratedFiles(workingDirectory) {
return generatedFiles;
}
// src/start-proxy/types.ts
var usernameSchema = {
/** The username needed to authenticate to the package registry, if any. */
username: optionalOrNull(string)
};
function hasUsername(config) {
return "username" in config;
}
var usernamePasswordSchema = {
/** The password needed to authenticate to the package registry, if any. */
password: optionalOrNull(string),
...usernameSchema
};
function hasUsernameAndPassword(config) {
return hasUsername(config) && "password" in config;
}
var tokenSchema = {
/** The token needed to authenticate to the package registry, if any. */
token: optionalOrNull(string),
...usernameSchema
};
function hasToken(config) {
return "token" in config;
}
function isToken(config) {
return "token" in config && validateSchema(tokenSchema, config);
}
var azureConfigSchema = {
"tenant-id": string,
"client-id": string
};
function isAzureConfig(config) {
return validateSchema(azureConfigSchema, config);
}
var awsConfigSchema = {
"aws-region": string,
"account-id": string,
"role-name": string,
domain: string,
"domain-owner": string,
audience: optionalOrNull(string)
};
function isAWSConfig(config) {
return validateSchema(awsConfigSchema, config);
}
var jfrogConfigSchema = {
"jfrog-oidc-provider-name": string,
audience: optionalOrNull(string),
"identity-mapping-name": optionalOrNull(string)
};
function isJFrogConfig(config) {
return validateSchema(jfrogConfigSchema, config);
}
var cloudsmithConfigSchema = {
namespace: string,
"service-slug": string,
"api-host": string
};
function isCloudsmithConfig(config) {
return validateSchema(cloudsmithConfigSchema, config);
}
var gcpConfigSchema = {
"workload-identity-provider": string,
"service-account": optionalOrNull(string),
audience: optionalOrNull(string)
};
function isGCPConfig(config) {
return validateSchema(gcpConfigSchema, config);
}
var oidcSchemas = [
{ schema: azureConfigSchema, name: "Azure" },
{ schema: awsConfigSchema, name: "AWS" },
{ schema: jfrogConfigSchema, name: "JFrog" },
{ schema: cloudsmithConfigSchema, name: "Cloudsmith" },
{ schema: gcpConfigSchema, name: "GCP" }
];
function credentialToStr(credential) {
let result = `Type: ${credential.type};`;
const appendIfDefined = (name, val) => {
if (isDefined2(val)) {
result += ` ${name}: ${val};`;
}
};
appendIfDefined("Url", credential.url);
appendIfDefined("Host", credential.host);
if (hasUsername(credential)) {
appendIfDefined("Username", credential.username);
}
if ("password" in credential) {
appendIfDefined(
"Password",
isDefined2(credential.password) ? "***" : void 0
);
}
if (hasToken(credential)) {
appendIfDefined("Token", isDefined2(credential.token) ? "***" : void 0);
}
if (isAzureConfig(credential)) {
appendIfDefined("Tenant", credential["tenant-id"]);
appendIfDefined("Client", credential["client-id"]);
} else if (isAWSConfig(credential)) {
appendIfDefined("AWS Region", credential["aws-region"]);
appendIfDefined("AWS Account", credential["account-id"]);
appendIfDefined("AWS Role", credential["role-name"]);
appendIfDefined("AWS Domain", credential.domain);
appendIfDefined("AWS Domain Owner", credential["domain-owner"]);
appendIfDefined("AWS Audience", credential.audience);
} else if (isJFrogConfig(credential)) {
appendIfDefined("JFrog Provider", credential["jfrog-oidc-provider-name"]);
appendIfDefined(
"JFrog Identity Mapping",
credential["identity-mapping-name"]
);
appendIfDefined("JFrog Audience", credential.audience);
} else if (isCloudsmithConfig(credential)) {
appendIfDefined("Cloudsmith Namespace", credential.namespace);
appendIfDefined("Cloudsmith Service Slug", credential["service-slug"]);
appendIfDefined("Cloudsmith API Host", credential["api-host"]);
} else if (isGCPConfig(credential)) {
appendIfDefined(
"GCP Workload Identity Provider",
credential["workload-identity-provider"]
);
appendIfDefined("GCP Service Account", credential["service-account"]);
appendIfDefined("GCP Audience", credential.audience);
}
return result;
}
var registryBaseSchema = {
/** The type of the package registry. */
type: string,
/** Whether the registry replaces the base registry for the ecosystem. */
"replaces-base": optional(boolean)
};
function getAddressString(address) {
if (address.url === void 0) {
return address.host;
} else {
return address.url;
}
}
// src/status-report.ts
function getDisplayActionName(actionName) {
if (actionName === "finish" /* Analyze */) {
@@ -146468,6 +146618,34 @@ function setJobStatusIfUnsuccessful(actionStatus) {
);
}
}
function getRegistryTypesFromEnv(logger, env = getEnv()) {
const value = env.getOptional("CODEQL_PROXY_URLS" /* PROXY_URLS */);
if (value === void 0) {
return void 0;
}
try {
const data = JSON.parse(value);
if (!isArray(data)) {
logger.debug(
`Expected '${"CODEQL_PROXY_URLS" /* PROXY_URLS */}' to contain a JSON array, but got '${typeof data}'.`
);
return void 0;
}
if (!validateArray(registryBaseSchema, data)) {
logger.debug(
`Expected '${"CODEQL_PROXY_URLS" /* PROXY_URLS */}' to contain a JSON array of registry objects, but got something else.`
);
return void 0;
}
const types2 = new Set(data.map((r) => r.type));
return Array.from(types2).sort().join(",");
} catch (err) {
logger.debug(
`Failed to parse '${"CODEQL_PROXY_URLS" /* PROXY_URLS */}': ${getErrorMessage(err)}.`
);
return void 0;
}
}
async function createStatusReportBase(actionName, status, actionStartedAt, config, diskInfo, logger, cause, exception) {
try {
const commitOid = getOptionalInput("sha") || process.env["GITHUB_SHA"] || "";
@@ -146507,6 +146685,7 @@ async function createStatusReportBase(actionName, status, actionStartedAt, confi
job_name: jobName,
job_run_uuid: jobRunUUID,
ref,
registry_types: getRegistryTypesFromEnv(logger),
runner_os: runnerOs,
started_at: workflowStartedAt,
status,
@@ -157415,7 +157594,7 @@ var import_async = __toESM(require_async(), 1);
var import_path6 = require("path");
// node_modules/archiver/lib/error.js
var import_util33 = __toESM(require("util"), 1);
var import_util34 = __toESM(require("util"), 1);
var ERROR_CODES = {
ABORTED: "archive was aborted",
DIRECTORYDIRPATHREQUIRED: "diretory dirpath argument must be a non-empty string value",
@@ -157440,7 +157619,7 @@ function ArchiverError(code, data) {
this.code = code;
this.data = data;
}
import_util33.default.inherits(ArchiverError, Error);
import_util34.default.inherits(ArchiverError, Error);
// node_modules/archiver/lib/core.js
var import_readable_stream2 = __toESM(require_ours(), 1);
@@ -161870,142 +162049,6 @@ var path26 = __toESM(require("path"));
var core26 = __toESM(require_core());
var toolcache4 = __toESM(require_tool_cache());
// src/start-proxy/types.ts
var usernameSchema = {
/** The username needed to authenticate to the package registry, if any. */
username: optionalOrNull(string)
};
function hasUsername(config) {
return "username" in config;
}
var usernamePasswordSchema = {
/** The password needed to authenticate to the package registry, if any. */
password: optionalOrNull(string),
...usernameSchema
};
function hasUsernameAndPassword(config) {
return hasUsername(config) && "password" in config;
}
var tokenSchema = {
/** The token needed to authenticate to the package registry, if any. */
token: optionalOrNull(string),
...usernameSchema
};
function hasToken(config) {
return "token" in config;
}
function isToken(config) {
return "token" in config && validateSchema(tokenSchema, config);
}
var azureConfigSchema = {
"tenant-id": string,
"client-id": string
};
function isAzureConfig(config) {
return validateSchema(azureConfigSchema, config);
}
var awsConfigSchema = {
"aws-region": string,
"account-id": string,
"role-name": string,
domain: string,
"domain-owner": string,
audience: optionalOrNull(string)
};
function isAWSConfig(config) {
return validateSchema(awsConfigSchema, config);
}
var jfrogConfigSchema = {
"jfrog-oidc-provider-name": string,
audience: optionalOrNull(string),
"identity-mapping-name": optionalOrNull(string)
};
function isJFrogConfig(config) {
return validateSchema(jfrogConfigSchema, config);
}
var cloudsmithConfigSchema = {
namespace: string,
"service-slug": string,
"api-host": string
};
function isCloudsmithConfig(config) {
return validateSchema(cloudsmithConfigSchema, config);
}
var gcpConfigSchema = {
"workload-identity-provider": string,
"service-account": optionalOrNull(string),
audience: optionalOrNull(string)
};
function isGCPConfig(config) {
return validateSchema(gcpConfigSchema, config);
}
var oidcSchemas = [
{ schema: azureConfigSchema, name: "Azure" },
{ schema: awsConfigSchema, name: "AWS" },
{ schema: jfrogConfigSchema, name: "JFrog" },
{ schema: cloudsmithConfigSchema, name: "Cloudsmith" },
{ schema: gcpConfigSchema, name: "GCP" }
];
function credentialToStr(credential) {
let result = `Type: ${credential.type};`;
const appendIfDefined = (name, val) => {
if (isDefined2(val)) {
result += ` ${name}: ${val};`;
}
};
appendIfDefined("Url", credential.url);
appendIfDefined("Host", credential.host);
if (hasUsername(credential)) {
appendIfDefined("Username", credential.username);
}
if ("password" in credential) {
appendIfDefined(
"Password",
isDefined2(credential.password) ? "***" : void 0
);
}
if (hasToken(credential)) {
appendIfDefined("Token", isDefined2(credential.token) ? "***" : void 0);
}
if (isAzureConfig(credential)) {
appendIfDefined("Tenant", credential["tenant-id"]);
appendIfDefined("Client", credential["client-id"]);
} else if (isAWSConfig(credential)) {
appendIfDefined("AWS Region", credential["aws-region"]);
appendIfDefined("AWS Account", credential["account-id"]);
appendIfDefined("AWS Role", credential["role-name"]);
appendIfDefined("AWS Domain", credential.domain);
appendIfDefined("AWS Domain Owner", credential["domain-owner"]);
appendIfDefined("AWS Audience", credential.audience);
} else if (isJFrogConfig(credential)) {
appendIfDefined("JFrog Provider", credential["jfrog-oidc-provider-name"]);
appendIfDefined(
"JFrog Identity Mapping",
credential["identity-mapping-name"]
);
appendIfDefined("JFrog Audience", credential.audience);
} else if (isCloudsmithConfig(credential)) {
appendIfDefined("Cloudsmith Namespace", credential.namespace);
appendIfDefined("Cloudsmith Service Slug", credential["service-slug"]);
appendIfDefined("Cloudsmith API Host", credential["api-host"]);
} else if (isGCPConfig(credential)) {
appendIfDefined(
"GCP Workload Identity Provider",
credential["workload-identity-provider"]
);
appendIfDefined("GCP Service Account", credential["service-account"]);
appendIfDefined("GCP Audience", credential.audience);
}
return result;
}
function getAddressString(address) {
if (address.url === void 0) {
return address.host;
} else {
return address.url;
}
}
// src/start-proxy/validation.ts
var core25 = __toESM(require_core());
function cloneCredential(schema, obj) {