Skip to content

ci: sign releases with the new release key, and check secrets first - #191

Merged
slayerjain merged 1 commit into
mainfrom
ci/release-key-rotation
Nov 9, 2026
Merged

slayerjain merged 1 commit into
mainfrom
ci/release-key-rotation

Conversation

@slayerjain

Copy link
Copy Markdown
Member

Why

v2.1.2 never reached Maven Central. Its release run failed at "Build, sign and publish to Maven Central" with gpg: skipped "8541784E4EC36FB8": No secret key. The private half of that key lived only in the retired Woodpecker pipeline's secrets, so GitHub Actions could not sign with it.

What changes

  • Releases are signed with a new release key: id F844278E3B5F9051, fingerprint 0167FEA3204A35D8C1E11EE9F844278E3B5F9051. The repository's MAVEN_GPG_PRIVATE_KEY and MAVEN_GPG_PASSPHRASE secrets now hold it. Its public half is on keyserver.ubuntu.com, which Central uses to check signatures. GPG_KEY_ID changes in release.yml and keploy-junit5-release.yml.
  • release.yml gets a first step that fails before anything is built or signed, naming each release secret that is missing (CENTRAL_USERNAME, CENTRAL_PASSWORD, MAVEN_GPG_PRIVATE_KEY, MAVEN_GPG_PASSPHRASE). keploy-junit5-release.yml already has this check. Without it, an empty key or passphrase showed up only partway through signing.
  • SECURITY.md lists both keys' fingerprints (the new one from v2.1.3 on, the old one up to v2.1.1) and how to verify a release file.

Checked

  • actionlint and shellcheck pass on both workflows.
  • The new key signs and verifies with its passphrase. -Dgpg.keyname with the primary id selects its signing subkey (12D73514C705018D).
  • No other file in the tree names the old key id.

After merge

The next release, v2.1.3, carries #190 and is the first one signed with the new key.

The release key 8541784E4EC36FB8 could not sign in GitHub Actions: its
private half was only in the retired Woodpecker pipeline's secrets, so
v2.1.2's "Build, sign and publish to Maven Central" failed with "No secret
key" and never published.

Releases are now signed with a new key, F844278E3B5F9051 (fingerprint
0167FEA3204A35D8C1E11EE9F844278E3B5F9051), held in MAVEN_GPG_PRIVATE_KEY
and MAVEN_GPG_PASSPHRASE and published on keyserver.ubuntu.com, where
Central checks signatures.

release.yml now fails before anything is built or signed, naming each
release secret that is missing, as keploy-junit5-release.yml already did.
SECURITY.md lists the fingerprints of both keys and how to check a file.

Signed-off-by: slayerjain <shubhamkjain@outlook.com>
@slayerjain
slayerjain merged commit 18d13f3 into main Nov 9, 2026
7 checks passed
@slayerjain
slayerjain deleted the ci/release-key-rotation branch November 9, 2026 14:21
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