Skip to content

chore(release): the release manager's tag-signing key - #27

Merged
HackTuah merged 1 commit into
mainfrom
chore/release-signing-key
Oct 7, 2026
Merged

HackTuah merged 1 commit into
mainfrom
chore/release-signing-key

Conversation

@HackTuah

@HackTuah HackTuah commented Oct 6, 2026

Copy link
Copy Markdown
Member

What (Linear SCR-419)

  • The release manager's tag-signing key goes in .github/allowed_signers: SSH ed25519 SHA256:HqIaFq/thUm844NjYC3a+4Br40cqD2yJHEq1L2iiw4E, comment dev@scriptkittyos.com, also listed in MAINTAINERS.md. Until now the file was empty, and every release tag was refused.
    • Why a separate key: the GPG key that signs the maintainer's commits carries personal email addresses, and publishing a key publishes its user IDs. This SSH key exists only for release tags.
  • scripts/tag-release.sh --ssh-key FILE signs that one tag with the SSH key (git -c gpg.format=ssh -c user.signingkey=FILE tag -s), leaving how git signs commits untouched.
  • docs/stores.md:
    • Its old advice (git config --global gpg.format ssh) would have switched commit signing to the tag key too. It now says to make a tag-only key with the project's address and use --ssh-key, and warns that exporting a GPG key publishes its user IDs.
    • The release-candidate command is now scripts/tag-release.sh --rc 1 --ssh-key ~/.ssh/kotiko_release.pub.
  • Test: with the repo set up for GPG (no SSH key configured), --ssh-key signs, verifies and pushes, and the repo's gpg.format is unchanged. A missing file, or no key at all, gets a clear error.

Checked

node --test test/unit/release-tags.test.mjs (9 pass), shellcheck, npm run lint (0 errors), reuse lint, check-old-name, bestpractices-links --check. The key line was read from ~/.ssh/kotiko_release.pub itself and its fingerprint checked with ssh-keygen -lf.

🤖 Generated with Claude Code

Adds the lead maintainer's SSH key for release tags to
.github/allowed_signers (SHA256:HqIaFq/thUm844NjYC3a+4Br40cqD2yJHEq1L2iiw4E,
also in MAINTAINERS.md). It's a key made only for tags, with the
project's address as its comment: the GPG key that signs the
maintainer's commits carries personal email addresses, and publishing a
key publishes its user IDs.

tag-release.sh gains --ssh-key FILE, which signs that one tag with the
SSH key without changing how git signs commits. docs/stores.md now says
to do it that way: its old advice, setting gpg.format ssh globally,
would have switched commit signing to the tag key too. A test signs with
--ssh-key while the repository is set up for GPG, and checks that its
settings are untouched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Ayla Croft <dev@scriptkittyos.com>
@HackTuah
HackTuah requested a review from minitru as a code owner October 6, 2026 23:52
@HackTuah
HackTuah merged commit db62607 into main Oct 7, 2026
14 checks passed
@HackTuah
HackTuah deleted the chore/release-signing-key branch October 7, 2026 00: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