annotate llvm/docs/ReleaseProcess.rst @ 235:edfff9242030 cbc-llvm13

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 21 Jul 2021 11:30:30 +0900
parents 0572611fdcc8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 =============================
anatofuz
parents:
diff changeset
2 How To Validate a New Release
anatofuz
parents:
diff changeset
3 =============================
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 .. contents::
anatofuz
parents:
diff changeset
6 :local:
anatofuz
parents:
diff changeset
7 :depth: 1
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 Introduction
anatofuz
parents:
diff changeset
10 ============
anatofuz
parents:
diff changeset
11
anatofuz
parents:
diff changeset
12 This document contains information about testing the release candidates that
anatofuz
parents:
diff changeset
13 will ultimately be the next LLVM release. For more information on how to
anatofuz
parents:
diff changeset
14 manage the actual release, please refer to :doc:`HowToReleaseLLVM`.
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 Overview of the Release Process
anatofuz
parents:
diff changeset
17 -------------------------------
anatofuz
parents:
diff changeset
18
anatofuz
parents:
diff changeset
19 Once the release process starts, the Release Manager will ask for volunteers,
anatofuz
parents:
diff changeset
20 and it'll be the role of each volunteer to:
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 * Test and benchmark the previous release
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 * Test and benchmark each release candidate, comparing to the previous release
anatofuz
parents:
diff changeset
25 and candidates
anatofuz
parents:
diff changeset
26
anatofuz
parents:
diff changeset
27 * Identify, reduce and report every regression found during tests and benchmarks
anatofuz
parents:
diff changeset
28
anatofuz
parents:
diff changeset
29 * Make sure the critical bugs get fixed and merged to the next release candidate
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 Not all bugs or regressions are show-stoppers and it's a bit of a grey area what
anatofuz
parents:
diff changeset
32 should be fixed before the next candidate and what can wait until the next
anatofuz
parents:
diff changeset
33 release.
anatofuz
parents:
diff changeset
34
anatofuz
parents:
diff changeset
35 It'll depend on:
anatofuz
parents:
diff changeset
36
anatofuz
parents:
diff changeset
37 * The severity of the bug, how many people it affects and if it's a regression
anatofuz
parents:
diff changeset
38 or a known bug. Known bugs are "unsupported features" and some bugs can be
anatofuz
parents:
diff changeset
39 disabled if they have been implemented recently.
anatofuz
parents:
diff changeset
40
anatofuz
parents:
diff changeset
41 * The stage in the release. Less critical bugs should be considered to be
anatofuz
parents:
diff changeset
42 fixed between RC1 and RC2, but not so much at the end of it.
anatofuz
parents:
diff changeset
43
anatofuz
parents:
diff changeset
44 * If it's a correctness or a performance regression. Performance regression
anatofuz
parents:
diff changeset
45 tends to be taken more lightly than correctness.
anatofuz
parents:
diff changeset
46
anatofuz
parents:
diff changeset
47 .. _scripts:
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 Scripts
anatofuz
parents:
diff changeset
50 =======
anatofuz
parents:
diff changeset
51
anatofuz
parents:
diff changeset
52 The scripts are in the ``utils/release`` directory.
anatofuz
parents:
diff changeset
53
anatofuz
parents:
diff changeset
54 test-release.sh
anatofuz
parents:
diff changeset
55 ---------------
anatofuz
parents:
diff changeset
56
anatofuz
parents:
diff changeset
57 This script will check-out, configure and compile LLVM+Clang (+ most add-ons,
anatofuz
parents:
diff changeset
58 like ``compiler-rt``, ``libcxx``, ``libomp`` and ``clang-extra-tools``) in
anatofuz
parents:
diff changeset
59 three stages, and will test the final stage.
anatofuz
parents:
diff changeset
60 It'll have installed the final binaries on the Phase3/Releasei(+Asserts)
anatofuz
parents:
diff changeset
61 directory, and that's the one you should use for the test-suite and other
anatofuz
parents:
diff changeset
62 external tests.
anatofuz
parents:
diff changeset
63
anatofuz
parents:
diff changeset
64 To run the script on a specific release candidate run::
anatofuz
parents:
diff changeset
65
anatofuz
parents:
diff changeset
66 ./test-release.sh \
anatofuz
parents:
diff changeset
67 -release 3.3 \
anatofuz
parents:
diff changeset
68 -rc 1 \
anatofuz
parents:
diff changeset
69 -no-64bit \
anatofuz
parents:
diff changeset
70 -test-asserts \
anatofuz
parents:
diff changeset
71 -no-compare-files
anatofuz
parents:
diff changeset
72
anatofuz
parents:
diff changeset
73 Each system will require different options. For instance, x86_64 will
anatofuz
parents:
diff changeset
74 obviously not need ``-no-64bit`` while 32-bit systems will, or the script will
anatofuz
parents:
diff changeset
75 fail.
anatofuz
parents:
diff changeset
76
anatofuz
parents:
diff changeset
77 The important flags to get right are:
anatofuz
parents:
diff changeset
78
anatofuz
parents:
diff changeset
79 * On the pre-release, you should change ``-rc 1`` to ``-final``. On RC2,
anatofuz
parents:
diff changeset
80 change it to ``-rc 2`` and so on.
anatofuz
parents:
diff changeset
81
anatofuz
parents:
diff changeset
82 * On non-release testing, you can use ``-final`` in conjunction with
anatofuz
parents:
diff changeset
83 ``-no-checkout``, but you'll have to create the ``final`` directory by hand
anatofuz
parents:
diff changeset
84 and link the correct source dir to ``final/llvm.src``.
anatofuz
parents:
diff changeset
85
anatofuz
parents:
diff changeset
86 * For release candidates, you need ``-test-asserts``, or it won't create a
anatofuz
parents:
diff changeset
87 "Release+Asserts" directory, which is needed for release testing and
anatofuz
parents:
diff changeset
88 benchmarking. This will take twice as long.
anatofuz
parents:
diff changeset
89
anatofuz
parents:
diff changeset
90 * On the final candidate you just need Release builds, and that's the binary
anatofuz
parents:
diff changeset
91 directory you'll have to pack.
anatofuz
parents:
diff changeset
92
anatofuz
parents:
diff changeset
93 * On macOS, you must export ``MACOSX_DEPLOYMENT_TARGET=10.9`` before running
anatofuz
parents:
diff changeset
94 the script.
anatofuz
parents:
diff changeset
95
anatofuz
parents:
diff changeset
96 This script builds three phases of Clang+LLVM twice each (Release and
anatofuz
parents:
diff changeset
97 Release+Asserts), so use screen or nohup to avoid headaches, since it'll take
anatofuz
parents:
diff changeset
98 a long time.
anatofuz
parents:
diff changeset
99
anatofuz
parents:
diff changeset
100 Use the ``--help`` option to see all the options and chose it according to
anatofuz
parents:
diff changeset
101 your needs.
anatofuz
parents:
diff changeset
102
anatofuz
parents:
diff changeset
103
anatofuz
parents:
diff changeset
104 findRegressions-nightly.py
anatofuz
parents:
diff changeset
105 --------------------------
anatofuz
parents:
diff changeset
106
anatofuz
parents:
diff changeset
107 TODO
anatofuz
parents:
diff changeset
108
anatofuz
parents:
diff changeset
109 .. _test-suite:
anatofuz
parents:
diff changeset
110
anatofuz
parents:
diff changeset
111 Test Suite
anatofuz
parents:
diff changeset
112 ==========
anatofuz
parents:
diff changeset
113
anatofuz
parents:
diff changeset
114 .. contents::
anatofuz
parents:
diff changeset
115 :local:
anatofuz
parents:
diff changeset
116
anatofuz
parents:
diff changeset
117 Follow the `LNT Quick Start Guide
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
118 <https://llvm.org/docs/lnt/quickstart.html>`__ link on how to set-up the
150
anatofuz
parents:
diff changeset
119 test-suite
anatofuz
parents:
diff changeset
120
anatofuz
parents:
diff changeset
121 The binary location you'll have to use for testing is inside the
anatofuz
parents:
diff changeset
122 ``rcN/Phase3/Release+Asserts/llvmCore-REL-RC.install``.
anatofuz
parents:
diff changeset
123 Link that directory to an easier location and run the test-suite.
anatofuz
parents:
diff changeset
124
anatofuz
parents:
diff changeset
125 An example on the run command line, assuming you created a link from the correct
anatofuz
parents:
diff changeset
126 install directory to ``~/devel/llvm/install``::
anatofuz
parents:
diff changeset
127
anatofuz
parents:
diff changeset
128 ./sandbox/bin/python sandbox/bin/lnt runtest \
anatofuz
parents:
diff changeset
129 nt \
anatofuz
parents:
diff changeset
130 -j4 \
anatofuz
parents:
diff changeset
131 --sandbox sandbox \
anatofuz
parents:
diff changeset
132 --test-suite ~/devel/llvm/test/test-suite \
anatofuz
parents:
diff changeset
133 --cc ~/devel/llvm/install/bin/clang \
anatofuz
parents:
diff changeset
134 --cxx ~/devel/llvm/install/bin/clang++
anatofuz
parents:
diff changeset
135
anatofuz
parents:
diff changeset
136 It should have no new regressions, compared to the previous release or release
anatofuz
parents:
diff changeset
137 candidate. You don't need to fix all the bugs in the test-suite, since they're
anatofuz
parents:
diff changeset
138 not necessarily meant to pass on all architectures all the time. This is
anatofuz
parents:
diff changeset
139 due to the nature of the result checking, which relies on direct comparison,
anatofuz
parents:
diff changeset
140 and most of the time, the failures are related to bad output checking, rather
anatofuz
parents:
diff changeset
141 than bad code generation.
anatofuz
parents:
diff changeset
142
anatofuz
parents:
diff changeset
143 If the errors are in LLVM itself, please report every single regression found
anatofuz
parents:
diff changeset
144 as blocker, and all the other bugs as important, but not necessarily blocking
anatofuz
parents:
diff changeset
145 the release to proceed. They can be set as "known failures" and to be
anatofuz
parents:
diff changeset
146 fix on a future date.
anatofuz
parents:
diff changeset
147
anatofuz
parents:
diff changeset
148 .. _pre-release-process:
anatofuz
parents:
diff changeset
149
anatofuz
parents:
diff changeset
150 Pre-Release Process
anatofuz
parents:
diff changeset
151 ===================
anatofuz
parents:
diff changeset
152
anatofuz
parents:
diff changeset
153 .. contents::
anatofuz
parents:
diff changeset
154 :local:
anatofuz
parents:
diff changeset
155
anatofuz
parents:
diff changeset
156 When the release process is announced on the mailing list, you should prepare
anatofuz
parents:
diff changeset
157 for the testing, by applying the same testing you'll do on the release
anatofuz
parents:
diff changeset
158 candidates, on the previous release.
anatofuz
parents:
diff changeset
159
anatofuz
parents:
diff changeset
160 You should:
anatofuz
parents:
diff changeset
161
anatofuz
parents:
diff changeset
162 * Download the previous release sources from
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
163 https://llvm.org/releases/download.html.
150
anatofuz
parents:
diff changeset
164
anatofuz
parents:
diff changeset
165 * Run the test-release.sh script on ``final`` mode (change ``-rc 1`` to
anatofuz
parents:
diff changeset
166 ``-final``).
anatofuz
parents:
diff changeset
167
anatofuz
parents:
diff changeset
168 * Once all three stages are done, it'll test the final stage.
anatofuz
parents:
diff changeset
169
anatofuz
parents:
diff changeset
170 * Using the ``Phase3/Release+Asserts/llvmCore-MAJ.MIN-final.install`` base,
anatofuz
parents:
diff changeset
171 run the test-suite.
anatofuz
parents:
diff changeset
172
anatofuz
parents:
diff changeset
173 If the final phase's ``make check-all`` failed, it's a good idea to also test
anatofuz
parents:
diff changeset
174 the intermediate stages by going on the obj directory and running
anatofuz
parents:
diff changeset
175 ``make check-all`` to find if there's at least one stage that passes (helps
anatofuz
parents:
diff changeset
176 when reducing the error for bug report purposes).
anatofuz
parents:
diff changeset
177
anatofuz
parents:
diff changeset
178 .. _release-process:
anatofuz
parents:
diff changeset
179
anatofuz
parents:
diff changeset
180 Release Process
anatofuz
parents:
diff changeset
181 ===============
anatofuz
parents:
diff changeset
182
anatofuz
parents:
diff changeset
183 .. contents::
anatofuz
parents:
diff changeset
184 :local:
anatofuz
parents:
diff changeset
185
anatofuz
parents:
diff changeset
186 When the Release Manager sends you the release candidate, download all sources,
anatofuz
parents:
diff changeset
187 unzip on the same directory (there will be sym-links from the appropriate places
anatofuz
parents:
diff changeset
188 to them), and run the release test as above.
anatofuz
parents:
diff changeset
189
anatofuz
parents:
diff changeset
190 You should:
anatofuz
parents:
diff changeset
191
anatofuz
parents:
diff changeset
192 * Download the current candidate sources from where the release manager points
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
193 you (ex. https://llvm.org/pre-releases/3.3/rc1/).
150
anatofuz
parents:
diff changeset
194
anatofuz
parents:
diff changeset
195 * Repeat the steps above with ``-rc 1``, ``-rc 2`` etc modes and run the
anatofuz
parents:
diff changeset
196 test-suite the same way.
anatofuz
parents:
diff changeset
197
anatofuz
parents:
diff changeset
198 * Compare the results, report all errors on Bugzilla and publish the binary blob
anatofuz
parents:
diff changeset
199 where the release manager can grab it.
anatofuz
parents:
diff changeset
200
anatofuz
parents:
diff changeset
201 Once the release manages announces that the latest candidate is the good one,
anatofuz
parents:
diff changeset
202 you have to pack the ``Release`` (no Asserts) install directory on ``Phase3``
anatofuz
parents:
diff changeset
203 and that will be the official binary.
anatofuz
parents:
diff changeset
204
anatofuz
parents:
diff changeset
205 * Rename (or link) ``clang+llvm-REL-ARCH-ENV`` to the .install directory
anatofuz
parents:
diff changeset
206
anatofuz
parents:
diff changeset
207 * Tar that into the same name with ``.tar.gz`` extension from outside the
anatofuz
parents:
diff changeset
208 directory
anatofuz
parents:
diff changeset
209
anatofuz
parents:
diff changeset
210 * Make it available for the release manager to download
anatofuz
parents:
diff changeset
211
anatofuz
parents:
diff changeset
212 .. _bug-reporting:
anatofuz
parents:
diff changeset
213
anatofuz
parents:
diff changeset
214 Bug Reporting Process
anatofuz
parents:
diff changeset
215 =====================
anatofuz
parents:
diff changeset
216
anatofuz
parents:
diff changeset
217 .. contents::
anatofuz
parents:
diff changeset
218 :local:
anatofuz
parents:
diff changeset
219
anatofuz
parents:
diff changeset
220 If you found regressions or failures when comparing a release candidate with the
anatofuz
parents:
diff changeset
221 previous release, follow the rules below:
anatofuz
parents:
diff changeset
222
anatofuz
parents:
diff changeset
223 * Critical bugs on compilation should be fixed as soon as possible, possibly
anatofuz
parents:
diff changeset
224 before releasing the binary blobs.
anatofuz
parents:
diff changeset
225
anatofuz
parents:
diff changeset
226 * Check-all tests should be fixed before the next release candidate, but can
anatofuz
parents:
diff changeset
227 wait until the test-suite run is finished.
anatofuz
parents:
diff changeset
228
anatofuz
parents:
diff changeset
229 * Bugs in the test suite or unimportant check-all tests can be fixed in between
anatofuz
parents:
diff changeset
230 release candidates.
anatofuz
parents:
diff changeset
231
anatofuz
parents:
diff changeset
232 * New features or recent big changes, when close to the release, should have
anatofuz
parents:
diff changeset
233 done in a way that it's easy to disable. If they misbehave, prefer disabling
anatofuz
parents:
diff changeset
234 them than releasing an unstable (but untested) binary package.