|
2 | 2 |
|
3 | 3 | ## Staging branches |
4 | 4 |
|
5 | | -Each release line has a staging branch that the releaser will use as a scratch |
6 | | -pad while preparing a release. The branch name is formatted as follows: |
7 | | -`vN.x-staging` where `N` is the major release number. |
| 5 | +Each release line has a staging branch that serves as a workspace for preparing releases. |
| 6 | +The branch format is `vN.x-staging`, where `N` is the major release number. |
8 | 7 |
|
9 | | -For the active staging branches see the [Release Schedule][]. |
| 8 | +For active staging branches, refer to the [Release Schedule][]. |
10 | 9 |
|
11 | | -## What needs to be backported? |
| 10 | +## Identifying changes that require a backport |
12 | 11 |
|
13 | | -If a cherry-pick from `main` does not land cleanly on a staging branch, the |
14 | | -releaser will mark the pull request with a particular label for that release |
15 | | -line (e.g. `backport-requested-vN.x`), specifying to our tooling that this |
16 | | -pull request should not be included. The releaser will then add a comment |
17 | | -requesting that a backport pull request be made. |
| 12 | +If a cherry-pick from `main` doesn't apply cleanly on a staging branch, the pull request |
| 13 | +will be labeled for the release line (e.g., `backport-requested-vN.x`). This indicates |
| 14 | +that manual backporting is required. |
18 | 15 |
|
19 | | -## What can be backported? |
| 16 | +## Criteria for backporting |
20 | 17 |
|
21 | | -The "Current" release line is much more lenient than the LTS release lines in |
22 | | -what can be landed. Our LTS release lines (see the [Release Plan][]) |
23 | | -require that commits mature in the Current release for at least 2 weeks before |
24 | | -they can be landed in an LTS staging branch. Only after "maturation" will those |
25 | | -commits be cherry-picked or backported. |
| 18 | +The "Current" release line is more flexible than LTS lines. LTS branches, detailed in the [Release Plan][], |
| 19 | +require commits to mature in the Current release for at least two weeks before backporting. |
26 | 20 |
|
27 | | -## How to label backport issues and PRs? |
| 21 | +## Labeling backport issues and PRs |
28 | 22 |
|
29 | | -For the following labels, the `N` in `vN.x` refers to the major release number. |
| 23 | +Use the following labels, with `N` in `vN.x` denoting the major release number: |
30 | 24 |
|
31 | | -| Label | Description | |
32 | | -| ----------------------- | ------------------------------------------------------------------------------------------------- | |
33 | | -| backport-blocked-vN.x | PRs that should land on the vN.x-staging branch but are blocked by another PR's pending backport. | |
34 | | -| backport-open-vN.x | Indicate that the PR has an open backport. | |
35 | | -| backport-requested-vN.x | PRs awaiting manual backport to the vN.x-staging branch. | |
36 | | -| backported-to-vN.x | PRs backported to the vN.x-staging branch. | |
37 | | -| baking-for-lts | PRs that need to wait before landing in a LTS release. | |
38 | | -| lts-watch-vN.x | PRs that may need to be released in vN.x. | |
39 | | -| vN.x | Issues that can be reproduced on vN.x or PRs targeting the vN.x-staging branch. | |
| 25 | +| Label | Description | |
| 26 | +| ----------------------- | ------------------------------------------------------------------- | |
| 27 | +| backport-blocked-vN.x | PRs for `vN.x-staging` blocked by pending backports from other PRs. | |
| 28 | +| backport-open-vN.x | Indicates an open backport for the PR. | |
| 29 | +| backport-requested-vN.x | PR awaiting manual backport to `vN.x-staging`. | |
| 30 | +| backported-to-vN.x | PR successfully backported to `vN.x-staging`. | |
| 31 | +| baking-for-lts | PRs awaiting LTS release after maturation in Current. | |
| 32 | +| lts-watch-vN.x | PRs possibly included in `vN.x` LTS releases. | |
| 33 | +| vN.x | Issues or PRs impacting `vN.x-staging` (or reproducible on vN.x). | |
40 | 34 |
|
41 | | -## How to submit a backport pull request |
| 35 | +## Submitting a backport pull request |
42 | 36 |
|
43 | 37 | For the following steps, let's assume that you need to backport PR `123` |
44 | | -to the v20.x release line. All commands will use the `v20.x-staging` branch |
| 38 | +to the vN.x release line. All commands will use the `vN.x-staging` branch |
45 | 39 | as the target branch. In order to submit a backport pull request to another |
46 | | -branch, simply replace that with the staging branch for the targeted release |
| 40 | +branch, simply replace `N` with the version number for the targeted release |
47 | 41 | line. |
48 | 42 |
|
49 | | -### Automated |
| 43 | +### Automated process |
50 | 44 |
|
51 | | -1. Make sure you have [`@node-core/utils`][] installed |
| 45 | +1. Ensure [`@node-core/utils`][] is installed. |
52 | 46 |
|
53 | | -2. Run the [`git node backport`][] command |
| 47 | +2. Execute [`git node backport`][] command: |
54 | 48 |
|
55 | | -```bash |
56 | | -# Backport PR 123 to v20.x-staging |
57 | | -git node backport 123 --to=20 |
58 | | -``` |
| 49 | + ```bash |
| 50 | + # Example: Backport PR 123 to vN.x-staging |
| 51 | + git node backport 123 --to=N |
| 52 | + ``` |
59 | 53 |
|
60 | | -3. Jump to step 5 in the Manual section below |
| 54 | +3. Proceed to step 5 in the Manual section below. |
61 | 55 |
|
62 | | -### Manually |
| 56 | +### Manual process |
63 | 57 |
|
64 | | -1. Checkout the staging branch for the targeted release line. |
| 58 | +1. Checkout the `vN.x-staging` branch. |
65 | 59 |
|
66 | | -2. Make sure that the local staging branch is up to date with the remote. |
| 60 | +2. Verify that the local staging branch is up to date with the remote. |
67 | 61 |
|
68 | | -3. Create a new branch off of the staging branch, as shown below. |
| 62 | +3. Create a new branch based on `vN.x-staging`: |
69 | 63 |
|
70 | 64 | ```bash |
71 | | - # Assuming your fork of Node.js is checked out in $NODE_DIR, |
72 | | - # the origin remote points to your fork, and the upstream remote points |
73 | | - # to git@github.com:nodejs/node.git |
74 | | - cd $NODE_DIR |
75 | | - # If v20.x-staging is checked out `pull` should be used instead of `fetch` |
76 | | - git fetch upstream v20.x-staging:v20.x-staging -f |
77 | | - # Assume we want to backport PR #10157 |
78 | | - git checkout -b backport-10157-to-v20.x v20.x-staging |
79 | | - # Ensure there are no test artifacts from previous builds |
80 | | - # Note that this command deletes all files and directories |
81 | | - # not under revision control below the ./test directory. |
82 | | - # It is optional and should be used with caution. |
83 | | - git clean -xfd ./test/ |
| 65 | + git fetch upstream vN.x-staging:vN.x-staging -f |
| 66 | + git checkout -b backport-123-to-vN.x vN.x-staging |
84 | 67 | ``` |
85 | 68 |
|
86 | | -4. After creating the branch, apply the changes to the branch. The cherry-pick |
87 | | - will likely fail due to conflicts. In that case, you will see something |
88 | | - like this: |
89 | | - |
90 | | - ```console |
91 | | - # Say the $SHA is 773cdc31ef |
92 | | - $ git cherry-pick $SHA # Use your commit hash |
93 | | - error: could not apply 773cdc3... <commit title> |
94 | | - hint: after resolving the conflicts, mark the corrected paths |
95 | | - hint: with 'git add <paths>' or 'git rm <paths>' |
96 | | - hint: and commit the result with 'git commit' |
| 69 | +4. Cherry-pick the desired commit(s): |
| 70 | + |
| 71 | + ```bash |
| 72 | + git cherry-pick <commit hash> |
97 | 73 | ``` |
98 | 74 |
|
99 | | -5. Make the required changes to remove the conflicts, add the files to the index |
100 | | - using `git add`, and then commit the changes. That can be done with |
101 | | - `git cherry-pick --continue`. |
| 75 | +5. Resolve conflicts using `git add` and `git cherry-pick --continue`. |
102 | 76 |
|
103 | 77 | 6. Leave the commit message as is. If you think it should be modified, comment |
104 | 78 | in the pull request. The `Backport-PR-URL` metadata does need to be added to |
105 | 79 | the commit, but this will be done later. |
106 | 80 |
|
107 | | -7. Make sure `make -j4 test` passes. |
| 81 | +7. Verify that `make -j4 test` passes. |
108 | 82 |
|
109 | 83 | 8. Push the changes to your fork. |
110 | 84 |
|
111 | 85 | 9. Open a pull request: |
112 | | - 1. Be sure to target the `v20.x-staging` branch in the pull request. |
113 | | - 2. Include the backport target in the pull request title in the following |
114 | | - format: `[v20.x backport] <commit title>`. |
115 | | - Example: `[v20.x backport] process: improve performance of nextTick` |
116 | | - 3. Check the checkbox labeled "Allow edits and access to secrets by |
117 | | - maintainers". |
118 | | - 4. In the description add a reference to the original pull request. |
119 | | - 5. Amend the commit message and include a `Backport-PR-URL:` metadata and |
120 | | - re-push the change to your fork. |
121 | | - 6. Run a [`node-test-pull-request`][] CI job (with `REBASE_ONTO` set to the |
122 | | - default `<pr base branch>`) |
123 | | - |
124 | | -10. Replace the `backport-requested-v20.x` label on the original pull request |
125 | | - with `backport-open-v20.x`. |
126 | | - |
127 | | -11. If during the review process conflicts arise, use the following to rebase: |
128 | | - `git pull --rebase upstream v20.x-staging` |
129 | | - |
130 | | -After the pull request lands, replace the `backport-open-v20.x` label on the |
131 | | -original pull request with `backported-to-v20.x`. |
| 86 | + |
| 87 | + * Target `vN.x-staging`. |
| 88 | + * Title format: `[vN.x backport] <commit title>` (e.g., `[v20.x backport] process: improve performance of nextTick`). |
| 89 | + * Reference the original PR in the description. |
| 90 | + |
| 91 | +10. Update the `backport-requested-vN.x` label on the original pull request to `backport-open-vN.x`. |
| 92 | + |
| 93 | +11. If conflicts arise during the review process, the following command be used to rebase: |
| 94 | + |
| 95 | + ```bash |
| 96 | + git pull --rebase upstream vN.x-staging |
| 97 | + ``` |
| 98 | + |
| 99 | +Once merged, update the original PR's label from `backport-open-vN.x` to `backported-to-vN.x`. |
132 | 100 |
|
133 | 101 | [Release Plan]: https://github.com/nodejs/Release#release-plan |
134 | 102 | [Release Schedule]: https://github.com/nodejs/Release#release-schedule |
135 | 103 | [`@node-core/utils`]: https://github.com/nodejs/node-core-utils |
136 | 104 | [`git node backport`]: https://github.com/nodejs/node-core-utils/blob/main/docs/git-node.md#git-node-backport |
137 | | -[`node-test-pull-request`]: https://ci.nodejs.org/job/node-test-pull-request/build |
0 commit comments