# Releasing Twisted

## Pre-release

### Test

- run the unit tests.

      ./admin/runtests

- Get someone to run the tests on Windows for win32eventreactor and default reactor.

- run the accepttests. It's important that you run the accepttests with a non-relative command line (stupid bug that still isn't fixed. Too easy to work around :)). I use:

      WEBBROWSER='galeon -n' IRCCLIENT=epic4 ~/Projects/Twisted/admin/accepttests -b

- kill your regular personal server on pyramid, if you have one.

- run the pre-release tests, on pyramid. When `less' comes up, check for errors.

      ./admin/prereleasetests

- Restart your personal server. :-)

### Documentation

- ChangeLog.
  - Browse through twisted-commits; if you see any updates that are significant but weren't mentioned in ChangeLog, retroactively add them
  - Add an entry: * .: Releasing Twisted $VERSION
- README: For a new non-alpha/RC, add a new Quote of the Release.

## Release

### Ensure Debian correctness for alpha1

If you're doing an alpha1, make sure debian/changelog has been updated to show the prior full-release. e.g., if doing 1.1.2alpha1, make sure 1.1.1 is in debian/changelog, or else your new .deb will have a broken Version.

### Update from previous RC for rcN > 1

If you're doing an rcN > 1, then you need to base the release on the previous RC. You do that with something like this:

    cvs -dradix@cvs.twistedmatrix.com:/cvs co -r release-X_X_XrcN Twisted
    mv Twisted Twisted.CVS
    cd Twisted.CVS

    # the following files should be updated on _every_ RC
    cvs up -A README ChangeLog admin/twisted.spec twisted/copyright.py

    # run cvs up -A for all other files which contained bugs and should be
    # updated for this RC
    cvs up -A $OTHER_FILES_WHICH_SHOULD_BE_UPDATED
    cd ..

After doing this, use the first command below. If you're doing a release from HEAD (i.e., an alpha or rc1), use the second command.

### Run release-twisted

- If you are working from a CVS version of Twisted which you want to release, make sure it is named `Twisted.CVS`, and in the directory immediately above it there is nothing else (that can be done via symlinks), and run:

      ./Twisted.CVS/admin/release-twisted -V $VERSION -o $LASTVERSION \
      --release=/twisted/Releases --upver --tag --exp --dist --docs \
      --balls --rel --deb --debi

- If you want to release the latest CVS version of Twisted, have a reasonably recent checkout of Twisted in $SOMEWHERE, and in an empty directory do

      $SOMEWHERE/admin/release-twisted -V $VERSION -o $LASTVERSION --checkout \
      --release=/twisted/Releases --upver --tag --exp --dist --docs --balls \
      --rel --deb --debi

### win32

Run win32/bdist_wininst.bat.

## Post-release

### Upgrade pyramid

- Restart the main Twisted web server:

      sudo /etc/init.d/twisted-web stop
      sudo /etc/init.d/twisted-web start

- If necessary (only when distributed web changes protocols; this is very rare any more), restart snibril's server.

      su jh; ~jh/bin/stop; ~jh/bin/start; exit

### Distribute

Upload to Sourceforge

    $SOMEWHERE/admin/release-twisted -n $SFNAME -V $VERSION --sourceforge \
                      --release=/twisted/Releases

### Update Website

- If everything's cool, edit WebSite/twistedmatrix.com/news.html, index, documents/index.html, products/get-current.epy and products/download.html
- cvs commit those

- deploy changes:

      cd /var/www/WebSite/twistedmatrix.com
      ./generate.sh

### Announcements

This is usually done by Itamar.

- Freshmeat
- comp.lang.python
- comp.lang.python.announce
- parnassus
- Linux Weekly News (email lwn at lwn.net)
- PyPI

### Notify Packagers

All releases (alpha, RC, stable)

- Win32: Cory Dodt corydodt (at) twistedmatrix (dot) com
- FreeBSD (while Johann is busy): nbm (at) mithrandr (dot) moria (dot) org
- Gentoo: lordvan (at) gentoo (dot) org
- RH9: alexander (dot) winston (at) comcast (dot) net

Stable

- Debian: Moshe Zadka moshez (at) twistedmatrix (dot) com
- SKIP (johann is busy): FreeBSD: Johann Visagie wjv (at) freebsd (dot) org