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