blob: 992817fc213b7c57c1862f1c6330b08d61294fc5 [file] [log] [blame] [view]
Toby Huang5105f812019-08-08 23:47:571# Commit Checklist for Chromium Workflow
2
Toby Huange43e5d682019-10-08 21:26:073Here is a helpful checklist to go through before uploading change lists (CLs) on
4Gerrit, which is the code review platform for the Chromium project. This
5checklist is designed to be streamlined. See
6[contributing to Chromium][contributing] for a more thorough reference. The
7intended audience is software engineers who are unfamiliar with contributing to
8the Chromium project.
Toby Huang5105f812019-08-08 23:47:579
10[TOC]
11
12## 1. Create a new branch
13
14You should create a new branch before starting any development work. It's
15helpful to branch early and to branch often in Git.
16
17 git new-branch <branch_name>
18
19which is equivalent to
20
21 git checkout -b <branch_name> --track origin/master
22
Toby Huang5c3c00e2019-10-30 23:29:0523Mark the associated crbug as "started" so that other people know that you have
24started work on the bug. Doing this can avoid duplicated work.
25
Toby Huangba5bbb42019-09-04 23:23:0726## 2. Make your changes
27
28Do your thing. There's no further advice here about how to write or fix code.
29
30## 3. Make sure the code builds correctly
Toby Huang5105f812019-08-08 23:47:5731
32After making your changes, check that common targets build correctly:
33
34* chrome (for Linux, ChromeOS, etc.)
35* unit_tests
36* browser_tests
37
38It's easy to inadvertently break one of the other builds you're not currently
39working on without realizing it. Even though the Commit Queue should catch any
40build errors, checking locally first can save you some time since the CQ Dry Run
41can take a while.
42
Toby Huangba5bbb42019-09-04 23:23:0743## 4. Test your changes
Toby Huang5105f812019-08-08 23:47:5744
45Make sure you hit every code path you changed.
46
Toby Huangba5bbb42019-09-04 23:23:0747## 5. Write unit or browser tests for any new code
Toby Huang5105f812019-08-08 23:47:5748
49Consider automating any manual testing you did in the previous step.
50
Toby Huangba5bbb42019-09-04 23:23:0751## 6. Ensure the code is formatted nicely
Toby Huang5105f812019-08-08 23:47:5752
53Run `git cl format --js`. The `--js` option also formats JavaScript changes.
54
Toby Huangba5bbb42019-09-04 23:23:0755## 7. Check over your changes
Toby Huang5105f812019-08-08 23:47:5756
Toby Huange43e5d682019-10-08 21:26:0757Run `git upstream-diff` to check over all of the changes you've made from the
58most recent checkpoint on the remote repository.
Toby Huang5105f812019-08-08 23:47:5759
Toby Huangba5bbb42019-09-04 23:23:0760## 8. Stage relevant files for commit
Toby Huang5105f812019-08-08 23:47:5761
62Run `git add <path_to_file>` for all of the relevant files you've modified.
Toby Huange43e5d682019-10-08 21:26:0763Unlike other version-control systems such as svn, you have to specifically `git
64add` the files you want to commit before calling `git commit`.
Toby Huang5105f812019-08-08 23:47:5765
Toby Huangba5bbb42019-09-04 23:23:0766## 9. Commit your changes
Toby Huang5105f812019-08-08 23:47:5767
68Run `git commit`. Here are some
69[tips for writing good commit messages][uploading-a-change-for-review].
70
Toby Huangba5bbb42019-09-04 23:23:0771## 10. Squash your commits
72
73If you have many commits on your current branch, and you want to avoid some
74nasty commit-by-commit merge conflicts in the next step, it is recommended to
75squash your commits into a single commit. This is done by running `git rebase -i
Toby Huange43e5d682019-10-08 21:26:0776<upstream-branch>`. The upstream branch is usually origin/master, but check `git
77branch -vv` to make sure. After running the git rebase command, you should see a
78list of commits, each commit starting with the word "pick". Make sure the first
79commit says "pick" and change the rest from "pick" to "squash". This will squash
80each commit into the previous commit, which will continue until each commit is
81squashed into the first commit.
Toby Huangba5bbb42019-09-04 23:23:0782
83## 11. Rebase your local repository
Toby Huang5105f812019-08-08 23:47:5784
85Run `git rebase-update`. This command updates all of your local branches with
86remote changes that have landed since you started development work, which
87could've been a while ago. It also deletes any branches that match the remote
Toby Huange43e5d682019-10-08 21:26:0788repository, such as after the CL associated with that branch had merged. You may
89run into rebase conflicts which should be manually fixed before proceeding with
90`git rebase --continue`. Rebasing prevents unintended changes from creeping into
91your CL.
Toby Huang5105f812019-08-08 23:47:5792
93Note that rebasing has the potential to break your build, so you might want to
94try re-building afterwards.
95
Toby Huangba5bbb42019-09-04 23:23:0796## 12. Upload the CL to Gerrit
Toby Huang5105f812019-08-08 23:47:5797
98Run `git cl upload`. Some useful options include:
99
Toby Huange43e5d682019-10-08 21:26:07100* `--cq-dry-run` (or `-d`) will set the patchset to do a CQ Dry Run.
101* `-r <chromium_username>` will add reviewers.
102* `-b <bug_number>` automatically populates the bug reference line of the
103 commit message.
Toby Huang5105f812019-08-08 23:47:57104
Toby Huangba5bbb42019-09-04 23:23:07105## 13. Check the CL again in Gerrit
Toby Huang5105f812019-08-08 23:47:57106
107Run `git cl web` to go to the Gerrit URL associated with the current branch.
Toby Huange43e5d682019-10-08 21:26:07108Open the latest patch set and verify that all of the uploaded files are correct.
109Click `Expand All` to check over all of the individual line-by-line changes
110again.
Toby Huang5105f812019-08-08 23:47:57111
Toby Huangba5bbb42019-09-04 23:23:07112## 14. Make sure all auto-regression tests pass
Toby Huang5105f812019-08-08 23:47:57113
114Click `CQ Dry Run`. Fix any errors because otherwise the CL won't pass the
115commit queue (CQ) checks. Consider waiting for the CQ Dry Run to pass before
116notifying your reviewers, in case the results require major changes in your CL.
117
Toby Huangba5bbb42019-09-04 23:23:07118## 15. Add reviewers to review your code
Toby Huang5105f812019-08-08 23:47:57119
120Click `Find Owners` or run `git cl owners` to find file owners to review your
121code and instruct them about which parts you want them to focus on. Add anyone
Toby Huange43e5d682019-10-08 21:26:07122else you think should review your code. The blame functionality in Code Search
123is a good way to identify reviewers who may be familiar with the parts of code
124your CL touches. For your CL to land, you need an approval from an owner for
125each file you've changed, unless you are an owner of some files, in which case
126you don't need separate owner approval for those files.
Toby Huang5105f812019-08-08 23:47:57127
Toby Huangba5bbb42019-09-04 23:23:07128## 16. Implement feedback from your reviewers
Toby Huang5105f812019-08-08 23:47:57129
130Then go through this commit checklist again. Reply to all comments from the
131reviewers on Gerrit and mark all resolved issues as resolved (clicking `Done` or
132`Ack` will do this automatically). Click `Reply` to ensure that your reviewers
133receive a notification. Doing this signals that your CL is ready for review
134again, since the assumption is that your CL is not ready for review until you
135hit reply.
136
Toby Huangba5bbb42019-09-04 23:23:07137## 17. Land your CL
Toby Huang5105f812019-08-08 23:47:57138
139Once you have obtained a Looks Good To Me (LGTM), which is reflected by a
140Code-Review+1 in Gerrit, from at least one owner for each file, then you have
141the minimum prerequisite to land your changes. It may be helpful to wait for all
142of your reviewers to approve your changes as well, even if they're not owners.
143Click `Submit to CQ` to try your change in the commit queue (CQ), which will
144land it if successful.
145
Toby Huang5c3c00e2019-10-30 23:29:05146## 18. Cleanup
147
Toby Huang5105f812019-08-08 23:47:57148After your CL is landed, you can use `git rebase-update` or `git cl archive` to
Toby Huang5c3c00e2019-10-30 23:29:05149clean up your local branches. These commands will automatically delete merged
150branches. Mark the associated crbug as "fixed".
Toby Huang5105f812019-08-08 23:47:57151
152[//]: # (the reference link section should be alphabetically sorted)
153[contributing]: contributing.md
154[uploading-a-change-for-review]: contributing.md#Uploading-a-change-for-review