==================
Releasing Numexpr
==================

:Author: Francesc Alted
:Contact: faltet@pytables.org
:Date: 2009-06-02


Following are notes useful for releasing Numexpr.

Preliminaries
-------------

- Make sure that ``RELEASE_NOTES.txt`` and ``ANNOUNCE.txt`` are up to
  date with the latest news in the release.

- Check that ``release=True`` in ``numexpr/version.py``.

Testing
-------

- Run the test suite in different platforms (at least Linux and
  Windows) and make sure that all tests passes.

- Re-compile with MKL support and see if all tests passes as well.

- Run all the benchmarks in ``bench/`` directory and see if the
  speed-ups are the expected ones.

Packaging
---------

- Make the tarball with the command:

  $ python setup.py sdist

  Do a quick check that the tarball is sane.

- Make the binary packages for supported Python versions (2.6 and 2.7
  currently).  Check that installer works correctly.

Uploading
---------

- Go to the downloads section of the Numexpr project in Google Code
  and upload the source tarball and the binary packages.

- Upload it also in the PyPi repository.

  * First, register the new version with:
    $ python setup.py register

  * Then upload the files manually using the PyPI web interface.

Announcing
----------

- Update the release notes in the numexpr site:

  http://code.google.com/p/numexpr/wiki/ReleaseNotes

  *WARNING*: Remember that the syntax for Google Code pages is
   wiki-oriented and not rest-oriented.  When copying the text from
   ``RELEASE_NOTES.txt`` to the wiki, double chek that it reads as it
   should (the ``Preview`` button is your friend!).

- Send an announcement to the NumPy list and python-announce list.
  Use the ``ANNOUNCE.txt`` file as skeleton (or possibly as the
  definitive version).


Post-release actions
--------------------

Major/Minor versions
~~~~~~~~~~~~~~~~~~~~

- Create a new branch for possible patch level revisions.  Call this
  branch just ``/branches/X.Y``.  You can use the next message::

    Created X.Y branch for numexpr X.Y.

- Create a tag ``/tags/X.Y`` from ``/branches/X.Y`` (not from
  trunk!).  Use the next message::

    Created X.Y tag for numexpr X.Y.

- Edit ``numexpr/version.py`` in trunk to increment the version to the
  next minor one (i.e. X.Y --> X.(Y+1)).  Set the `release` variable
  to False.

- Edit ``numexpr/version.py`` in the new branch to add the patch-level
  revision (i.e. X.Y --> X.Y.1).  Set the `release` variable to False.

Patch level revisions
~~~~~~~~~~~~~~~~~~~~~

- Create a tag ``/tags/X.Y.Z`` from ``/branches/X.Y.Z``.  Use
  the next message::

    Created X.Y.Z tag for numexpr X.Y.Z.

- Edit ``numexpr/version.py`` in branch X.Y to increment the version
  to the next patch-level one (i.e. X.Y.Z --> X.Y.(Z+1)).  Set the
  `release` variable to False.

For all versions
~~~~~~~~~~~~~~~~

Do the next actions in trunk or any new branch (if applicable):

- Create new headers for adding new features in ``RELEASE_NOTES.txt``
  and empty the release-specific information in ``ANNOUNCE.txt`` and
  add this place-holder instead:

  #XXX version-specific blurb XXX#


That's all folks!


.. Local Variables:
.. mode: rst
.. coding: utf-8
.. fill-column: 70
.. End:
