Firmware code review guidelines
Goals for guidelines
- Minimize review latency.
- Minimize duplication of effort among reviewers.
Guidelines for all code reviews
- Keep each CL to one logical change.
- Where there are several layers of dependencies, break the patch up into multiple CLs.
- Avoid significant scope increases in subsequent patchsets; when reviewers ask for significant additions, consider adding them in a follow-up CL instead of uploading a new patchset.
- Refactor in a separate CL from functional changes; this also applies to unrelated style and typo fixes.
- See Google small CL guidelines for more tips.
- If you are about to send out more than 400 lines of non-trivial changes, and you haven’t written a design doc, consider whether you need one and who should review it.
- Prefer to discuss significant design issues in bugs or design docs, before code review.
- Associate a bug with a code review (
BUG=...
) when context is relevant.
- Indicate clearly when a CL is not yet ready for review and when it is; don’t start the review until you’ve stopped making changes.
- Use
repo upload --no-emails
to avoid sending emails for CLs not ready for review.- To make
--no-emails
the default for a project, run the appropriate command inside that project's directory.- Public projects:
git config review.$(git config --get remote.cros.review).uploadnotify NONE
- Private projects:
git config review.$(git config --get remote.cros-internal.review).uploadnotify NONE
- Use Gerrit comments as needed to clarify that a CL is now ready for review.
- Recommended: Leave “WIP” in the CL title until it is ready to review.
- Make sure that
make buildall
succeeds after each individual change; this facilitates bisecting. - Assign reviewers with a specific scope for each reviewer.
- Ideally one person will be qualified to review the entire CL; pick that person.
- If multiple domain experts are required, indicate in the review request which parts each of them should review; don’t add a reviewer without a scope.
- If someone needs to be aware that a change is happening, add them as CC; do this conservatively.
- TODO: Use the attention set to clarify whose turn it is to respond, when that feature becomes available.
- Consider multi-stage review: Get LGTM within a certain scope before moving to the next reviewer.
- This may help reduce the number of patchsets and duplicated review effort.
- It is probably most helpful when multiple reviewers should look at the same files.
- Prioritize reviewers who may want fundamental changes, e.g. a component maintainer or domain expert should look at it before a language expert.
- Keep related changes in a single relation chain if practical.
- Try to make visible updates actionable for reviewers.
- Don’t post a comment saying that you’ve done something before the patchset that does it.
- Don’t post comments that say you’ll do something in the next patchset; just wait for that patchset.
- If practical, don’t upload a new patchset until you can usefully respond to all unresolved comments.
- Use
repo upload --no-emails
for patchsets that address comments before the responses to those comments.- See above instructions for using
--no-emails
by default.
- Try to minimize rebases in the middle of a review; if practical, don’t rebase until just before submitting.
- Try to make review comments maximally actionable for authors, who may be in different timezones or may be managing a relation chain with multiple reviewers.
- Try to respond to review requests or follow-up comments within 1 business day.
- This is an SLO for single responses, not the entire lifecycle of the CL.
- Prefer to provide feedback on an entire CL in one shot, so that the author could plausibly respond to all of it and need no further review.
- However, consider sending a reply after a partial review, if it would help keep the response time within 1 business day.
- Resolve outstanding comments before submitting.
- Don’t mark a comment as resolved until the question has been answered, request completed, concern assuaged, etc.
- Typically, a reviewer should not CR+2 a CL until the reviewer’s comments have been resolved to their satisfaction. To reduce latency, a reviewer may CR+2 a CL with the stated assumption that the author will address outstanding minor comments; in this case, the author should resolve them before submitting.
- Abandon changes that you don’t intend to keep working on. (
repo abandon
doesn’t do it on Gerrit.)- This should probably include CLs that, after review, you want to substantially rewrite or don’t expect to submit for a long time.
Guidelines for partner code reviews
- Complete partner-internal code review (using Gerrit) before assigning to Google reviewers.
- Send CLs to the appropriate Google alias for review by default; for example,
cros-ec-reviewers@google.com
for EC-related code.- Or send to specific Googlers with domain expertise, consistent with above guidelines.
Guidelines for extended partner efforts
- Discuss at the beginning of the effort which Googlers should review or be CCed on CLs.
- Optionally create a GWSQ specific to the effort.
Reference