Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 1 | ================================= |
| 2 | How To Release LLVM To The Public |
| 3 | ================================= |
| 4 | |
| 5 | .. contents:: |
| 6 | :local: |
Dmitri Gribenko | 0c79cd6 | 2012-12-09 15:29:56 +0000 | [diff] [blame] | 7 | :depth: 1 |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 8 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 9 | Introduction |
| 10 | ============ |
| 11 | |
| 12 | This document contains information about successfully releasing LLVM --- |
| 13 | including subprojects: e.g., ``clang`` and ``dragonegg`` --- to the public. It |
| 14 | is the Release Manager's responsibility to ensure that a high quality build of |
| 15 | LLVM is released. |
| 16 | |
Renato Golin | c08f218 | 2013-05-28 10:32:55 +0000 | [diff] [blame] | 17 | If you're looking for the document on how to test the release candidates and |
Renato Golin | 467e256 | 2013-05-28 11:28:37 +0000 | [diff] [blame] | 18 | create the binary packages, please refer to the :doc:`ReleaseProcess` instead. |
Renato Golin | c08f218 | 2013-05-28 10:32:55 +0000 | [diff] [blame] | 19 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 20 | .. _timeline: |
| 21 | |
| 22 | Release Timeline |
| 23 | ================ |
| 24 | |
Tom Stellard | 711ce3d | 2014-02-04 17:18:20 +0000 | [diff] [blame] | 25 | LLVM is released on a time based schedule --- with major releases roughly |
| 26 | every 6 months. In between major releases there may be dot releases. |
| 27 | The release manager will determine if and when to make a dot release based |
| 28 | on feedback from the community. Typically, dot releases should be made if |
| 29 | there are large number of bug-fixes in the stable branch or a critical bug |
| 30 | has been discovered that affects a large number of users. |
| 31 | |
| 32 | Unless otherwise stated, dot releases will follow the same procedure as |
| 33 | major releases. |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 34 | |
| 35 | The release process is roughly as follows: |
| 36 | |
| 37 | * Set code freeze and branch creation date for 6 months after last code freeze |
| 38 | date. Announce release schedule to the LLVM community and update the website. |
| 39 | |
| 40 | * Create release branch and begin release process. |
| 41 | |
| 42 | * Send out release candidate sources for first round of testing. Testing lasts |
| 43 | 7-10 days. During the first round of testing, any regressions found should be |
| 44 | fixed. Patches are merged from mainline into the release branch. Also, all |
| 45 | features need to be completed during this time. Any features not completed at |
| 46 | the end of the first round of testing will be removed or disabled for the |
| 47 | release. |
| 48 | |
| 49 | * Generate and send out the second release candidate sources. Only *critial* |
| 50 | bugs found during this testing phase will be fixed. Any bugs introduced by |
| 51 | merged patches will be fixed. If so a third round of testing is needed. |
| 52 | |
| 53 | * The release notes are updated. |
| 54 | |
| 55 | * Finally, release! |
| 56 | |
Tom Stellard | 711ce3d | 2014-02-04 17:18:20 +0000 | [diff] [blame] | 57 | The release process will be accelerated for dot releases. If the first round |
| 58 | of testing finds no critical bugs and no regressions since the last major release, |
| 59 | then additional rounds of testing will not be required. |
| 60 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 61 | Release Process |
| 62 | =============== |
| 63 | |
Dmitri Gribenko | 0c79cd6 | 2012-12-09 15:29:56 +0000 | [diff] [blame] | 64 | .. contents:: |
| 65 | :local: |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 66 | |
| 67 | Release Administrative Tasks |
| 68 | ---------------------------- |
| 69 | |
| 70 | This section describes a few administrative tasks that need to be done for the |
| 71 | release process to begin. Specifically, it involves: |
| 72 | |
| 73 | * Creating the release branch, |
| 74 | |
| 75 | * Setting version numbers, and |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 76 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 77 | * Tagging release candidates for the release team to begin testing. |
| 78 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 79 | Create Release Branch |
| 80 | ^^^^^^^^^^^^^^^^^^^^^ |
| 81 | |
| 82 | Branch the Subversion trunk using the following procedure: |
| 83 | |
| 84 | #. Remind developers that the release branching is imminent and to refrain from |
| 85 | committing patches that might break the build. E.g., new features, large |
| 86 | patches for works in progress, an overhaul of the type system, an exciting |
| 87 | new TableGen feature, etc. |
| 88 | |
| 89 | #. Verify that the current Subversion trunk is in decent shape by |
| 90 | examining nightly tester and buildbot results. |
| 91 | |
| 92 | #. Create the release branch for ``llvm``, ``clang``, the ``test-suite``, and |
| 93 | ``dragonegg`` from the last known good revision. The branch's name is |
| 94 | ``release_XY``, where ``X`` is the major and ``Y`` the minor release |
| 95 | numbers. The branches should be created using the following commands: |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 96 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 97 | :: |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 98 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 99 | $ svn copy https://llvm.org/svn/llvm-project/llvm/trunk \ |
| 100 | https://llvm.org/svn/llvm-project/llvm/branches/release_XY |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 101 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 102 | $ svn copy https://llvm.org/svn/llvm-project/cfe/trunk \ |
| 103 | https://llvm.org/svn/llvm-project/cfe/branches/release_XY |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 104 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 105 | $ svn copy https://llvm.org/svn/llvm-project/dragonegg/trunk \ |
| 106 | https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 107 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 108 | $ svn copy https://llvm.org/svn/llvm-project/test-suite/trunk \ |
| 109 | https://llvm.org/svn/llvm-project/test-suite/branches/release_XY |
| 110 | |
| 111 | #. Advise developers that they may now check their patches into the Subversion |
| 112 | tree again. |
| 113 | |
| 114 | #. The Release Manager should switch to the release branch, because all changes |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 115 | to the release will now be done in the branch. The easiest way to do this is |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 116 | to grab a working copy using the following commands: |
| 117 | |
| 118 | :: |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 119 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 120 | $ svn co https://llvm.org/svn/llvm-project/llvm/branches/release_XY llvm-X.Y |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 121 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 122 | $ svn co https://llvm.org/svn/llvm-project/cfe/branches/release_XY clang-X.Y |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 123 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 124 | $ svn co https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY dragonegg-X.Y |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 125 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 126 | $ svn co https://llvm.org/svn/llvm-project/test-suite/branches/release_XY test-suite-X.Y |
| 127 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 128 | Update LLVM Version |
| 129 | ^^^^^^^^^^^^^^^^^^^ |
| 130 | |
| 131 | After creating the LLVM release branch, update the release branches' |
| 132 | ``autoconf`` and ``configure.ac`` versions from '``X.Ysvn``' to '``X.Y``'. |
| 133 | Update it on mainline as well to be the next version ('``X.Y+1svn``'). |
| 134 | Regenerate the configure scripts for both ``llvm`` and the ``test-suite``. |
| 135 | |
| 136 | In addition, the version numbers of all the Bugzilla components must be updated |
| 137 | for the next release. |
| 138 | |
Tom Stellard | cb98abe | 2015-07-31 01:02:35 +0000 | [diff] [blame] | 139 | Tagging the LLVM Release Candidates |
| 140 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 141 | |
Tom Stellard | cb98abe | 2015-07-31 01:02:35 +0000 | [diff] [blame] | 142 | Tag release candidates using the tag.sh script in utils/release. |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 143 | |
| 144 | :: |
| 145 | |
Tom Stellard | cb98abe | 2015-07-31 01:02:35 +0000 | [diff] [blame] | 146 | $ ./tag.sh -release X.Y.Z -rc $RC |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 147 | |
| 148 | The Release Manager may supply pre-packaged source tarballs for users. This can |
Tom Stellard | cb98abe | 2015-07-31 01:02:35 +0000 | [diff] [blame] | 149 | be done with the export.sh script in utils/release. |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 150 | |
| 151 | :: |
| 152 | |
Tom Stellard | cb98abe | 2015-07-31 01:02:35 +0000 | [diff] [blame] | 153 | $ ./export.sh -release X.Y.Z -rc $RC |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 154 | |
Tom Stellard | cb98abe | 2015-07-31 01:02:35 +0000 | [diff] [blame] | 155 | This will generate source tarballs for each LLVM project being validated, which |
| 156 | can be uploaded to the website for further testing. |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 157 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 158 | Building the Release |
| 159 | -------------------- |
| 160 | |
| 161 | The builds of ``llvm``, ``clang``, and ``dragonegg`` *must* be free of |
| 162 | errors and warnings in Debug, Release+Asserts, and Release builds. If all |
| 163 | builds are clean, then the release passes Build Qualification. |
| 164 | |
| 165 | The ``make`` options for building the different modes: |
| 166 | |
| 167 | +-----------------+---------------------------------------------+ |
| 168 | | Mode | Options | |
| 169 | +=================+=============================================+ |
| 170 | | Debug | ``ENABLE_OPTIMIZED=0`` | |
| 171 | +-----------------+---------------------------------------------+ |
| 172 | | Release+Asserts | ``ENABLE_OPTIMIZED=1`` | |
| 173 | +-----------------+---------------------------------------------+ |
| 174 | | Release | ``ENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1`` | |
| 175 | +-----------------+---------------------------------------------+ |
| 176 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 177 | Build LLVM |
| 178 | ^^^^^^^^^^ |
| 179 | |
| 180 | Build ``Debug``, ``Release+Asserts``, and ``Release`` versions |
| 181 | of ``llvm`` on all supported platforms. Directions to build ``llvm`` |
Sean Silva | 92a4489 | 2013-01-11 02:28:08 +0000 | [diff] [blame] | 182 | are :doc:`here <GettingStarted>`. |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 183 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 184 | Build Clang Binary Distribution |
| 185 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 186 | |
| 187 | Creating the ``clang`` binary distribution (Debug/Release+Asserts/Release) |
| 188 | requires performing the following steps for each supported platform: |
| 189 | |
| 190 | #. Build clang according to the directions `here |
| 191 | <http://clang.llvm.org/get_started.html>`__. |
| 192 | |
| 193 | #. Build both a Debug and Release version of clang. The binary will be the |
| 194 | Release build. |
| 195 | |
| 196 | #. Package ``clang`` (details to follow). |
| 197 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 198 | Target Specific Build Details |
| 199 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 200 | |
| 201 | The table below specifies which compilers are used for each Arch/OS combination |
| 202 | when qualifying the build of ``llvm``, ``clang``, and ``dragonegg``. |
| 203 | |
| 204 | +--------------+---------------+----------------------+ |
| 205 | | Architecture | OS | compiler | |
| 206 | +==============+===============+======================+ |
| 207 | | x86-32 | Mac OS 10.5 | gcc 4.0.1 | |
| 208 | +--------------+---------------+----------------------+ |
| 209 | | x86-32 | Linux | gcc 4.2.X, gcc 4.3.X | |
| 210 | +--------------+---------------+----------------------+ |
| 211 | | x86-32 | FreeBSD | gcc 4.2.X | |
| 212 | +--------------+---------------+----------------------+ |
| 213 | | x86-32 | mingw | gcc 3.4.5 | |
| 214 | +--------------+---------------+----------------------+ |
| 215 | | x86-64 | Mac OS 10.5 | gcc 4.0.1 | |
| 216 | +--------------+---------------+----------------------+ |
| 217 | | x86-64 | Linux | gcc 4.2.X, gcc 4.3.X | |
| 218 | +--------------+---------------+----------------------+ |
| 219 | | x86-64 | FreeBSD | gcc 4.2.X | |
| 220 | +--------------+---------------+----------------------+ |
Renato Golin | a4ecd46 | 2013-12-13 09:39:36 +0000 | [diff] [blame] | 221 | | ARMv7 | Linux | gcc 4.6.X, gcc 4.7.X | |
| 222 | +--------------+---------------+----------------------+ |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 223 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 224 | Release Qualification Criteria |
| 225 | ------------------------------ |
| 226 | |
| 227 | A release is qualified when it has no regressions from the previous release (or |
| 228 | baseline). Regressions are related to correctness first and performance second. |
| 229 | (We may tolerate some minor performance regressions if they are deemed |
| 230 | necessary for the general quality of the compiler.) |
| 231 | |
| 232 | **Regressions are new failures in the set of tests that are used to qualify |
| 233 | each product and only include things on the list. Every release will have |
| 234 | some bugs in it. It is the reality of developing a complex piece of |
| 235 | software. We need a very concrete and definitive release criteria that |
| 236 | ensures we have monotonically improving quality on some metric. The metric we |
| 237 | use is described below. This doesn't mean that we don't care about other |
| 238 | criteria, but these are the criteria which we found to be most important and |
| 239 | which must be satisfied before a release can go out.** |
| 240 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 241 | Qualify LLVM |
| 242 | ^^^^^^^^^^^^ |
| 243 | |
| 244 | LLVM is qualified when it has a clean test run without a front-end. And it has |
| 245 | no regressions when using either ``clang`` or ``dragonegg`` with the |
| 246 | ``test-suite`` from the previous release. |
| 247 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 248 | Qualify Clang |
| 249 | ^^^^^^^^^^^^^ |
| 250 | |
Dmitri Gribenko | 09a682a | 2013-01-18 19:27:43 +0000 | [diff] [blame] | 251 | ``Clang`` is qualified when front-end specific tests in the ``llvm`` regression |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 252 | test suite all pass, clang's own test suite passes cleanly, and there are no |
| 253 | regressions in the ``test-suite``. |
| 254 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 255 | Specific Target Qualification Details |
| 256 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 257 | |
| 258 | +--------------+-------------+----------------+-----------------------------+ |
| 259 | | Architecture | OS | clang baseline | tests | |
| 260 | +==============+=============+================+=============================+ |
Dmitri Gribenko | 09a682a | 2013-01-18 19:27:43 +0000 | [diff] [blame] | 261 | | x86-32 | Linux | last release | llvm regression tests, | |
| 262 | | | | | clang regression tests, | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 263 | | | | | test-suite (including spec) | |
| 264 | +--------------+-------------+----------------+-----------------------------+ |
Dmitri Gribenko | 09a682a | 2013-01-18 19:27:43 +0000 | [diff] [blame] | 265 | | x86-32 | FreeBSD | last release | llvm regression tests, | |
| 266 | | | | | clang regression tests, | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 267 | | | | | test-suite | |
| 268 | +--------------+-------------+----------------+-----------------------------+ |
| 269 | | x86-32 | mingw | none | QT | |
| 270 | +--------------+-------------+----------------+-----------------------------+ |
Dmitri Gribenko | 09a682a | 2013-01-18 19:27:43 +0000 | [diff] [blame] | 271 | | x86-64 | Mac OS 10.X | last release | llvm regression tests, | |
| 272 | | | | | clang regression tests, | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 273 | | | | | test-suite (including spec) | |
| 274 | +--------------+-------------+----------------+-----------------------------+ |
Dmitri Gribenko | 09a682a | 2013-01-18 19:27:43 +0000 | [diff] [blame] | 275 | | x86-64 | Linux | last release | llvm regression tests, | |
| 276 | | | | | clang regression tests, | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 277 | | | | | test-suite (including spec) | |
| 278 | +--------------+-------------+----------------+-----------------------------+ |
Dmitri Gribenko | 09a682a | 2013-01-18 19:27:43 +0000 | [diff] [blame] | 279 | | x86-64 | FreeBSD | last release | llvm regression tests, | |
| 280 | | | | | clang regression tests, | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 281 | | | | | test-suite | |
| 282 | +--------------+-------------+----------------+-----------------------------+ |
Renato Golin | a4ecd46 | 2013-12-13 09:39:36 +0000 | [diff] [blame] | 283 | | ARMv7A | Linux | last release | llvm regression tests, | |
| 284 | | | | | clang regression tests, | |
| 285 | | | | | test-suite | |
| 286 | +--------------+-------------+----------------+-----------------------------+ |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 287 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 288 | Community Testing |
| 289 | ----------------- |
| 290 | |
| 291 | Once all testing has been completed and appropriate bugs filed, the release |
| 292 | candidate tarballs are put on the website and the LLVM community is notified. |
| 293 | Ask that all LLVM developers test the release in 2 ways: |
| 294 | |
| 295 | #. Download ``llvm-X.Y``, ``llvm-test-X.Y``, and the appropriate ``clang`` |
| 296 | binary. Build LLVM. Run ``make check`` and the full LLVM test suite (``make |
| 297 | TEST=nightly report``). |
| 298 | |
| 299 | #. Download ``llvm-X.Y``, ``llvm-test-X.Y``, and the ``clang`` sources. Compile |
| 300 | everything. Run ``make check`` and the full LLVM test suite (``make |
| 301 | TEST=nightly report``). |
| 302 | |
| 303 | Ask LLVM developers to submit the test suite report and ``make check`` results |
| 304 | to the list. Verify that there are no regressions from the previous release. |
| 305 | The results are not used to qualify a release, but to spot other potential |
| 306 | problems. For unsupported targets, verify that ``make check`` is at least |
| 307 | clean. |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 308 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 309 | During the first round of testing, all regressions must be fixed before the |
| 310 | second release candidate is tagged. |
Dmitri Gribenko | 2247085 | 2012-12-09 15:33:26 +0000 | [diff] [blame] | 311 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 312 | If this is the second round of testing, the testing is only to ensure that bug |
| 313 | fixes previously merged in have not created new major problems. *This is not |
| 314 | the time to solve additional and unrelated bugs!* If no patches are merged in, |
| 315 | the release is determined to be ready and the release manager may move onto the |
| 316 | next stage. |
| 317 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 318 | Release Patch Rules |
| 319 | ------------------- |
| 320 | |
| 321 | Below are the rules regarding patching the release branch: |
| 322 | |
| 323 | #. Patches applied to the release branch may only be applied by the release |
| 324 | manager. |
| 325 | |
| 326 | #. During the first round of testing, patches that fix regressions or that are |
| 327 | small and relatively risk free (verified by the appropriate code owner) are |
| 328 | applied to the branch. Code owners are asked to be very conservative in |
| 329 | approving patches for the branch. We reserve the right to reject any patch |
| 330 | that does not fix a regression as previously defined. |
| 331 | |
| 332 | #. During the remaining rounds of testing, only patches that fix critical |
| 333 | regressions may be applied. |
| 334 | |
Tom Stellard | 711ce3d | 2014-02-04 17:18:20 +0000 | [diff] [blame] | 335 | #. For dot releases all patches must mantain both API and ABI compatibility with |
| 336 | the previous major release. Only bugfixes will be accepted. |
Sean Silva | 216f1ee | 2014-03-02 00:21:42 +0000 | [diff] [blame] | 337 | |
Vedant Kumar | 8976365 | 2016-01-25 22:47:54 +0000 | [diff] [blame^] | 338 | Merging Patches |
| 339 | ^^^^^^^^^^^^^^^ |
| 340 | |
| 341 | The ``utils/release/merge.sh`` script can be used to merge individual revisions |
| 342 | into any one of the llvm projects. To merge revision ``$N`` into project |
| 343 | ``$PROJ``, do: |
| 344 | |
| 345 | #. ``svn co http://llvm.org/svn/llvm-project/$PROJ/branches/release_XX |
| 346 | $PROJ.src`` |
| 347 | |
| 348 | #. ``$PROJ.src/utils/release/merge.sh --proj $PROJ --rev $N`` |
| 349 | |
| 350 | #. Run regression tests. |
| 351 | |
| 352 | #. ``cd $PROJ.src``. Run the ``svn commit`` command printed out by ``merge.sh`` |
| 353 | in step 2. |
| 354 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 355 | Release Final Tasks |
| 356 | ------------------- |
| 357 | |
| 358 | The final stages of the release process involves tagging the "final" release |
| 359 | branch, updating documentation that refers to the release, and updating the |
| 360 | demo page. |
| 361 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 362 | Update Documentation |
| 363 | ^^^^^^^^^^^^^^^^^^^^ |
| 364 | |
| 365 | Review the documentation and ensure that it is up to date. The "Release Notes" |
| 366 | must be updated to reflect new features, bug fixes, new known issues, and |
| 367 | changes in the list of supported platforms. The "Getting Started Guide" should |
| 368 | be updated to reflect the new release version number tag available from |
| 369 | Subversion and changes in basic system requirements. Merge both changes from |
| 370 | mainline into the release branch. |
| 371 | |
| 372 | .. _tag: |
| 373 | |
| 374 | Tag the LLVM Final Release |
| 375 | ^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 376 | |
Tom Stellard | cb98abe | 2015-07-31 01:02:35 +0000 | [diff] [blame] | 377 | Tag the final release sources using the tag.sh script in utils/release. |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 378 | |
| 379 | :: |
| 380 | |
Tom Stellard | cb98abe | 2015-07-31 01:02:35 +0000 | [diff] [blame] | 381 | $ ./tag.sh -release X.Y.Z -final |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 382 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 383 | Update the LLVM Demo Page |
| 384 | ------------------------- |
| 385 | |
| 386 | The LLVM demo page must be updated to use the new release. This consists of |
| 387 | using the new ``clang`` binary and building LLVM. |
| 388 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 389 | Update the LLVM Website |
| 390 | ^^^^^^^^^^^^^^^^^^^^^^^ |
| 391 | |
| 392 | The website must be updated before the release announcement is sent out. Here |
| 393 | is what to do: |
| 394 | |
| 395 | #. Check out the ``www`` module from Subversion. |
| 396 | |
| 397 | #. Create a new subdirectory ``X.Y`` in the releases directory. |
| 398 | |
| 399 | #. Commit the ``llvm``, ``test-suite``, ``clang`` source, ``clang binaries``, |
| 400 | ``dragonegg`` source, and ``dragonegg`` binaries in this new directory. |
| 401 | |
| 402 | #. Copy and commit the ``llvm/docs`` and ``LICENSE.txt`` files into this new |
| 403 | directory. The docs should be built with ``BUILD_FOR_WEBSITE=1``. |
| 404 | |
| 405 | #. Commit the ``index.html`` to the ``release/X.Y`` directory to redirect (use |
| 406 | from previous release). |
| 407 | |
| 408 | #. Update the ``releases/download.html`` file with the new release. |
| 409 | |
| 410 | #. Update the ``releases/index.html`` with the new release and link to release |
| 411 | documentation. |
| 412 | |
| 413 | #. Finally, update the main page (``index.html`` and sidebar) to point to the |
| 414 | new release and release announcement. Make sure this all gets committed back |
| 415 | into Subversion. |
| 416 | |
Dmitri Gribenko | 7a93668 | 2012-12-07 16:42:48 +0000 | [diff] [blame] | 417 | Announce the Release |
| 418 | ^^^^^^^^^^^^^^^^^^^^ |
| 419 | |
| 420 | Have Chris send out the release announcement when everything is finished. |
| 421 | |