= RELEASING TWISTED CORE OR A SUBPROJECT =

* Fix all release-critical bugs in http://twistedmatrix.com/bugs/

* Verify that buildbot ( http://twistedmatrix.com/buildbot/ ) is ALL
   GREEN (for all platforms that it was green for on the last
   release).

* svn up.

* Create a ticket for releasing your project at
  http://twistedmatrix.com/bugs/.

* Branch the repo to
   /branches/releases/twisted-[projname]-<a.b>.x-[ticketnumber]. That
   last 'x' is literal.

* Switch to that branch.

* Write release notes in proj/topfiles/NEWS, including a date and a
   version number.

* Run ./admin/change-versions. Specify the versions of whatever
   you're releasing. Core should be versioned as release.major.minor,
   where minors are only bugfixes, majors are functionality
   increases, and releases are major milestones.

* Add a Quote of the Release to twisted/topfiles/README if you are
  releasing Twisted Core.

* Run the release script: 
   ./admin/release-twisted --commands=exportTemp,makeDocProj,makeBallProj

* Test the produced tarballs. Install them, run tests, etc.

* svn commit

* Tag the release.

   svn cp -m 'Tagging for 0.2.0 release' $TREPO/branches/<a.b>.x \
             $TREPO/tags/releases/<a.b.c>.

* Merge the branch to trunk.

* Distribute, announce, and so forth.


= RELEASING TWISTED SUMO =

1. From Twisted trunk WC, mkdir twistedballs.

2. Put all current subproject tarballs into twistedballs
   Just copy unchanged projects from the previous Twisted tarball.

3. Put ZopeInterface-*.tgz in twistedballs.

4. ./admin/change-versions --sumo-only, and make sure all the versions
   are appropriately specified for the tarballs you've
   included. Eventually it shouldn't be necessary to change any
   version but the Twisted one.

5. './admin/release-twisted --commands=makeBallSumo --sumo-version=a.b.x.y'
   where 'a.b.x' is the version of Twisted Core contained in this
   release (see point 6 in "Releasing Core or a Subproject" above),
   and 'y' is simply a monotonically increasing nonnegative integer as
   long as 'a.b.x' is the same as the last release.

6. Commit the changed README file to trunk, 
   author: release-twisted, reviewer: you.

7. Distribute, announce, etc.

= CREATING A NEW SUBPROJECT =

1. Add the project name to twisted/python/dist.py's list of subprojects and
   setup.py's list of subprojects.

2. mkdir twisted/<proj>/topfiles

3. Create a setup.py, copying/modifying from
   e.g. twisted/conch/topfiles/setup.py.

4. If your project has extension modules, see
   twisted/runner/topfiles/setup.py as an example.
