Skip to content

release: switch workflow to annotated tags + add RELEASING.md#108

Open
jamesbroadhead wants to merge 1 commit into
mainfrom
jb/release-annotated-tags
Open

release: switch workflow to annotated tags + add RELEASING.md#108
jamesbroadhead wants to merge 1 commit into
mainfrom
jb/release-annotated-tags

Conversation

@jamesbroadhead
Copy link
Copy Markdown
Contributor

@jamesbroadhead jamesbroadhead commented May 27, 2026

Summary

The release workflow used gh release create "$VERSION" which creates a lightweight tag (objecttype=commit). git tag -v cannot verify lightweight tags — they have no tag object to attach a signature to. v0.1.0 through v0.2.1 are all lightweight, so the README "Integrity" claim that future tags are GPG-signed and verifiable couldn't be honoured even if signing were turned on.

This PR makes annotated tags the default in the release workflow — the strict prerequisite for git tag -v and for GPG/Sigstore signing.

Changes

  • .github/workflows/release.yml — split tag creation from release creation. git tag -a "$VERSION" -m "$VERSION", push the tag, then gh release create --verify-tag (confirms the tag exists before the release).
  • README.md Integrity — stop claiming "future tags will be GPG-signed" as a present fact; describe the actual state (annotated now, signed pending GPG/Sigstore enablement) and link to RELEASING.md.
  • RELEASING.md — new doc covering the release procedure, git tag -v verification, and the signing follow-up.

Out of scope (follow-up)

Signing itself. It requires either:

  • GPG: release-identity key + private key/passphrase in GH Actions secrets; sign step uses git tag -s.
  • Sigstore (gitsign): install sigstore/gitsign in the workflow; no long-lived secret; OIDC token is the identity.

Either approach satisfies the README claim. The choice is a team decision; annotated tags are the strict prerequisite that this PR unblocks.

Existing v0.1.x / v0.2.x tags stay lightweight (would need re-tagging to convert) — RELEASING.md covers both options for that question.

Test plan

  • python3 scripts/skills.py validate passes (no skill content touched).
  • Reviewer to dry-run the workflow on a throwaway tag (v0.0.0-rc1) in a follow-up to confirm annotated-tag creation works on the protected runner.

This pull request and its description were written by Claude.

The release workflow used `gh release create "$VERSION"` which creates a
**lightweight** tag (objecttype=commit). `git tag -v` cannot verify
lightweight tags — they have no tag object to attach a signature to.
v0.1.0 through v0.2.1 are all lightweight, so the README "Integrity"
claim that future tags are GPG-signed and verifiable couldn't be
honoured even if signing were turned on.

Changes:

- `.github/workflows/release.yml`: create an annotated tag with
  `git tag -a` and push it, then `gh release create --verify-tag` to
  ensure the tag exists before the release.
- `README.md` Integrity section: stop claiming "future tags will be
  GPG-signed" as a present fact; describe the actual state (annotated
  now, signed pending GPG/Sigstore enablement) and link to RELEASING.md.
- `RELEASING.md`: new doc covering the release procedure, `git tag -v`
  verification flow, and the path forward to actual signing (GPG via
  secrets vs Sigstore/gitsign via OIDC).

Signing itself is intentionally left for a follow-up — it requires
either a release-identity GPG key + GH Actions secret or a Sigstore
runtime in the workflow, and the choice between those is a team
decision. Annotated tags are the strict prerequisite, and this PR
unblocks that.

This PR was prepared by Claude.
@jamesbroadhead jamesbroadhead force-pushed the jb/release-annotated-tags branch from ce898ab to 9cd8a33 Compare May 27, 2026 23:14
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