|
1 | | -# Node.js Release Process |
| 1 | +# Node.js release process |
2 | 2 |
|
3 | 3 | This document describes the technical aspects of the Node.js release process. |
4 | 4 | The intended audience is those who have been authorized by the Node.js |
5 | 5 | Technical Steering Committee (TSC) to create, promote, and sign |
6 | 6 | official release builds for Node.js, hosted on <https://nodejs.org/>. |
7 | 7 |
|
8 | | -## Table of Contents |
| 8 | +## Table of contents |
9 | 9 |
|
10 | 10 | * [Who can make a release?](#who-can-make-a-release) |
11 | | - * [1. Jenkins Release Access](#1-jenkins-release-access) |
12 | | - * [2. <nodejs.org> Access](#2-nodejsorg-access) |
13 | | - * [3. A Publicly Listed GPG Key](#3-a-publicly-listed-gpg-key) |
| 11 | + * [1. Jenkins release access](#1-jenkins-release-access) |
| 12 | + * [2. <nodejs.org> access](#2-nodejsorg-access) |
| 13 | + * [3. A publicly listed GPG key](#3-a-publicly-listed-gpg-key) |
14 | 14 | * [How to create a release](#how-to-create-a-release) |
15 | 15 | * [0. Pre-release steps](#0-pre-release-steps) |
16 | 16 | * [1. Update the staging branch](#1-update-the-staging-branch) |
17 | 17 | * [2. Create a new branch for the release](#2-create-a-new-branch-for-the-release) |
18 | 18 | * [3. Update `src/node_version.h`](#3-update-srcnode_versionh) |
19 | | - * [4. Update the Changelog](#4-update-the-changelog) |
20 | | - * [5. Create Release Commit](#5-create-release-commit) |
21 | | - * [6. Propose Release on GitHub](#6-propose-release-on-github) |
22 | | - * [7. Ensure that the Release Branch is Stable](#7-ensure-that-the-release-branch-is-stable) |
23 | | - * [8. Produce a Nightly Build _(optional)_](#8-produce-a-nightly-build-optional) |
24 | | - * [9. Produce Release Builds](#9-produce-release-builds) |
25 | | - * [10. Test the Build](#10-test-the-build) |
26 | | - * [11. Tag and Sign the Release Commit](#11-tag-and-sign-the-release-commit) |
27 | | - * [12. Set Up For the Next Release](#12-set-up-for-the-next-release) |
28 | | - * [13. Cherry-pick the Release Commit to `master`](#13-cherry-pick-the-release-commit-to-master) |
| 19 | + * [4. Update the changelog](#4-update-the-changelog) |
| 20 | + * [5. Create release commit](#5-create-release-commit) |
| 21 | + * [6. Propose release on GitHub](#6-propose-release-on-github) |
| 22 | + * [7. Ensure that the release branch is stable](#7-ensure-that-the-release-branch-is-stable) |
| 23 | + * [8. Produce a nightly build _(optional)_](#8-produce-a-nightly-build-optional) |
| 24 | + * [9. Produce release builds](#9-produce-release-builds) |
| 25 | + * [10. Test the build](#10-test-the-build) |
| 26 | + * [11. Tag and sign the release commit](#11-tag-and-sign-the-release-commit) |
| 27 | + * [12. Set up for the next release](#12-set-up-for-the-next-release) |
| 28 | + * [13. Cherry-pick the release commit to `master`](#13-cherry-pick-the-release-commit-to-master) |
29 | 29 | * [14. Push the release tag](#14-push-the-release-tag) |
30 | | - * [15. Promote and Sign the Release Builds](#15-promote-and-sign-the-release-builds) |
31 | | - * [16. Check the Release](#16-check-the-release) |
32 | | - * [17. Create a Blog Post](#17-create-a-blog-post) |
| 30 | + * [15. Promote and sign the release builds](#15-promote-and-sign-the-release-builds) |
| 31 | + * [16. Check the release](#16-check-the-release) |
| 32 | + * [17. Create a blog post](#17-create-a-blog-post) |
33 | 33 | * [18. Create the release on GitHub](#18-create-the-release-on-github) |
34 | 34 | * [19. Cleanup](#19-cleanup) |
35 | 35 | * [20. Announce](#20-announce) |
36 | 36 | * [21. Celebrate](#21-celebrate) |
37 | | -* [LTS Releases](#lts-releases) |
38 | | -* [Major Releases](#major-releases) |
| 37 | +* [LTS releases](#lts-releases) |
| 38 | +* [Major releases](#major-releases) |
39 | 39 |
|
40 | 40 | ## Who can make a release? |
41 | 41 |
|
42 | 42 | Release authorization is given by the Node.js TSC. Once authorized, an |
43 | 43 | individual must have the following: |
44 | 44 |
|
45 | | -### 1. Jenkins Release Access |
| 45 | +### 1. Jenkins release access |
46 | 46 |
|
47 | 47 | There are three relevant Jenkins jobs that should be used for a release flow: |
48 | 48 |
|
@@ -64,7 +64,7 @@ a manual step once they are ready (see below). |
64 | 64 | The [Node.js build team](https://github.com/nodejs/build) is able to provide |
65 | 65 | this access to individuals authorized by the TSC. |
66 | 66 |
|
67 | | -### 2. <nodejs.org> Access |
| 67 | +### 2. <nodejs.org> access |
68 | 68 |
|
69 | 69 | The _dist_ user on nodejs.org controls the assets available in |
70 | 70 | <https://nodejs.org/download/>. <https://nodejs.org/dist/> is an alias for |
@@ -82,7 +82,7 @@ server as the _dist_ user. The |
82 | 82 | [Node.js build team](https://github.com/nodejs/build) is able to provide this |
83 | 83 | access to individuals authorized by the TSC. |
84 | 84 |
|
85 | | -### 3. A Publicly Listed GPG Key |
| 85 | +### 3. A publicly-listed GPG key |
86 | 86 |
|
87 | 87 | A `SHASUMS256.txt` file is produced for every promoted build, nightly, and |
88 | 88 | releases. Additionally for releases, this file is signed by the individual |
@@ -258,7 +258,7 @@ It is current TSC policy to bump major version when ABI changes. If you |
258 | 258 | see a need to bump `NODE_MODULE_VERSION` then you should consult the TSC. |
259 | 259 | Commits may need to be reverted or a major version bump may need to happen. |
260 | 260 |
|
261 | | -### 4. Update the Changelog |
| 261 | +### 4. Update the changelog |
262 | 262 |
|
263 | 263 | #### Step 1: Collect the formatted list of changes |
264 | 264 |
|
@@ -344,7 +344,7 @@ must be assigned a number (e.g. `DEP0012`). This assignment should |
344 | 344 | occur when the PR is landed, but a check will be made when the release build is |
345 | 345 | run. |
346 | 346 |
|
347 | | -### 5. Create Release Commit |
| 347 | +### 5. Create release commit |
348 | 348 |
|
349 | 349 | The `CHANGELOG.md`, `doc/changelogs/CHANGELOG_Vx.md`, `src/node_version.h`, and |
350 | 350 | `REPLACEME` changes should be the final commit that will be tagged for the |
@@ -373,7 +373,7 @@ Notable changes: |
373 | 373 | * Copy the notable changes list here, reformatted for plain-text |
374 | 374 | ``` |
375 | 375 |
|
376 | | -### 6. Propose Release on GitHub |
| 376 | +### 6. Propose release on GitHub |
377 | 377 |
|
378 | 378 | Push the release branch to `nodejs/node`, not to your own fork. This allows |
379 | 379 | release branches to more easily be passed between members of the release team if |
@@ -391,7 +391,7 @@ good place to @-mention the relevant contributors. |
391 | 391 | After opening the PR, update the release commit to include `PR-URL` metadata and |
392 | 392 | force-push the proposal. |
393 | 393 |
|
394 | | -### 7. Ensure that the Release Branch is Stable |
| 394 | +### 7. Ensure that the release branch is stable |
395 | 395 |
|
396 | 396 | Run a **[`node-test-pull-request`](https://ci.nodejs.org/job/node-test-pull-request/)** |
397 | 397 | test run to ensure that the build is stable and the HEAD commit is ready for |
@@ -406,7 +406,7 @@ purpose. Run it once with the base `vx.x` branch as a reference and with the |
406 | 406 | proposal branch to check if new regressions could be introduced in the |
407 | 407 | ecosystem. |
408 | 408 |
|
409 | | -### 8. Produce a Nightly Build _(optional)_ |
| 409 | +### 8. Produce a nightly build _(optional)_ |
410 | 410 |
|
411 | 411 | If there is a reason to produce a test release for the purpose of having others |
412 | 412 | try out installers or specifics of builds, produce a nightly build using |
@@ -418,7 +418,7 @@ enter a proper length commit SHA, enter a date string, and select "nightly" for |
418 | 418 | This is particularly recommended if there has been recent work relating to the |
419 | 419 | macOS or Windows installers as they are not tested in any way by CI. |
420 | 420 |
|
421 | | -### 9. Produce Release Builds |
| 421 | +### 9. Produce release builds |
422 | 422 |
|
423 | 423 | Use **[iojs+release](https://ci-release.nodejs.org/job/iojs+release/)** to |
424 | 424 | produce release artifacts. Enter the commit that you want to build from and |
@@ -464,14 +464,14 @@ can use the |
464 | 464 | build in the release CI to re-run the build only for ARMv6. When launching the |
465 | 465 | build make sure to use the same commit hash as for the original release. |
466 | 466 |
|
467 | | -### 10. Test the Build |
| 467 | +### 10. Test the build |
468 | 468 |
|
469 | 469 | Jenkins collects the artifacts from the builds, allowing you to download and |
470 | 470 | install the new build. Make sure that the build appears correct. Check the |
471 | 471 | version numbers, and perform some basic checks to confirm that all is well with |
472 | 472 | the build before moving forward. |
473 | 473 |
|
474 | | -### 11. Tag and Sign the Release Commit |
| 474 | +### 11. Tag and sign the release commit |
475 | 475 |
|
476 | 476 | Once you have produced builds that you're happy with, create a new tag. By |
477 | 477 | waiting until this stage to create tags, you can discard a proposed release if |
@@ -506,7 +506,7 @@ $ git secure-tag <vx.y.z> <commit-sha> -sm "YYYY-MM-DD Node.js vx.y.z (<release- |
506 | 506 | The tag **must** be signed using the GPG key that's listed for you on the |
507 | 507 | project README. |
508 | 508 |
|
509 | | -### 12. Set Up For the Next Release |
| 509 | +### 12. Set up for the next release |
510 | 510 |
|
511 | 511 | On release proposal branch, edit `src/node_version.h` again and: |
512 | 512 |
|
@@ -536,7 +536,7 @@ $ git rebase v1.x |
536 | 536 | $ git push upstream v1.x-staging |
537 | 537 | ``` |
538 | 538 |
|
539 | | -### 13. Cherry-pick the Release Commit to `master` |
| 539 | +### 13. Cherry-pick the release commit to `master` |
540 | 540 |
|
541 | 541 | ```console |
542 | 542 | $ git checkout master |
@@ -579,7 +579,7 @@ $ git push <remote> <vx.y.z> |
579 | 579 | *Note*: Please do not push the tag unless you are ready to complete the |
580 | 580 | remainder of the release steps. |
581 | 581 |
|
582 | | -### 15. Promote and Sign the Release Builds |
| 582 | +### 15. Promote and sign the release builds |
583 | 583 |
|
584 | 584 | **The same individual who signed the release tag must be the one |
585 | 585 | to promote the builds as the `SHASUMS256.txt` file needs to be signed with the |
@@ -655,7 +655,7 @@ be prompted to re-sign `SHASUMS256.txt`. |
655 | 655 | **It is possible to only sign a release by running `./tools/release.sh -s |
656 | 656 | vX.Y.Z`.** |
657 | 657 |
|
658 | | -### 16. Check the Release |
| 658 | +### 16. Check the release |
659 | 659 |
|
660 | 660 | Your release should be available at `https://nodejs.org/dist/vx.y.z/` and |
661 | 661 | <https://nodejs.org/dist/latest/>. Check that the appropriate files are in |
@@ -664,7 +664,7 @@ have the right internal version strings. Check that the API docs are available |
664 | 664 | at <https://nodejs.org/api/>. Check that the release catalog files are correct |
665 | 665 | at <https://nodejs.org/dist/index.tab> and <https://nodejs.org/dist/index.json>. |
666 | 666 |
|
667 | | -### 17. Create a Blog Post |
| 667 | +### 17. Create a blog post |
668 | 668 |
|
669 | 669 | There is an automatic build that is kicked off when you promote new builds, so |
670 | 670 | within a few minutes nodejs.org will be listing your new version as the latest |
@@ -732,7 +732,7 @@ _In whatever form you do this..._ |
732 | 732 |
|
733 | 733 | ## LTS Releases |
734 | 734 |
|
735 | | -### Marking a Release Line as LTS |
| 735 | +### Marking a release line as LTS |
736 | 736 |
|
737 | 737 | To mark a release line as LTS, the following changes must be made to |
738 | 738 | `src/node_version.h`: |
@@ -770,7 +770,7 @@ existing labels for that release line, such as `vN.x`. |
770 | 770 | If the release is transitioning from Active LTS to Maintenance, the |
771 | 771 | `backport-requested-vN.x` label must be deleted. |
772 | 772 |
|
773 | | -## Major Releases |
| 773 | +## Major releases |
774 | 774 |
|
775 | 775 | The process for cutting a new Node.js major release has a number of differences |
776 | 776 | from cutting a minor or patch release. |
@@ -791,7 +791,7 @@ The release date for the next major release should be announced immediately |
791 | 791 | following the current release (e.g. the release date for 13.0.0 should be |
792 | 792 | announced immediately following the release of 12.0.0). |
793 | 793 |
|
794 | | -### Release Branch |
| 794 | +### Release branch |
795 | 795 |
|
796 | 796 | Approximately three months before a major release, new `vN.x` and |
797 | 797 | `vN.x-staging` branches (where `N` indicates the major release) should be |
@@ -821,7 +821,7 @@ The label description can be copied from existing labels of previous releases. |
821 | 821 | The label color must be the same for all new labels, but different from the |
822 | 822 | labels of previous releases. |
823 | 823 |
|
824 | | -### Release Proposal |
| 824 | +### Release proposal |
825 | 825 |
|
826 | 826 | A draft release proposal should be created two months before the release. A |
827 | 827 | separate `vN.x-proposal` branch should be created that tracks the `vN.x` |
@@ -832,7 +832,7 @@ Notify the `@nodejs/npm` team in the release proposal PR to inform them of the |
832 | 832 | upcoming release. `npm` maintains a list of [supported versions](https://github.com/npm/cli/blob/latest/lib/utils/unsupported.js#L3) |
833 | 833 | that will need updating to include the new major release. |
834 | 834 |
|
835 | | -### Test Releases and Release Candidates |
| 835 | +### Test releases and release candidates |
836 | 836 |
|
837 | 837 | Test builds should be generated from the `vN.x-proposal` branch starting at |
838 | 838 | about 6 weeks before the release. |
|