tests: meson: remove host_machine.system() guard
[mesa-waffle.git] / doc / maintainers / how-to-make-releases.asciidoc
blobbe32cac54a59e9382b9172b9c8a7bcacfe918f75
1 = How to make releases
3 == Release Candidates (RC)
5 Release candidates are tagged off the 'master' branch as 'vX.Y.0-rcN'.
7 === Checklist
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
12   *important*.
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   ---------------------------
33   `git shortlog`
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`
43   $
44   $ X=...
45   $ Y=...
46   $ Z=0
47   $ RC=rc1
48   $
49   $ final_ver=$X.$Y.$Z
50   $ ver=${final_ver}-${RC}
51   $ tag=v${ver}
52   $
53   $ tmp_dir=$(mktemp -d)
54   $ src_dir=$tmp_dir/waffle-$ver
55   $ prefix=$tmp_dir/prefix
56   $
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'.
63   $ cd $wfl_work_tree
64   $ git archive --prefix="waffle-$ver/" master | xz > $tmp_dir/$src_ball
66 - Inspect the tarball contents.
68   $ cd $tmp_dir
69   $ tar xf $src_ball
70   $ find $src_dir
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.
81     $ cd $src_dir
82     $ cmake \
83         -DCMAKE_BUILD_TYPE=Release \
84         -DCMAKE_INSTALL_PREFIX=$prefix \
85         \
86         -Dwaffle_has_glx=1 \
87         -Dwaffle_has_x11_egl=1 \
88         -Dwaffle_has_wayland=1 \
89         -Dwaffle_has_gbm=1 \
90         \
91         -Dwaffle_build_manpages=1 \
92         -Dwaffle_build_htmldocs=1 \
93         -Dwaffle_build_examples=1 \
94         .
95     $ make -j4
96     $ make check && echo PASS
98 - Run all functional tests for all Linux platforms.
99   .
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
110     run.
112     $ DISPLAY=:0 weston
114   - Finally run the tests.
116     $ export DISPLAY=:0
117     $ make check-func && echo PASS
119 - Install Waffle. Quickly inspect the set of installed files.
121   $ make install
122   $ cd $prefix
123   $ find .
125 - Inspect the installed man pages.
127   $ export MANPATH=$prefix/share/man
128   $ man waffle
129   $ man wflinfo
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
140   $ ./simple-x11-egl
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.
154   $ cd $wfl_work_tree
155   $ git tag -s $tag -m "Waffle $tag"
156   $ git push origin master $tag
158 - Publish the new manpages to the website.
160   $ cd $web_work_tree
161   $ git checkout master
162   $ git status
163   $ rsync -va -delete $prefix/share/doc/waffle*/html/man/ $web_work_tree/man/
164   $ git add -A
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>
170     <ul>
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>
176     </ul>
177   </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
187   $
188   $ cd $web_work_tree
189   $ git add -A
190   $ git commit -s -m "release: Publish Waffle $rel_version"
192 - Inspect the local release page's appearance. Validate the links to the
193   release files.
195   $ cd $web_work_tree
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.
205   $ cd $work_tree
206   $ dev-tools/wfl-make-release-announcement $tag > announce-$ver.eml
207   $ vim announce-$ver.eml
208   $ sendmail -t < announce-$ver.eml