Cutting The Release - Step By Step0 Introduction
This document gives step-by-step instructions for cutting a release. These instructions
assume that the component uses This documentation is pretty *nix-centric. Hopefully, release managers using windoz will be able to work out what they need to do for their platform. Any patches for windoz-based releases will be gratefully received.
Throughout this document, the
The starting point for this document is that all the preparations for the release have been completed,
a release candidate created and a release In particular, it is assumed:
1 Build Distribution FilesEnsure commons-build is available as a sibling directory to the one you will be doing the build in. The most convenient way to do this is simply to check out commons-build into its usual place, then create a symbolic link to it:
# we will be building in foo/tags/foo-1.2
cd foo/tags
# create a link from ./commons-build to wherever the trunk of
# commons-build has been checked out
ln -s {commons-build}/trunk commons-build
Now do a clean build of the binary distribution. For Maven builds, it is assumed that there is a "dist" goal which creates source and binary distributions in subdirectory target/distributions.
$ cd foo/tags/foo-1.2
$ maven clean
$ maven dist
For Ant builds, it is assumed that there is a "dist" target which creates source and binary distribution (.tgz, .zip) bundles.
$ cd foo/tags/foo-1.2
$ ant clean
$ ant dist
Review the generated documentation and in particular ensure that the version number is correct. 2 Create ChecksumsMD5 is the standard hash algorithm used by Apache to allow users to verify the integrity of releases. There are various applications which can be used to create md5 checksums. For example md5sum (on Linux):
$ md5sum -b commons-foo-1.2-src.tar.gz > commons-foo-1.2-src.tar.gz.md5
If possible, the format of the output should conform to the ASF repository standard.
Currently, this is
d1dcb0fbee884bb855bb327b8190af36 *commons-foo-1.2.tar.gz
Create md5 sums for the binary and source releases, both tarred and zipped versions.
These should be stored in files whose names are formed by appending
commons-foo-1.2-src.tar.gz.md5
commons-foo-1.2-src.zip.md5
commons-foo-1.2.tar.gz.md5
commons-foo-1.2.zip.md5
3 Sign ReleasesOpenPGP (RFC2440) compatible detached signatures needed to be created for all releases. Various applications can be used to create these signatures. For example, Gnu Privacy Guard. See the Apache Release Signing FAQ for more information on release signing. Example:
$ gpg --armor --output commons-foo-1.2-src.tar.gz.asc --detach-sig commons-foo-1.2-src.tar.gz
You need a passphrase to unlock the secret key for
user: "Robert Burrell Donkin (CODE SIGNING KEY) <rdonkin@apache.org>"
1024-bit DSA key, ID B1313DE2, created 2003-01-15
Signatures for all varieties of release need to be create. The signature files should be
named after the original with
$ gpg --armor --output commons-foo-1.2-src.tar.gz.asc --detach-sig commons-foo-1.2-src.tar.gz
$ gpg --armor --output commons-foo-1.2-src.zip.asc --detach-sig commons-foo-1.2-src.zip
$ gpg --armor --output commons-foo-1.2.zip.asc --detach-sig commons-foo-1.2.zip
$ gpg --armor --output commons-foo-1.2.tar.gz.asc --detach-sig commons-foo-1.2.tar.gz
If this is the first release you personally have done for Commons, then your code
signing public key must be added to the
4 Verify the Releases
5 Upload ReleasesUpload the following to your home directory on people.apache.org:
A tip is to tar and gz everything and upload it all together:
% scp release.tar.gz rdonkin@www.apache.org:~/
release.tar.gz 100% |*********************************| 841 KB 00:46
% ssh -l rdonkin www.apache.org
Untar in a working directory (named
chgrp commons release/*
chmod 664 release/* # rw-rw-r--
6 Move Releases Into Distribution DirectoriesChange directory to the distribution directory for your component:
cd /www/www.apache.org/dist/commons/foo/
Move source distributions, their detached signatures and md5 sums into position. All source versions live in the source subdirectory.
mv ~/release/commons-foo-1.2-src* source
Move the binary distributions, their detached signatures and md5 sums into position. All binary versions live in the binaries subdirectory.
mv ~/release/commons-foo-1.2* binaries
Double check the permissions for binaries and source distributions. 7 Update Release Directory
Update README
Update the latest release number. Please also read through and correct any mistakes you find
and fix other items (eg. urls) which need updating. If your component is missing a
Copy the revised
Check KEYS file
Update Symbolic Links
rm commons-foo-current*
Recreate links to current distribution
> ln -s source/commons-foo-1.2-src.tar.gz commons-foo-current-src.tar.gz
> ln -s source/commons-foo-1.2-src.tar.gz.asc commons-foo-current-src.tar.gz.asc
> ln -s source/commons-foo-1.2-src.tar.gz.md5 commons-foo-current-src.tar.gz.md5
> ln -s source/commons-foo-1.2-src.zip commons-foo-current-src.zip
> ln -s source/commons-foo-1.2-src.zip.asc commons-foo-current-src.zip.asc
> ln -s source/commons-foo-1.2-src.zip.md5 commons-foo-current-src.zip.md5
> ln -s binaries/commons-foo-1.2.tar.gz commons-foo-current.tar.gz
> ln -s binaries/commons-foo-1.2.tar.gz.md5 commons-foo-current.tar.gz.md5
> ln -s binaries/commons-foo-1.2.tar.gz.asc commons-foo-current.tar.gz.asc
> ln -s binaries/commons-foo-1.2.zip commons-foo-current.zip
> ln -s binaries/commons-foo-1.2.zip.md5 commons-foo-current.zip.md5
> ln -s binaries/commons-foo-1.2.zip.asc commons-foo-current.zip.asc
Please test that these links function correctly!
Update RELEASE-NOTES
mv ~/release/RELEASE-NOTES.txt .
Remove Obsolete Releases 8 Deploy jar, project.xml and license.html to Java-Repository
The ASF Java Respository is the home for distributions in jar format.
Your jar file(s) should be placed in
N.B. Remember to sign files placed in the ASF Java Respository. The current html version of the Apache Software License needs to be in /www/people.apache.org/repo/m1-ibiblio-rsync-repository/commons-foo/licenses as the file license.html. If this file does not exist or reflects an out-of-date version, copy a current version from another component directory. There should also be a symlink named commons-foo.license in this directory. If this link does not exist, create it using
ln -s license.html commons-foo.license
Maven users can deploy release jars automatically using maven's jar plugin. See the project.properties.sample file in the commons-build directory for an example showing how to configure the necessary properties to support jar deployment using scp. A how-to showing how to get an apache ssh key set up can be found here. Given this setup,
maven -Dmaven.repo.list=apache.releases -Duser.name=your-apache-id jar:deploy
will deploy the jar to the Apache Maven repository (with your user name
as the value of the Built-By attribute in the manifest). Note that the
maven jar plugin does not (yet) create or publish signatures, so if you use
maven to deploy the jar, you need to manually sign it and copy the signature
file separately to /www/people.apache.org/repo/m1-ibiblio-rsync-repository/commons-foo/jars.
Make sure that the signature file has correct permissions and group
ownership (matching the jar) after you copy it.
9 Test Main Site Downloads
You should now be able to get the new release from the main apache web site
( Check the main directory:
Follow the links to the binaries and source directories. Check them in a similar manner. 10 Update Component WebSitePublish Updated WebsiteOn your own machine, ensure that the project.xml contains a <siteDirectory> tag that points to /www/commons.apache.org/foo, then run:
maven -Dmaven.username=yourapacheid site:deploy
On people.apache.org, verify that the directory has been updated, and that the file and directory permissions are correct (readable by all, not writeable by world). Note that the files are transferred to the real web site only every few hours, so it may be a while before you see your changes appear. However if you set your webbrowser's HTTP proxy to 209.237.227.195 port 80 and access http://commons.apache.org/ you should be able to see the changes immediately. Perform Manual Fixups (if any)It is quite nice for a component website to provide not just the latest javadocs and release notes, but also links to this information for previous releases. However Maven doesn't provide any way to do this. The usual solution is therefore for the component to arrange for its generated website to have some navbar links that point to somewhere that doesn't exist (at least not created by Maven), then manually put the missing info at the needed location after "maven site:deploy" has been run. If the component you are deploying has done such tricks, then you need to do the manual fixups now. As an example, the foo component's website might have links for "1.1 release notes" and "1.1 javadoc" that point to "release11/RELEASE-NOTES.txt" and "release11/api"; in that case you'll need to create that release11 directory and install the old release notes and javadoc there. Note that "maven site:deploy" will not delete any extra directories or files that were already there, so if there was a "release10" directory that is no longer referenced from the new website then you should delete that old directory. 11 Update Commons Web SiteIf you are creating a component site for the first time, then you will need to update file commons-build/menus/components-items.ent in subversion and publish the updated commons site. To update the commons site:
12 Create AnnouncementsAnnounce the availability of the new release. You can probably use the news item create earlier as a basis for the announcement body.
Please remember to give a brief description of you component. Please also remember to remind people
about verifying the signatures. The subject should be something like This should go to (at least) the following mailing lists:
13 Post Release UpdateThat's it! The release is out there - but there is still some tidying up to be done.
14 Update JIRA
Check in JIRA for all bugs which have been marked
Now is also an ideal time to have a go at fixing some of those bugs you marked as 15 MiscellaneousThere are some scripts available that help to automate some of these steps. In particular, see the following shell scripts in subversion under committers/tools/releases:
16 DOAP fileUpdate the component's DOAP file with details of the released version:
<release>
<Version>
<name>x.y.z</name>
<created>yyyy-mm-dd</created>
<revision>x.y.z</revision>
</Version>
</release>
Release information gets published on the Apache projects site. FeedbackFeedback - yes please! Comments, critiques and error reports - post them any and all to the dev@commons.apache.org. Please prefix with [doc]. |