1 GStreamer Release Policies (or: why we should become a country and pass laws)
2 --------------------------
6 Development period is marked by having a fourth (nano) version number of 1.
7 During development anything goes short of wiping the tree.
8 Just try doing a few basic things :
9 - make sure it builds for you !
10 - check what you're about to commit with cvs -Q diff -r
11 - preferably, keep an anonymous checkout around as well so you can
12 immediately update and check if your changes work in a clean tree as well
16 After a bit of development, people want a new release. This generally happens
18 - core developers get anxious to apply massive changes to the core bound
20 - a few important plugins decide, as if by magic, to work again (avi, mad, ...)
21 - thaytan or thomasvs get tired of being lazy.
23 Also, this should only be allowed after passing a few sanity checks :
24 - make distcheck should pass
26 - FIXME: should debs be built here ? If so, how ?
28 At this time, we need to do a few prereleases for general checking by all
29 interested developers. To minimize the impact on the rest of the core hacking,
30 we create a new CVS branch which will go through the pre-releases and finally
31 contain the definitive tarball for that version.
36 - www/bin/new-release is a release helper script. It automates a lot of the
37 tedious work. Now releasing looks like this:
40 - make sure all blocker bugs for that release are fixed or deferred
41 - make sure you have a local copy of all online files
42 - run 'make download-po' to make sure translations in CVS are up-to-date,
43 and then 'make update-po' in po/ (which will update the .pot template too
44 and merge the changes into the .po files)
45 - Make one or more prereleases
46 - Make sure you've got the latest clean CVS of the module
47 - Run bin/data-get in www/ to sync data from website
48 - Bump the nano number to > 2 (eg, first pre-release for
50 - When releasing -base/-good/-ugly/-bad/gnonlin, make sure GST_REQ and
51 GST_PBREQ are up-to-date. In particular, keep GST_REQ of the
52 to-be-released -base module in sync with the core version that is to
53 be released at the same time
54 - Re-autogen if not in maintainer-mode (which you should be)
55 - run 'make release' to build the tarballs
56 - copy tarballs+md5 sums to the data/src/$module/pre/ dir
57 - Run bin/data-put in www/ to sync the new tarballs to the website
58 - Announce the availability of the new tarballs
59 - Tell the translation project by sending an email to
60 coordinator@translationproject.org, eg:
61 Subject: gst-plugins-bad-0.10.5.2.pot available
62 Tarball is at http://gstreamer.freedesktop.org/src/gst-plugins-bad/pre/gst-plugins-bad-0.10.5.2.tar.bz2
63 FIXME: Not sure if the translation project bot parses version strings
64 with a nano correctly.
66 - prepare the release:
67 - Make sure your www is up to date: Run bin/data-get in www/
68 - Update the doap file to insert the new release info
69 - bin/new-release (module) (version) (checkoutdir) (release name)
71 - allows you to update versioning in configure.ac
74 - adds a new releases/module/version.xml file and lets you edit
75 --> here you add/fix up the features (from ChangeLog) and check
77 - allows you to update NEWS file with snippets from RELEASE
79 - rebuilds docs for plugins
80 - rolls release tarballs and puts them in the local www/data tree
81 - uploads docs to website
82 - commits changes to po files
83 - shows you a diff for evaluation
85 - build packages to test
88 - cvs commit in the tree
90 for example for 0.6.3 :
92 - bump nano number in configure.ac, commit
93 - if working in the "stable" release branch, update to this tag to freeze it:
94 cvs up -r RELEASE-0_6_3
95 - sync source and packages to website
96 + run /bin/data-put in www
97 - change versions in www/src/htdocs/entities.gst
98 - add entry on website
99 + Edit src/htdocs/news/news.xml and add a new item at the bottom.
100 - commit additions to website
101 - add versions and milestones in bugzilla
102 - upload new core, -base and -good tarballs to gnome ftp
104 scp gstreamer-0.10.42.tar.gz master.gnome.org:
106 install-module gstreamer-0.10.42.tar.gz
108 - Send release announcements to:
109 gstreamer-devel@lists.sourceforge.net gstreamer-announce@lists.sourceforge.net kde-multimedia@kde.org gnome-multimedia@gnome.org
110 - Update freshmeat with new releases (get Uraeus to do it)
112 Old release notes - superseded by the www/bin/new-release script.
113 ----------------------------------------------------------------
116 - Decide on the next version number (major, minor or micro upgrade ?)
117 - Get a fresh copy to do the necessary tests on
118 - If this isn't on the stable branch (like for 0.6), then create a new branch;
119 - with 0.3.3 as an example, tag is BRANCH-RELEASE-0_3_3
120 cvs tag BRANCH-RELEASE-0_3_3-ROOT
121 cvs tag -b BRANCH-RELEASE-0_3_3
122 - update your local copy to the branch:
123 cvs update -r BRANCH-RELEASE-0_3_3
124 - Set the nano to 2 (in configure.ac, AS_VERSION)
125 - If this is a release candidate for a new major version, override
126 MAJOR/MINOR in configure.ac
127 - Do all updates/patches/changes for the release tarball in this branch
128 - Think of a good codename for the release
129 - Check the bug lists:
130 - The idea is to have all bugs for this milestone listed as fixed
131 - Check all of the bug reports with this version as a milestone, and verify
132 that these bugs are fixed, or reassign to a later milestone if not
133 - Check later milestone bugs, and if any of them are fixed, reassign to
135 - Check the list of bugs resolved with milestone HEAD, which should be
136 assigned to an actual milestone
137 - create a new $(version).xml file in www/src/htdocs/releases/$(module)
139 - Start updating the release notes on the www cvs tree
140 - create the base xml file in www/htdocs/releases/$/module)/$(version).xml
141 - grepping ChangeLog for contributors:
142 grep "<.*>" ChangeLog | perl -i -p -e 's@\d*-\d*-\d*\s*(.*)\s*<.*$@$1@' | sort | uniq
143 - use www/bin/bugzilla (module) (version) to get an xml list of the
144 bugs fixed in this version, and add it to the release .xml
145 - depending on how the API has changed update the libtool versioning
146 in configure.ac, AS_LIBTOOL
147 (Look at the libtool info page about versioning for guidelines)
148 (if MAJOR/MINOR version has changed, however, you can reset all to 0)
149 - FIXME: autotools have latest config.{guess,sub}
150 This is needed in order to support newer platforms.
151 On Debian install the autotools-dev package to get these.
152 Someone please add some more useful info here on how to do this
153 - while (IS_PRERELEASE)
155 - increase the nano number (starting with 2)
156 - check out a fresh anonymous copy
157 cvs -d:pserver:anonymous@cvs.gstreamer.sf.net:/cvsroot/gstreamer \
158 co -rBRANCH-RELEASE-0_3_3 gstreamer
159 - make distcheck, rpm build should pass, from a FRESH cvs tree
160 - media tests should be done
161 - source tarball should be installed and tested
162 - rpms should be installed and tested
163 - .2 tarball should be submitted to translation project
164 - put up tarball for a day
170 When we're satisfied with the prereleases, it's time to make the final tarball.
171 It's very important that the tarball we put out is fully checked, works as
172 planned, and generally is generated only ONCE by someone with a relatively
173 clean (and reference) system. We don't want to put out more than one tarball
177 - give the latest prerelease another good testing
178 - proofread the release notes
179 - run bugzilla with the correct module and milestone and include
180 the output in the release notes
181 bin/bugzilla gstreamer 0.7.5 >> src/htdocs/releases/gstreamer/0.7.5.xml
183 - verify all new translations are in and po files are updated:
184 run 'make download-po' to make sure translations in CVS are up-to-date,
185 and then 'make update' in po/ (which will update the .pot template too and
186 merge the changes into the .po files)
187 - run win32-update from toplevel to copy new versions and enum files
188 - copy www/htdocs/releases/$(module)/$(version) to RELEASE
189 - copy the list of changes, bugs fixed, and API changes and add them to NEWS
190 - update the ChangeLog to account for NEWS, RELEASE, and configure.ac,
191 mentioning the release name
192 - add === release (version) === to ChangeLog
193 - update web site docs
194 - release-specific docs should go in CVS
195 - change docs/current symlink
196 - remove the nano version number in configure.ac, AS_VERSION
199 for example for 0.6.3 :
200 cvs tag RELEASE-0_6_3
201 - run "make release", build rpms
202 - install on gnome's ftp
203 - for plugins docs: run "make update" in docs/plugins to update version info
204 - for docs: run "make upload" from gstreamer/docs to get the new docs online
205 - change www/src/htdocs/entities.gst with the new version numbers
206 - change www/src/htdocs/bugs/bugs.xml and add a new milestone
207 - possibly add new version and milestone to bugzilla
208 - add a news item to the news.xml
212 Time to bring the new version under the eyes of the public.
215 - FIXME: should we md5 the tarballs?
216 - upload to sourceforge
217 upload.sourceforge.net/incoming
218 administer the release
220 - FIXME: announcements
221 - gstreamer-{devel, announce} : a simple mail with RELEASE
223 - linux-audio-dev (if it's a big release) : a simple mail with RELEASE
225 - lwn (if it's a big release)
226 - send mail for translators with URL to .tar.bz2:
227 translation@iro.umontreal.ca
228 - Kick back, have a party, enjoy people coming in on IRC telling us how
230 - Later on, if necessary, merge back latest release branch to current dev
231 branch (if patches to source were made)
235 * get a diff between the branch root and the final release:
236 cvs diff -r BRANCH-RELEASE-0_7_5-ROOT -r RELEASE-0_7_5 > patch
237 * fix up this patch (remove RELEASE)
238 * and apply it to the HEAD branch
239 * update nano version to 1 in configure.ac
242 * change to a HEAD branch, make sure it's updated
243 * cvs diff -R -r RELEASE-0_3_4-30SECONDFRENCHMAN
244 gives a list of differences between head and release tag,
245 stuff with > is how it's in HEAD, < is in the rel branch
247 * cvs update -j BRANCH-RELEASE-0_3_4
248 merges the difference made in that branch to the current source
249 this is what you want to use when merging back the branch
250 resolve conflicts and commit
252 Some various random comments that might or might not make sense :
255 * autoconf feature to allow building outside source dir
257 - Package version policy
258 - Use major.minor.micro versioning
259 - Before 1.0.0, Update micro until code and API are fairly stable,
262 Update major when code and api hit new level of stability or major features.
263 Update minor on API changes.
264 Update micro on API-compatible changes.
266 NOTES ON STARTING A NEW STABLE SERIES
267 -------------------------------------
268 - Given x.y.z being the last devel release, where y is an odd number
269 - all API/ABI/renaming changes should be done
271 - get a completely fresh checkout
272 - set GST_MAJORMINOR to x.(y + 1)
273 - reset libtool versioning to 0, 0, 0
275 - grep for possible non-updates of MAJORMINOR:
276 grep -r "0\.9" * | grep -v "0\.9\.6" | less -R
278 perl -i -p -e 's@0\.9(\.[^0-9])@0.10$1@g' (file) changes 0.9. -> 0.10.
279 perl -i -p -e 's@0\.9([^.])@0.10$1@g' (file) changes 0.9 -> 0.10