=====================
KID RELEASE CHECKLIST
=====================

These notes describe the general procedure for releasing new version of
Kid. 


Pre-requisites
--------------

Make sure the following packages are installed on your system:

  * Python 2.3 and Python 2.4
  * setuptools <http://peak.telecommunity.com/DevCenter/setuptools>
  * docutils <http://docutils.sourceforge.net/>
  * buildutils <http://buildutils.lesscode.org/>
  * pudge <http://pudge.lesscode.org/>

Most of the utility packages can be installed using ``easy_install``. For
``buildutils`` and ``pudge``, it's recommended that you grab the latest
revisions from subversion:

  # easy_install http://lesscode.org/svn/pudge/trunk
  # easy_install http://lesscode.org/svn/buildutils/trunk

You shouldn't need to install Python2.3 versions of the utility packages.

Release Procedure
-----------------

1. Run Tests

  Check that all tests are passing:

    $ make test

  The tests run these configurations:
   
    a) Python 2.3 / ElementTree
    b) Python 2.4 / ElementTree
    c) Python 2.3 / cElementTree
    d) Python 2.4 / cElementTree
   
  I generally run tests on the following systems when possible:
   
    * Debian
    * Fedora Core 4
    * Mac OS X / 10.4+
    * FreeBSD (when possible)

2. Bump version number in ``kid/release.py``.

2. Commit / Tag
   
   After committing release related changes, make a note of the current changeset
   revision and then tag it:
   
   $ svn cp -m 'tagging [changeset] for VERSION release' \
               svn://lesscode.org/kid/trunk \
               svn://lesscode.org/kid/tags/VERSION
   

3. Build Distributables

   Make sure you have recent versions of setuptools and buildutils installed 
   for both Python 2.4 and Python 2.3.
   
     $ pbu -i2.3,2.4 sdist bdist_egg
   
   You should now have ``dist/kid-VERSION.tar.gz``, 
   ``dist/kid-VERSION-py2.3.egg``, and ``dist/kid-VERSION-py2.4.egg``. This 
   is generally all I release.
   
   I like to scan the file contents just to make sure nothing funny made its way
   into the dist process:
   
     $ tar tzf dist/kid-VERSION.tar.gz | less
     $ ls -1 dist/kid-0.9-*.egg | xargs -n1 unzip -l | less
   

4. Generate Checksums
   
   This is important for package maintainers. Most package repositories hold
   the policy that upstream distributables MUST include checksums and many 
   require checksums to be signed.
   
     $ pbu checksum --sign
   
   (Leave off the --sign option if you're not setup with GPG.)
   
   This generates a `dist/kid-VERSION.sha` file and a
   `dist/kid-VERSION.sha.asc` file if the checksums are signed.
   

5. Publish Distributables

   Copy the entire dist directory to lesscode.org:

     $ scp -rp dist lesscode.org:~kid/www/dist/VERSION
   
   Any release (major, minor, build, nightly) should have its own
   directory. Don't copy new distributables into existing dist
   directories. i.e., VERSION may be 0.9, 0.9a1, 0.9.5, 20060101, etc...
   
   Check that the files made it up properly and are accessible via HTTP:

     $ links http://kid.lesscode.org/dist/VERSION/

   or perhaps:

     $ curl http://kid.lesscode.org/dist/VERSION/kid-VERSION.sha

   NOTE: This process was automated through ``pbu`` at one point but I
   can't seem to get it working properly. I'll get it figured out and
   update this doc accordingly.


6. Build documentation

   Edit ``doc/index.txt`` and modify version numbers under the Download 
   section. The rest of the document is release-independent.

   Update ``doc/notes.txt`` with release notes. I haven't done this since 
   0.6 but it's definitely helpful.

   Build the docs using buildutils/pudge:

     $ pbu pudge
     
   Files generated by pudge are placed under the ``doc/html`` directory. 

7. Publish Docs

   Transfer the files generated under ``doc/html`` to lesscode.org:
   
     $ scp -r doc/*.txt doc/html/* lesscode.org:~kid/www/htdocs
   
   
   
