Skip to content

fix(images): hide unpublished Utah testing image commands and attestations - #1113

Open
castrojo wants to merge 1 commit into
projectbluefin:v4from
castrojo:fix-utah-testing-image-hide
Open

fix(images): hide unpublished Utah testing image commands and attestations#1113
castrojo wants to merge 1 commit into
projectbluefin:v4from
castrojo:fix-utah-testing-image-hide

Conversation

@castrojo

@castrojo castrojo commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Problem

docs/utah.mdx and the generated image catalog (static/data/images.json) published bootc switch and cosign verify/attestation commands for ghcr.io/projectbluefin/utah:testing, even though that tag has never been pushed (skopeo inspect docker://ghcr.io/projectbluefin/utah:testing returns manifest unknown).

Root cause: buildTopStreams' fallback path in scripts/fetch-github-images.js fabricated a switch command for the first streamOrder entry whenever none of the registry's tags matched, even if the registry had no tags at all. buildSecurityInfo had no way to know a tag was unpublished, so it always rendered live verify/attest commands based on repo signing config alone.

Fix

  • Added isImagePublished(spec, tagSet) to check whether any of a product's streamOrder tags actually exist in the registry before building switch/security commands.
  • In buildProduct, when a product's primary tag isn't published, streams/testingStreams stay empty and security is cleared (hasAttestation: false, no commands). The product output now carries an explicit imagePublished: false flag.
  • ImagesCatalog.tsx now renders an "awaiting initial release" message in the Streams and Signing/SBOM sections instead of an empty tag list or unpublished commands when imagePublished is false.
  • Regenerated the Utah entry in static/data/images.json to reflect the new state immediately (rather than waiting for the next scheduled fetch job).

Testing

  • npm run test (486 tests, all passing)
  • npm run typecheck (no new errors; pre-existing unrelated error in MusicPlaylist.tsx from an untracked generated data file)
  • npx eslint on changed files (no new warnings/errors)
  • npx prettier --check on changed files

Fixes #1081

— hive: backend=copilot model=claude-sonnet-5

🐝 Hive Agent: contributor | SHA: 89ef75a1

…tions

Utah's product spec only has a single 'testing' stream tag. When the
ghcr.io/projectbluefin/utah:testing tag has never been pushed, the
registry tag list is empty, but buildTopStreams' fallback path still
fabricated a bootc switch command for it, and buildSecurityInfo still
rendered cosign verify/verify-attestation commands with
hasAttestation: true — even though skopeo inspect reports
'manifest unknown' for that tag.

Add isImagePublished(spec, tagSet) to check whether any of a
product's streamOrder tags actually exist in the registry before
building switch commands or security/attestation commands. When a
product's primary tag isn't published yet, streams/testingStreams are
left empty and security is cleared, and the images.json product gains
an explicit imagePublished: false flag.

ImagesCatalog.tsx now renders an 'awaiting initial release' message in
both the Streams and Signing/SBOM sections instead of empty tag lists
or unpublished commands when imagePublished is false.

Regenerated the Utah entry in static/data/images.json to reflect the
new awaiting-initial-release state until the next scheduled fetch job
runs.

Fixes projectbluefin#1081

Signed-off-by: castrojo <castrojo@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant