Apache Tomcat Release Process
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.
- 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)
Check that the version numbers have been incremented after the previous release, as expected. (e.g. http://svn.apache.org/viewvc?view=revision&revision=1500094)
- Check that the changelog file mentions your login name as release manager for this release (e.g. "Tomcat 7.0.42 (markt)").
Check whether the KEYS file differs from https://dist.apache.org/repos/dist/release/tomcat/tomcat-7/KEYS one. The latter one will be replaced after you do a release. Check that the KEYS file contains your public key.
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 to version.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 # Tomcat 7 currently requires both JDK 6 and JDK 7 to build a release # JAVA_HOME system property used by Ant has to point to JDK 6 and this points to JDK 7 java.7.home=C:/Program Files (x86)/Java/jdk1.7.0_45
- 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
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
svn checkout --depth immediates https://dist.apache.org/repos/dist/release/tomcat/tomcat-7/
and update the 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)
Update the release date in the changelog to the date the files were copied to the the release area in yyyy-dd-mm format.
E.g. "released 2013-05-03" (for stable versions), "beta, 2007-02-08" (for betas).
- Add the version number in Bugzilla
If the vote does not pass
Update the release date in the changelog to "not released"