This is an attempt to document the release procedure used for Wave whilst under incubation. These notes are not complete, so you will probably want to refer to the following documents:

Build Environment

The release procedure documented has been/is being carried out on 64-bit Linux machine using Ant and OpenJDK 1.6


Make a release branch (optional)

This depends on how active the tree is at the time.

git checkout -b wave-0.4.0-release

Then check out this branch, to do any release work needed.

Check Licensing

Ensure that all new source files have the Apache License attached, and any dependencies licenses are correctly noted in NOTICE.

Run the license audit tool and inspect the output:

ant audit-licenses

Check export status of any cryptographic dependencies. 

Set version number in file

The version number is currently stored in in the waveinabox.version string.
Whilst the project is still incubating, the word 'incubating' must appear in the version string.

The version number should be in the form described at:


Given a version number MAJOR.MINOR.PATCH, increment the:

  1. MAJOR version when you make incompatible API changes,
  2. MINOR version when you add functionality in a backwards-compatible manner, and
  3. PATCH version when you make backwards-compatible bug fixes.

Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

For example:  0.4.0-rc.6-incubating

Every release should usually increase the MINOR version and reset the PATCH version.


I suggest using the following git log, to produce a one-line-per-change list of all commits.
(An alternative, would be to use the JIRA id's - but not everything goes through Jira (notably most of my stuff doesn't! (tongue)))

git log --pretty=medium

Put this the 'Full log' section.
I suggest hand-writing the 'Summary since X' at the start of the file.


TODO: decide on a format
Refer to the notes used in the previous release for the format of how to write them.
Break at 80 chars as is conventional.

Tag the RC

Make the RC

There are two ways to create the artefacts. The preferred way is to use the artefacts created by Jenkins.

Download zip with all artefacts from*zip*/



Or, create the artefacts manually. Make sure to run the unit tests first. Run

 ant release 

Check that the produced code still works!

Check that source packages don't include any binaries.

Sign the release using your GPG key, and record SHA512 checksums for the files.

Sign artefacts
#Assumes it is being run in the folder with artefacts.

for f in $PRE*; do
gpg --armor --output $f.asc --detach-sig $f
gpg --print-md SHA512 $f > $f.sha

You need to append you signature/public key to the KEYS file, look there for instructions.

Upload the Artefacts.

Upload the src+bin tar+zip somewhere so that it can be found.

The release candidate should be uploaded to the "dev" folder first to allow inspection and voting.

Commit new rc
svn checkout

Create a new folder under dist/dev/incubator/wave for the new release candidate and copy there the signed artefacts and then commit.

Vote for release

Send a vote mail for RC

Send a message with subject 'VOTE Release Wave 0.3 based on RC1' email to
Post links to the RC artefacts, the subversion tag it is based upon, RELEASE-NOTES so that the artefact doesn't have to be downloaded to see them.
Ensure that KEYS is available somewhere with the artefacts.
Check the voting guide for more information on how to count votes etc.
When posting the RESULT, note that (currently) all committers are also PPMC, so to prevent confusion list as PPMC in the result email.

(Incubator only) Vote for RC

Whilst Wave is still an incubating project, send a VOTE email to to get PMC votes. Handle in the same way as the internal vote.

Publish accepted RC

To publish copy the artefacts into from the dist/dev/incubator/wave/ (delete old artefacts if needed, they were automatically archived already) and commit.

  • No labels