fix: preserve hwlab refresh render evidence
This commit is contained in:
@@ -37,6 +37,7 @@ function renderJobHuman(payload: Record<string, unknown>): string {
|
||||
const pods = arrayRecords(result?.pods);
|
||||
const logs = arrayRecords(result?.logs);
|
||||
const errors = arrayRecords(result?.errors);
|
||||
const summaryEvidence = refreshEvidenceRows(asOptionalRecord(result?.summary));
|
||||
const command = asOptionalRecord(payload.command);
|
||||
const identity = asOptionalRecord(command?.identity);
|
||||
return [
|
||||
@@ -59,6 +60,7 @@ function renderJobHuman(payload: Record<string, unknown>): string {
|
||||
pods.length === 0 ? "" : `\nPODS\n${table(["POD", "PHASE", "READY", "START", "CONTAINERS", "REASON"], pods.map(jobPodRow))}`,
|
||||
logs.length === 0 ? "" : `\nLOG TAILS\n${table(["POD", "CONTAINER", "STATUS", "REASON", "LINES", "BYTES", "TIMING", "MESSAGE"], logs.map(logRow))}`,
|
||||
errors.length === 0 ? "" : `\nERRORS\n${table(["POD", "CONTAINER", "REASON", "MESSAGE"], errors.map((item) => [item.pod, item.container, item.degradedReason, item.message]))}`,
|
||||
summaryEvidence.length === 0 ? "" : `\nEVIDENCE\n${table(["TYPE", "STATUS", "DETAIL", "OBJECT"], summaryEvidence)}`,
|
||||
command === null ? "" : `\nTARGET COMMAND\n${table(["ROUTE", "SCRIPT", "EXIT", "PARSE_ERROR"], [[identity?.route ?? "-", identity?.script ?? "-", command.exitCode ?? "-", command.parseError ?? "-"]])}`,
|
||||
command?.stdoutTail ? `\nSTDOUT_TAIL\n${command.stdoutTail}` : "",
|
||||
command?.stderrTail ? `\nSTDERR_TAIL\n${command.stderrTail}` : "",
|
||||
@@ -287,11 +289,37 @@ function nativeGateRows(native: Record<string, unknown> | null): unknown[][] {
|
||||
`${shortSha(stringOrNull(refresh.sourceCommit))}/${stringOrNull(refresh.pipeline) ?? "-"}`,
|
||||
stringOrNull(refresh.jobName) ?? "-",
|
||||
]);
|
||||
rows.push(...refreshEvidenceRows(refresh));
|
||||
}
|
||||
for (const error of arrayTextItems(native.errors).slice(0, 5)) rows.push(["error", "present", error, "-"]);
|
||||
return rows;
|
||||
}
|
||||
|
||||
function refreshEvidenceRows(value: Record<string, unknown> | null): unknown[][] {
|
||||
if (value === null) return [];
|
||||
const rows: unknown[][] = [];
|
||||
const render = asOptionalRecord(value.render);
|
||||
const renderRuntimeReady = asOptionalRecord(render?.runtimeReadyTask);
|
||||
if (render !== null) {
|
||||
rows.push([
|
||||
"control-plane-render",
|
||||
renderRuntimeReady?.present === true ? "runtime-ready-present" : renderRuntimeReady?.present === false ? "runtime-ready-absent" : "-",
|
||||
whenSummary(arrayRecords(renderRuntimeReady?.when)[0]),
|
||||
stringOrNull(render.pipelineName) ?? "-",
|
||||
]);
|
||||
}
|
||||
const apply = asOptionalRecord(value.apply);
|
||||
if (apply !== null) {
|
||||
rows.push([
|
||||
"control-plane-apply",
|
||||
stringOrNull(apply.resourceVersion) ?? stringOrNull(apply.degradedReason) ?? "-",
|
||||
applyMetadataSummary(apply),
|
||||
stringOrNull(apply.pipelineName) ?? "-",
|
||||
]);
|
||||
}
|
||||
return rows;
|
||||
}
|
||||
|
||||
function taskRunDetail(item: Record<string, unknown> | undefined): string {
|
||||
if (item === undefined) return "-";
|
||||
const duration = numberOrNull(item.durationSeconds);
|
||||
@@ -308,6 +336,24 @@ function argoDetail(argo: Record<string, unknown>): string {
|
||||
?? shortSha(stringOrNull(argo.revision));
|
||||
}
|
||||
|
||||
function whenSummary(value: Record<string, unknown> | undefined): string {
|
||||
if (value === undefined) return "-";
|
||||
const values = arrayTextItems(value.values).join(",");
|
||||
return `${stringOrNull(value.input) ?? "-"} ${stringOrNull(value.operator) ?? "-"} ${values || "-"}`;
|
||||
}
|
||||
|
||||
function applyMetadataSummary(value: Record<string, unknown>): string {
|
||||
const annotations = asOptionalRecord(value.annotations);
|
||||
const labels = asOptionalRecord(value.labels);
|
||||
return `ann:${firstEntry(annotations)} label:${firstEntry(labels)}`;
|
||||
}
|
||||
|
||||
function firstEntry(value: Record<string, unknown> | null): string {
|
||||
if (value === null) return "-";
|
||||
const [key, item] = Object.entries(value)[0] ?? [];
|
||||
return key === undefined ? "-" : `${key}=${stringOrNull(item) ?? "-"}`;
|
||||
}
|
||||
|
||||
function asOptionalRecord(value: unknown): Record<string, unknown> | null {
|
||||
return typeof value === "object" && value !== null && !Array.isArray(value) ? value as Record<string, unknown> : null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user