HowTo Release - EsotericSoftware/kryo GitHub Wiki
-
GPG key for signing the artifacts, published to a public keyserver such as
keyserver.ubuntu.com. See https://central.sonatype.org/publish/requirements/gpg/. Check that it has not expired withgpg --list-keys. -
Central Portal user token in
~/.m2/settings.xmlas servercentral. Generate it at https://central.sonatype.com under "View Account" → "Generate User Token":<server> <id>central</id> <username>TOKEN_USERNAME</username> <password>TOKEN_PASSWORD</password> </server>
-
JDK 11 for Kryo 5 (master), JDK 25 for Kryo 6 (kryo-6 branch). The
releaseprofile enforces it. -
SSH push access to the repository.
release:preparepushes the release commits and the tag. -
japi-compliance-checker for the compatibility report:
brew install japi-compliance-checker.
- Prepare
- Make sure CI is green on latest master and your working tree is clean.
- Run the tests locally, because the release build skips them:
mvn clean verify - Kryo 6: check the API report
target/japicmp/api-check.htmlthatmvn verifywrites. It compares the API with the newest release on Maven Central, so it lists every binary and source incompatible change since then. Make sure the release notes and MIGRATION.md mention them. - Use the JDK of the release for all following Maven commands, eg
export JAVA_HOME=$(/usr/libexec/java_home -v 25)
- Release with Maven
-
mvn release:clean release:prepare -DreleaseVersion=$NEWVERSION -DdevelopmentVersion=$NEXTVERSION-SNAPSHOT. This creates and pushes the tagkryo-parent-$NEWVERSION. -
mvn release:perform. This builds, signs, and uploads all artifacts to the Central Portal.
-
- Publish the release on Maven Central
- Log in at https://central.sonatype.com and go to "Publish" → "Deployments".
- Wait until the deployment is "Validated", then click "Publish".
- The artifacts appear on https://repo1.maven.org/maven2/com/esotericsoftware/kryo/ after 15-30 minutes.
- Document the release
- Create the compatibility report from the repository root with japi-compliance-checker:
- Download
kryo-$OLDVERSION.jarfrom Maven Central. The new jar is attarget/checkout/target/kryo-$NEWVERSION.jar. - Run
japi-compliance-checker -lib kryo kryo-$OLDVERSION.jar kryo-$NEWVERSION.jar. This writescompat_reports/kryo/$OLDVERSION_to_$NEWVERSION/compat_report.html. -
git addthe report.
- Download
- Update the README Recent Releases and Installation With Maven sections, including the snapshot version.
- Commit and push.
- Create the release at https://github.com/EsotericSoftware/kryo/releases for the tag
kryo-parent-$NEWVERSIONand attachtarget/checkout/target/kryo-$NEWVERSION-all.zip.
- Create the compatibility report from the repository root with japi-compliance-checker:
After the 6.0.0 release, set kryo.api.check.breakBuild to true in main/pom.xml. From then on, a binary or source incompatible change against the newest 6.x release fails the build. Before 6.0.0 the API check only reports, because Kryo 6 changes the API of Kryo 5 on purpose.