Skip to content

Commit 2f4dada

Browse files
chore: promote testing to main (#1075)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 44a1a49 commit 2f4dada

4 files changed

Lines changed: 48 additions & 76 deletions

File tree

.github/workflows/mirror-validate-to-merge-group.yml

Lines changed: 0 additions & 65 deletions
This file was deleted.

.github/workflows/promote-testing-to-main.yml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,3 @@ jobs:
3333
# use_merge_queue: true calls enqueuePullRequest GraphQL instead.
3434
use_merge_queue: true
3535
secrets: inherit
36-
37-
mirror-validate-to-merge-group:
38-
needs: [promote]
39-
if: needs.promote.result == 'success'
40-
uses: ./.github/workflows/mirror-validate-to-merge-group.yml
41-
permissions:
42-
contents: read
43-
pull-requests: read
44-
statuses: write

docs/skills/security/references/signing.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,49 @@ from source before changing any trust behavior.
66

77
Do not add private keys, credentials, or personal registry configuration to this
88
repository.
9+
10+
## Signature format: legacy `.sig` tag, not the new bundle format
11+
12+
Bluefin images must be signed so that **podman, skopeo and `bootc switch` can verify
13+
them** — not merely so that `cosign verify` passes. Those are different requirements,
14+
and conflating them has already cost the project months of unsigned images.
15+
16+
`containers/image`, the library behind all three tools, discovers a signature only at
17+
the legacy tag:
18+
19+
```
20+
sha256-<image-digest>.sig
21+
```
22+
23+
It does **not** consult the OCI 1.1 referrers API — and GHCR does not implement
24+
`/referrers` anyway, returning 404. So a signature written in Sigstore's newer bundle
25+
format (attached as an OCI referrer under a bare `sha256-<digest>` tag) is invisible to
26+
a `policy.json` `sigstoreSigned` entry, even though it is a perfectly valid signature.
27+
28+
**cosign 3.x flipped `--new-bundle-format` to default `true`.** Every image built after
29+
that default reached our pipeline (~2026-06-08) is signed in a way podman cannot see.
30+
See projectbluefin/common#977 for the inventory and projectbluefin/actions#420 for the
31+
fix.
32+
33+
### Why CI did not catch it
34+
35+
`cosign verify` accepts **both** formats. The signing workflow signed, verified, and
36+
reported success on every run throughout the regression. Verification with cosign is
37+
therefore *not* sufficient evidence that an image is usable by our own consumers.
38+
39+
### What to check
40+
41+
When touching anything in the signing path, confirm the legacy tag exists in the
42+
registry rather than trusting a green `cosign verify`:
43+
44+
```bash
45+
DIGEST=$(skopeo inspect --format '{{.Digest}}' docker://ghcr.io/projectbluefin/bluefin:stable)
46+
skopeo inspect "docker://ghcr.io/projectbluefin/bluefin:${DIGEST/:/-}.sig" >/dev/null \
47+
&& echo "signature visible to podman/bootc" \
48+
|| echo "NOT verifiable by podman/bootc"
49+
```
50+
51+
`projectbluefin/actions` enforces this automatically in `sign-and-publish` via the
52+
`Assert legacy .sig tag exists` step. Do not set `new-bundle-format: "true"` on that
53+
action unless every consumer of the image verifies with cosign rather than with
54+
podman/bootc policy.

image-versions.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ images:
22
- name: common
33
image: ghcr.io/projectbluefin/common
44
tag: latest
5-
digest: sha256:3329c1e87ba30341ef1f03c1b9434cf06ce062083b9618d480304086997a9c0d
5+
digest: sha256:feeeb1d93aafdd1ba250abbf93da3f8416e648228ceaf75531a808b3d5abd94a
66
- name: brew
77
image: ghcr.io/ublue-os/brew
88
tag: latest
9-
digest: sha256:8855464e5c150974c5edf4343ffef50ca37b1c4d96a648dce28927033010a372
9+
digest: sha256:de0391c67209703bdf1249079c8d478d44eff864d62e7ec6f12aaa382bdf21df

0 commit comments

Comments
 (0)