This document is the operator checklist for cutting a release. The
mechanical work lives in .github/workflows/release.yml.
GitHub repository secrets:
| Secret | Source |
|---|---|
OSSRH_USERNAME |
Sonatype Central user token name |
OSSRH_PASSWORD |
Sonatype Central user token password |
GPG_SIGNING_KEY |
ASCII-armored PGP private key, in-memory format |
GPG_SIGNING_PASSWORD |
PGP key passphrase |
Local Gradle properties (only if you publish from a developer machine rather than CI):
# ~/.gradle/gradle.properties
ossrhUsername=...
ossrhPassword=...
signingKey=...
signingPassword=...
The PGP key must be uploaded to a public keyserver (e.g.
keys.openpgp.org) so Sonatype can verify signatures.
Run locally before tagging:
./gradlew clean build # 137 tasks green, 40 tests pass
./gradlew :examples:submit-and-stream:run # spot-check one example
./gradlew :arcp-core:publishToMavenLocal # POM diff against the previous
# release should be smallThen sanity-check:
-
CHANGELOG.mdhas a section for the new version. -
CONFORMANCE.mdtest counts match the actual./gradlew testoutput. -
README.mdversion coordinates match the version you are about to cut (Gradle + Maven snippets). - All 10 examples print
OK …on a fresh clone. -
make -C docs/diagramsproduces no diff against the committed SVGs.
- Visit Actions → release in the GitHub UI.
- Click Run workflow.
- Enter the version (e.g.
1.0.1) — no leadingv. - Leave dry_run unchecked for a real release.
- Confirm.
The workflow:
- Replaces
version = "..."in the rootbuild.gradle.kts. - Runs
./gradlew build— must be green. - Publishes all 10 artifacts to Sonatype Central staging.
- Tags the commit as
vX.Y.Zand pushes the tag.
Sonatype staging holds the artifacts until you log into the Central UI and run Close then Release on the staging repository. Once released, artifacts sync to Maven Central within ~30 minutes.
- Bump the root
versionback to the next SNAPSHOT (e.g.1.0.2-SNAPSHOT) and commit. - Open a release notes pull request based on the CHANGELOG diff.
- Create a GitHub Release pointing at the new tag with the CHANGELOG excerpt as the body.
A dry run with dry_run checked builds, signs, and publishes the artifacts to the GitHub Actions runner's local Maven repo only — no network publish, no tag push. Useful when validating a signing config or a POM change without committing to a real release.
Sonatype Central does not allow re-publishing the same version. If a release goes out broken:
- Cut a patch release with the fix (e.g.
1.0.1→1.0.2). - The broken artifact remains on Central but consumers can pin around it.
This is the same constraint every Maven Central consumer accepts; plan accordingly.