Release Process¶
This project should publish releases as repeatable, reviewable changes rather than ad hoc tag pushes.
Use this page together with:
release-checklist.mdfor the operator checklistrelease-gates.mdfor ship / no-ship criteriapublic-api.mdandstability.mdwhen evaluating compatibility and experimental scope
Release Checklist¶
- Ensure
mainis green in CI. - Run
task release:preflight. - Review dependency, security, and CodeQL workflow results.
- Update
CHANGELOG.mdand any release notes if the preflight surfaced missing scope notes. - Confirm documentation and samples match the released API.
- Run
task release:publish:validate-local. - Run
task release -- <version>to set the release version, updateCHANGELOG.md, commit, tag, and push. The pushed release tag starts the release workflow, which waits forChecks / Mainto pass on the same commit before checking out code, deploying docs, or creating a GitHub Release. - Run
task version:bump -- patchafter the release if you want to movemainto the next patch snapshot. - Push the snapshot bump commit if you created one locally.
- Run the
Publish Maven Centralworkflow manually with the exact release tag after GitHub Release creation succeeds. - Review and publish the validated deployment in Central Portal.
Release Preflight¶
release-preflight is the required local gate before release.
It runs, in order:
./mvnw -B -ntp -Pquality verify- strict documentation build
./mvnw -B -ntp -DskipTests install- maintained sample verification for:
samples/java-maven-examplesamples/java-maven-codegen-examplesamples/spring-boot-example
Use:
task release:preflighttask release:preflight:clean
task release:preflight:clean removes the local docs virtual environment after the run. The default
preflight keeps .venv-docs/ to make repeated runs faster.
Release Automation¶
- Pushing
mainruns.github/workflows/ci.yml. - Pushing a release tag matching
vX.Y.ZorvX.Y.Z-rc.Nstarts.github/workflows/release.yaml. - Before any checkout, build, docs deploy, or GitHub Release creation, the release workflow waits for
the
Checks / Mainpush run onmainfor the same commit SHA. - After that CI run succeeds, the release workflow verifies the tag matches the Maven project release
version, builds the documentation Pages artifact, runs a non-publishing Maven
releaseprofile dry run with-Dgpg.skip=true -DskipTests, deploys docs, and only then creates or updates the GitHub Release. - Maven Central publishing is intentionally not part of CI or the GitHub Release workflow.
- Publishing to Maven Central runs only from
.github/workflows/publish.yaml, triggered withworkflow_dispatch. task release:publish:validate-localverifies the Central Publishing effective POMs and deploy lifecycle locally with dummycentralcredentials and-DskipPublishing=true.- The manual publish workflow checks out the requested tag, verifies it matches the Maven project version, runs the same non-publishing
releaseprofile dry run, and only then uploads a signed deployment to Central Portal with the Mavenreleaseprofile. - Central Portal final publish remains a manual maintainer action.
- Local
.dev/bin/release.shno longer runs Mavendeploy; it first runs the release preflight and then prepares and pushes the Git commit and tag for the release.
Release Expectations¶
- Every release should have a changelog entry.
- Public API and compatibility-impacting changes must be described explicitly.
- Published artifacts should include source and javadoc jars where applicable.
- Release metadata must remain suitable for Maven Central publication.
Branching¶
mainis the default integration branch.release/*branches are reserved for stabilization and patch releases when needed.
After Release¶
- Verify the GitHub Release was created or updated after the release workflow observed successful
Checks / MainCI for the release commit. - Review and publish the Central Portal deployment after the manual publish workflow completes.
- Verify published artifacts in Maven Central after Central Portal publishing completes.
- Verify generated site and documentation references if they changed.
- Announce breaking or compatibility-sensitive changes clearly in release notes.