blob: 4641efbcea5478029be31cd1a64e6f79f78ccfe4 [file] [log] [blame] [view]
Filippo Valsordaa5c5aae2018-04-17 14:56:14 -04001Fixes for regressions, security issues, and serious problems with no workaround are backported to the two supported major releases. For example a fix developed during the 1.11 cycle will be backported to a 1.9.x (if applicable) and 1.10.x release.
2
Filippo Valsorda6a0db9a2018-04-23 15:46:30 -04003As soon as an interested party thinks an issue should be considered for backport, they open one or two “child” issues titled like `package: title [1.9 backport]`. The issue should include a link to the original issue and a short rationale about why the backport might be needed.
Filippo Valsorda49a707b2018-04-23 13:38:23 -04004
5GopherBot is capable of opening the backport issues automatically in response to comments like the following on the main issue. (The keywords are `@gopherbot`, `backport`, `please` and optionally the release. The entire message is quoted in the new issue.)
6
7> @gopherbot please consider this for backport to 1.10, it's a regression.
8
9> @gopherbot please open the backport tracking issues. This is a severe compiler bug.
Filippo Valsordaa5c5aae2018-04-17 14:56:14 -040010
Filippo Valsordaa526ed82018-04-23 13:50:08 -040011The fix is developed for the main issue, which is closed when the fix is merged to the master branch.
Filippo Valsordaa5c5aae2018-04-17 14:56:14 -040012
Filippo Valsorda6a0db9a2018-04-23 15:46:30 -040013The child issue is assigned to the minor release milestone and labeled **CherryPickCandidate**, and its candidacy is discussed there. Once it is approved it transitions to **CherryPickApproved**. Release managers (a subset of the Go team that handles the release process) and/or code owners approve cherry-picks via an informal process.
Filippo Valsordaa5c5aae2018-04-17 14:56:14 -040014
Filippo Valsorda6a5ec5b2018-04-23 17:52:26 -040015When the child issue is labeled **CherryPickApproved**, the original author of the change fixing
16that issue should immediately [create and mail a cherry-pick change](#making-cherry-pick-cls) against the release branch, which will be merged as soon as it is ready, closing the child issue.
Filippo Valsordae281bf22018-04-23 14:36:05 -040017
18At release time, any open backport issue which is not release-blocker is pushed to the next minor release milestone, and a minor release is minted with the already merged changes.
19
20## Making cherry-pick CLs
21
Filippo Valsorda23c6d4a2018-05-08 13:46:38 -040022Once the main fix has been submitted to master, you can use the Gerrit UI to make a cherry-pick if there are no merge conflicts:
23
24![Top right corner > More > Cherry-pick](https://user-images.githubusercontent.com/1225294/39773359-dc0c2b3a-52c5-11e8-836a-c518186e0ab3.png)
25
26In the popup enter the branch name (like `release-branch.go1.10`), add the commit message prefix (like `[release-branch.go1.10]`), update the "Fixes" line and do not change any of the other automated lines.
27
28To cherry-pick from the command line or to resolve a merge conflict, take note of the final commit hash, then use `git codereview` and `git cherry-pick` to prepare a cherry-pick CL:
Filippo Valsordae281bf22018-04-23 14:36:05 -040029
Filippo Valsorda6a0db9a2018-04-23 15:46:30 -040030```
Josh Bleecher Snyder15e1b142018-04-23 16:00:55 -070031git checkout release-branch.go1.10
Filippo Valsorda6a0db9a2018-04-23 15:46:30 -040032git codereview change cherry-pick-NNNN
33git cherry-pick $COMMIT_HASH
34git commit --amend # add message prefix and change Fixes line
35git codereview mail
36```
Filippo Valsordabb24d522018-04-23 14:16:27 -040037
Filippo Valsorda23c6d4a2018-05-08 13:46:38 -040038**The cherry-pick CL must include a message prefix like `[release-branch.go1.10]`, and update the "Fixes" line to the child issue. Do not change or remove the "Change-Id" line nor the other Gerrit lines.**
Filippo Valsordaa5c5aae2018-04-17 14:56:14 -040039
Filippo Valsordae281bf22018-04-23 14:36:05 -040040Gerrit is configured to only allow release managers to submit to release branches, but the code review process is otherwise the usual.
Filippo Valsordaa5c5aae2018-04-17 14:56:14 -040041
42## Security releases
43
44Security releases preempt the next minor release and need to ship only the security fix.
45
46To avoid rolling back the release branch in that exceptional case, a new release branch is created based on the previous release. For example `release-branch.go1.9.5` is branched from tag `go1.9.4`. The release is tagged from that branch, and the branch is then merged into the main release branch. For example `release-branch.go1.9.5` is merged into `release-branch.go1.9`.
47