3 == Release Candidates (RC)
5 Release candidates are tagged off the 'master' branch as 'vX.Y.0-rcN'.
9 - Find Waffle's library version as defined by the CMake and Android files. Find
10 it with grep. This version defines (1) the library's SONAME and SOVERSION in
11 the ELF header and (2) the version advertised by pkg-config. This number is
14 $ git grep -E 'waffle_(major|minor|patch)_version.*[[:digit:]]'
16 - Set the library version to 'X.(Y-1).90' if this is the first RC. For the
17 duration of Waffle's RC phase, keep the library version strictly less than
18 'X.Y.0'. Bump it on each RC if you want, but don't bump it to 'X.Y.0' until
19 you're ready to publish the 'vX.Y.0' tag.
21 - Commit release notes to 'doc/release-notes/waffle-X.Y.0.txt'.
23 - Use this toplevel heading in the release notes:
25 Waffle X.Y.0 Release Notes (draft)
26 ==================================
28 - If this is not the first RC, then consider inserting a git shortlog that
29 captures the changes since the previous RC.
31 Changes since X.Y.0-rc(N-1)
32 ---------------------------
35 - Clone the website if you haven't already.
37 $ web_work_tree=/whatever
38 $ git clone ssh://git@github.com/waffle-gl/waffle-gl.github.io $web_work_tree
40 - Setup the shell for business.
42 $ wfl_work_tree=`git rev-parse --show-toplevel`
50 $ ver=${final_ver}-${RC}
53 $ tmp_dir=$(mktemp -d)
54 $ src_dir=$tmp_dir/waffle-$ver
55 $ prefix=$tmp_dir/prefix
57 $ sums=waffle-$ver.sha256sums.asc
58 $ src_ball=waffle-$ver.tar.xz
59 $ src_sig=waffle-$ver.tar.asc
61 - Create a test tarball of 'master'.
64 $ git archive --prefix="waffle-$ver/" master | xz > $tmp_dir/$src_ball
66 - Inspect the tarball contents.
72 - Verify on Linux that the tarball can build everything (all platforms, the
73 docs, the examples, etc).
75 - You should test the build with the CMake generator that is most likely to
76 exhibit bugs and most likely to be chosen by the end user: that is,
77 the Makefile generator. Don't use CMake's Ninja generator; it works too
78 well, so you will be unaware of the Makefile bugs and thus unintentionally
79 inflict pain on users.
83 -DCMAKE_BUILD_TYPE=Release \
84 -DCMAKE_INSTALL_PREFIX=$prefix \
87 -Dwaffle_has_x11_egl=1 \
88 -Dwaffle_has_wayland=1 \
91 -Dwaffle_build_manpages=1 \
92 -Dwaffle_build_htmldocs=1 \
93 -Dwaffle_build_examples=1 \
96 $ make check && echo PASS
98 - Run all functional tests for all Linux platforms.
100 My [chadv] preferred way to run the functional tests is to run them all in
101 one pass. To do that, I setup my machine like below.
103 - Enable render nodes by adding 'drm.rnodes=1' to the kernel cmdline. This
104 will allow the GBM tests to run even when another graphics client (such as
105 the X server) owns the DRI device.
107 - Boot and start X. This will allow the 'glx' and 'x11_egl' tests to run.
109 - Start Weston as a windowed X client. This will allow the 'wayland' tests to
114 - Finally run the tests.
117 $ make check-func && echo PASS
119 - Install Waffle. Quickly inspect the set of installed files.
125 - Inspect the installed man pages.
127 $ export MANPATH=$prefix/share/man
130 $ man waffle_config_choose
132 - Inspect the install html docs too.
134 $ $BROWSER $prefix/share/doc/waffle*/html/index.html
136 - Verify that the examples build and run.
138 $ cd $prefix/share/doc/waffle*/examples
139 $ make -f Makefile.example
141 $ ./gl_basic --platform=glx --api=gl
143 - If you're feeling generous, verify that Piglit works when built and ran
144 against the installed Waffle in '$prefix'.
146 - If you have a Mac development environment, please test that too. If you
147 don't, then ask someone on the mailing list to test a release candidate on
148 a Mac before the final release.
150 - Same as previous bullet but s/Mac/Android/.
152 - Does all look good? Great! Publish the release tag.
155 $ git tag -s $tag -m "Waffle $tag"
156 $ git push origin master $tag
158 - Publish the new manpages to the website.
161 $ git checkout master
163 $ rsync -va -delete $prefix/share/doc/waffle*/html/man/ $web_work_tree/man/
165 $ git commit -s -m "man: Update for Waffle $tag"
167 - Copy the template below to the appropriate location in 'releases.html'.
169 <li><a name="${ver}" href="#${ver}"><h3>${ver}</h3></a>
171 <li>Date: YYYY-MM-DD</li>
172 <li><a href="files/release/waffle-$ver/waffle-$ver.txt">Release Notes</a></li>
173 <li><a href="files/release/waffle-$ver/$src_ball">$src_ball</a></li>
174 <li><a href="files/release/waffle-$ver/$src_sign" type="text/plain">$src_sign</a></li>
175 <li><a href="files/release/waffle-$ver/$sums" type="text/plain">$sums</a></li>
179 - Locally commit the release files to the website.
181 $ mkdir -p $web_work_tree/files/release/waffle-$ver
182 $ cd $web_work_tree/files/release/waffle-$ver
183 $ mv $tmp_dir/$src_ball .
184 $ xz --stdout --decompress $src_ball | gpg --armor --detach-sign -o $src_sign
185 $ cp $wfl_work_tree/doc/release-notes/waffle-$final_ver.txt waffle-$ver.txt
186 $ sha256sum * | gpg --armor --clearsign > $sums
190 $ git commit -s -m "release: Publish Waffle $rel_version"
192 - Inspect the local release page's appearance. Validate the links to the
196 $ $BROWSER releases.html
198 - Does all look good? Great! Publish the release files.
200 $ git tag -s $tag -m "Waffle $tag"
201 $ git push origin master $rel_tag
203 - Announce the release candidate.
206 $ dev-tools/wfl-make-release-announcement $tag > announce-$ver.eml
207 $ vim announce-$ver.eml
208 $ sendmail -t < announce-$ver.eml