=============================
 Horde Release Process Notes
=============================

:Contact:       horde@lists.horde.org

.. contents:: Contents


The steps to use when cutting a new release
===========================================

1. Examine ``*/docs/CHANGES`` files:

   - Add the word SECURITY in front of any security-related changes,
     and move them to the top, to draw attention to them.

   - Cull out the most important ones, and prepare the text of an
     announcement.

   - Write the release announcements into the ``docs/RELEASE_NOTES`` file and
     check if it parses with ``php -l docs/RELEASE_NOTES``.

   As an extra effort to ensure completeness, you could also check the
   changelogs for any changes that may not have been inserted in the
   ``*/docs/CHANGES`` file and integrate them into the above points.

2. Examine ``docs/*`` files, and update the version if this is a major
   release. Minor releases should not change the versions in these files.

   Add ``-alpha`` or ``-beta`` sentinels to the ``pear install`` instructions
   if switching from stable release to pre-release, and vice versa.

3. Update the .pot file: ``horde-translation extract --module foo`` and commit
   it.

4. Make sure your settings in ``components/config/conf.php`` are correct.

5. Make a "dry run" of the ``horde-components`` script by adding ``--pretend``
   to the command line parameters.

6. Create the PEAR package releases using ``horde-components ./foo release``::

   - For usage, use the ``--help`` flag.

7. Update the web site (``horde-web`` Git repository):

   - Edit ``config/versions.php`` to update the version information.

8. Add new version to bugs.horde.org if not added automatically by the release
   script.

   If releasing the first stable version after a release cycle, mark all
   pre-release versions as inactive.

9. Bump version numbers of showstopper tickets that didn't go into the release,
   then bump version number in the showstopper query on bugs.horde.org.


Guidelines for release candidates (RCs)
=======================================

* The last time we introduced a bug with code from a new minor release so we
  had to release another version right after. This might always happen if
  there is more than one change since the last release or if the changes were
  done recently.

* If we have a security leak that needs to be plugged immediately, it is the
  common way to release a new minor version that *only* contains the fix for
  that leak.

* RCs are necessary for every release (except 3) because many translators only
  update their translations when there is a new (minor) release cycle starting
  because they don't translate on Git versions.


Example format for announcement messages
========================================

::

 The Horde Team is pleased to announce the (first release candidate|official
 release) of the [MODULE NAME] [MODULE DESCRIPTION] version [VERSION].

 [MODULE DESCRIPTION]

 [Barring any problems, this code will be released as [MODULE] [VERSION].
 Testing is requested and comments are encouraged.
 Updated translations would also be great.]

 [[MODULE] version H3 ([VERSION]) is a major upgrade in the a.x release series,
 including these enhancements:]
 [The major changes compared to the [MODULE] version H3 (a.b) are:]
   * [CHANGE 1]
   * [CHANGE 2]
   * ...
