diff --git a/scripts/src/cicd.ts b/scripts/src/cicd.ts index baf61dc9..88bac6e9 100644 --- a/scripts/src/cicd.ts +++ b/scripts/src/cicd.ts @@ -937,6 +937,7 @@ async function decideAndMaybeTrigger( const previousInFlight = stringOrNull(previous.inFlightJob); const previousLastSucceeded = stringOrNull(previous.lastSucceededSha); const previousObserved = stringOrNull(recordAt(previous, ["source"])?.observedSha); + const previousTarget = stringOrNull(recordAt(previous, ["target"])?.targetSha); const superseded = previousInFlight !== null && previousObserved !== null && observedSha !== null && previousObserved !== observedSha; let phase: BranchFollowerPhase; let decision: string; @@ -944,7 +945,7 @@ async function decideAndMaybeTrigger( let inFlightJob: string | null = live.inFlightJob; let lastTriggeredSha = live.lastTriggeredSha ?? previousLastTriggered; let lastSucceededSha = live.lastSucceededSha ?? previousLastSucceeded; - if (targetSha === null && observedSha !== null && previousLastSucceeded === observedSha) targetSha = observedSha; + if (targetSha === null && observedSha !== null && previousLastSucceeded === observedSha && previousTarget === observedSha) targetSha = observedSha; if (!follower.enabled) { phase = "Skipped"; @@ -1023,6 +1024,7 @@ async function decideAndMaybeTrigger( status: live.command, exitCode: live.exitCode, timedOut: live.timedOut, + payload: live.payload, }, }; } @@ -1273,13 +1275,14 @@ async function readAdapterStatus(registry: BranchFollowerRegistry, follower: Fol const runtimeReady = follower.nativeStatus.runtime === null ? null : runtimeWorkloadsReady(follower.nativeStatus.runtime, bundle.workloads); const hasTektonGate = follower.nativeStatus.tekton !== null; const hasRuntimeTarget = runtimeTargetSha !== null; - const hasTargetEvidence = hasRuntimeTarget || hasTektonGate; + const requiresRuntimeTarget = follower.nativeStatus.runtime !== null; + const hasTargetEvidence = hasRuntimeTarget || (!requiresRuntimeTarget && hasTektonGate); const pipelineGateOk = !hasTektonGate || pipelineSucceeded === true || (hasRuntimeTarget && runtimeTargetSha === observedSha && argoReady !== false && runtimeReady !== false); const aligned = observedSha !== null && hasTargetEvidence - && (hasRuntimeTarget ? runtimeTargetSha === observedSha : true) + && (requiresRuntimeTarget ? hasRuntimeTarget && runtimeTargetSha === observedSha : true) && pipelineGateOk && argoReady !== false && runtimeReady !== false;