feat(cicd): add branch follower taskrun drilldown
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
// Responsibility: bounded human summaries for branch-follower events/logs gates.
|
||||
|
||||
export function renderDrillDownHuman(payload: Record<string, unknown>): string {
|
||||
if (payload.action === "taskrun") return renderTaskRunHuman(payload);
|
||||
if (payload.follower === undefined) {
|
||||
const followers = arrayRecords(payload.followers);
|
||||
return [
|
||||
@@ -26,6 +27,60 @@ export function renderDrillDownHuman(payload: Record<string, unknown>): string {
|
||||
].filter((line) => line !== "").join("\n");
|
||||
}
|
||||
|
||||
function renderTaskRunHuman(payload: Record<string, unknown>): string {
|
||||
const result = asOptionalRecord(payload.result);
|
||||
const taskRun = asOptionalRecord(result?.taskRun);
|
||||
const pod = asOptionalRecord(result?.pod);
|
||||
const policy = asOptionalRecord(payload.policy);
|
||||
const containers = arrayRecords(result?.containers);
|
||||
const logs = arrayRecords(result?.logs);
|
||||
const timing = asOptionalRecord(result?.nodeCicdTiming);
|
||||
const query = asOptionalRecord(payload.query);
|
||||
const command = asOptionalRecord(payload.command);
|
||||
return [
|
||||
`CI/CD BRANCH-FOLLOWER TASKRUN (${payload.ok === false ? "failed" : "ok"})`,
|
||||
"",
|
||||
table(
|
||||
["FOLLOWER", "ADAPTER", "TASKRUN", "PIPELINERUN", "POD", "STATUS", "REASON", "DURATION", "CONTAINERS"],
|
||||
[[
|
||||
payload.follower,
|
||||
payload.adapter ?? "-",
|
||||
taskRun?.name ?? query?.taskRun ?? "-",
|
||||
taskRun?.pipelineRun ?? query?.pipelineRun ?? "-",
|
||||
taskRun?.podName ?? "-",
|
||||
asOptionalRecord(taskRun?.condition)?.status ?? "-",
|
||||
asOptionalRecord(taskRun?.condition)?.reason ?? "-",
|
||||
taskRun?.durationSeconds ?? "-",
|
||||
pod?.containerCount ?? "-",
|
||||
]],
|
||||
),
|
||||
containers.length === 0 ? "" : `\nCONTAINERS\n${table(["NAME", "CONTAINER", "STATE", "REASON", "EXIT", "STARTED", "FINISHED", "MESSAGE"], containers.map(containerRow))}`,
|
||||
logs.length === 0 ? "" : `\nLOG TAILS\n${table(["POD", "CONTAINER", "LINES", "BYTES", "TIMING"], logs.map((item) => [item.pod, item.container, item.lineCount, item.bytes, asOptionalRecord(item.nodeCicdTiming) === null ? "-" : "node-cicd-timing"]))}`,
|
||||
timing === null ? "" : `\nNODE_CICD_TIMING\n${JSON.stringify(timing, null, 2)}`,
|
||||
"",
|
||||
`policy: tailLines=${policy?.logsTailLines ?? "-"} maxLogBytes=${policy?.maxLogBytes ?? "-"} timeoutSeconds=${policy?.taskRunTimeoutSeconds ?? "-"} maxContainers=${policy?.maxContainers ?? "-"}`,
|
||||
command?.stderrTail ? `stderr: ${command.stderrTail}` : "",
|
||||
"",
|
||||
].filter((line) => line !== "").join("\n");
|
||||
}
|
||||
|
||||
function containerRow(item: Record<string, unknown>): unknown[] {
|
||||
const terminated = asOptionalRecord(item.terminated);
|
||||
const waiting = asOptionalRecord(item.waiting);
|
||||
const running = asOptionalRecord(item.running);
|
||||
const state = terminated !== null ? "terminated" : waiting !== null ? "waiting" : running !== null ? "running" : "-";
|
||||
return [
|
||||
item.name,
|
||||
item.containerName,
|
||||
state,
|
||||
terminated?.reason ?? waiting?.reason ?? "-",
|
||||
terminated?.exitCode ?? "-",
|
||||
terminated?.startedAt ?? running?.startedAt ?? "-",
|
||||
terminated?.finishedAt ?? "-",
|
||||
terminated?.message ?? waiting?.message ?? "-",
|
||||
];
|
||||
}
|
||||
|
||||
function nativeGateRows(native: Record<string, unknown> | null): unknown[][] {
|
||||
if (native === null) return [];
|
||||
const rows: unknown[][] = [];
|
||||
|
||||
Reference in New Issue
Block a user