fix(cicd): preserve refresh evidence in live status

This commit is contained in:
Codex
2026-07-04 02:51:58 +00:00
parent 3886bbbb2c
commit 8281797e56
3 changed files with 29 additions and 8 deletions
+13 -5
View File
@@ -23,14 +23,14 @@ export function followerEvidenceSummary(input: {
observedSha: string | null;
livePayload: Record<string, unknown> | null;
storedCommand: Record<string, unknown> | null;
fallbackStoredCommand?: Record<string, unknown> | null;
}): Record<string, unknown> | null {
const livePayload = input.livePayload;
const storedPayload = asOptionalRecord(input.storedCommand?.payload);
const payload = livePayload ?? storedPayload;
if (payload === null) return null;
const tekton = asOptionalRecord(payload.tekton);
const pipeline = asOptionalRecord(payload.pipeline);
const refresh = asOptionalRecord(payload.refreshEvidence);
const fallbackStoredPayload = asOptionalRecord(input.fallbackStoredCommand?.payload);
const tekton = firstRecord(asOptionalRecord(livePayload?.tekton), asOptionalRecord(storedPayload?.tekton), asOptionalRecord(fallbackStoredPayload?.tekton));
const pipeline = firstRecord(asOptionalRecord(livePayload?.pipeline), asOptionalRecord(storedPayload?.pipeline), asOptionalRecord(fallbackStoredPayload?.pipeline));
const refresh = firstRecord(asOptionalRecord(storedPayload?.refreshEvidence), asOptionalRecord(fallbackStoredPayload?.refreshEvidence), asOptionalRecord(livePayload?.refreshEvidence));
if (tekton === null && pipeline === null && refresh === null) return null;
const pipelineRefName = stringOrNull(tekton?.pipelineRefName);
const pipelineName = stringOrNull(asOptionalRecord(pipeline?.metadata)?.name);
@@ -39,6 +39,7 @@ export function followerEvidenceSummary(input: {
return {
pipelineRunRefName: pipelineRefName,
pipeline,
refreshBoundedReason: refresh === null ? "missing-from-live-and-stored-evidence" : null,
refresh: refresh === null
? null
: {
@@ -50,6 +51,13 @@ export function followerEvidenceSummary(input: {
};
}
function firstRecord(...values: Array<Record<string, unknown> | null>): Record<string, unknown> | null {
for (const value of values) {
if (value !== null) return value;
}
return null;
}
function asOptionalRecord(value: unknown): Record<string, unknown> | null {
return typeof value === "object" && value !== null && !Array.isArray(value) ? value as Record<string, unknown> : null;
}