Version numbers

Twisted releases use a time-based numbering scheme. Releases versions like YY.MM.mm, where YY is the last two digits of the year of the release, MM is the number of the release in the year, and mm is the number of the patch release.

For example:

The first release of 2010 is 10.0.0

The second release of 2010 is 10.1.0

If 10.1.0 has some critical defects, then a patch release would be numbered 10.1.1

The first pre-release of 10.0.0 is 10.0.0pre1, the second is 10.0.0pre2

Every release of Twisted includes the whole project, the core and all subprojects. Each of these has the same number.

Pre-release announcment

The pre-release announcement should mention the important changes since the last release, and exhort readers to test this pre-release.

Here's what the 10.0.0pre1 release annoucement ought to have looked like:

Live from PyCon Atlanta, I'm pleased to herald the approaching
footsteps of the 10.0 release.
Tarballs for the first Twisted 10.0.0 pre-release are now available at:
http://people.canonical.com/~jml/Twisted/
Highlights include:
* Improved documentation, including "Twisted Web in 60 seconds"
* Faster Perspective Broker applications
* A new Windows installer that ships without zope.interface
* Twisted no longer supports Python 2.3
* Over one hundred closed tickets
For more information, see the NEWS file.
Please download the tarballs and test them as much as possible.
Thanks,
jml

Post a web version of the announcements, with links instead of literal URLs

Twitter, if you feel like it

#twisted topic on IRC (you'll need ops)

Release announcement

The final release announcement should:

Mention the version number

Include links to the release tarballs & Windows installers

Summarize the significant changes in the release

Consider including the quote of the release

Thank the contributors to the release

Here's an example:

On behalf of Twisted Matrix Laboratories, I am honored to announce the
release of Twisted 10.0.
Highlights include:
* Improved documentation, including "Twisted Web in 60 seconds"
* Faster Perspective Broker applications
* A new Windows installer that ships without zope.interface
* Twisted no longer supports Python 2.3
* Over one hundred closed tickets
For more information, see the NEWS file.
It's stable, backwards compatible, well tested and in every way an
improvement. Download it now from:
http://tmrc.mit.edu/mirror/twisted/Twisted/10.0/Twisted-10.0.0.tar.bz2 or
http://tmrc.mit.edu/mirror/twisted/Twisted/10.0/Twisted-10.0.0.win32-py2.5.msi
Many thanks to Jean-Paul Calderone and Chris Armstrong, whose work on
release automation tools and answers to numerous questions made this
possible. Thanks also to the supporters of the Twisted Software
Foundation and to the many contributors for this release.
jml

When things go wrong

If you discover a showstopper bug during the release process, you have three options.

Abort the release, make a new point release (e.g. abort 10.0.0, make 10.0.1 after the bug is fixed)

Abort the release, make a new pre-release (e.g. abort 10.0.0, make 10.0.0pre3 after the bug is fixed)

Interrupt the release, fix the bug, then continue with it (e.g. release 10.0.0 with the bug fix)

If you choose the third option, then you should:

Delete the tag for the release

Recreate the tag from the release branch once the fix has been applied to that branch

Open questions

Should picking a release quote be part of the release or the pre-release?

What bugs should be considered release blockers?

Ultimately it's the RM's discretion

Should news fragments contain information about who made the changes?

Does this document miss anything relevant that ReleaseProcedure includes?

A thought for future releases: since we'd really like folks to download the prereleases and try them out, perhaps we should put the [source:trunk/NEWS NEWS] file on the web somewhere official, too, so they can see all the cool stuff they can try out?