vendorcode/intel/fsp/fsp2_0/CPX-SP: update to ww34 release and adapt soc
[coreboot.git] / Documentation / tutorial / part2.md
blob4ac857473d203bdb0b5d3633f7274ca2ad0e540f
1 # Tutorial, part 2: Submitting a patch to coreboot.org
3 ## Step 1: Set up an account at coreboot.org
5 If you already have an account, skip to Step 2.
7 Otherwise, go to <https://review.coreboot.org> in your preferred web browser.
8 Select **Sign in** in the upper right corner.
10 Select the appropriate sign-in. For example, if you have a Google account,
11 select **Google OAuth2** (gerrit-oauth-provider plugin). **Note:** Your
12 username for the account will be the username of the account you used to
13 sign-in with. (ex. your Google username).
15 ## Step 2a: Set up RSA Private/Public Key
17 If you prefer to use an HTTP password instead, skip to Step 2b.
19 For the most up-to-date instructions on how to set up SSH keys with Gerrit go to
20 <https://gerrit-documentation.storage.googleapis.com/Documentation/2.14.2/user-upload.html#configure_ssh>
21 and follow the instructions there. Then, skip to Step 3.
23 Additionally, that section of the Web site provides explanation on starting
24 an ssh-agent, which may be particularly helpful for those who anticipate
25 frequently uploading changes.
27 If you instead prefer to have review.coreboot.org specific instructions,
28 follow the steps below. Note that this particular section may have the
29 most up-to-date instructions.
31 If you do not have an RSA key set up on your account already (as is the case
32 with a newly created account), follow the instructions below; otherwise,
33 doing so could overwrite an existing key.
35 In the upper right corner, select your name and click on **Settings**.
36 Select **SSH Public Keys** on the left-hand side.
38 In a terminal, run `ssh-keygen` and confirm the default path `.ssh/id_rsa`.
40 Make a passphrase -- remember this phrase. It will be needed whenever you use
41 this RSA Public Key. **Note:** You might want to use a short password, or
42 forego the password altogether as you will be using it very often.
44 Open `id_rsa.pub`, copy all contents and paste into the textbox under
45 "Add SSH Public Key" in the https://review.coreboot.org webpage.
47 ## Step 2b: Set up an HTTP Password
49 Alternatively, instead of using SSH keys, you can use an HTTP password. To do so,
50 after you select your name and click on **Settings** on the left-hand side, rather
51 than selecting **SSH Public Keys**, select **HTTP Password**.
53 Click **Generate Password**. This should fill the "Password" box with a password. Copy
54 the password, and add the following to your `$HOME/.netrc` file:
56         machine review.coreboot.org login YourUserNameHere password YourPasswordHere
58 where YourUserNameHere is your username, and YourPasswordHere is the password you
59 just generated.
61 If your system is behind a snooping HTTPS proxy, you might also have to
62 make its SSL certificate known to curl, a system specific operation.
63 If that's not possible for some reason, you can also disable SSL
64 certificate verification in git:
66         git config [--global] http.sslVerify [true|false]
68 The `--global` argument sets it for all git transfers of your local
69 user, `false` means not to validate the certificate.
71 If that still doesn't allow you to pull or push changes to the server, the
72 proxy is likely tampering with the data stream, in which case there's nothing
73 we can do.
75 ## Step 3: Clone coreboot and configure it for submitting patches
77 On Gerrit, click on the **Browse** tab in the upper left corner and select
78 **Repositories**. From the listing, select the "coreboot" repo. You may have
79 to click the next page arrow at the bottom a few times to find it.
81 If you are using SSH keys, select **ssh** from the tabs under "Project
82 coreboot" and run the "clone with commit-msg hook" command that's provided.
83 This should prompt you for your id_rsa passphrase, if you previously set one.
85 **Note:** if the **ssh** option is not showing, check that you have a username
86 set. Click the profile picture at the top right and select **User Settings**,
87 then set your username in the **Profile** section.
89 If you are using HTTP, instead, select **http** from the tabs under "Project coreboot"
90 and run the command that appears.
92 Now is a good time to configure your global git identity, if you haven't
93 already.
95         git config --global user.name "Your Name"
96         git config --global user.email "Your Email"
98 Finally, enter the local git repository and set up repository specific hooks
99 and other configurations.
101         cd coreboot
102         make gitconfig
104 ## Step 4: Submit a commit
106 An easy first commit to make is fixing existing checkpatch errors and warnings
107 in the source files. To see errors that are already present, build the files in
108 the repository by running `make lint` in the coreboot directory. Alternatively,
109 if you want to run `make lint` on a specific directory, run:
111         util/lint/lint-007-checkpatch <filepath>
113 where `filepath` is the filepath of the directory (ex. `src/cpu/amd/car`).
115 Any changes made to files under the src directory are made locally,
116 and can be submitted for review.
118 Once you finish making your desired changes, use the command line to stage
119 and submit your changes. An alternative and potentially easier way to stage
120 and submit commits is to use git cola, a graphical user interface for git. For
121 instructions on how to do so, skip to Step 4b.
123 ## Step 4a: Use the command line to stage and submit a commit
125 To use the command line to stage a commit, run
127         git add <filename>
129 where `filename` is the name of your file.
131 To commit the change, run
133         git commit -s
135 **Note:** The -s adds a signed-off-by line by the committer. Your commit should be
136 signed off with your name and email (i.e. **Your Name** **\<Your Email\>**, based on
137 what you set with git config earlier).
139 Running git commit first checks for any errors and warnings using lint. If
140 there are any, you must go back and fix them before submitting your commit.
141 You can do so by making the necessary changes, and then staging your commit again.
143 When there are no errors or warnings, your default text editor will open.
144 This is where you will write your commit message.
146 The first line of your commit message is your commit summary. This is a brief
147 one-line description of what you changed in the files using the template
148 below:
150     <filepath>: Short description
152 For example,
154     cpu/amd/pi/00630F01: Fix checkpatch warnings and errors
156 **Note:** It is good practice to use present tense in your descriptions
157 and do not punctuate your summary.
159 Then hit Enter. The next paragraph should be a more in-depth explanation of the
160 changes you've made to the files. Again, it is good practice to use present
161 tense. Ex.
163     Fix space prohibited between function name and open parenthesis,
164     line over 80 characters, unnecessary braces for single statement blocks,
165     space required before open brace errors and warnings.
167 When you have finished writing your commit message, save and exit the text
168 editor. You have finished committing your change. If, after submitting your
169 commit, you wish to make changes to it, running `git commit --amend` allows
170 you to take back your commit and amend it.
172 When you are done with your commit, run `git push` to push your commit to
173 coreboot.org. **Note:** To submit as a private patch, use
174 `git push origin HEAD:refs/for/master%private`. Submitting as a private patch
175 means that your commit will be on review.coreboot.org, but is only visible to
176 yourself and those you add as reviewers.
178 This has been a quick primer on how to submit a change to Gerrit for review
179 using git. You may wish to review the [Gerrit code review workflow
180 documentation](https://gerrit-review.googlesource.com/Documentation/intro-user.html#code-review),
181 especially if you plan to work on multiple changes at the same time.
183 ## Step 4b: Use git cola to stage and submit a commit
185 If git cola is not installed on your machine, see
186 <https://git-cola.github.io/downloads.html> for download instructions.
188 After making some edits to src files, rather than run `git add`, run
189 `git cola` from the command line. You should see all of the files
190 edited under "Modified".
192 In the textbox labeled "Commit summary" provide a brief one-line
193 description of what you changed in the files according to the template
194 below:
196     <filepath>: Short description
198 For example,
200     cpu/amd/pi/00630F01: Fix checkpatch warnings and errors
202 **Note:** It is good practice to use present tense in your descriptions
203 and do not punctuate your short description.
205 In the larger text box labeled 'Extended description...' provide a more
206 in-depth explanation of the changes you've made to the files. Again, it
207 is good practice to use present tense. Ex.
209     Fix space prohibited between function name and open parenthesis,
210     line over 80 characters, unnecessary braces for single statement blocks,
211     space required before open brace errors and warnings.
213 Then press Enter two times to move the cursor to below your description.
214 To the left of the text boxes, there is an icon with an downward arrow.
215 Press the arrow and select "Sign Off." Make sure that you are signing off
216 with your name and email (i.e. **Your Name** **\<Your Email\>**, based on what
217 you set with git config earlier).
219 Now, review each of your changes and mark either individual changes or
220 an entire file as Ready to Commit by marking it as 'Staged'. To do
221 this, select one file from the 'Modified' list. If you only want to
222 submit particular changes from each file, then highlight the red and
223 green lines for your changes, right click and select 'Stage Selected
224 Lines'. Alternatively, if an entire file is ready to be committed, just
225 double click on the file under 'Modified' and it will be marked as
226 Staged.
228 Once the descriptions are done and all the edits you would like to
229 commit have been staged, press 'Commit' on the right of the text
230 boxes.
232 If the commit fails due to persisting errors, a text box will appear
233 showing the errors. You can correct these errors within 'git cola' by
234 right-clicking on the file in which the error occurred and selecting
235 'Launch Diff Tool'. Make necessary corrections, close the Diff Tool and
236 'Stage' the corrected file again. It might be necessary to refresh
237 'git cola' in order for the file to be shown under 'Modified' again.
238 Note: Be sure to add any other changes that haven't already been
239 explained in the extended description.
241 When ready, select 'Commit' again. Once all errors have been satisfied
242 and the commit succeeds, move to the command line and run `git push`.
244 ## Step 5: Let others review your commit
246 Your commits can now be seen on review.coreboot.org if you select "Your"
247 and click on "Changes" and can be reviewed by others. Your code will
248 first be reviewed by build bot (Jenkins), which will either give you a warning
249 or verify a successful build; if so, your commit will receive a +1. Other
250 users may also give your commit +1. For a commit to be merged, it needs
251 to receive a +2. **Note:** A +1 and a +1 does not make a +2. Only certain users
252 can give a +2.
254 ## Step 6 (optional): bash-git-prompt
256 To help make it easier to understand the state of the git repository
257 without running `git status` or `git log`, there is a way to make the
258 command line show the status of the repository at every point. This
259 is through bash-git-prompt.
261 Instructions for installing this are found at:
262 <https://github.com/magicmonty/bash-git-prompt>.
263 **Note:** Feel free to search for different versions of git prompt,
264 as this one is specific to bash.
266 Alternatively, follow the instructions below:
267 Run the following two commands in the command line:
269     cd
270     git clone https://github.com/magicmonty/bash-git-prompt.git .bash-git-prompt --depth=1
272 **Note:** cd will change your directory to your home directory, so the
273 git clone command will be run there.
275 Finally, open the `~/.bashrc` file and append the following two lines:
277     GIT_PROMPT_ONLY_IN_REPO=1
278     source ~/.bash-git-prompt/gitprompt.sh
280 Now, whenever you are in a git repository, it will continuously display
281 its state.
283 There also are additional configurations that you can change depending on your
284 preferences. If you wish to do so, look at the "All configs for .bashrc" section
285 on <https://github.com/magicmonty/bash-git-prompt>. Listed in that section are
286 various lines that you can copy, uncomment and add to your .bashrc file to
287 change the configurations. Example configurations include avoid fetching remote
288 status, and supporting versions of Git older than 1.7.10.
290 ## Appendix: Miscellaneous Advice
292 ### Updating a commit after running git push:
294 Suppose you would like to update a commit that has already been pushed to the
295 remote repository. If the commit you wish to update is the most recent
296 commit you have made, after making your desired changes, stage the files
297 (either using git add or in git cola), and amend the commit. To do so,
298 if you are using the command line, run `git commit --amend`. If you are
299 using git cola, click on the gear icon located on the upper left side under
300 **Commit** and select **Amend Last Commit** in the drop down menu. Then, stage
301 the files you have changed, commit the changes, and run git push to push the
302 changes to the remote repository. Your change should be reflected in Gerrit as
303 a new patch set.
305 If, however, the commit you wish to update is not the most recent commit you
306 have made, you will first need to checkout that commit. To do so, find the
307 URL of the commit on <https://review.coreboot.org> and go to that page; if
308 the commit is one that you previously pushed, it can be found by selecting
309 **My** and then **Changes** in the upper left corner. To checkout this commit,
310 in the upper right corner, click on **Download**, and copy the command listed
311 next to checkout by clicking **Copy to clipboard**. Then, run the copied
312 command in your coreboot repository. Now, the last commit should be the most
313 recent commit to that patch; to update it, make your desired changes, stage
314 the files, then amend and push the commit using the instructions in the above
315 paragraph.