This document describes the current procedure for preparing an Ignite 3 release.
- Docker 19.03+
- Verify docker installation:
docker version - Verify docker buildx installation:
docker buildx version
- Verify docker installation:
- .NET SDK 8.0.407+
- Verify .NET installation:
dotnet --version
- Verify .NET installation:
-
- Also some specific packages like:
doxygen, no need to list them all, it`s easy enough to understand it from possible output errors.
- Also some specific packages like:
- Create a GPG key, upload it to a keyserver, and locate its ID. More details here: https://infra.apache.org/openpgp.html
- Checkout Apache distribution directories:
svn checkout https://dist.apache.org/repos/dist/dev/ignite dist-dev svn checkout https://dist.apache.org/repos/dist/release/ignite dist-release - Provide your Apache credentials to Gradle (required for uploading to Apache Nexus) - create or update
~/.gradle/gradle.propertiesfile with the following content:(do NOT put secrets intostaging_user=*INSERT STAGING USERNAME HERE* staging_password=*INSERT STAGING PASSWORD HERE*gradle.propertiesin the project dir - see Gradle docs for more details).
For all the commands going forward:
- Replace
{version}with the version number being released. - Replace
{rc}with the current sequential number of the release candidate. - Replace
{gpg}with your GPG key ID. - Replace
{dist.dev}with the local path to the development distribution directory. - Replace
{dist.release}with the local path to the release distribution directory.
- Collect all release important unresolved issues and label them
release-{version}-blocker, inform the community that all further critical release issues need to be labeled appropriately. It is not necessary, but it allows don't to miss important issues. - Check license criteria for all dependencies run
./gradlew :packaging:generateLicenseReportand check report./packaging/build/reports/dependency-license.
- Go to the project home folder.
- Update RELEASE_NOTES.txt with the changes since the last release. Commit and push to the
mainbranch. - Update versions in
mainbranch to the next development version (e.g.,x.y.z-SNAPSHOT):- Update
gradle.propertiesmanually. - Run
./gradlew updateVersionto update platforms versions (.NET, C++, Python, etc.) and version in the docker-compose.yml. - Commit and push changes.
- Update
- Create and push a new branch for the release
ignite-{version}. - Update versions in
ignite-{version}branch to the current release version, remove-SNAPSHOTsuffix - same steps as in point 3. - Create a Git tag from
ignite-{version}branch head:git tag -a {version}-rc{rc} -m "{version}-rc{rc}" git push --tags - Setup Gradle properties - create or update
~/.gradle/gradle.propertiesfile with the following content:(do NOT put secrets intosigning.keyId=*INSERT KEY HERE LAST 8 CHARS* signing.password=*INSERT PASSWORD HERE* signing.secretKeyRingFile=*INSERT KEY RING ABSOLUTE PATH HERE*gradle.propertiesin the project dir - see Gradle docs for more details). To generate a secret key ring file use the following commandShow key id command (you need only last 8 chars from printed key)gpg --keyring secring.gpg --export-secret-keys > ~/.gnupg/secring.gpggpg -K - Build the project, sign the artifact and create a staging repository:
./gradlew publishAllPublicationsToMavenRepository - Login to the Apache Nexus and close the new repository: https://repository.apache.org/#stagingRepositories
- Create an empty folder under the development distribution directory:
rm -rf {dist.dev}/{version}-rc{rc}
mkdir {dist.dev}/{version}-rc{rc}
- Create ZIP, DEB, RPM packages, .NET, Java and C++ client, sign them and create checksums:
./gradlew -PprepareRelease prepareRelease -Pplatforms.enable
- Create Docker Images:
Probably you will need some steps from multi-platform doc. Minimal steps during first release:
./gradlew :packaging:docker -Ptarget_platform=linux/amd64 -Pplatforms.enable docker save apacheignite/ignite:{version} -o packaging/build/release/ignite:{version}-amd64.tar ./gradlew :packaging:docker -Ptarget_platform=linux/arm64 -Pplatforms.enable docker save apacheignite/ignite:{version} -o packaging/build/release/ignite:{version}-arm64.tardocker buildx build --load -t linux/arm64 --builder=container . docker run --privileged --rm tonistiigi/binfmt --install all - ODBC: run appropriate TC suites:
download artifacts, remove zip and sign all files with gpg key. After - copy into
https://ci.ignite.apache.org/buildConfiguration/ApacheIgnite3xGradle_Release_Build_OdbcRpmPackage https://ci.ignite.apache.org/buildConfiguration/ApacheIgnite3xGradle_Release_Build_7odbcDebPackage{dist.dev}/{version}-rc{rc} - Copy all packages along with checksums and signatures to the development distribution directory:
cp packaging/build/release/* {dist.dev}/{version}-rc{rc}
- Commit ZIP and DEB\RPM packages:
cd {dist.dev}
svn add {version}-rc{rc}
svn commit -m “Apache Ignite {version} RC{rc}”
- Put the release on a vote on the developers mailing list.
- If vote is passed - send appropriate message for dev-list, otherwise apply appropriate changes, don't forget to move
git tagif there are code related changesgit tag -d {version}-rc{rc}; git tag -a {version}-rc{rc} -m '{version}-rc{rc}'; git push --tags.
Perform the following actions ONLY after the vote is successful and closed.
- Login to the Apache Nexus and release the staging repository: https://repository.apache.org/#stagingRepositories
- Create an empty folder under the release distribution directory:
rm -rf {dist.release}/{version} mkdir {dist.release}/{version} - Copy ZIP packages along with checksums and signatures to the release distribution directory:
cp {dist.dev}/{version}-rc{rc}/* {dist.release}/{version} - Commit ZIP packages:
cd {dist.release} svn add {version} svn commit -m “Apache Ignite {version}” - Build and publish the documentation - see docs/README.adoc
- Build and publish API docs
- Java:
./gradlew aggregateJavadoc - .NET:
./gradlew :platforms:aggregateDotnetDocs - C++:
./gradlew :platforms:doxygenCppClient - Push to https://github.com/apache/ignite-website/tree/master/releases
- Java:
- Publish Docker images:
./gradlew :packaging:docker -Ptarget_platform=linux/amd64,linux/arm64 -Pdocker_push -Pplatforms.enable(PMC only) otherwise you need to request credentials from PMC-only area in SVN
- Publish NuGet packages:
- Get API key from https://svn.apache.org/repos/private/pmc/ignite/credentials/nuget.org (PMC only)
for i in *.nupkg; do dotnet nuget push $i -k API_KEY_HERE -s "https://nuget.org/"; done(PMC only) otherwise you need to request credentials from PMC-only area in SVN
- Publish Python packages (TODO IGNITE-24327)
- Update https://ignite.apache.org/download.cgi page - see https://cwiki.apache.org/confluence/display/IGNITE/Website+Development, https://cwiki.apache.org/confluence/display/IGNITE/How+to+Document
- https://github.com/apache/ignite-website/blob/master/docs/ignite3/available-versions.txt new version need to be first
- https://github.com/apache/ignite-website/blob/master/docs/ignite3/latest need to contain new version
- Update download links
_src/_components/download-binary.pugand_src/_components/download-source.pug(and others if any were added). Copy the +downloadRow section and edit appropriately. - Write a blog post announcing the release and listing the major changes and improvements. Add a new
.pugfile in_src/_blog.
-
Add compatibility snapshot, OpenAPI spec and update
igniteVersions.jsonfor released version:- On release git branch run the following command to generate new snapshot with compatibility information, copy OpenAPI spec and update the versions file
./gradlew postRelease - Switch git to main branch
- Run compatibility test
./gradlew :ignite-runner:test --tests "org.apache.ignite.internal.configuration.compatibility.ConfigurationCompatibilityTest" - Add new files to git. Commit them under separate JIRA ticket with commit message
{jira_ticket} Add compatibility data for Ignite {version}. Push the change to main branch.
- On release git branch run the following command to generate new snapshot with compatibility information, copy OpenAPI spec and update the versions file