====================
Making a ZSI Release
====================

The following instructions tell how to go about making a ZSI release.
The Makefile automates many of the more mechanical aspects of the
process.

The documentation is built using the same documentation tools used for
the standard Python documentation.  See `Documentation Tools`_ for
information on getting and setting up those tools.

1.  Announce your intent to make a release on the mailing list.  This
    gives folks a day or so to respond with info or last-minute
    checkins.

2.  Edit setup.cfg to set the version number in the ``[version]``
    section, if appropriate.  If you change the version number, set
    the ``release`` setting in the ``[bdist_rpm]`` section to 1.

3.  Make sure CHANGES is up to date, including the version number at
    the top.
    
4.  Make sure the documentation is up to date. Try all of the examples,
	and make sure they work. For a release candidate, the docs do not
	have to be up to date, but we must at least mark the parts of the
	docs that are no longer accurate. For a final release, the docs
	*must* be up to date with the code.

5.  Commit all changes to SVN.

6.  Run all the tests; they must all pass.  See `Running Tests`_ for
    details.

7.  Tag the SVN repository.  Release tags are of the form::

        "v" MAJOR "_" MINOR [ "_" PATCHLEVEL ] [ modifier serial ]

    where the optional segment containing PATCHLEVEL is included only
    if PATCHLEVEL is non-zero.  The modifier segment has only been
    used for release candidates (so far), for which the modifier is
    "RC" and the serial is the number of the candidate for this
    particular software version ("1", "2", etc.).

    You'll need to tag the ``wstools`` package separately, but using
    the same tag.

8.  Export the tagged sources from CVS.  You'll need to run the
    commands::

        cvs -d cvs.sourceforge.net:/cvsroot/pywebsvcs export -r TAG zsi
        cd zsi/ZSI/
        cvs -d cvs.sourceforge.net:/cvsroot/pywebsvcs export -r TAG wstools

9.  Build the release from the export.  Switch to the export directory
    (the one containing setup.py) and run **make kit**.

10.  Rename the PDF documentation.  If the patchlevel from setug.cfg is
    0, copy doc/zsi.pdf to dist/zsi-$MAJOR.$MINOR.pdf, otherwise copy
    it to dist/zsi-$MAJOR.$MINOR.$PATCHLEVEL.pdf.  This will leave you
    with all the files you need to upload in a single directory
    (dist/).

11. Using the constructed distribution (usually the .tar.gz version),
    build and test the software; they must all pass.  See `Running
    Tests`_ for details.

12. Use the SourceForge tools to create a release and upload the
    files.  If appropriate, hide obsolete releases.  Hiding old
    releases is normally only done if the older release contains
    security bugs or other critical bugs that render it unusable.

13. The web pages are in pywebsvcs.sourceforge.net, at the same level
    as the zsi directory.  Copy zsi.html from zsi/doc into there.
    Update index.html to refer (and link) to the new release.  Commit
    those changes.  The cron job will update it every couple of hours.

14. Announce the release:

    - Freshmeat.  The details of how to do this have been lost to the
      travesties of time, but there is a ZSI package there.

    - SourceForge.net news:  Create a news item in the project
      announcing the release.

    - Register the release with the Python Package Index (PyPI).  This
      can be done using **python setup.py register**.

    - comp.lang.python.announce


Documentation Tools
-------------------

The Python documentation tools include a script (**mkhowto**) that can
be used on any Unix or Cygwin installation that provides all the
required formatting tools.  The recommended way to use them is to
create a symbolic link to **mkhowto** from some directory on your
PATH.

The Python documentation tools can be acquired by any of these three
methods:

- Get a Python source release and unpack it.  Create the symlink to
  .../Python-VERSION/Doc/tools/mkhowto.

- Get the LaTeX version of the documentation package and unpack it.
  Create the symlink to .../Python-Doc-VERSION/tools/mkhowto.

- Get them from CVS.  If you have an existing Python checkout, you can
  symlink to the .../Doc/tools/mkhowto script in that.  If not, then
  you only need to check out the Doc/ tree::

    cvs -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/python \
        checkout -d someplace python/dist/src/Doc

  The symlink can then be made to .../someplace/tools/mkhowto.

If you want to skip the symlink, you can specify the MKHOWTO variable
when you run **make kit**::

  make MKHOWTO=.../Doc/tools/mkhowto kit

If you're working from unpacked Python sources or a complete Python
checkout, you can just point to that instead of typing the full path
to the **mkhowto** script::

  make PYSRCDIR=...


Running Tests
-------------

Before a release, all the tests must run to completion and pass.  This
entails running several scripts:

- test/test_zsi.py

- test/test_zsi_net.py

- test/wsdl2py/runTests.py

This is most easily done by setting the PYTHONPATH environment
variable to point to the directory containing the version of the ZSI
package that you want to test.

Before testing, build the software::

  python setup.py build

Set PYTHONPATH to point to the built package::

  PYTHONPATH=`pwd`/build/lib

The first two scripts can easily be run from any directory; once your
PYTHONPATH is set, just run the scripts::

  python test/test_zsi.py

  python test/test_zsi_net.py

The third script depends on a configuration file; see the
test/wsdl2py/README file for more information on running these tests.
