Skip to content

Commit edac5f2

Browse files
committed
config: the promotion-gate shape-pin follows the validate ref to repo@digest - the pin's intent is unchanged (digest-pinned, never an unpinned tag), but the literal still named the tag@digest form that containers-image refuses and the third red publish fixed, so the rolling battery went red on a workflow-only commit's first push and ci's own test job never saw it (its run for the same commit was cancelled at 1m50s, before the tests).
1 parent 0efc1b4 commit edac5f2

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

‎src/config.rs‎

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1512,17 +1512,20 @@ pub(crate) mod tests {
15121512
}
15131513

15141514
/// Publishing gates the mutable tag on the validation. The laps
1515-
/// install and boot the digest-pinned staging ref this run pushed;
1516-
/// the promote job moves the tags people pull only if every lap came
1517-
/// back green. Two of the first three publishes failed their
1518-
/// validations after the tags were already live (44.3.0's
1515+
/// install and boot a digest-pinned ref to the bytes this run
1516+
/// pushed; the promote job moves the tags people pull only if every
1517+
/// lap came back green. Two of the first three publishes failed
1518+
/// their validations after the tags were already live (44.3.0's
15191519
/// signatures, 44.6.0's greeter) — under the old order the laps
15201520
/// could tell somebody the same day, but what they said was that
15211521
/// the broken thing was public. Composes of one commit are not
15221522
/// byte-stable (src/lock.rs: layered packages resolve live on
15231523
/// purpose), so gating on "the same image built again" is not an
15241524
/// option: the bytes that go live must be the bytes that were
1525-
/// validated.
1525+
/// validated. The pin is repo@digest because containers/image
1526+
/// refuses a reference that carries both a tag and a digest —
1527+
/// tag@digest died at the install preflight before any VM booted
1528+
/// (2026-10-10's third red publish).
15261529
#[test]
15271530
fn publishing_triggers_the_workflow_that_validates_what_was_published() {
15281531
let read = |name: &str| {
@@ -1543,8 +1546,8 @@ pub(crate) mod tests {
15431546
);
15441547
assert!(
15451548
publish
1546-
.contains("image: ${{ needs.publish.outputs.staging }}@${{ needs.publish.outputs.digest }}"),
1547-
"the validation should install the digest-pinned staging ref, not a default and not an unpinned tag: \
1549+
.contains("image: ${{ needs.publish.outputs.repo }}@${{ needs.publish.outputs.digest }}"),
1550+
"the validation should install the digest-pinned repo ref, not a default and not an unpinned tag: \
15481551
a tag can move under a concurrent publish and put different bytes under this run's verdict"
15491552
);
15501553
assert!(

0 commit comments

Comments
 (0)