Merge remote-tracking branch 'origin/master' into feat/1923-cicd-otel-observability

This commit is contained in:
Codex
2026-07-13 14:59:12 +02:00
47 changed files with 1686 additions and 161 deletions
@@ -1069,9 +1069,6 @@ export async function getPlatformInfraPipelinesAsCodeNodeStatus(config: UniDeskC
const target = resolveTarget(pac, options.targetId ?? options.nodeId);
const nodeId = options.nodeId ?? target.id;
const consumers = pac.consumers.filter((consumer) => consumer.node.toLowerCase() === nodeId.toLowerCase());
if (consumers.length === 0) {
throw new Error(`no Pipelines-as-Code consumers are configured for node ${nodeId}; known nodes: ${Array.from(new Set(pac.consumers.map((item) => item.node))).sort().join(", ")}`);
}
const startedAt = Date.now();
const statuses = await Promise.all(consumers.map(async (consumer) => {
const repository = resolveRepository(pac, consumer.repositoryRef);
@@ -1101,8 +1098,9 @@ export async function getPlatformInfraPipelinesAsCodeNodeStatus(config: UniDeskC
}
}));
const ready = statuses.every((row) => row.ready === true);
const configured = statuses.length > 0;
return {
ok: ready,
ok: configured && ready,
action: "cicd-node-status",
mutation: false,
node: nodeId,
@@ -1115,7 +1113,10 @@ export async function getPlatformInfraPipelinesAsCodeNodeStatus(config: UniDeskC
},
consumers: statuses,
summary: {
ready,
ready: configured && ready,
status: configured ? (ready ? "ready" : "blocked") : "warning",
code: configured ? (ready ? "cicd-node-ready" : "cicd-node-blocked") : "cicd-node-no-consumers",
hint: configured ? null : `no Pipelines-as-Code consumers are configured for node ${nodeId}`,
total: statuses.length,
readyCount: statuses.filter((row) => row.ready === true).length,
blockedCount: statuses.filter((row) => row.ready !== true).length,
@@ -1420,6 +1421,7 @@ function remoteScript(action: "apply" | "status" | "history" | "debug-step", pac
UNIDESK_PAC_WEBHOOK_SECRET_KEY: repository.webhookSecretKey,
UNIDESK_PAC_CONCURRENCY_LIMIT: String(repository.concurrencyLimit),
UNIDESK_PAC_PARAMS_JSON: JSON.stringify(repository.params),
UNIDESK_PAC_REGISTRY_APPLICABILITY: registryApplicability(consumer, repository),
UNIDESK_PAC_PIPELINE_NAME: consumer.pipeline,
UNIDESK_PAC_PIPELINE_RUN_PREFIX: consumer.pipelineRunPrefix,
UNIDESK_PAC_CONSUMER_CONFIG_B64: Buffer.from(JSON.stringify(consumerConfig), "utf8").toString("base64"),
@@ -1453,6 +1455,14 @@ function remoteScript(action: "apply" | "status" | "history" | "debug-step", pac
return `${exports}\n${readFileSync(remoteScriptFile, "utf8")}`;
}
function registryApplicability(consumer: PacConsumer, repository: PacRepository): "configured" | "not-configured" {
const prefix = consumer.id === "unidesk-host" ? "unidesk_host_" : "";
const imageRepository = repository.params[`${prefix}image_repository`] ?? repository.params.image_repository;
if (typeof imageRepository !== "string" || imageRepository.length === 0) return "not-configured";
if (prefix.length > 0) return "configured";
return repository.params.pipeline_name === consumer.pipeline ? "configured" : "not-configured";
}
function historyConsumerConfig(pac: PacConfig, consumer: PacConsumer): Record<string, unknown> {
const repository = resolveRepository(pac, consumer.repositoryRef);
const admissionIdentity = pacAdmissionDesiredIdentity(consumer.node);
@@ -1738,6 +1748,7 @@ function nodeStatusRow(targetId: string, consumer: PacConsumer, repository: PacR
code: stringValue(diagnostics.code),
phase: stringValue(diagnostics.phase),
hint: compactLine(stringValue(diagnostics.hint)),
registry: record(diagnostics.registry),
},
traceId: stringValue(artifact.traceId),
firstBreak: record(artifact.firstBreak),
@@ -2840,6 +2851,7 @@ function envReuseText(envReuse: Record<string, unknown>): string {
function registryText(registry: Record<string, unknown>): string {
if (Object.keys(registry).length === 0) return "-";
if (registry.status === "not-configured" || registry.applicability === "not-configured") return "N/A";
const present = registry.present === true ? "present" : "missing";
const digest = short(stringValue(registry.digest), 18);
return digest === "-" ? present : `${present}:${digest}`;