...
- Check that the version numbers have been incremented after the previous release, as expected. (e.g. https://github.com/apache/tomcat/commit/cec14f9c33af9da271c9681bf6b343c61b6d055a)
- Check that the changelog file mentions your login name as release manager for this release (e.g. "Tomcat 9.0.94 (markt)").
- Check whether the
KEYS
file differs fromhttps://dist.apache.org/repos/dist/release/tomcat/tomcat-9/KEYS
one. The latter one will be replaced after you do a release. Check that theKEYS
file contains your public key. - Check that the full build still works (ant release, preferably). Check that Buildbot builds (https://tomcat.apache.org/ci.html#Buildbot) are green.
...
Build the release + create git tag
The aim is to create a copy of the current trunk but without the "-dev" appended to the end of the version number. All artifacts required for repeatable builds will be included as well.
- Perform an git clone and switch to the correct branch
git clone https://github.com/apache/tomcat /c/releases/asf-tomcat
orgit clone -b 9.0.x git clone https://github.com/apache/tomcat /c/releases/asf-tomcat
cd /c/releases/asf-tomcat
git checkout 9.0.x
git pull
- (Hint: using
ant pre-release
may save you the following step, plus steps 2-3 in the Maven release process.) Edit "build.properties.default" and change the lines after "# ----- Reproducible builds -----" to a new value.
- Note that the value of
ant.tstamp.now
property is in seconds (unlike the value returned bySystem.currentTimeMillis()
method which is milliseconds, see bug 65527 for how this happened for Tomcat 8.5.70).
The value can be printed in a Bash shell with the following command:date +%s
To print seconds since epoch, and date and time in human-readable format in UTC time zone:date -u '+%s %Y-%m-%d %H:%M:%S %Z'
- Note that the value of
Edit "build.properties.default" and change the line version.dev=-dev to version.dev=
- This can be done with
sed -i.bak "s/^version.dev=.*/version.dev=/" build.properties.default
- This can be done with
- Edit "webapps/docs/changelog.xml" and remove replace rtext="in development" from the latest version" with rtext="Release in progress" for the version being released
- Remember that notepad.exe will remove UTF-8 Byte-Order Marks (BOMs). Use write.exe or Notepad++ instead.
- For repeatable releases:
ant release
- Commit these changes
git add res/install-win/*.sig (if you are doing a repeatable release)
git add build.properties.release (if you used 'ant pre-release')
git add res/maven/mvn.properties.release (if you used 'and pre-release')
git commit -a -m "Tag 9.0.94"
git tag 9.0.94
git push origin 9.0.94
- Check the diff mailed to the dev list
- Reset to the 9.0.x branch (
git reset HEAD~ && git checkout build.properties.default && git checkout webapps/docs/changelog.xml && rm -f build.properties.release res/maven/mvn.properties.release
)
I found it simplest to keep this clone for tagging to ensure no other edits found their way into the tag.
Build the release
Set JVM to Java 7 (Tomcat 8.5.x) or 8 (Tomcat 9.0, 10.0) or 11 (Tomcat 10.1)(no Longer necessary: always use Java 11 for release builds)- mkdir /c/releases/TOMCAT_9_0_94
- git archive 9.0.94 | tar -x -C /c/releases/TOMCAT_9_0_94/
I'm using Git Bash for the above. Adjust as necessary for you choice of tools.
- Prepare your build environment:
- Add a build.properties file (or, better yet, keep this file in your ~/build.properties if you have a dedicated build machine) with the following configuration (adjust paths for your environment)
No Format 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 #gpg.exec=/usr/bin/gpg base.path=C:/temp/libs #base.path=~/tomcat-libs # Enable the following if the DigiCert ONE magic is all set up, including ~/.digicertone/pkcs11properties.cfg codesigning.storepass=apikey|keystorepath|keystorepassword do.codesigning=true
...
Build the release
ant release- Commit these changes
git add-A (to pick-up the repeatable build artifacts in addition to the content-changes from above)
git commit -a -m "Tag 9.0.94"
git tag 9.0.94
git push origin 9.0.94
- Check the diff mailed to the dev list
ant pre-release (again, to generate res/maven/mvn.properties)
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 - This does not include the signing of the Windows installer, which must be done using https://one.digicert.com/ and https://infra.apache.org/digicert-use.html which is automated during the build process once the Tomcat PMC key is accessible by using jsign. (Working! Try setting
do.codesigning=true
in build.properties). - The logs for the Windows signing are in ~/.signingmanager/logs on Linux
- If you get an error signing the installer/uninstaller "Cannot load keystore ~/.digicertone/pkcs11properties.cfg" then you probably don't have your environment variables (or
codesigning.storepass
property) set properly.
...
- E.g. http://markmail.org/message/gvmbwocspnwb2dfe
- Increment the version number ready for the next tag (e.g. https://svn.apache.org/viewvc?view=revision&revision=1500094)
Cleaning Up
- Reset to the 9.0.x branch (
git reset HEAD~ && git checkout build.properties.default && git checkout webapps/docs/changelog.xml && rm -f build.properties.release res/maven/mvn.properties.release
)
I found it simplest to keep this clone for tagging to ensure no other edits found their way into the tag.
To get a clean copy of the release (e.g. for testing):
- mkdir /c/releases/TOMCAT_9_0_94
- git archive 9.0.94 | tar -x -C /c/releases/TOMCAT_9_0_94/
I'm using Git Bash for the above. Adjust as necessary for you choice of tools.
If the vote passes
- Send a recap "[VOTE][RESULT]" email to the vote thread on the dev list with the vote counts.
No Format svn mv https://dist.apache.org/repos/dist/dev/tomcat/tomcat-9/v9.0.XX https://dist.apache.org/repos/dist/release/tomcat/tomcat-9/v9.0.XX
No Format svn checkout --depth immediates https://dist.apache.org/repos/dist/release/tomcat/tomcat-9/
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://github.com/apache/tomcat/blob/9.0.x/res/maven/README.txt step 4)
- Wait for the release artifacts to appear in these locations:
- Update the website (e.g. https://svn.apache.org/viewvc?view=revision&revision=1901819)
Note: only modify thexdocs
/ files, then useant docs
to generate the HTML.
Note: the index and oldnews pages are sorted by date. Thus the new announcement pops up to the top of the page.- Update download page (update "[define v]" macro for the new version)
- Move old announcement to the top of the oldnews page.
- Add announcement for the new release to the top of the front page (index).
- Update whichversion page (the current version number).
- Update migration page (versions in "configuration file differences" comparison form).
- Notable changes that change behaviour and may require action when upgrading from the previous release may be added to the "noteable changes" section on the migration page.
- Update doap_Tomcat.rdf file (version number and release date).
Update the build.properties.default file to ensure the correct release is listed.
- Update the docs (see https://svn.apache.org/repos/asf/tomcat/site/trunk/README.txt)
- Also update docs/tomcat-[v]-doc/changelog.html to set the release date to the date the files were copied to the release area in yyyy-MM-dd format ("beta, 2007-02-28" for betas).
- 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 version-branch's changelog to the date the files were copied to the the release area in yyyy-mm-dd format.
E.g. "released 2013-05-03" (for stable versions), "beta, 2007-02-08" (for betas). - Add the version number in Bugzilla (https://bz.apache.org/bugzilla/ → Administration → Products / versions)
- Drop the artifacts for the previous release from https://dist.apache.org/repos/dist/release/tomcat/tomcat-9/
- Add release data (version and date) to reporter.apache.org - https://reporter.apache.org/addrelease.html?tomcat
...