ci: harden release pipeline (SBOM, smoke-test, conditional cosign signing) #144
No reviewers
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/OpenSpec
Kind/Security
Kind/Testing
Priority/Critical
Priority/High
Priority/Low
Priority/Medium
RFC - Request For Comments
Reviewed/Confirmed
Reviewed/Duplicate
Reviewed/Invalid
Reviewed/Won't Fix
Status/Abandoned
Status/Blocked
Status/Need More Info
hermes-attempted
hermes-needs-clarification
hermes-ready
hermes-review
hermes-wip
human-required
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
agentic-forges/forgejo-mcp!144
Loading…
Reference in a new issue
No description provided.
Delete branch "refs/pull/144/head"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Step 3 of CI hardening (see beads
forgejo-mcp-51l). Adds supply-chain primitives to the release pipeline:sboms:directive.checksums.txt(was previously disabled).linux/amd64binary, grep--helpoutput for the expected version banner. Catches LDFLAGS-injection regressions and dead binaries before.mcpbpackaging ships them.checksums.txtwithcosign sign-blobusing a key loaded fromCOSIGN_PRIVATE_KEY+COSIGN_PASSWORDsecrets. Skipped with a warning if the secret is unset, so releases keep working until the secret is provisioned. Signing one file covers all artifacts transitively via the checksum chain.Commits
ci: 🚀 enable checksums and per-archive CycloneDX SBOMs in goreleaserci: 🚀 release.yml: syft + cosign install, smoke-test, conditional signci: 🔒️ add cosign-keygen.sh producing SOPS-encrypted k8s Secretscripts/cosign-keygen.sh
Generates a cosign keypair and emits a SOPS-encrypted Kubernetes
Secretmanifest. Defenses applied to satisfy "never store unencrypted on disk, never log":/dev/shm(tmpfs) when available; falls back to/tmp+shred -uzon exit. Trap onEXIT|INT|TERM|HUP.read -rs(no echo). Minimum 12 chars.unsetafter Secret YAML is built.cosign.key+cosign.passwordin place via--encrypted-regex.cosign.pubstays plaintext (intended for commit).set -xnever enabled..gitignoreupdated:secrets/*ignored, only*.enc.yaml,*.enc.yml,cosign.puballowed through.secrets/.gitkeepanchors the directory.Activation steps (post-merge)
.sops.yamlhas a working recipient (age key, KMS, etc.). If not, configure it first.scripts/cosign-keygen.sh— producessecrets/cosign-signing-key.enc.yaml+secrets/cosign.pub.v*tag push will produce a signed release.Consumers verify with:
Design tradeoffs
Test plan
v2.22.0-rc1) and verify:checksums.txtuploaded*.sbom.cdx.jsonuploaded per archivechecksums.txt.siguploaded +cosign verify-blobsucceedsscripts/cosign-keygen.shconfirms tmpfs + shred + encrypted outputFollow-ups
.sops.yamlexists/is correct before firstcosign-keygen.shrun.forgejo-mcp-zuhlands.Refs forgejo-mcp-51l.
op1st Pipelines as Code/on-pull-request-hcpvp is running.
Starting Pipelinerun on-pull-request-hcpvp in namespace op1st-pipelines
You can monitor the execution using the op1st Pipelines as Code PipelineRun viewer or through the command line by
using the tkn CLI with the following command:
tkn pr logs -n op1st-pipelines on-pull-request-hcpvp -fop1st Pipelines as Code/code-scans-z4bsm is running.
Starting Pipelinerun code-scans-z4bsm in namespace op1st-pipelines
You can monitor the execution using the op1st Pipelines as Code PipelineRun viewer or through the command line by
using the tkn CLI with the following command:
tkn pr logs -n op1st-pipelines code-scans-z4bsm -fop1st Pipelines as Code/code-scans-z4bsm has successfully validated your commit.
Task Statuses:
fetch-source
gitleaks-version
gitleaks
op1st Pipelines as Code/on-pull-request-hcpvp has successfully validated your commit.
Task Statuses:
fetch-source
build-and-test