blob: fa58e5395463e5022f368e6001e9ae50ff3b2343 [file] [log] [blame] [view]
Abdul Syede21aa1b2017-07-06 17:13:061# Merge Request Process
2
3[TOC]
4
5## tl;dr
6
Harry Souders782e8b2c2024-02-05 06:24:507* Release managers (and delegates like the security team) must review all
8 merges made to release branches
9* Merge criteria become more strict as the stable release date approaches; use
10 Chromium Dash's [Branches page](https://chromiumdash.appspot.com/branches)
11 to understand which branches are active and what merges are acceptable for
12 each branch
13* Ensure your change is [safe to merge](#verifying-eligibility-and-safety)
14 before initiating the merge review process unless it's time-sensitive
Harry Souders8b7e12e82025-01-13 23:03:0915* Use Chromium Issue Tracker's [project queries](#monitoring-merge-requests) to
16 track your approved merges as well as your pending requests
Harry Souders782e8b2c2024-02-05 06:24:5017* Use Gerrit or git to land your merge only after it's been approved
Abdul Syede21aa1b2017-07-06 17:13:0618
19## Introduction
20
Alex Mineerc5b63022021-08-26 21:36:0521Chromium is a main-first development team; generally, all code should land on
22main then roll out to stable users only after the milestone containing the code
23is branched, stabilized and shipped to the stable channel (to learn more about
24the release cycle, click
25[here](https://chromium.googlesource.com/chromium/src.git/+/main/docs/process/release_cycle.md)).
26This is because merging (also known as cherry-picking) code to an older release
27branch introduces risk and costs time across the team. However, there are times
28when the benefits outweigh the costs and a merge might be appropriate, e.g. to
Harry Souders782e8b2c2024-02-05 06:24:5029fix a web platform regression, address a crash or patch a security
30vulnerability.
Abdul Syede21aa1b2017-07-06 17:13:0631
Alex Mineerc5b63022021-08-26 21:36:0532To ensure we make the right decisions, release managers leverage a merge review
33process to evaluate each request. They'll ask questions about the reason you
34would like to merge a change and the risk of the merge itself, and you'll work
Harry Souders782e8b2c2024-02-05 06:24:5035together to make a judgement call on whether or not the merge should be approved
36or rejected.
Abdul Syede21aa1b2017-07-06 17:13:0637
Alex Mineerc5b63022021-08-26 21:36:0538Generally, merges follow these high-level steps:
Abdul Syede21aa1b2017-07-06 17:13:0639
Harry Souders782e8b2c2024-02-05 06:24:5040* Developers update bug with relevant details and request a merge by updating
41 the *Merge-Request* field with the requested milestones, then wait for
42 review.
43* Release managers and automation review and approve, reject, or ask questions
44 about the merge within two business days.
45* Developers wait for review and, if approved, land the merge ASAP.
Abdul Syede21aa1b2017-07-06 17:13:0646
Alex Mineerc5b63022021-08-26 21:36:0547For details on each step, see below.
Abdul Syede21aa1b2017-07-06 17:13:0648
Amy Ressler373f77722024-02-03 00:39:4749**NOTE:** Because security issues (identified with *Type=Vulnerability*) follow
Harry Souders782e8b2c2024-02-05 06:24:5050a more complex flow, you may simply mark security issues as *Fixed* in the Issue
51Tracker and [automation](#security-merge-triage) will handle the remainder of
52the merge request process flow for you; simply process the merge if it is
53requested and approved.
Abdul Syede21aa1b2017-07-06 17:13:0654
Alex Mineerc5b63022021-08-26 21:36:0555## Requesting a merge
Abdul Syede21aa1b2017-07-06 17:13:0656
Alex Mineerc5b63022021-08-26 21:36:0557### Verifying eligibility and safety
Abdul Syede21aa1b2017-07-06 17:13:0658
Alex Mineerc5b63022021-08-26 21:36:0559Before requesting a merge, first ensure your change is a good merge candidate:
Abdul Syede21aa1b2017-07-06 17:13:0660
Harry Souders782e8b2c2024-02-05 06:24:5061* Ensure it meets the merge criteria (via
62 [Chromium Dash](https://chromiumdash.appspot.com/branches)) of the
63 branch(es) you'd like to merge to; merge criteria become more strict the
64 older the branch is, more details on criteria
65 [below](#merge-criteria-phases)
66* Verify merging the change to an older branch would be safe, e.g. unlikely to
67 introduce new regressions, no major merge conflicts, automated test coverage
Wayne Jackson Jr.86d4fb5f2025-10-08 13:43:4868 present, etc; consider adding a kill-switch & chat with your TL
69 for input if you're not sure
Harry Souders782e8b2c2024-02-05 06:24:5070* Confirm your change fixes the issue at hand, preferably by testing on and
71 monitoring the canary channel for 24 hours post-release (see
72 [Chromium Dash](https://chromiumdash.appspot.com/commits) to determine if
73 your change has shipped)
Abdul Syede21aa1b2017-07-06 17:13:0674
Harry Souders782e8b2c2024-02-05 06:24:5075 * You may skip this step if a release manager or security team member has
76 told you that the merge is urgent, e.g. is actively blocking a release
Alex Mineer40d33c32018-03-15 23:45:1477
Amy Ressler373f77722024-02-03 00:39:4778### Updating Chromium Issue Tracker
Abdul Syede21aa1b2017-07-06 17:13:0679
Harry Souders782e8b2c2024-02-05 06:24:5080Next, update the bug (generally the bug being fixed by the merge) with the
81following information present and accurate:
Abdul Syede21aa1b2017-07-06 17:13:0682
Harry Souders782e8b2c2024-02-05 06:24:5083* Title and description clearly describing the bug being fixed
84* Priority (*Priority*), OS (*OS*) and target milestone(s) (*Milestone*)
85 fields are set
Philip Rogers1d50df092024-07-22 13:27:2886 * Consider all available data when setting the priority, such as existing
87 metrics for usage of a broken feature, to ensure important merges are
88 not missed. Consider collecting new data, such as by landing new metrics
89 and estimating severity with pre-stable data. For Web Platform changes,
Harry Souders8b7e12e82025-01-13 23:03:0990 [compat
91 tools](https://www.chromium.org/blink/platform-predictability/compat-tools/)
Philip Rogers1d50df092024-07-22 13:27:2892 such as
93 [UseCounters](https://www.chromium.org/blink/platform-predictability/compat-tools/#usecounter)
Harry Souders8b7e12e82025-01-13 23:03:0994 , [Cluster
95 Telemetry](https://www.chromium.org/blink/platform-predictability/compat-tools/#on-demand-crawl)
Philip Rogers1d50df092024-07-22 13:27:2896 , and
97 [HTTPArchive](https://www.chromium.org/blink/platform-predictability/compat-tools/#the-http-archive)
98 may be useful.
99
Harry Souders782e8b2c2024-02-05 06:24:50100* Owner, generally the person requesting / performing the merge
101* [Release block label](./release_blockers.md) if applicable (*ReleaseBlock*
102 field*)
103* Issue status:
Abdul Syede21aa1b2017-07-06 17:13:06104
Harry Souders782e8b2c2024-02-05 06:24:50105 * Fixed: You're confident the issue is fixed on main, e.g. you've locally
106 built and tested the issue, no additional crash reports are generated
107 after the fix was released, etc (most issues)
108 * In Progress (Accepted): Diagnostic merges only, e.g. to merge code to
109 track down the root cause of an issue that only exists on branch
Abdul Syede21aa1b2017-07-06 17:13:06110
Harry Souders782e8b2c2024-02-05 06:24:50111### Setting the Merge-Request field
Abdul Syede21aa1b2017-07-06 17:13:06112
Amy Ressler373f77722024-02-03 00:39:47113Once you've verified all the above, you're ready to request a merge! Simply
Harry Souders782e8b2c2024-02-05 06:24:50114update the issue's *Merge-Request* field with the milestone(s) you'd like to
Harry Souders1907ad72025-01-22 17:16:03115merge to. Within the next ~15 minutes, automation will create a new Merge
116Request issue, link it to the original (parent) issue, copy relevant metadata,
117and assign the issue to you.
118
Harry Soudersda1a0cd2025-08-13 20:47:59119If you don't have an existing Chromium Tracker issue, you can request a merge by
120filling out the bug template at
121[crbug.com/merge-request](https://crbug.com/merge-request).
122
Harry Souders1907ad72025-01-22 17:16:03123### Submitting the Merge Request
124
125Follow the instruction in the new Merge Request issue. You will be asked to
126update a number of custom fields (found in the issue's sidebar) and provide a
127rationale for the merge request. After you have updated and verified the
128request, you can submit the request for review by assigning the issue to
129*[email protected]*.
Abdul Syede21aa1b2017-07-06 17:13:06130
Alex Mineerc5b63022021-08-26 21:36:05131## Monitoring merge requests
Abdul Syede21aa1b2017-07-06 17:13:06132
Harry Souders1907ad72025-01-22 17:16:03133After assigning the issue to *[email protected]*, automation will evaluate
134your request and either approve it or pass it along to a release manager for
135manual evaluation; see [here](#merge-request-triage) to learn more about this
136automation. If manual review is required, release managers strive to answer all
137merge requests within two business days, but extenuating circumstances may cause
138delays.
Abdul Syede21aa1b2017-07-06 17:13:06139
Alex Mineerc5b63022021-08-26 21:36:05140At this point, following along via bug comments sent by email will always keep
Harry Souders782e8b2c2024-02-05 06:24:50141you in the loop, but you can also use the following queries in the Issue Tracker
142to track your merges:
Abdul Syede21aa1b2017-07-06 17:13:06143
Harry Souders8b7e12e82025-01-13 23:03:09144* [Approved and TBD merges](https://issues.chromium.org/issues?q=assignee:me%20customfield1223087:(Approved%20%7C%20TBD)):
Harry Souders782e8b2c2024-02-05 06:24:50145 Merges that require your follow-up, either by landing the relevant merge (if
146 approved) or determining whether or not a merge is actually required and if
147 so, requesting it (if TBD)
Harry Souders1907ad72025-01-22 17:16:03148* [Pending merges](https://g-issues.chromium.org/issues?q=assignee:me%20customfield1223087:Pending):
149 Merges that are pending review by automation and need additional action from
150 you. Frequently, issues remain in the state because developers have failed
151 to update the merge request issue with all required information, or the
152 request was not assigned to **[email protected]**. Please follow the
153 instructions in the issue to complete the merge request, and reach out to
154 a release manager if you have any questions.
Harry Souders8b7e12e82025-01-13 23:03:09155* [Requested
156 merges](https://issues.chromium.org/issues?q=assignee:me%20(-customfield1223134:none%20%7C%20customfield1223087:Review)):
Harry Souders782e8b2c2024-02-05 06:24:50157 Merges that are waiting for input from release managers or automation; feel
158 free to ping bugs that sit in this queue for two business days (assuming you
159 verified that the change was already deployed to canary ahead of requesting
160 a merge)
Harry Souders8b7e12e82025-01-13 23:03:09161* [Rejected and NA merges](https://issues.chromium.org/issues?q=assignee:me%20customfield1223087:(Rejected%20%7C%20NA)):
Harry Souders782e8b2c2024-02-05 06:24:50162 Merges that were either rejected by release managers, or not applicable to
163 be merged; generally, no action is needed for these items unless you
164 disagree with a merge's rejection and wish to escalate
Harry Souders8b7e12e82025-01-13 23:03:09165* [All merges](https://issues.chromium.org/issues?q=assignee:me%20(-customfield1223087:none%20%7C%20-customfield1223134:none)):
Harry Souders782e8b2c2024-02-05 06:24:50166 Includes every possible merge state, useful when wanting to find an item you
167 considered for merging but can't recall the state it was last in.
Abdul Syede21aa1b2017-07-06 17:13:06168
Alex Mineerc5b63022021-08-26 21:36:05169For a description of each label used to track the merge process, see the
170appendix [below](#merge-states-and-labels).
Abdul Syede21aa1b2017-07-06 17:13:06171
Alex Mineerc5b63022021-08-26 21:36:05172## Landing an approved merge
Abdul Syede21aa1b2017-07-06 17:13:06173
Harry Souders782e8b2c2024-02-05 06:24:50174Once your merge has been approved for a given milestone (via the release manager
175or automation updating the *Merge* field with *Approved-###*), you have two
176options to land the merge:
Abdul Syede21aa1b2017-07-06 17:13:06177
Harry Souders782e8b2c2024-02-05 06:24:50178* Gerrit UI, easiest for clean cherry-picks or those requiring only minor
179 changes
180* git, for more complex cherry-picks and / or when local verification may be
181 beneficial
Alan Cuttere338ed92021-05-06 04:57:19182
Alex Mineerc5b63022021-08-26 21:36:05183Regardless of which method you choose, please ensure you land your cherry-pick
184ASAP so that it can be included in the next release built from the branch; if
185you don't merge your cherry-pick soon after approval, it will eventually be
186rejected for merge.
Abdul Syede21aa1b2017-07-06 17:13:06187
Harry Souders8b7e12e82025-01-13 23:03:09188**NOTE:** Ensure you link to the bug that has merge approval for the relevant
Ben Masona48d7962025-02-13 16:06:47189milestone. Not linking to a bug that has approval can cause delay to your CL
190landing. If the merge request is for a single change, add `Fixed: <bug number>`
191to the change description. If the merge request is for multiple changes, add
192`Fixed: <bug number>` to the final change description, `Bug: <bug number>`
193to all other change descriptions.
Ben Masone8424ee22024-12-04 11:23:43194
Harry Souders782e8b2c2024-02-05 06:24:50195Once the cherry-pick has landed, a bot will update the *Merge* field with
Ben Masone0b04992025-03-03 19:07:35196*Merged-###* label. If `Fixed:` was used, the bug will be closed.
Ben Wagner96babd4c2022-08-26 16:53:09197
Alex Mineerc5b63022021-08-26 21:36:05198### Using Gerrit UI
Abdul Syede21aa1b2017-07-06 17:13:06199
David Benjamin58230aec2022-02-14 22:35:23200Select the "..." button in the Gerrit UI, then choose "Cherry Pick". When
Harry Souders782e8b2c2024-02-05 06:24:50201prompted for a branch, enter *refs/branch-heads/####*, where #### corresponds to
202the release branch you are merging to (available on
mlcuieaa3e3952022-02-14 22:52:06203[Chromium Dash](https://chromiumdash.appspot.com/branches) in the "Chromium"
204column).
Abdul Syede21aa1b2017-07-06 17:13:06205
Harry Souders782e8b2c2024-02-05 06:24:50206Once the cherry-pick CL is prepared, you can bypass code review (but not OWNERS
207approval) within 14 days of the original change by adding the Rubber Stamper bot
208([email protected]) as a reviewer. If the CL meets the
K. Moon216a9a1192022-08-26 06:02:36209[Rubber Stamper criteria](https://chromium.googlesource.com/infra/infra/+/refs/heads/main/go/src/infra/appengine/rubber-stamper/README.md),
210the bot will vote *Bot-Commit+1* to bypass code review. If the CL is marked
211*Auto-Submit+1*, the bot will also submit the CL to the CQ on your behalf.
Ian Barkley-Yeung3af975e2021-04-06 19:00:35212
Alex Mineerc5b63022021-08-26 21:36:05213### Using git
214
215The commands below should set up your environment to be able to successfully
216upload a cherry-pick to a release branch, where *####* corresponds to the
217release branch you are merging to (available on
mlcuieaa3e3952022-02-14 22:52:06218[Chromium Dash](https://chromiumdash.appspot.com/branches) in the "Chromium"
219column):
Alex Mineerc5b63022021-08-26 21:36:05220
221```
222$ gclient sync --with_branch_heads
223$ git fetch
224$ git checkout -b BRANCH_NAME refs/remotes/branch-heads/####
225$ git cl upstream branch-heads/####
226$ git cherry-pick -x COMMIT_HASH_MAIN
Yoav Weiss42be0432022-11-26 19:04:07227$ gclient sync
Alex Mineerc5b63022021-08-26 21:36:05228```
229
230From here, your environment should be ready to adjust the change as required;
231use ninja to build and test your changes, and when ready upload for review:
232
233```
234$ git cl upload
235```
236
237**Adjust the change description** to omit the "Change-Id: ..." line from
Harry Souders782e8b2c2024-02-05 06:24:50238original patch, otherwise you may experience issues when uploading the change to
239Gerrit. Once complete, use Gerrit to initiate review and approval of the merge
240as TBR has been discontinued.
Alex Mineerc5b63022021-08-26 21:36:05241
Harry Souders782e8b2c2024-02-05 06:24:50242Other tips & tricks when merging with git via release branches: * Consider using
243multiple working directories when creating the release branch * Editing the
244change description to denote this is a merge (e.g. "Merge to release branch" at
245the top) will help reviewers distinguish between the cherry-pick and the
246original change
Alex Mineerc5b63022021-08-26 21:36:05247
248## Merge automation
249
Amy Ressler373f77722024-02-03 00:39:47250The Chrome team has built automation via
251[Blintz](https://www.chromium.org/issue-tracking/autotriage), formerly known as
252Sheriffbot, to assist in several merge flows: security merge triage, general
253merge request triage, and preventing missed merges.
Alex Mineerc5b63022021-08-26 21:36:05254
255### Security merge triage
256
257Given the additional complexity inherent in security merges, the security team
258has built custom automation to handle this flow end to end; simply mark any
Harry Souders1907ad72025-01-22 17:16:03259security issue as *Fixed* and Blintz will evaluate applicable milestones,
Alex Mineerc5b63022021-08-26 21:36:05260determine if merges are required and automatically request them if need be.
261
262### Merge request triage
263
Harry Souders1907ad72025-01-22 17:16:03264To reduce release manager toil, Blintz performs the first pass review of all
Harry Souders782e8b2c2024-02-05 06:24:50265merge requests; it may auto-approve the issue if it can detect the issue meets
266the right criteria for the current merge phase (e.g. a ReleaseBlock-Dev issue
Harry Souders1907ad72025-01-22 17:16:03267requesting a merge before beta promotion). If it cannot decide, it will pass the
268issue to a release manager for manual review.
Alex Mineerc5b63022021-08-26 21:36:05269
Harry Souders1907ad72025-01-22 17:16:03270Blintz only takes action on merge requests when the merge request issue (not the
271original issue) is assigned to *[email protected]*.
Alex Mineerc5b63022021-08-26 21:36:05272
273### Preventing missed merges
274
Harry Souders8b7e12e82025-01-13 23:03:09275To avoid the situation where a critical issue is present on a release branch
Harry Souders1907ad72025-01-22 17:16:03276but the fix isn't merged, Blintz evaluates all release-blocking issues
Harry Souders8b7e12e82025-01-13 23:03:09277targeting a milestone that has already branched and updates the *Merge* field
278with *TBD-##* if the issue was marked as fixed after branch day but hasn't been
Amy Ressler373f77722024-02-03 00:39:47279merged. When this occurs, developers should evaluate the issue and either
280request a merge if required (e.g. the fix did miss the release branch point) by
Harry Souders782e8b2c2024-02-05 06:24:50281updating the *Merge-Request* field, or update the *Merge* field with *NA-###*
282(e.g. the fix is present in the release branch already or the merge is
Amy Ressler373f77722024-02-03 00:39:47283unnecessary for other reasons).
Alex Mineerc5b63022021-08-26 21:36:05284
285## Appendix
286
287### Merge criteria phases
288
289The table below describes the different phases that each milestone progresses
Harry Souders782e8b2c2024-02-05 06:24:50290through during its release cycle; this data is available via the Chromium Dash
291[front-end](https://chromiumdash.appspot.com/branches) and
Alex Mineerc5b63022021-08-26 21:36:05292[API](https://chromiumdash.appspot.com/fetch_milestones).
293
Harry Souders8b7e12e82025-01-13 23:03:09294| Branch Phase | Period Begins | Period Ends | Acceptable Merges Include Fixes For: |
295| --- | --- | --- | --- |
296| beta | M(X) Branch | M(X) Stable Cut | Non-functional issues for Finch-gated features (e.g. add metrics, fix crash), noticeable new regressions, any release blockers, any security issues, emergency string issues (.GRD changes) |
297| stable | M(X) Stable Cut | M(X+1) Stable | Urgent new regressions (especially user reports), urgent release blockers, important security issues (medium severity or higher) requested by the security team |
298| extended (if applicable) | M(X+1) Stable | M(X+2) Stable | Important security issues (medium severity or higher) applicable to any platform supported by Chrome Browser requested by the security team |
Alex Mineerc5b63022021-08-26 21:36:05299
300### Merge states and labels
301
Harry Souders782e8b2c2024-02-05 06:24:50302The table below describes the different merge states applied via a bug's
Harry Souders1907ad72025-01-22 17:16:03303metadata fields. All merge states (except *Pending*) follow the form
304*[State]-###*, where ### corresponds to the applicable milestone. If multiple
305merges are required, these labels may appear multiple times on the same bug in
306different states.
Alex Mineerc5b63022021-08-26 21:36:05307
Harry Souders8b7e12e82025-01-13 23:03:09308| Field | Value | Step Owner | Next Steps |
309| --- | --- | --- | --- |
310| Merge-Request | ### | Release manager | Automation will review and either approve / reject directly, or pass the review to a release manager for manual evaluation |
Harry Souders1907ad72025-01-22 17:16:03311| Merge | Pending | Issue owner | Issue owner should follow the instructions in the merge request and assign it to *[email protected]* to begin review |
Harry Souders8b7e12e82025-01-13 23:03:09312| Merge | Review-### | Release manager | Release manager will evaluate and either approve, reject, or request additional information within two business days |
313| Merge | Approved-### | Issue owner | Issue owner should cherry-pick the fix to the appropriate release branch ASAP |
314| Merge | Merged-### | None | N/A; merge has already been landed, no further work required for given milestone |
315| Merge | Rejected-### | Issue owner | Issue owner should re-request a merge to escalate if they feel the merge was erroneously rejected and should be re-evaluated |
316| Merge | TBD-### | Issue owner | Issue owner should evaluate if a merge is required, then remove *TBD-##* and replace it with *NA-##* (if no merge needed) or re-request a merge (if needed) |
317| Merge | NA-### | None | N/A; merge is not required to the relevant milestone, no further work required for given milestone |