Things to do before issuing a new release:
Update docs/user-manual/en/versions.adoc to include appropriate release notes and upgrade instructions. See previous entries for guidance.
Build the release locally: mvn clean install -Prelease
Test the standalone release (this should be done on windows as well as linux):
Run the examples, from the development branch.
If everything is successful follow these next steps to build and publish artifacts to Nexus and send out a release vote.
If you don't have a key to sign the release artifacts, follow the instruction at apache release signing.
Ensure that your key is listed at https://dist.apache.org/repos/dist/release/activemq/KEYS. If not, generate the key information, e.g.:
gpg --list-sigs username@apache.org > /tmp/key; gpg --armor --export username@apache.org >> /tmp/key
Then send the key information in /tmp/key
to private@activemq.apache.org
so it can be added.
Ensure that your key is listed at https://home.apache.org/keys/committer/. If not add your key id (available via gpg --fingerprint <key>
) to the OpenPGP Public Key Primary Fingerprint
field at https://id.apache.org/. Note: this is just the key id, not the whole fingerprint.
Before starting make sure you clone a brand new git as follows as the release plugin will use the upstream for pushing the tags:
git clone https://github.com/apache/activemq-artemis.git cd activemq-artemis git remote add upstream https://gitbox.apache.org/repos/asf/activemq-artemis.git
If your git user.email
and/or user.name
are not set globally then you'll need to set these on the newly clone repository as they will be used during the release process to make commits to the upstream repository, e.g.:
git config user.email "username@apache.org" git config user.name "FirstName LastName"
This should be the same user.email
and user.name
you use on your main repository.
You will have to use this following maven command to perform the release:
mvn clean release:prepare -Prelease
You could optionally set pushChanges=false
so the version commit and tag won't be pushed upstream (you would have to do it yourself):
mvn clean release:prepare -DpushChanges=false -Prelease
When prompted make sure the new development version matches with the next expected release, rather than the offered patch release. Example:
[INFO] Checking dependencies and plugins for snapshots ... What is the release version for "ActiveMQ Artemis Parent"? (artemis-pom) 2.31.0: : What is the SCM release tag or label for "ActiveMQ Artemis Parent"? (artemis-pom) 2.31.0: : What is the new development version for "ActiveMQ Artemis Parent"? (artemis-pom) 2.31.1-SNAPSHOT: : 2.32.0-SNAPSHOT
Otherwise snapshots would be created at 2.31.1-SNAPSHOT and probably left to go stale rather than get cleaned out if the next release is actually 2.32.0. (Unless we did ever release 2.31.1 in that example).
For more information look at the prepare plugin:
If you set pushChanges=false
then you will have to push the changes manually. The first command is to push the commits which are for changing the <version>
in the pom.xml files, and the second push is for the tag, e.g.:
git push upstream git push upstream <version>
Ensure that your environment is ready to deploy to the ASF Nexus repository as described at Publishing Maven Artifacts
Copy the file release.properties, that is generated at the root of the project during the release, before starting the upload. You could need it if the upload fails.
To upload it to nexus, perform this command:
mvn release:perform -Prelease
Note: this can take quite a while depending on the speed for your Internet connection. If the upload fails or is interrupted, remove the incomplete repository using the “Drop” button on Nexus website. Before starting the upload again, check the release.properties at the root of the project.
Keep the checkout used to run the release process for later, the website update scripts will reference it for documentation output.
If something happened during the release upload to nexus, you may need to eventually redo the upload. Remove the incomplete repository using the “Drop” button on Nexus website. Before starting the upload again, check the release.properties at the root of the project.
There is a release.properties file that is generated at the root of the project during the release. In case you want to upload a previously tagged release, add this file as follows:
scm.url=scm:git:https://github.com/apache/activemq-artemis.git scm.tag=2.31.0
Give the staging repository contents a quick inspection using the content navigation area, then proceed to close the staging repo using the “Close” button on Nexus website, locking it from further modification and exposing its contents at a staging URL to allow testing. Set a description such as “ActiveMQ Artemis (RC1)” while closing.
Use the closed staging repo contents to populate the dist dev svn area with the official release artifacts for voting. Use the script already present in the repo to download the files and populate a new ${CURRENT-RELEASE} dir:
svn co https://dist.apache.org/repos/dist/dev/activemq/activemq-artemis/ cd activemq-artemis ./prepare-release.sh https://repository.apache.org/content/repositories/orgapacheactivemq-${NEXUS-REPO-ID} ${CURRENT-RELEASE}
Give the files a check over and commit the new dir and start a vote if all looks well.
svn add <version> svn commit
Old staged releases can be cleaned out periodically.
Please, include the git-commit-report as part of the release process. To generate it, follow these steps:
$ cd activemq-website $ ./scripts/release/create-artemis-git-report.sh <path.to/activemq-artemis> <previous-version> <version>
For example the command used for 2.31.0, which followed 2.30.0, could have been:
$ cd activemq-website $ ./scripts/release/create-artemis-git-report.sh ../path.to/activemq-artemis 2.30.0 2.31.0
This will parse all the git commits between the previous and current release tag while looking at current JIRA status.
The report page should have been created in the website repo at: src/components/artemis/download/commit-report-<version>.html
. Check it over and commit + push when satisfied.
Use the git-report to do some JIRA cleanup making sure your commits and JIRA are accurate:
JIRAS on this Report
at the bottom of the report.Manage Versions
button at the ActiveMQ Artemis Releases pageFix Version
field.Once all the artifacts are stage then send an email to dev@activemq.apache.org
. It should have a subject like [VOTE] Apache ActiveMQ Artemis <version>
. Here is an example for the body of the message:
I would like to propose an Apache ActiveMQ Artemis <version> release. We added these new features as part of <version>: [ARTEMIS-123] - Great new feature 1 [ARTEMIS-456] - Great new feature 2 The release notes can be found here: https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=<releaseNotesVersionID>&projectId=12315920 Ths git commit report is here: https://activemq.apache.org/components/artemis/download/commit-report-<version> Source and binary distributions can be found here: https://dist.apache.org/repos/dist/dev/activemq/activemq-artemis/<version>/ The Maven staging repository is here: https://repository.apache.org/content/repositories/orgapacheactivemq-<repoID> If you would like to validate the release: https://activemq.apache.org/components/artemis/documentation/hacking-guide/#validating-releases It is tagged in the git repo as <version> [ ] +1 approve this release [ ] +0 no opinion [ ] -1 disapprove (and reason why) Here's my +1
Rules for the Apache voting process are stipulated here.
Assuming the vote is successful send a email with a subject like [RESULT] [VOTE] Apache ActiveMQ Artemis <version>
informing the list about the voting results, e.g.:
The vote passed with 4 votes, 3 binding and 1 non-binding. The following votes were received: Binding: +1 John Doe +1 Jane Doe +1 Bill Smith Non Binding: +1 Mike Williams Thank you to everyone who contributed and took the time to review the release candidates and vote. I will add the files to the dist release repo and release the maven staging repo, updating the website once it has had time to sync to the CDN and Maven Central. Regards
After a successful vote, populate the dist release area using the staged files from the dist dev area to allow them to mirror. Note: this can only be done by a PMC member.
Use the script already present in the repo to copy the staged files from the dist dev area to the dist release area:
svn co https://dist.apache.org/repos/dist/dev/activemq/activemq-artemis/ cd activemq-artemis ./promote-release.sh ${CURRENT-RELEASE}
It takes a small period to sync with the CDN, say ~15mins. The CDN content can be viewed here.
Go to https://repository.apache.org/#stagingRepositories and click the “Release” button.
It takes a small period to sync with Maven Central, say ~30-60mins. The Central content can be viewed here.
Wait for the CDN to sync first after updating SVN, and additionally for Maven Central to sync, before proceeding.
The CDN content can be viewed here. The Maven Central content can be viewed here.
Clone the activemq-website repository:
git clone https://gitbox.apache.org/repos/asf/activemq-website.git cd activemq-website
NOTE: Some of the release scripts use Python, ensure you have it installed before proceeding. Also, the PyYAML lib is used. Examples for installing that include using dnf install python3-pyyaml
on Fedora, or installing it using Pip by running pip install pyyaml
.
Once the CDN and Maven Central are up-to-date then update the site as follows:
./scripts/release/add-artemis-release.sh <path.to/activemq-artemis> <previous-version> <new-version>
This does the following:
src/_artemis_releases/artemis-<padded-version-string>.md
.src/components/artemis/download/release-notes-<new-version>.md
.src/components/artemis/download/commit-report-<new-version>.html
).src/components/artemis/documentation/<previous-version>
.src/components/artemis/documentation/latest
with those from the new release.src/components/artemis/documentation/javadocs/javadoc-latest
with those from the new release.Example from the 2.32.0 release:
./scripts/release/add-artemis-release.sh ../activemq-artemis 2.31.2 2.32.0
src/_artemis_releases/artemis-<padded-version-string>.md
and update shortDescription as appropriate to the release content.src/_data/current_releases.yml
file if needed to set the new version stream as current.Check over git status
etc. Run git add
for all the added directories & files and then git commit -m "updates for <version> release"
. Once pushed, the changes should be published automatically by the jekyll_websites
builder of the apache buildbot.
The examples repo should be updated to reflect the new release and development versions.
Take a fresh clone of the repo, check out the development branch, and run the provided script, then check the results and push.
git clone https://gitbox.apache.org/repos/asf/activemq-artemis-examples.git cd activemq-artemis-examples git checkout development ./scripts/release/update-branch-versions.sh <release-version> <new-main-snapshot-version>"
Example from the 2.32.0 release:
git clone https://gitbox.apache.org/repos/asf/activemq-artemis-examples.git cd activemq-artemis-examples git checkout development ./scripts/release/update-branch-versions.sh 2.32.0 2.33.0-SNAPSHOT"
Check things over and then push the development
and main
branches (optionally use your fork, to test things out before pushing to the main examples repo or even to raise PRs).
NOTE: The main
branch CI build does not build Artemis, so the release must be available on Maven Central before pushing main or the build will fail. The development
branch will check out the Artemis main branch and build against that, or it can be manually triggered and pointed to e.g a release tag.
docker
in your environment.buildx
Docker plugin to support multi-platform builds because release-docker.sh
will create images for both linux/amd64
and linux/arm64
. This, of course, requires the base images from Eclipse Temurin to support these platforms as well (which they do).apache/activemq-artemis
. If you don't have access you can request it by creating an INFRA Jira ticket (e.g. https://issues.apache.org/jira/browse/INFRA-24831).scripts
directory and run release-docker.sh
with the proper parameters, e.g.:$ ./release-docker.sh 2.31.0 apacheYou can easily perform a test run by using your personal account, e.g.:
$ ./release-docker.sh 2.31.0 myUsername
Once the website is updated then send an email with a subject like [ANNOUNCE] ActiveMQ Artemis <version> Released
to user@activemq.apache.org
& dev@activemq.apache.org
, e.g.:
I'm pleased to announce the release of ActiveMQ Artemis <version>. Downloads are now available at: https://activemq.apache.org/components/artemis/download/ For a complete list of updates: https://activemq.apache.org/components/artemis/download/release-notes-<version> I would like to highlight these improvements: - Summary of feature 1: <link to relevant documentation> - Summary of feature 2: <link to relevant documentation> - Summary of feature 3: <link to relevant documentation> As usual it contains a handful of bug fixes and other improvements. Many thanks for all the contributors to this release.
Only the current releases should be mirrored. Older releases must be cleared:
svn rm -m "clean out older release" https://dist.apache.org/repos/dist/release/activemq/activemq-artemis/${OLD-RELEASE}
Any links to them on the site must be updated to reference the ASF archive instead at https://archive.apache.org/dist/activemq/activemq-artemis/ (this should already have been done implicitly in the previous step).
Ensure old releases are only removed after the site is updated in order to avoid broken links.
Use https://reporter.apache.org/addrelease.html?activemq to update the release information.
This information will be used in the quarterly reports submitted to the Apache Board.
For more information consult the apache guide at this address: