Skip to content

release: v0.3.0-beta.4 - #171

Merged
gnanirahulnutakki merged 2 commits into
mainfrom
dev
Jul 15, 2026
Merged

release: v0.3.0-beta.4#171
gnanirahulnutakki merged 2 commits into
mainfrom
dev

Conversation

@gnanirahulnutakki

@gnanirahulnutakki gnanirahulnutakki commented Jul 15, 2026

Copy link
Copy Markdown
Member

Release candidate

Promotes green dev integration commit 6fe30e0 to main for the v0.3.0-beta.4 beta release.

Included

  • Signed multi-architecture Hub OCI publication for linux/amd64 and linux/arm64 (E9 P1 E9 F9.1b: Publish signed multi-arch hub OCI images #169).
  • Keyless Cosign signature, GitHub build provenance and SPDX SBOM attestation, plus release-bound digest assets.
  • Existing local fleet IDE and native desktop functionality remain covered by the full regression suite.

Evidence

After this PR is green and merged, the signed annotated tag v0.3.0-beta.4 will trigger the release workflow. The published GHCR manifest, signature, attestation, SBOM, release assets, and exact main CI will be verified before marking the promotion complete.

Summary by CodeRabbit

  • New Features

    • Release builds now publish an immutable, multi-platform hub container image for AMD64 and ARM64.
    • Images are signed and accompanied by provenance and SPDX SBOM attestations.
  • Documentation

    • Added instructions for verifying image signatures, provenance, SBOMs, and exact release digests.
    • Helm deployment guidance now requires a verified repository@sha256:... image reference and rejects mutable tags such as latest.
    • Clarified migration, secret, and release-image requirements for hub deployments.

Gnani Rahul and others added 2 commits July 14, 2026 22:22
GSTACK-Checkpoint: 2026-07-14/e9-hub-oci-publication#1
Signed-off-by: Gnani Rahul <gnani.nutakki@gmail.com>
…i-publication

feat(e9): publish signed hub OCI image
@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The release workflow now publishes a signed, immutable amd64/arm64 hub image with provenance and SPDX SBOM attestations. Release checks verify OCI platforms, policy tests validate workflow and documentation contracts, and release guides require digest-based image verification.

Changes

Hub image release

Layer / File(s) Summary
Hub image publication pipeline
.github/workflows/release.yml, sessions/...
The release workflow stages archives, publishes the multi-platform GHCR image, signs its manifest digest, creates provenance and SBOM attestations, and uploads related release artifacts.
Release archive OCI verification
hack/verify-release-hub-image.sh, Makefile
release-check builds an OCI layout from amd64 and arm64 release archives and validates the expected platform set.
Workflow and release policy validation
tests/scripts/*, tools/internal/releasepack/policy_test.go, Makefile, sessions/...
Shell and Go tests validate immutable publication, signing, attestations, workflow ordering, verifier settings, release uploads, and documentation requirements.
Immutable image consumer contract
README.md, docs/RELEASE.md, sessions/...
Documentation defines release-bound image artifacts, digest-only chart references, Cosign and GitHub attestation verification, and fail-closed installation inputs.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ReleaseTag
  participant GitHubActions
  participant GHCR
  participant Cosign
  participant GitHubAttestations
  participant GitHubRelease
  ReleaseTag->>GitHubActions: start release workflow
  GitHubActions->>GHCR: push amd64/arm64 hub manifest
  GitHubActions->>Cosign: sign and verify manifest digest
  GitHubActions->>GitHubAttestations: publish provenance and SBOM attestations
  GitHubActions->>GitHubRelease: upload digest and attestation bundles
Loading

Possibly related issues

  • Issue 169: The changes implement signed, immutable multi-platform GHCR hub-image publication, verification, documentation, and policy tests.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title correctly identifies the release version and matches the PR’s main purpose.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
.github/workflows/release.yml (1)

127-154: 🩺 Stability & Availability | 🔵 Trivial | 💤 Low value

Guard-then-push has a residual TOCTOU window, and GHCR offers no native immutable-tag backstop.

docker manifest inspect and the subsequent push are two separate network calls; nothing prevents a concurrent/duplicate run for the same tag from racing between them. Since GHCR does not support registry-level immutable tags (unlike Docker Hub/Quay/Harbor), this shell-level guard is the sole enforcement mechanism. Additionally, if the workflow fails after the image is pushed but before signing/attestation completes (e.g., a transient cosign/syft failure), re-running the same tag will trip this guard ("hub image tag already exists") and block a legitimate recovery — the operator would need to manually delete the GHCR package version or cut a new tag.

This is likely an accepted trade-off for immutability, but worth calling out explicitly as an operational risk (recovery path after partial failure) rather than a functional bug.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/release.yml around lines 127 - 154, Document the accepted
operational risk in the release workflow around “Guard hub image tag against
overwrite”: the separate manifest check and push can race, and a post-push
signing or attestation failure will block reruns because the existing tag is
treated as immutable. Add concise guidance describing the required recovery
path, such as manually deleting the GHCR package version or publishing a new
tag, without changing the guard or publish behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/RELEASE.md`:
- Around line 50-66: Add --source-ref "refs/tags/$tag" to both gh attestation
verify commands in the release verification instructions, preserving their
existing repository, signer-workflow, and SPDX predicate options so attestations
are bound to the exact release tag.

---

Nitpick comments:
In @.github/workflows/release.yml:
- Around line 127-154: Document the accepted operational risk in the release
workflow around “Guard hub image tag against overwrite”: the separate manifest
check and push can race, and a post-push signing or attestation failure will
block reruns because the existing tag is treated as immutable. Add concise
guidance describing the required recovery path, such as manually deleting the
GHCR package version or publishing a new tag, without changing the guard or
publish behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ad0d1f37-410e-40c9-89e6-99626e83a95e

📥 Commits

Reviewing files that changed from the base of the PR and between 0cc43aa and 6fe30e0.

📒 Files selected for processing (8)
  • .github/workflows/release.yml
  • Makefile
  • README.md
  • docs/RELEASE.md
  • hack/verify-release-hub-image.sh
  • sessions/2026-07-14-e9-hub-oci-publication.md
  • tests/scripts/release_hub_image_policy_test.sh
  • tools/internal/releasepack/policy_test.go

Comment thread docs/RELEASE.md
Comment on lines +50 to +66
Verify the keyless image signature against the exact tag workflow identity, then verify GitHub
provenance and the SPDX SBOM attestation. These commands require registry access; the later air-gap
workflow consumes mirrored, pre-verified material rather than weakening this verification boundary.

```bash
identity="https://github.com/ArdurAI/sith/.github/workflows/release.yml@refs/tags/${tag}"
cosign verify \
--certificate-identity "$identity" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
"$image"
gh attestation verify "oci://$image" \
--repo ArdurAI/sith \
--signer-workflow ArdurAI/sith/.github/workflows/release.yml
gh attestation verify "oci://$image" \
--repo ArdurAI/sith \
--signer-workflow ArdurAI/sith/.github/workflows/release.yml \
--predicate-type https://spdx.dev/Document/v2.3

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

GitHub CLI gh attestation verify --source-ref exact syntax refs/tags tag release workflow identity

💡 Result:

The gh attestation verify command in the GitHub CLI allows you to enforce that an artifact's provenance matches a specific Git reference (such as a tag) using the --source-ref flag [1][2]. When verifying an artifact against a release tag and a specific workflow identity, the syntax is as follows: gh attestation verify \ --repo / \ --source-ref refs/tags/ \ --signer-workflow //@refs/tags/ Explanation of flags: --repo /: Specifies the repository associated with the artifact [3][2]. This is required for fetching the attestation [4]. --source-ref refs/tags/: Enforces that the Git reference associated with the source repository matches the provided tag exactly [5][2]. --signer-workflow @refs/tags/: Enforces that the workflow that signed the attestation matches the specified workflow file, optionally scoped to a specific tag or commit [4][2][6]. Example: To verify an artifact against a release version (e.g., v1.0.0) and a specific release workflow: gh attestation verify my-artifact.zip \ --repo my-org/my-repo \ --source-ref refs/tags/v1.0.0 \ --signer-workflow my-org/my-repo/.github/workflows/release.yaml@refs/tags/v1.0.0 This ensures the artifact was produced by the specified workflow running on the exact tag provided [4][6].

Citations:


Bind attestation verification to the exact release tag.
Add --source-ref "refs/tags/$tag" to both gh attestation verify commands so the attestation must come from the release tag, not just the workflow file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/RELEASE.md` around lines 50 - 66, Add --source-ref "refs/tags/$tag" to
both gh attestation verify commands in the release verification instructions,
preserving their existing repository, signer-workflow, and SPDX predicate
options so attestations are bound to the exact release tag.

@gnanirahulnutakki
gnanirahulnutakki merged commit ff735ca into main Jul 15, 2026
12 checks passed
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