GStreamer Release Policies (or: why we should become a country and pass laws)
--------------------------

Development Period
------------------
Development period is marked by having a fourth (nano) version number of 1.
During development anything goes short of wiping the tree.
Just try doing a few basic things :
- make sure it builds for you !
- preferably, keep an anonymous checkout around as well so you can
  immediately update and check if your changes work in a clean tree as well

Prerelease Period
-----------------
After a bit of development, people want a new release.  This generally happens
when :
- core developers get anxious to apply massive changes to the core bound
  to break everything
- a few important plugins decide, as if by magic, to work again (avi, mad, ...)
- thaytan or thomasvs get tired of being lazy.

Also, this should only be allowed after passing a few sanity checks :
- make distcheck should pass
- rpms should build
- FIXME: should debs be built here ? If so, how ?

At this time, we need to do a few prereleases for general checking by all
interested developers. The git modules that are in the process of being
released are usually frozen for commits during that time, until the final
release is made. We intentionally don't do releases in separate branches to
make sure everyone is focused on testing the code that is about to be released.


RELEASE PROCEDURE:
-----------------

- www/bin/new-release is a release helper script.  It automates a lot of the
  tedious work.  Now releasing looks like this:

- before release:
  - make sure all blocker bugs for that release are fixed or deferred
  - make sure you have a local copy of all online files
  - run 'make download-po' to make sure translations in CVS are up-to-date,
    and then 'make update-po' in po/ (which will update the .pot template too
    and merge the changes into the .po files)
  - run 'make win32-update' where applicable
  - Make one or more prereleases
    - Make sure you've got the latest clean CVS of the module
    - Run bin/data-get in www/ to sync data from website
    - Bump the nano number to >= 2 (eg, first pre-release for 
      0.10.12 is 0.10.11.2)
    - When releasing -base/-good/-ugly/-bad/gnonlin, make sure GST_REQ and
      GST_PBREQ are up-to-date. In particular, keep GST_REQ of the
      to-be-released -base module in sync with the core version that is to
      be released at the same time
    - Re-autogen if not in maintainer-mode (which you should be)
    - Update the changelog
        python common/gen-changelog.py > ChangeLog
    - Check (and fix if necessary) make distcheck
    - run 'make release' to build the tarballs
    - copy tarballs+md5 sums to the data/src/$module/pre/ dir
    - Run bin/data-put in www/ to sync the new tarballs to the website
    - Announce the availability of the new tarballs
    - Tell the translation project by sending an email to 
      coordinator@translationproject.org, eg:
        Subject: gst-plugins-bad-0.10.5.2.pot available
        Tarball is at http://gstreamer.freedesktop.org/src/gst-plugins-bad/pre/gst-plugins-bad-0.10.5.2.tar.bz2 

- prepare the release:
  - Make sure your www is up to date: Run bin/data-get in www/
  - Update the doap file to insert the new release info
  - Prepare the following in a text file for copy'n'paste purposes:
    - list of noteworthy changes / new features, check changelog or shortlog:
        - git log 1.0.98..
        - git shortlog 1.0.98..
        - wrap like this:
         <feature>added this and that</feature>
         <feature>foodemux now supports seek in twilight mode</feature>
    - list of API additions, two useful sources:
        - git diff 1.0.98.. win32/common/*.def \
            | grep "^+[^+]" | sed -e 's/[^a-z_]*/    <item>/' -e 's%$%</item>%'
        - git log 1.0.98.. --grep=API
        - wrap like this:
             <item>gst_new_func()</item>
             <item>gst_new_func_full()</item>
    - list of recently deprecated API, same as above:
             <item>gst_broken_func()</item>
  - in www, run bin/new-release (module) (version) (checkoutdir) (release name)
    - updates git
    - allows you to update versioning in configure.ac (don't forget to bump
      core/base requirements from prereleases to released version if needed)
    - rebuilds
    - updates ChangeLog
    - adds a new releases/module/version.xml file and lets you edit
      --> here you add/fix up the features (from ChangeLog) and check
	  contributors
    - allows you to update NEWS file with snippets from RELEASE
      --> copy stuff
    - rebuilds docs for plugins
    - rolls release tarballs and puts them in the local www/data tree
    - uploads docs to website
    - commits changes to po files
    - shows you a diff for evaluation

  - build packages to test

- release:
  - 'git commit -a' in the tree
  - tag tree. Tags should be GPG signed.
    Example: creating a 1.0.42 tag:
      Signed   : git tag -s -m 'Release 1.0.42' 1.0.42 (may prompt for passphrase)
      Unsigned : git tag -a -m 'Release 1.0.42' 1.0.42
    Check: 'git describe' should show '1.0.42' and 'git show 1.0.42' should
      show the PGP signature attached to the tag if it was signed.
  - bump nano number in configure.ac, commit
  - sync source and packages to website
    + run /bin/data-put in www
  - change versions in www/src/htdocs/entities.gst
  - add entry on website
    + Edit src/htdocs/news/news.xml (in a local checkout of the www git module)
      and add a new item at the bottom.
  - commit additions and push changes to the server
  - run bin/www-update in your www git module checkout. This will ssh into
    the server and update the website based on the changes you just pushed.
    This may require an entry for gstreamer.freedesktop.org in your
    ~/.ssh/config (e.g. in case your local username is different from your
    freedesktop.org username)
  - add versions and milestones in bugzilla
  - upload new core, -base and -good tarballs to gnome ftp
    + e.g:
       scp gstreamer-1.0.42.tar.xz master.gnome.org:
       ssh master.gnome.org
       ftpadmin install gstreamer-1.0.42.tar.xz

  - Send release announcements to:
    gstreamer-devel@lists.freedesktop.org
    gstreamer-announce@lists.freedesktop.org
    kde-multimedia@kde.org
    gnome-multimedia@gnome.org
  - Update freshmeat with new releases (get Uraeus to do it)

  - push release commit(s) to git repo
  - push new tag to git repo: git push origin tag 1.0.42

