[llvm-exegesis][NFC] Return many CodeTemplates instead of one.
[llvm-complete.git] / docs / HowToReleaseLLVM.rst
blobec3362e97b6f002b64da80baae92b119d1a9fc15
1 =================================
2 How To Release LLVM To The Public
3 =================================
5 Introduction
6 ============
8 This document contains information about successfully releasing LLVM ---
9 including sub-projects: e.g., ``clang`` and ``compiler-rt`` --- to the public.
10 It is the Release Manager's responsibility to ensure that a high quality build
11 of LLVM is released.
13 If you're looking for the document on how to test the release candidates and
14 create the binary packages, please refer to the :doc:`ReleaseProcess` instead.
16 .. _timeline:
18 Release Timeline
19 ================
21 LLVM is released on a time based schedule --- with major releases roughly
22 every 6 months.  In between major releases there may be dot releases.
23 The release manager will determine if and when to make a dot release based
24 on feedback from the community.  Typically, dot releases should be made if
25 there are large number of bug-fixes in the stable branch or a critical bug
26 has been discovered that affects a large number of users.
28 Unless otherwise stated, dot releases will follow the same procedure as
29 major releases.
31 The release process is roughly as follows:
33 * Set code freeze and branch creation date for 6 months after last code freeze
34   date.  Announce release schedule to the LLVM community and update the website.
36 * Create release branch and begin release process.
38 * Send out release candidate sources for first round of testing.  Testing lasts
39   7-10 days.  During the first round of testing, any regressions found should be
40   fixed.  Patches are merged from mainline into the release branch.  Also, all
41   features need to be completed during this time.  Any features not completed at
42   the end of the first round of testing will be removed or disabled for the
43   release.
45 * Generate and send out the second release candidate sources.  Only *critical*
46   bugs found during this testing phase will be fixed.  Any bugs introduced by
47   merged patches will be fixed.  If so a third round of testing is needed.
49 * The release notes are updated.
51 * Finally, release!
53 The release process will be accelerated for dot releases.  If the first round
54 of testing finds no critical bugs and no regressions since the last major release,
55 then additional rounds of testing will not be required.
57 Release Process
58 ===============
60 .. contents::
61    :local:
63 Release Administrative Tasks
64 ----------------------------
66 This section describes a few administrative tasks that need to be done for the
67 release process to begin.  Specifically, it involves:
69 * Creating the release branch,
71 * Setting version numbers, and
73 * Tagging release candidates for the release team to begin testing.
75 Create Release Branch
76 ^^^^^^^^^^^^^^^^^^^^^
78 Branch the Subversion trunk using the following procedure:
80 #. Remind developers that the release branching is imminent and to refrain from
81    committing patches that might break the build.  E.g., new features, large
82    patches for works in progress, an overhaul of the type system, an exciting
83    new TableGen feature, etc.
85 #. Verify that the current Subversion trunk is in decent shape by
86    examining nightly tester and buildbot results.
88 #. Create the release branch for ``llvm``, ``clang``, and other sub-projects,
89    from the last known good revision.  The branch's name is
90    ``release_XY``, where ``X`` is the major and ``Y`` the minor release
91    numbers.  Use ``utils/release/tag.sh`` to tag the release.
93 #. Advise developers that they may now check their patches into the Subversion
94    tree again.
96 #. The Release Manager should switch to the release branch, because all changes
97    to the release will now be done in the branch.  The easiest way to do this is
98    to grab a working copy using the following commands:
100    ::
102      $ svn co https://llvm.org/svn/llvm-project/llvm/branches/release_XY llvm-X.Y
104      $ svn co https://llvm.org/svn/llvm-project/cfe/branches/release_XY clang-X.Y
106      $ svn co https://llvm.org/svn/llvm-project/test-suite/branches/release_XY test-suite-X.Y
108 Update LLVM Version
109 ^^^^^^^^^^^^^^^^^^^
111 After creating the LLVM release branch, update the release branches'
112 ``autoconf`` and ``configure.ac`` versions from '``X.Ysvn``' to '``X.Y``'.
113 Update it on mainline as well to be the next version ('``X.Y+1svn``').
114 Regenerate the configure scripts for both ``llvm`` and the ``test-suite``.
116 In addition, the version numbers of all the Bugzilla components must be updated
117 for the next release.
119 Tagging the LLVM Release Candidates
120 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
122 Tag release candidates using the tag.sh script in utils/release.
126   $ ./tag.sh -release X.Y.Z -rc $RC
128 The Release Manager may supply pre-packaged source tarballs for users.  This can
129 be done with the export.sh script in utils/release.
133   $ ./export.sh -release X.Y.Z -rc $RC
135 This will generate source tarballs for each LLVM project being validated, which
136 can be uploaded to the website for further testing.
138 Build Clang Binary Distribution
139 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
141 Creating the ``clang`` binary distribution requires following the instructions
142 :doc:`here <ReleaseProcess>`.
144 That process will perform both Release+Asserts and Release builds but only
145 pack the Release build for upload. You should use the Release+Asserts sysroot,
146 normally under ``final/Phase3/Release+Asserts/llvmCore-3.8.1-RCn.install/``,
147 for test-suite and run-time benchmarks, to make sure nothing serious has 
148 passed through the net. For compile-time benchmarks, use the Release version.
150 The minimum required version of the tools you'll need are :doc:`here <GettingStarted>`
152 Release Qualification Criteria
153 ------------------------------
155 A release is qualified when it has no regressions from the previous release (or
156 baseline).  Regressions are related to correctness first and performance second.
157 (We may tolerate some minor performance regressions if they are deemed
158 necessary for the general quality of the compiler.)
160 More specifically, Clang/LLVM is qualified when it has a clean test with all
161 supported sub-projects included (``make check-all``), per target, and it has no
162 regressions with the ``test-suite`` in relation to the previous release.
164 Regressions are new failures in the set of tests that are used to qualify
165 each product and only include things on the list.  Every release will have
166 some bugs in it.  It is the reality of developing a complex piece of
167 software.  We need a very concrete and definitive release criteria that
168 ensures we have monotonically improving quality on some metric.  The metric we
169 use is described below.  This doesn't mean that we don't care about other
170 criteria, but these are the criteria which we found to be most important and
171 which must be satisfied before a release can go out.
173 Official Testing
174 ----------------
176 A few developers in the community have dedicated time to validate the release
177 candidates and volunteered to be the official release testers for each
178 architecture.
180 These will be the ones testing, generating and uploading the official binaries
181 to the server, and will be the minimum tests *necessary* for the release to
182 proceed.
184 This will obviously not cover all OSs and distributions, so additional community
185 validation is important. However, if community input is not reached before the
186 release is out, all bugs reported will have to go on the next stable release.
188 The official release managers are:
190 * Major releases (X.0): Hans Wennborg
191 * Stable releases (X.n): Tom Stellard
193 The official release testers are volunteered from the community and have
194 consistently validated and released binaries for their targets/OSs. To contact
195 them, you should email the ``release-testers@lists.llvm.org`` mailing list.
197 The official testers list is in the file ``RELEASE_TESTERS.TXT``, in the ``LLVM``
198 repository.
200 Community Testing
201 -----------------
203 Once all testing has been completed and appropriate bugs filed, the release
204 candidate tarballs are put on the website and the LLVM community is notified.
206 We ask that all LLVM developers test the release in any the following ways:
208 #. Download ``llvm-X.Y``, ``llvm-test-X.Y``, and the appropriate ``clang``
209    binary.  Build LLVM.  Run ``make check`` and the full LLVM test suite (``make
210    TEST=nightly report``).
212 #. Download ``llvm-X.Y``, ``llvm-test-X.Y``, and the ``clang`` sources.  Compile
213    everything.  Run ``make check`` and the full LLVM test suite (``make
214    TEST=nightly report``).
216 #. Download ``llvm-X.Y``, ``llvm-test-X.Y``, and the appropriate ``clang``
217    binary. Build whole programs with it (ex. Chromium, Firefox, Apache) for
218    your platform.
220 #. Download ``llvm-X.Y``, ``llvm-test-X.Y``, and the appropriate ``clang``
221    binary. Build *your* programs with it and check for conformance and
222    performance regressions.
224 #. Run the :doc:`release process <ReleaseProcess>`, if your platform is
225    *different* than that which is officially supported, and report back errors
226    only if they were not reported by the official release tester for that
227    architecture.
229 We also ask that the OS distribution release managers test their packages with
230 the first candidate of every release, and report any *new* errors in Bugzilla.
231 If the bug can be reproduced with an unpatched upstream version of the release
232 candidate (as opposed to the distribution's own build), the priority should be
233 release blocker.
235 During the first round of testing, all regressions must be fixed before the
236 second release candidate is tagged.
238 In the subsequent stages, the testing is only to ensure that bug
239 fixes previously merged in have not created new major problems. *This is not
240 the time to solve additional and unrelated bugs!* If no patches are merged in,
241 the release is determined to be ready and the release manager may move onto the
242 next stage.
244 Reporting Regressions
245 ---------------------
247 Every regression that is found during the tests (as per the criteria above),
248 should be filled in a bug in Bugzilla with the priority *release blocker* and
249 blocking a specific release.
251 To help manage all the bugs reported and which ones are blockers or not, a new
252 "[meta]" bug should be created and all regressions *blocking* that Meta. Once
253 all blockers are done, the Meta can be closed.
255 If a bug can't be reproduced, or stops being a blocker, it should be removed
256 from the Meta and its priority decreased to *normal*. Debugging can continue,
257 but on trunk.
259 Merge Requests
260 --------------
262 You can use any of the following methods to request that a revision from trunk
263 be merged into a release branch:
265 #. Use the ``utils/release/merge-request.sh`` script which will automatically
266    file a bug_ requesting that the patch be merged. e.g. To request revision
267    12345 be merged into the branch for the 5.0.1 release:
268    ``llvm.src/utils/release/merge-request.sh -stable-version 5.0 -r 12345 -user bugzilla@example.com``
270 #. Manually file a bug_ with the subject: "Merge r12345 into the X.Y branch",
271    enter the commit(s) that you want merged in the "Fixed by Commit(s)" and mark
272    it as a blocker of the current release bug.  Release bugs are given aliases
273    in the form of release-x.y.z, so to mark a bug as a blocker for the 5.0.1
274    release, just enter release-5.0.1 in the "Blocks" field.
276 #. Reply to the commit email on llvm-commits for the revision to merge and cc
277    the release manager.
279 .. _bug: https://bugs.llvm.org/
281 Release Patch Rules
282 -------------------
284 Below are the rules regarding patching the release branch:
286 #. Patches applied to the release branch may only be applied by the release
287    manager, the official release testers or the code owners with approval from
288    the release manager.
290 #. During the first round of testing, patches that fix regressions or that are
291    small and relatively risk free (verified by the appropriate code owner) are
292    applied to the branch.  Code owners are asked to be very conservative in
293    approving patches for the branch.  We reserve the right to reject any patch
294    that does not fix a regression as previously defined.
296 #. During the remaining rounds of testing, only patches that fix critical
297    regressions may be applied.
299 #. For dot releases all patches must maintain both API and ABI compatibility with
300    the previous major release.  Only bug-fixes will be accepted.
302 Merging Patches
303 ^^^^^^^^^^^^^^^
305 The ``utils/release/merge.sh`` script can be used to merge individual revisions
306 into any one of the llvm projects. To merge revision ``$N`` into project
307 ``$PROJ``, do:
309 #. ``svn co https://llvm.org/svn/llvm-project/$PROJ/branches/release_XX
310    $PROJ.src``
312 #. ``$PROJ.src/utils/release/merge.sh --proj $PROJ --rev $N``
314 #. Run regression tests.
316 #. ``cd $PROJ.src``. Run the ``svn commit`` command printed out by ``merge.sh``
317    in step 2.
319 Release Final Tasks
320 -------------------
322 The final stages of the release process involves tagging the "final" release
323 branch, updating documentation that refers to the release, and updating the
324 demo page.
326 Update Documentation
327 ^^^^^^^^^^^^^^^^^^^^
329 Review the documentation and ensure that it is up to date.  The "Release Notes"
330 must be updated to reflect new features, bug fixes, new known issues, and
331 changes in the list of supported platforms.  The "Getting Started Guide" should
332 be updated to reflect the new release version number tag available from
333 Subversion and changes in basic system requirements.  Merge both changes from
334 mainline into the release branch.
336 .. _tag:
338 Tag the LLVM Final Release
339 ^^^^^^^^^^^^^^^^^^^^^^^^^^
341 Tag the final release sources using the tag.sh script in utils/release.
345   $ ./tag.sh -release X.Y.Z -final
347 Update the LLVM Demo Page
348 -------------------------
350 The LLVM demo page must be updated to use the new release.  This consists of
351 using the new ``clang`` binary and building LLVM.
353 Update the LLVM Website
354 ^^^^^^^^^^^^^^^^^^^^^^^
356 The website must be updated before the release announcement is sent out.  Here
357 is what to do:
359 #. Check out the ``www`` module from Subversion.
361 #. Create a new sub-directory ``X.Y`` in the releases directory.
363 #. Commit the ``llvm``, ``test-suite``, ``clang`` source and binaries in this
364    new directory.
366 #. Copy and commit the ``llvm/docs`` and ``LICENSE.txt`` files into this new
367    directory.  The docs should be built with ``BUILD_FOR_WEBSITE=1``.
369 #. Commit the ``index.html`` to the ``release/X.Y`` directory to redirect (use
370    from previous release).
372 #. Update the ``releases/download.html`` file with the new release.
374 #. Update the ``releases/index.html`` with the new release and link to release
375    documentation.
377 #. Finally, update the main page (``index.html`` and sidebar) to point to the
378    new release and release announcement.  Make sure this all gets committed back
379    into Subversion.
381 Announce the Release
382 ^^^^^^^^^^^^^^^^^^^^
384 Send an email to the list announcing the release, pointing people to all the
385 relevant documentation, download pages and bugs fixed.