Apache Tomcat Release Process
Introduction
This is written primarily for Apache Tomcat release managers although it may also be of interest to anyone looking to validate and/or replicate the release process. This page uses Tomcat 7 as an example but the same process applies to later versions as well. Note that earlier versions have a slightly different, more complex release process.
Pre-requisites
- A subversion client installed and on your path
- Apache Ant installed and on your path (see BUILDING.txt in the root of the svn repo for version requirements)
- The latest release of the minimum Java version that the Tomcat version runs on installed and on your path
- Windows OS (you can do it on Linux but it involves a lot more hassle)
- GnuPG installed
- A public key that is part of the Apache web of trust
- A reasonable internet connection (you will need to upload ~100MB)
Create the tag
The aim is to create a copy of the current trunk but without the "-dev" appended to the end of the version number.
- Perform an svn checkout of tc7.0.x/trunk (e.g. to 7.0.x-release)
- Edit 7.0.x-release/build.properties and change the line
version.suffix=-dev
toversion.suffix=
svn cp . https://svn.apache.org/repos/asf/tomcat/tc7.0.x/tags/TOMCAT_7_0_XX
- Check the diff mailed to the dev list
I found it simplest to keep this checkout with the modified build.properties.default
and just do an svn up
prior to each tag. I only used the checkout for tagging to ensure no other edits found their way into the tag.
Build the release
svn export https://svn.apache.org/repos/asf/tomcat/tc7.0.x/tags/TOMCAT_7_0_XX TOMCAT_7_0_XX
- Add a build.properties file with the following configuration (adjust paths for your environment)
execute.validate=true execute.test.bio=true execute.test.nio=true execute.test.apr=true test.haltonfailure=true gpg.exec=C:/Program Files (x86)/GNU/GnuPG/gpg2.exe base.path=C:/temp/libs
ant release
Notes:
- GPG should be configured to use your Apache code signing key by default
- I always ensured
c:/temp/libs
was empty so that the build had to download all the dependencies
Upload the release
Upload the contents of TOMCAT_7_0_XX/output/release
to https://dist.apache.org/repos/dist/dev/tomcat/tomcat-7/
Generate the Maven artifacts
See https://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/res/maven/README.txt steps 1 to 3 (not step 4!)
Call a vote
- E.g. http://markmail.org/message/gvmbwocspnwb2dfe
- Increment the version number ready for the next tag (e.g. http://svn.apache.org/viewvc?view=revision&revision=1500094)
If the vote passes
svn mv https://dist.apache.org/repos/dist/dev/tomcat/tomcat-7/v7.0.XX https://dist.apache.org/repos/dist/release/tomcat/tomcat-7/v7.0.XX
- and update the
svn checkout --depth immediates https://dist.apache.org/repos/dist/release/tomcat/tomcat-7/
KEYS
file there to be the same as the one used for release. (The download page has links pointing to this file). - Release the Maven artifacts (https://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/res/maven/README.txt step 4)
- Wait for the mirrors to sync (upto 24 hours depending on what percentage of the mirrors you want to sync)
- Update the website (e.g. http://svn.apache.org/viewvc?view=revision&revision=1500109)
Note: the index and oldnews pages are sorted by date. Thus the new announcement pops up to the top of the page. - Update the docs (see http://svn.apache.org/repos/asf/tomcat/site/trunk/README.txt)
- Announce the release (e.g. http://markmail.org/message/xyantb3ozzmucdjt) to users@t.a.o, cc dev@t.a.o, announce@t.a.o, announce@a.o
- Update the release date in the changelog to the date the files were copied to the the release area in yyyy-dd-mm format
- Add the version number in Bugzilla
If the vote does not pass
- Update the release date in the changelog to "not released"