Skip to content

feat: SBOM pipeline for data#691

Merged
castrojo merged 3 commits intoprojectbluefin:mainfrom
castrojo:upstream-pr/sbom-pipeline
Mar 31, 2026
Merged

feat: SBOM pipeline for data#691
castrojo merged 3 commits intoprojectbluefin:mainfrom
castrojo:upstream-pr/sbom-pipeline

Conversation

@castrojo
Copy link
Copy Markdown
Contributor

No description provided.

castrojo and others added 3 commits March 31, 2026 17:25
- scripts/fetch-github-sbom.js: fetch SLSA attestation verification
  results from GHCR for all Bluefin image streams, write
  static/data/sbom-attestations.json
- package.json: add standalone npm run fetch-sbom script (not wired
  into fetch-data chain — cosign not available in pages.yml)
- static/data/sbom-attestations.json: commit seed file so static
  import never cold-starts; .gitignore exception added
- src/types/sbom.ts: TypeScript interfaces for attestation cache
- .github/workflows/update-sbom-cache.yml: nightly job to refresh
  cache using PROJECT_READ_TOKEN for cross-org package reads
- src/components/ImagesCatalog.tsx: show attestation status in
  Verify Provenance tab from cache
- src/components/FeedItems.tsx: look up attestation state per
  release tag in Supply Chain block; distinguishes present vs verified

Assisted-by: Claude Sonnet 4.6 via GitHub Copilot
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ckage versions

- fetch-github-sbom.js: complete rewrite with oras-based SBOM download,
  Syft JSON parsing, kernel lowest-semver selection, epoch stripping,
  3-way cache logic (full hit / partial / miss), atomic write, LTS keyless fix
- update-sbom-cache.yml: add oras-project/setup-oras step and GHCR login
  so oras can access the OCI referrers API for public packages
- fetch-github-images.js: load sbom-attestations.json and overlay kernel,
  gnome, fedora from SBOM into stream versions; NVIDIA kept from feeds
- fetch-github-driver-versions.js: load sbom-attestations.json and overlay
  kernel, mesa per-row from SBOM; NVIDIA/hweKernel kept from releases
- src/types/sbom.ts: add PackageVersions interface and field on SbomRelease

Fixes: C-1 (missing downloadSbom/extractPackageVersions), C-2 (null cache
poison), C-3 (wrong destructure), M-8 (LTS keyless flag), M-2 (kernel sort),
M-6 (normaliseLtsTag regex), H-1 (oras not installed), H-3 (no oras login),
H-6 (non-atomic write)

Assisted-by: Claude Sonnet 4.6 via GitHub Copilot
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove the keyless:false special-case for bluefin-lts. All streams now
use the same OIDC verify-attestation path. LTS will be migrated to OIDC
keyless signing upstream; handling it identically avoids a permanent
divergence in the pipeline.

Assisted-by: Claude Sonnet 4.6 via GitHub Copilot
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@castrojo castrojo merged commit f8136bf into projectbluefin:main Mar 31, 2026
1 check passed
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a system for fetching and displaying SBOM (Software Bill of Materials) and attestation metadata for Bluefin image streams. A new script, fetch-github-sbom.js, has been added to verify image attestations using cosign and extract package versions from Syft SBOMs via oras. The existing data-fetching scripts for driver versions and images were updated to overlay this SBOM-sourced data, ensuring more accurate versioning for components like the kernel and GNOME. Furthermore, the FeedItems and ImagesCatalog frontend components now integrate this data to display attestation verification status in the UI. I have no feedback to provide as there were no review comments to assess.

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