1================================= 2How To Release LLVM To The Public 3================================= 4 5Introduction 6============ 7 8This document contains information about successfully releasing LLVM --- 9including sub-projects: e.g., ``clang`` and ``compiler-rt`` --- to the public. 10It is the Release Manager's responsibility to ensure that a high quality build 11of LLVM is released. 12 13If you're looking for the document on how to test the release candidates and 14create the binary packages, please refer to the :doc:`ReleaseProcess` instead. 15 16.. _timeline: 17 18Release Timeline 19================ 20 21LLVM is released on a time based schedule --- with major releases roughly 22every 6 months. In between major releases there may be dot releases. 23The release manager will determine if and when to make a dot release based 24on feedback from the community. Typically, dot releases should be made if 25there are large number of bug-fixes in the stable branch or a critical bug 26has been discovered that affects a large number of users. 27 28Unless otherwise stated, dot releases will follow the same procedure as 29major releases. 30 31The release process is roughly as follows: 32 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. 35 36* Create release branch and begin release process. 37 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. 44 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. 48 49* The release notes are updated. 50 51* Finally, release! 52 53The release process will be accelerated for dot releases. If the first round 54of testing finds no critical bugs and no regressions since the last major release, 55then additional rounds of testing will not be required. 56 57Release Process 58=============== 59 60.. contents:: 61 :local: 62 63Release Administrative Tasks 64---------------------------- 65 66This section describes a few administrative tasks that need to be done for the 67release process to begin. Specifically, it involves: 68 69* Creating the release branch, 70 71* Setting version numbers, and 72 73* Tagging release candidates for the release team to begin testing. 74 75Create Release Branch 76^^^^^^^^^^^^^^^^^^^^^ 77 78Branch the Subversion trunk using the following procedure: 79 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. 84 85#. Verify that the current Subversion trunk is in decent shape by 86 examining nightly tester and buildbot results. 87 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. 92 93#. Advise developers that they may now check their patches into the Subversion 94 tree again. 95 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: 99 100 :: 101 102 $ svn co https://llvm.org/svn/llvm-project/llvm/branches/release_XY llvm-X.Y 103 104 $ svn co https://llvm.org/svn/llvm-project/cfe/branches/release_XY clang-X.Y 105 106 $ svn co https://llvm.org/svn/llvm-project/test-suite/branches/release_XY test-suite-X.Y 107 108Update LLVM Version 109^^^^^^^^^^^^^^^^^^^ 110 111After creating the LLVM release branch, update the release branches' 112``autoconf`` and ``configure.ac`` versions from '``X.Ysvn``' to '``X.Y``'. 113Update it on mainline as well to be the next version ('``X.Y+1svn``'). 114Regenerate the configure scripts for both ``llvm`` and the ``test-suite``. 115 116In addition, the version numbers of all the Bugzilla components must be updated 117for the next release. 118 119Tagging the LLVM Release Candidates 120^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 121 122Tag release candidates using the tag.sh script in utils/release. 123 124:: 125 126 $ ./tag.sh -release X.Y.Z -rc $RC 127 128The Release Manager may supply pre-packaged source tarballs for users. This can 129be done with the export.sh script in utils/release. 130 131:: 132 133 $ ./export.sh -release X.Y.Z -rc $RC 134 135This will generate source tarballs for each LLVM project being validated, which 136can be uploaded to the website for further testing. 137 138Build Clang Binary Distribution 139^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 140 141Creating the ``clang`` binary distribution requires following the instructions 142:doc:`here <ReleaseProcess>`. 143 144That process will perform both Release+Asserts and Release builds but only 145pack the Release build for upload. You should use the Release+Asserts sysroot, 146normally under ``final/Phase3/Release+Asserts/llvmCore-3.8.1-RCn.install/``, 147for test-suite and run-time benchmarks, to make sure nothing serious has 148passed through the net. For compile-time benchmarks, use the Release version. 149 150The minimum required version of the tools you'll need are :doc:`here <GettingStarted>` 151 152Release Qualification Criteria 153------------------------------ 154 155A release is qualified when it has no regressions from the previous release (or 156baseline). Regressions are related to correctness first and performance second. 157(We may tolerate some minor performance regressions if they are deemed 158necessary for the general quality of the compiler.) 159 160More specifically, Clang/LLVM is qualified when it has a clean test with all 161supported sub-projects included (``make check-all``), per target, and it has no 162regressions with the ``test-suite`` in relation to the previous release. 163 164Regressions are new failures in the set of tests that are used to qualify 165each product and only include things on the list. Every release will have 166some bugs in it. It is the reality of developing a complex piece of 167software. We need a very concrete and definitive release criteria that 168ensures we have monotonically improving quality on some metric. The metric we 169use is described below. This doesn't mean that we don't care about other 170criteria, but these are the criteria which we found to be most important and 171which must be satisfied before a release can go out. 172 173Official Testing 174---------------- 175 176A few developers in the community have dedicated time to validate the release 177candidates and volunteered to be the official release testers for each 178architecture. 179 180These will be the ones testing, generating and uploading the official binaries 181to the server, and will be the minimum tests *necessary* for the release to 182proceed. 183 184This will obviously not cover all OSs and distributions, so additional community 185validation is important. However, if community input is not reached before the 186release is out, all bugs reported will have to go on the next stable release. 187 188The official release managers are: 189 190* Major releases (X.0): Hans Wennborg 191* Stable releases (X.n): Tom Stellard 192 193The official release testers are volunteered from the community and have 194consistently validated and released binaries for their targets/OSs. To contact 195them, you should email the ``[email protected]`` mailing list. 196 197The official testers list is in the file ``RELEASE_TESTERS.TXT``, in the ``LLVM`` 198repository. 199 200Community Testing 201----------------- 202 203Once all testing has been completed and appropriate bugs filed, the release 204candidate tarballs are put on the website and the LLVM community is notified. 205 206We ask that all LLVM developers test the release in any the following ways: 207 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``). 211 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``). 215 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. 219 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. 223 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. 228 229We also ask that the OS distribution release managers test their packages with 230the first candidate of every release, and report any *new* errors in Bugzilla. 231If the bug can be reproduced with an unpatched upstream version of the release 232candidate (as opposed to the distribution's own build), the priority should be 233release blocker. 234 235During the first round of testing, all regressions must be fixed before the 236second release candidate is tagged. 237 238In the subsequent stages, the testing is only to ensure that bug 239fixes previously merged in have not created new major problems. *This is not 240the time to solve additional and unrelated bugs!* If no patches are merged in, 241the release is determined to be ready and the release manager may move onto the 242next stage. 243 244Reporting Regressions 245--------------------- 246 247Every regression that is found during the tests (as per the criteria above), 248should be filled in a bug in Bugzilla with the priority *release blocker* and 249blocking a specific release. 250 251To 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 253all blockers are done, the Meta can be closed. 254 255If a bug can't be reproduced, or stops being a blocker, it should be removed 256from the Meta and its priority decreased to *normal*. Debugging can continue, 257but on trunk. 258 259Release Patch Rules 260------------------- 261 262Below are the rules regarding patching the release branch: 263 264#. Patches applied to the release branch may only be applied by the release 265 manager, the official release testers or the code owners with approval from 266 the release manager. 267 268#. During the first round of testing, patches that fix regressions or that are 269 small and relatively risk free (verified by the appropriate code owner) are 270 applied to the branch. Code owners are asked to be very conservative in 271 approving patches for the branch. We reserve the right to reject any patch 272 that does not fix a regression as previously defined. 273 274#. During the remaining rounds of testing, only patches that fix critical 275 regressions may be applied. 276 277#. For dot releases all patches must maintain both API and ABI compatibility with 278 the previous major release. Only bug-fixes will be accepted. 279 280Merging Patches 281^^^^^^^^^^^^^^^ 282 283The ``utils/release/merge.sh`` script can be used to merge individual revisions 284into any one of the llvm projects. To merge revision ``$N`` into project 285``$PROJ``, do: 286 287#. ``svn co https://llvm.org/svn/llvm-project/$PROJ/branches/release_XX 288 $PROJ.src`` 289 290#. ``$PROJ.src/utils/release/merge.sh --proj $PROJ --rev $N`` 291 292#. Run regression tests. 293 294#. ``cd $PROJ.src``. Run the ``svn commit`` command printed out by ``merge.sh`` 295 in step 2. 296 297Release Final Tasks 298------------------- 299 300The final stages of the release process involves tagging the "final" release 301branch, updating documentation that refers to the release, and updating the 302demo page. 303 304Update Documentation 305^^^^^^^^^^^^^^^^^^^^ 306 307Review the documentation and ensure that it is up to date. The "Release Notes" 308must be updated to reflect new features, bug fixes, new known issues, and 309changes in the list of supported platforms. The "Getting Started Guide" should 310be updated to reflect the new release version number tag available from 311Subversion and changes in basic system requirements. Merge both changes from 312mainline into the release branch. 313 314.. _tag: 315 316Tag the LLVM Final Release 317^^^^^^^^^^^^^^^^^^^^^^^^^^ 318 319Tag the final release sources using the tag.sh script in utils/release. 320 321:: 322 323 $ ./tag.sh -release X.Y.Z -final 324 325Update the LLVM Demo Page 326------------------------- 327 328The LLVM demo page must be updated to use the new release. This consists of 329using the new ``clang`` binary and building LLVM. 330 331Update the LLVM Website 332^^^^^^^^^^^^^^^^^^^^^^^ 333 334The website must be updated before the release announcement is sent out. Here 335is what to do: 336 337#. Check out the ``www`` module from Subversion. 338 339#. Create a new sub-directory ``X.Y`` in the releases directory. 340 341#. Commit the ``llvm``, ``test-suite``, ``clang`` source and binaries in this 342 new directory. 343 344#. Copy and commit the ``llvm/docs`` and ``LICENSE.txt`` files into this new 345 directory. The docs should be built with ``BUILD_FOR_WEBSITE=1``. 346 347#. Commit the ``index.html`` to the ``release/X.Y`` directory to redirect (use 348 from previous release). 349 350#. Update the ``releases/download.html`` file with the new release. 351 352#. Update the ``releases/index.html`` with the new release and link to release 353 documentation. 354 355#. Finally, update the main page (``index.html`` and sidebar) to point to the 356 new release and release announcement. Make sure this all gets committed back 357 into Subversion. 358 359Announce the Release 360^^^^^^^^^^^^^^^^^^^^ 361 362Send an email to the list announcing the release, pointing people to all the 363relevant documentation, download pages and bugs fixed. 364 365