| 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 | |