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 - Uraeus and thomasvs get tired of the general laziness
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.
34 - Decide on the next version number (major, minor or micro upgrade ?)
35 - Get a fresh copy to do the necessary tests on
36 - If this isn't on the stable branch (like for 0.6), then create a new branch;
37 - with 0.3.3 as an example, tag is BRANCH-RELEASE-0_3_3
38 cvs tag BRANCH-RELEASE-0_3_3-ROOT
39 cvs tag -b BRANCH-RELEASE-0_3_3
40 cvs update -r BRANCH-RELEASE-0_3_3
41 - Set the nano to 2 (in configure.ac, AS_VERSION)
42 - Do all updates/patches/changes for the release tarball in this branch
43 - Think of a good codename for the release
44 - create a new version dir in www/releases and add that to cvs
45 - copy files from the last one to this new release dir
46 - Start updating the release notes on the www cvs tree
47 - Log in to sourceforge and run www-update.sh in the gstreamer root dir
48 - depending on how the API has changed update the libtool versioning
49 in configure.ac, AS_LIBTOOL
50 (Look at the libtool info page about versioning for guidelines)
51 - FIXME: autotools have latest config.{guess,sub}
52 This is needed in order to support newer platforms.
53 On Debian install the autotools-dev package to get these.
54 Someone please add some more useful info here on how to do this
55 - copy new supporting RPMS to the htdocs/redhat dir in various places,
56 update README, and update symlinks to these packages in the release dir
57 - while (IS_PRERELEASE)
59 - increase the nano number (starting with 2)
60 - check out a fresh anonymous copy
61 cvs -d:pserver:anonymous@cvs.gstreamer.sf.net:/cvsroot/gstreamer \
62 co -rBRANCH-RELEASE-0_3_3 gstreamer
63 - make distcheck, rpm build should pass, from a FRESH cvs tree
64 - media tests should be done
65 - source tarball should be installed and tested
66 - rpms should be installed and tested
67 - put up tarball for a day
73 When we're satisfied with the prereleases, it's time to make the final tarball.
74 It's very important that the tarball we put out is fully checked, works as
75 planned, and generally is generated only ONCE by someone with a relatively
76 clean (and reference) system. We don't want to put out more than one tarball
80 - give the latest prerelease another good testing
81 - proofread the release notes (notice.php) and the index (index.php)
82 - change the symlinks on the website :
83 - change the releases/current symbolic link to point to the new release dir
84 - change the releases/cvs symlink to point to the next release dir
85 - run www-update.sh on sourceforge
86 - make a text copy of the release notes to be included in the tarball :
87 lynx -dump http://gstreamer.net/releases/current/notice.php?clean=1 > RELEASE
88 - update web site docs
89 - release-specific docs should go in CVS
90 - change docs/current symlink
91 - remove the nano version number in configure.ac, AS_VERSION
93 - policy is at http://gstreamer.net/dev/cvs.php
94 - we stopped adding CODENAMES to cvs
95 --> all of this is not done anymore
96 - decide on a tag name : RELEASE-(VERSION)
97 - tag; for example for 0.6.3 :
100 - roll the tarball, build rpms
101 - FIXME: update status table cvs status and then click on the release link
102 http://gstreamer.net/admin.php is the portal to all of this
103 where to get the password, what should we do here ?
107 Time to bring the new version under the eyes of the public.
110 - FIXME: should we md5 the tarballs?
111 - upload to sourceforge
112 upload.sourceforge.net/incoming
113 administer the release
115 - FIXME: announcements
116 - gstreamer-{devel, announce} : a simple mail with RELEASE
118 - linux-audio-dev (if it's a big release) : a simple mail with RELEASE
120 - lwn (if it's a big release)
121 - Kick back, have a party, enjoy people coming in on IRC telling us how
123 - Later on, if necessary, merge back latest release branch to current dev
124 branch (if patches to source were made)
125 * change to a HEAD branch, make sure it's updated
126 * cvs diff -R -r RELEASE-0_3_4-30SECONDFRENCHMAN
127 gives a list of differences between head and release tag,
128 stuff with > is how it's in HEAD, < is in the rel branch
130 * cvs update -j BRANCH-RELEASE-0_3_4
131 merges the difference made in that branch to the current source
132 this is what you want to use when merging back the branch
133 resolve conflicts and commit
135 Some various random comments that might or might not make sense :
138 * autoconf feature to allow building outside source dir
140 - Package version policy
141 - Use major.minor.micro versioning
142 - Before 1.0.0, Update micro until code and API are fairly stable,
145 Update major when code and api hit new level of stability or major features.
146 Update minor on API changes.
147 Update micro on API-compatible changes.