blob: ab72cff365b7f1e7de479932cd1141c159e1f10f [file] [log] [blame] [view]
brettw40e953e2017-02-08 17:49:281# Code Reviews
2
3Code reviews are a central part of developing high-quality code for Chromium.
Lei Zhang3b32caa2021-03-22 17:24:194All change lists (CLs) must be reviewed.
brettw40e953e2017-02-08 17:49:285
Daniel Cheng6bffde02020-06-12 19:10:456The general patch, upload, and land process is covered in more detail in the
Jason D. Clintonc38b61d82021-04-20 20:02:147[contributing code](contributing.md) page. To learn about the code review changes
8and OWNERS policy changes launched on March 24, 2021, see
9[Mandatory Code Review and Native OWNERS](code_review_owners.md).
brettw40e953e2017-02-08 17:49:2810
11# Code review policies
12
13Ideally the reviewer is someone who is familiar with the area of code you are
brettw2019b9e2017-02-09 06:40:2014touching. Any committer can review code, but an owner must provide a review
Lei Zhang3b32caa2021-03-22 17:24:1915for each directory you are touching. If you have doubts, look at the `git blame`
16for the file and the `OWNERS` files ([more info](#owners-files)).
brettw40e953e2017-02-08 17:49:2817
John Abd-El-Malekdfd1edc2021-02-24 22:22:4018To indicate a positive review, the reviewer provides a `Code-Review +1` in
Michael Giuffridaaf367052018-03-22 20:22:3419Gerrit, also known as an LGTM ("Looks Good To Me"). A score of "-1" indicates
20the change should not be submitted as-is.
brettw40e953e2017-02-08 17:49:2821
Michael Giuffridaaf367052018-03-22 20:22:3422If you have multiple reviewers, provide a message indicating what you expect
23from each reviewer. Otherwise people might assume their input is not required
24or waste time with redundant reviews.
brettw2019b9e2017-02-09 06:40:2025
Annie Sullivand04212e72017-10-19 21:11:3226Please also read [Respectful Changes](cl_respect.md) and
27[Respectful Code Reviews](cr_respect.md).
28
Robert Seseka8ee4a92023-07-13 23:04:3029There are also a [collection of tips](cl_tips.md) for productive reviews, though
30these are advisory and not policy.
31
brettw2019b9e2017-02-09 06:40:2032#### Expectations for all reviewers
brettw40e953e2017-02-08 17:49:2833
34 * Aim to provide some kind of actionable response within 24 hours of receipt
Michael Giuffridaaf367052018-03-22 20:22:3435 (not counting weekends and holidays). This doesn't mean you have to do a
36 complete review, but you should be able to give some initial feedback,
37 request more time, or suggest another reviewer.
brettw40e953e2017-02-08 17:49:2838
Michael Giuffridaaf367052018-03-22 20:22:3439 * Use the status field in Gerrit settings to indicate if you're away and when
Mike Frysinger7b15bde2018-05-15 09:28:0540 you'll be back.
brettw40e953e2017-02-08 17:49:2841
42 * Don't generally discourage people from sending you code reviews. This
Michael Giuffridaaf367052018-03-22 20:22:3443 includes using a blanket "slow" in your status field.
brettw40e953e2017-02-08 17:49:2844
45## OWNERS files
46
brettw2019b9e2017-02-09 06:40:2047In various directories there are files named `OWNERS` that list the email
brettw40e953e2017-02-08 17:49:2848addresses of people qualified to review changes in that directory. You must
49get a positive review from an owner of each directory your change touches.
50
brettw2019b9e2017-02-09 06:40:2051Owners files are recursive, so each file also applies to its subdirectories.
52It's generally best to pick more specific owners. People listed in higher-level
thestig9208d8ba2017-06-09 22:05:3253directories may have less experience with the code in question. For example,
54the reviewers in the `//chrome/browser/component_name/OWNERS` file will likely
55be more familiar with code in `//chrome/browser/component_name/sub_component`
56than reviewers in the higher-level `//chrome/OWNERS` file.
57
Lei Zhang3b32caa2021-03-22 17:24:1958More detail on the owners file format is provided [here](#owners-file-details).
brettw40e953e2017-02-08 17:49:2859
Lei Zhang3b32caa2021-03-22 17:24:1960*Tip:* The `git cl owners` command can help find owners. Gerrit also provides
Jason D. Clintonc38b61d82021-04-20 20:02:1461this functionality in the Reviewers field of CLs.
brettw40e953e2017-02-08 17:49:2862
63While owners must approve all patches, any committer can contribute to the
64review. In some directories the owners can be overloaded or there might be
65people not listed as owners who are more familiar with the low-level code in
66question. In these cases it's common to request a low-level review from an
67appropriate person, and then request a high-level owner review once that's
68complete. As always, be clear what you expect of each reviewer to avoid
69duplicated work.
70
brettw2019b9e2017-02-09 06:40:2071Owners do not have to pick other owners for reviews. Since they should already
72be familiar with the code in question, a thorough review from any appropriate
73committer is sufficient.
brettw40e953e2017-02-08 17:49:2874
brettw2019b9e2017-02-09 06:40:2075#### Expectations of owners
76
77The existing owners of a directory approve additions to the list. It is
Wei-Yin Chen (陳威尹)681bc322017-07-20 01:55:1178preferable to have many directories, each with a smaller number of specific
Dirk Pranke4f9740c2018-10-17 03:01:0679owners rather than large directories with many owners. Owners should:
brettw2019b9e2017-02-09 06:40:2080
Dirk Pranke3042ec92022-01-12 16:53:4081 * Demonstrate excellent judgment, teamwork and ability to uphold
82 [Chromium development principles](contributing.md).
brettw2019b9e2017-02-09 06:40:2083
84 * Be already acting as an owner, providing high-quality reviews and design
Dirk Pranke4f9740c2018-10-17 03:01:0685 feedback.
brettw2019b9e2017-02-09 06:40:2086
Dirk Pranke4f9740c2018-10-17 03:01:0687 * Be a Chromium project member with full commit access of at least three
brettw2019b9e2017-02-09 06:40:2088 months tenure.
89
90 * Have submitted a substantial number of non-trivial changes to the affected
brettw40e953e2017-02-08 17:49:2891 directory.
92
brettw2019b9e2017-02-09 06:40:2093 * Have committed or reviewed substantial work to the affected directory
Dirk Pranke4f9740c2018-10-17 03:01:0694 within the last ninety days.
brettw40e953e2017-02-08 17:49:2895
brettw2019b9e2017-02-09 06:40:2096 * Have the bandwidth to contribute to reviews in a timely manner. If the load
97 is unsustainable, work to expand the number of owners. Don't try to
98 discourage people from sending reviews, including writing "slow" or
99 "emeritus" after your name.
100
Dirk Pranke3042ec92022-01-12 16:53:40101Seldom-updated directories may have exceptions to the "substantiality" and
102"recency" requirements.
103
104Directories in `//third_party` should list those most familiar with the
105library, regardless of how often the code is updated.
106
107#### Removal of owners
108
109If a code owner is not meeting the [expectations of
110owners](#expectations-of-owners) listed above for more than one quarter (and
111they are not on a leave during that time), then they may be removed by any
112co-owner or an owner from the parent directory after a 4-week notice, using
113the following process:
114
115 * Upload a change removing the owner and copy all owners in that directory,
116 including the owner in question.
117 * If the affected owner approves the change, it may be landed immediately.
118 * Otherwise, the change author must wait five working days for feedback from
119 the other owners.
120 * After that time has elapsed, if the change has received 3 approvals
121 with no objections from anyone else, the change may be landed.
122 * If the directory does not have 4 owners, then the decision should
123 be escalated to the owners of the parent directory (or directories)
124 as necessary to provide enough of votes.
125 * If there are objections, then the decision should be escalated to
John Abd-El-Malek704bca02022-12-14 18:47:59126 the [../ATL_OWNERS](../ATL_OWNERS) for resolution.
brettw40e953e2017-02-08 17:49:28127
Kentaro Hara52294ae2022-08-12 07:37:30128Note: For the purpose of not slowing down code review, Chromium removes
129inactive owners (e.g., those who made no contributions for multiple quarters)
130on a regular basis. The script does not take into account personal situations
131like a long leave. If you were inactive only for a certain period of time
132while you were on a long leave and have been meeting the above owner's
133expectations in other times, you can create a CL to re-add yourself and land
134after getting local owner's approval (you can refer to this policy in the CL).
Yulan Lin331686622023-03-30 23:10:51135The removal script will cc the removed owner and one other owner to avoid spam.
Kentaro Hara52294ae2022-08-12 07:37:30136
brettw2019b9e2017-02-09 06:40:20137### OWNERS file details
138
Anthony Polito9ce2a482022-02-10 18:39:49139Refer to the [owners plugin](https://github.com/GerritCodeReview/plugins_code-owners/blob/master/resources/Documentation/backend-find-owners.md)
thestig9208d8ba2017-06-09 22:05:32140for all details on the file format.
brettw2019b9e2017-02-09 06:40:20141
142This example indicates that two people are owners, in addition to any owners
143from the parent directory. `git cl owners` will list the comment after an
144owner address, so this is a good place to include restrictions or special
145instructions.
146```
147# You can include comments like this.
148[email protected]
149[email protected] # Only for the frobinator.
150```
151
152A `*` indicates that all committers are owners:
153```
154*
155```
156
brettwd040b0be2017-02-09 19:11:33157The text `set noparent` will stop owner propagation from parent directories.
Jochen Eisingerea8f92d82017-08-02 17:40:14158This should be rarely used. If you want to use `set noparent` except for IPC
John Abd-El-Malek704bca02022-12-14 18:47:59159related files, please first reach out to chrome-atls@google.com.
Jochen Eisingerea8f92d82017-08-02 17:40:14160
Jochen Eisinger8f0c8d82019-10-25 18:28:27161You have to use `set noparent` together with a reference to a file that lists
162the owners for the given use case. Approved use cases are listed in
163`//build/OWNERS.setnoparent`. Owners listed in those files are expected to
John Abd-El-Malek704bca02022-12-14 18:47:59164execute special governance functions such as ATL reviews or ipc security review.
Jochen Eisinger8f0c8d82019-10-25 18:28:27165Every set of owners should implement their own means of auditing membership. The
166minimum expectation is that membership in those files is reevaluated on
167project, or affiliation changes.
168
John Abd-El-Malek704bca02022-12-14 18:47:59169In this example, only the ATLs are owners:
brettw2019b9e2017-02-09 06:40:20170```
171set noparent
John Abd-El-Malek704bca02022-12-14 18:47:59172file://ATL_OWNERS
brettw2019b9e2017-02-09 06:40:20173```
174
175The `per-file` directive allows owners to be added that apply only to files
Wei-Yin Chen (陳威尹)681bc322017-07-20 01:55:11176matching a pattern. In this example, owners from the parent directory
brettw2019b9e2017-02-09 06:40:20177apply, plus one person for some classes of files, and all committers are
178owners for the readme:
179```
180per-file [email protected]
181per-file foo.*[email protected]
182
183per-file readme.txt=*
184```
185
186Other `OWNERS` files can be included by reference by listing the path to the
187file with `file://...`. This example indicates that only the people listed in
188`//ipc/SECURITY_OWNERS` can review the messages files:
189```
190per-file *_messages*.h=set noparent
191per-file *_messages*.h=file://ipc/SECURITY_OWNERS
Wei-Yin Chen (陳威尹)1fb88e22023-01-09 18:39:55192```
Anthony Polito9ce2a482022-02-10 18:39:49193
194File globbing is supported using the
Wei-Yin Chen (陳威尹)1fb88e22023-01-09 18:39:55195[simple path expression](https://github.com/GerritCodeReview/plugins_code-owners/blob/master/resources/Documentation/path-expressions.md#simple-path-expressions)
196format.
Steve Kobesf885edf2018-09-11 13:41:11197
Jason Clinton0daf7b02021-02-09 20:36:22198### Owners-Override
Steve Kobesf885edf2018-09-11 13:41:11199
John Abd-El-Malekdfd1edc2021-02-24 22:22:40200Setting the `Owners-Override +1` label will bypass OWNERS enforcement. Active
Dirk Pranke3042ec92022-01-12 16:53:40201[sheriffs](sheriffs.md), Release Program Managers,
202[Large Scale Changes](#large-scale-changes),
203[Global Approvers](#global-approvals) reviewers,
John Abd-El-Malek704bca02022-12-14 18:47:59204[Chrome ATLs](../ATL_OWNERS)
Dirk Pranke3042ec92022-01-12 16:53:40205have this capability. The power to use Owners-Override should be restricted
Kentaro Hara7e85d34a2021-10-08 15:33:16206as follows:
207
Kentaro Hara23878c62022-01-28 00:18:41208 * Active sheriffs and Release Program Managers can set Owners-Override only on
209 CLs needed for sheriffing and releasing (e.g., revert, reland, test fix,
210 cherry-pick).
Kentaro Hara0cdc6072021-10-15 00:35:16211 * Large Scale Change reviewers can set Owners-Override only on sheriffing CLs
212 and CLs about the approved Large Scale Change.
213 * Global approvers can set Owners-Override only on sheriffing CLs and
214 mechanical CLs associated with their API changes. For example,
215 //base/OWNERS can set Owners-Override on mechanical CLs associated with
216 //base/ API changes.
John Abd-El-Malek704bca02022-12-14 18:47:59217 * Chrome ATLs can set Owners-Override on any changes to help with cases that
218 cannot be handled by the above groups and expedite CLs when LSC is too
219 heavyweight. However, please use one of the above groups before asking
220 Chrome ATLs.
Kentaro Hara0cdc6072021-10-15 00:35:16221
222When you need Owners-Override on sheriffing CLs, please reach out to the
223Active Sheriffs and Release Program Managers first. If none of them is
224available, please send an email to lsc-owners-override@chromium.org for help.
225
Dirk Pranke3042ec92022-01-12 16:53:40226Note that Owners-Override by itself is not enough on your own CLs. Where this
227matters is when you are sheriffing. For example, if you want to revert or
Stephen McGruer282391a2022-08-04 16:46:55228disable a test, your Owners-Override on the CL is not enough. You also need
229either another committer to LGTM the CL or, for clean reverts, a `Bot-Commit:
230+1` from the [rubber-stamper bot](#automated-code_review).
Steve Kobesf885edf2018-09-11 13:41:11231
Jason Clinton0daf7b02021-02-09 20:36:22232## Mechanical changes
Steve Kobesf885edf2018-09-11 13:41:11233
John Abd-El-Malekdfd1edc2021-02-24 22:22:40234### Global Approvals
Dave Tapuska4661b902023-07-12 17:21:45235For one-off CLs, API owners of `base`, `build`, `content`,
236`third_party/blink/public` and `url` can `Owners-Override +1` a change to their
237APIs to avoid waiting for rubberstamp +1s from affected directories' owners.
238This should only be used for mechanical updates to the affected directories.
Steve Kobesf885edf2018-09-11 13:41:11239
Dirk Pranke3042ec92022-01-12 16:53:40240If you are making one-off CLs that touch many directories and cannot be
John Abd-El-Malek704bca02022-12-14 18:47:59241handled by the global approvers, you can ask one of Chrome ATLs.
Kentaro Hara7e85d34a2021-10-08 15:33:16242
243### Large Scale Changes
244You can use the [Large Scale Changes](process/lsc/large_scale_changes.md)
245process to get approval to bypass OWNERS enforcement for large changes like
246refactoring, architectural changes, or other repetitive code changes across the
247whole codebase. This is used for work that span many dozen CLs.
248
Jason Clinton0daf7b02021-02-09 20:36:22249## Documentation updates
Steve Kobesf885edf2018-09-11 13:41:11250
Jason Clinton0daf7b02021-02-09 20:36:22251Documentation updates require code review. We may revisit this decision in the
252future.
Steve Kobesf885edf2018-09-11 13:41:11253
Jason Clinton0daf7b02021-02-09 20:36:22254## Automated code-review
Steve Kobesf885edf2018-09-11 13:41:11255
Jason Clinton0daf7b02021-02-09 20:36:22256For verifiably safe changes like translation files, clean reverts, and clean
257cherry-picks, we have automation that will vote +1 on the `Bot-Commit` label
258allowing the CL to be submitted without human code-review. Add `Rubber Stamper`
259([email protected]) to your CL as a reviewer to
260activate this automation. It will scan the CL after about 1 minute and reply
261with its verdict. `Bot-Commit` votes are not sticky between patchsets and so
262only add the bot once the CL is finalized.
Steve Kobesf885edf2018-09-11 13:41:11263
Lei Zhang3b32caa2021-03-22 17:24:19264When combined with the [`Owners-Override`](#owners_override) power, sheriffs can
265effectively revert and reland on their own.
Steve Kobesf885edf2018-09-11 13:41:11266
Jason Clinton6026fd192021-03-24 19:58:33267Rubber Stamper never provides OWNERS approval, by design. It's intended to be
Jason D. Clintonc38b61d82021-04-20 20:02:14268used by those who have owners in the directory modified or who are sheriffs. If
269it provided both code review and OWNERS approval, that would be an abuse vector:
270that would allow anyone who can create a revert or cherry-pick to land it
271without any other person being involved (e.g. the silent revert of security
272patches).
Jason Clinton6026fd192021-03-24 19:58:33273
Jason D. Clintonc38b61d82021-04-20 20:02:14274Changes not supported by `Rubber Stamper` always need a +1 from another
Jason Clinton0daf7b02021-02-09 20:36:22275committer.