Conversation
OSSF Scorecard's Signed-Releases check pattern-matches against a fixed
allowlist of signature extensions: .sig, .asc, .minisig, .sigstore,
.sigstore.json, .intoto.jsonl. The .bundle extension that cosign writes
by default is NOT on that list, so cosign-signed releases using .bundle
score 0/10 on Signed-Releases.
The bytes inside the file are identical to the Sigstore bundle JSON
format — only the filename matters for tooling detection. cosign
verify-blob --bundle works identically with either extension.
Changes:
- templates/release-generic.yml: emit ${file}.sigstore.json instead of
${file}.bundle, with an inline comment explaining why
- checkpoints.yaml GR-10: accept .sigstore.json (preferred) and keep
.bundle (legacy) so existing releases don't fail; describe the
Scorecard implication in the desc
- evals/evals.json scenario 28: update expected_output and expectations
to reflect both extensions and the Scorecard rule
Reference upstream change to the netresearch shared workflows:
netresearch/typo3-ci-workflows#84
Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
…ssons Two lessons surfaced during the netresearch/t3x-nr-passkeys-be v0.9.0 release that the skill was missing: 1. .sigstore.json vs .bundle for cosign output OSSF Scorecard's Signed-Releases check only recognizes a fixed allowlist of signature extensions; .bundle (cosign's default) is not on it. Add a dedicated subsection to references/supply-chain-security.md explaining the allowlist, why the rename is purely cosmetic (bytes are the Sigstore bundle JSON regardless of filename), the concrete workflow snippet, and the "past releases can't be retroactively fixed" caveat (Scorecard averages over the last 4 releases, so the score climbs gradually). References upstream PR netresearch/typo3-ci-workflows#84. 2. Tag the merge commit, not the release branch tip The release-prep PR pattern was already documented across SKILL.md, release-prepare.md, and recovery-procedures.md, but none of them spelled out *which commit* to tag after the PR merges. Add the "checkout main && pull, then tag" reasoning to release-process.md Phase 3, and a brief affirmative note to SKILL.md step 5 stating that a release/vX.Y.Z PR is preferred over direct main pushes (even though many tutorials show direct pushes — branch protection often blocks them anyway, and the PR gives CI one more chance to verify the version bump). The companion commit fixes the template, checkpoint, and eval that embodied the .bundle pattern — these docs explain the *why*. Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
There was a problem hiding this comment.
Pull request overview
This PR updates the GitHub release skill’s templates, checkpoints, eval scenario text, and documentation to reflect two release learnings: (1) cosign bundle assets should use a Scorecard-recognized filename extension (.sigstore.json), and (2) version bumps should go through a release-prep PR and the tag should be created from main after merge.
Changes:
- Update the shared release workflow template to emit cosign bundle outputs as
${file}.sigstore.jsoninstead of${file}.bundle. - Update GR-10 checkpoint + eval scenario 28 guidance to recognize
.sigstore.json(preferred) while keeping.bundleas legacy. - Expand documentation on why the extension matters for OSSF Scorecard and clarify the “release PR + tag after merge” process.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| skills/github-release/templates/release-generic.yml | Switch cosign bundle output extension to .sigstore.json and document rationale inline. |
| skills/github-release/checkpoints.yaml | Update GR-10 asset-detection pattern and description to include .sigstore.json and legacy .bundle. |
| skills/github-release/evals/evals.json | Update scenario 28 expected behavior/expectations to prefer .sigstore.json and note Scorecard implications. |
| skills/github-release/references/supply-chain-security.md | Document Scorecard allowlist and why .sigstore.json is required for tooling detection. |
| skills/github-release/references/release-process.md | Clarify tagging steps post-merge and rationale for tagging from main after PR merge. |
| skills/github-release/SKILL.md | Reinforce PR-based release-prep flow and point to the tagging guidance in release-process reference. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Code Review
This pull request updates the GitHub release process documentation and templates to prioritize the .sigstore.json extension for cosign signature bundles, ensuring compliance with OSSF Scorecard's Signed-Releases check. It also clarifies the requirement to tag the merge commit on the main branch rather than the release branch tip. I have no further feedback to provide as no review comments were present.
… .sigstore to checkpoint - SKILL.md: trim to 490 words (was 547, max 500); make step 6 strategy-agnostic by tagging main's HEAD rather than asserting "merge commit" - references/release-process.md: clarify that main's post-merge HEAD differs by merge strategy (fast-forward / squash / merge-commit); fix incorrect claim that release branch tip is "not reachable from main cleanly" - checkpoints.yaml: extend GR-10 to accept bare .sigstore extension (also on the OSSF Scorecard Signed-Releases allowlist), alongside .sigstore.json, .bundle, and .sig+.pem Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
The reusable validate workflow's inline yamllint default sets line-length.max to 200, which rejects the GR-10 checkpoint pattern (now 280 chars after adding the .sigstore branch). Add a repo-local .yamllint.yml so the workflow uses the project's config instead of the inline default — long single-line jq patterns in checkpoints.yaml are intentional and shouldn't be split. Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
|



Summary
Two lessons surfaced during the
netresearch/t3x-nr-passkeys-bev0.9.0 release that the skill was either missing or only half-documenting. This PR captures both — and fixes the template/checkpoint that embodied the wrong pattern.Lesson 1 —
.sigstore.jsonextension for cosign outputOSSF Scorecard's Signed-Releases check pattern-matches release-asset filenames against a fixed allowlist:
.sig,.asc,.minisig,.sigstore,.sigstore.json,.intoto.jsonlThe
.bundleextension thatcosign sign-blob --bundlewrites by default is not on that list, so cosign-signed releases that use.bundlescore0/10onSigned-Releaseseven though they ARE signed. The bytes inside the file are identical to the Sigstore bundle JSON format — the rename is purely cosmetic for tooling detection, andcosign verify-blob --bundle file.sigstore.jsonworks identically.Concrete fix:
Past releases cannot be retroactively fixed (GitHub releases are immutable once assets are attached). Only future releases benefit. Scorecard averages over the last 4 releases, so the score climbs gradually.
Reference upstream change for the netresearch shared workflows (already merged): netresearch/typo3-ci-workflows#84 — applied to both `release.yml` and `release-typo3-extension.yml`.
Lesson 2 — `release: vX.Y.Z` PR pattern + tag the merge commit
The release-prep PR pattern was already documented across SKILL.md, `commands/release-prepare.md`, and `references/recovery-procedures.md` ("Branch Protection Blocks the [RELEASE] Commit" section). What was missing:
Changes
Commit 1 — `fix(release): use .sigstore.json extension for cosign output`
The skill currently embodies the bug Lesson 1 calls out. Fixed:
Commit 2 — `docs(release): capture sigstore extension and merge-commit tagging lessons`
Test plan