Skip to content

fix(release-sign): use .sigstore extension for scorecard detection#12

Merged
mreuvekamp merged 1 commit intomainfrom
fix/scorecard-signed-releases-ext
May 8, 2026
Merged

fix(release-sign): use .sigstore extension for scorecard detection#12
mreuvekamp merged 1 commit intomainfrom
fix/scorecard-signed-releases-ext

Conversation

@ericwout-overheid
Copy link
Copy Markdown
Collaborator

Summary

  • Rename signing output van .bundle naar .sigstore zodat OpenSSF Scorecard de assets als getekend detecteert.
  • Update SECURITY.md verify-instructies dienovereenkomstig.

Achtergrond

Scorecard scan op commit e1cd5d8 (na PR #11) gaf nog steeds Signed-Releases: 0/10:

Warn: release artifact v0.2.0 not signed

Reden: scorecard's releasesAreSigned probe matcht assets op vaste suffix-allowlist:

var signatureExtensions = []string{".asc", ".minisig", ".sig", ".sign", ".sigstore", ".sigstore.json"}

.bundle zit daar niet in. PR #11 produceerde correct ondertekende cosign v3 sigstore-bundle JSON, alleen onder verkeerde extensie. Inhoud is ongewijzigd, alleen filename.

Vervolg

v0.2.0 release-assets staan nog onder .bundle. Na merge volgt aparte retrofit (download .bundle → upload als .sigstore → delete .bundle) zodat de bestaande release ook in scorecard's lookback (laatste 5 releases) groen wordt.

Test plan

  • CI shellcheck/trivy/scorecard pipelines slagen
  • Volgende release: workflow produceert .sigstore assets
  • Cosign verify met nieuwe extensie werkt (commando in SECURITY.md)
  • v0.2.0 retrofit: bestaande .bundle hernoemd naar .sigstore op release
  • Volgende scorecard scan: Signed-Releases ≥ 8/10

🤖 Generated with Claude Code

OpenSSF Scorecard's signed-releases probe matches assets by suffix
{.asc, .minisig, .sig, .sign, .sigstore, .sigstore.json}. Cosign v3's
--bundle output is sigstore-bundle JSON, but the .bundle extension we
chose isn't in the allowlist, so v0.2.0 scored 0/10 despite being
correctly signed.

Renames signing output to .sigstore (content unchanged) so a fresh
scorecard scan recognizes future releases as signed. v0.2.0 assets
need a separate retrofit (rename existing .bundle -> .sigstore on the
release).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ericwout-overheid
Copy link
Copy Markdown
Collaborator Author

Retrofit-script v0.2.0

Na merge uitvoeren zodat bestaande release ook in scorecard's 5-release lookback als getekend telt. Inhoud assets blijft identiek — alleen filename verandert van .bundle naar .sigstore.

set -euo pipefail
TAG=v0.2.0
REPO=RijksICTGilde/hackathon-claude-code
ARCHIVE=hackathon-claude-code-${TAG}

WORK=$(mktemp -d)
trap 'rm -rf "$WORK"' EXIT
cd "$WORK"

# 1. Download bestaande bundles
gh release download "$TAG" --repo "$REPO" \
  --pattern "${ARCHIVE}.tar.gz.bundle" \
  --pattern "${ARCHIVE}.tar.gz.sha256.bundle"

# 2. Hernoem (content unchanged)
mv "${ARCHIVE}.tar.gz.bundle"        "${ARCHIVE}.tar.gz.sigstore"
mv "${ARCHIVE}.tar.gz.sha256.bundle" "${ARCHIVE}.tar.gz.sha256.sigstore"

# 3. Sanity-check: verifieer voor upload dat nieuwe filename nog
#    geldige cosign-bundle is (zelfde IDENTITY_REGEXP als workflow).
gh release download "$TAG" --repo "$REPO" \
  --pattern "${ARCHIVE}.tar.gz" \
  --pattern "${ARCHIVE}.tar.gz.sha256"

IDENTITY_REGEX='^https://github\.com/RijksICTGilde/hackathon-claude-code/\.github/workflows/release-sign\.yml@refs/(heads/main|tags/v[0-9A-Za-z._+-]+)$'
ISSUER='https://token.actions.githubusercontent.com'

cosign verify-blob \
  --bundle "${ARCHIVE}.tar.gz.sigstore" \
  --certificate-identity-regexp "$IDENTITY_REGEX" \
  --certificate-oidc-issuer "$ISSUER" \
  "${ARCHIVE}.tar.gz"

cosign verify-blob \
  --bundle "${ARCHIVE}.tar.gz.sha256.sigstore" \
  --certificate-identity-regexp "$IDENTITY_REGEX" \
  --certificate-oidc-issuer "$ISSUER" \
  "${ARCHIVE}.tar.gz.sha256"

# 4. Upload nieuwe namen + delete oude. Volgorde: eerst upload, dan
#    delete — zo is er geen window waarin de release onbeschermd is.
gh release upload "$TAG" --repo "$REPO" \
  "${ARCHIVE}.tar.gz.sigstore" \
  "${ARCHIVE}.tar.gz.sha256.sigstore"

gh release delete-asset "$TAG" "${ARCHIVE}.tar.gz.bundle"        --repo "$REPO" --yes
gh release delete-asset "$TAG" "${ARCHIVE}.tar.gz.sha256.bundle" --repo "$REPO" --yes

# 5. Verifieer eindstaat
gh release view "$TAG" --repo "$REPO" --json assets --jq '.assets[].name'

Verwachte assets na retrofit:

  • hackathon-claude-code-v0.2.0.tar.gz
  • hackathon-claude-code-v0.2.0.tar.gz.sha256
  • hackathon-claude-code-v0.2.0.tar.gz.sigstore
  • hackathon-claude-code-v0.2.0.tar.gz.sha256.sigstore

Daarna scorecard handmatig triggeren of wachten op weekly run — Signed-Releases moet ≥8/10 worden.

@mreuvekamp mreuvekamp merged commit e68efb8 into main May 8, 2026
8 checks passed
@mreuvekamp mreuvekamp deleted the fix/scorecard-signed-releases-ext branch May 8, 2026 10:52
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.

2 participants