102 lines
4.4 KiB
Markdown
102 lines
4.4 KiB
Markdown
|
---
|
||
|
title: Code Review Guidelines
|
||
|
---
|
||
|
The only way to get code into go-ethereum is to send a pull request. Those pull requests
|
||
|
need to be reviewed by someone. This document is a guide that explains our expectations
|
||
|
around PRs for both authors and reviewers.
|
||
|
|
||
|
## Terminology
|
||
|
|
||
|
* The **author** of a pull request is the entity who wrote the diff and submitted it to
|
||
|
GitHub.
|
||
|
* The **team** consists of people with commit rights on the go-ethereum repository.
|
||
|
* The **reviewer** is the person assigned to review the diff. The reviewer must be a team
|
||
|
member.
|
||
|
* The **code owner** is the person responsible for the subsystem being modified by the PR.
|
||
|
|
||
|
## The Process
|
||
|
|
||
|
The first decision to make for any PR is whether it's worth including at all. This
|
||
|
decision lies primarily with the code owner, but may be negotiated with team members.
|
||
|
|
||
|
To make the decision we must understand what the PR is about. If there isn't enough
|
||
|
description content or the diff is too large, request an explanation. Anyone can do this
|
||
|
part.
|
||
|
|
||
|
We expect that reviewers check the style and functionality of the PR, providing comments
|
||
|
to the author using the GitHub review system. Reviewers should follow up with the PR until
|
||
|
it is in good shape, then **approve** the PR. Approved PRs can be merged by any code owner.
|
||
|
|
||
|
When communicating with authors, be polite and respectful.
|
||
|
|
||
|
### Code Style
|
||
|
|
||
|
We expect `gofmt`ed code. For contributions of significant size, we expect authors to
|
||
|
understand and use the guidelines in [Effective Go][effgo]. Authors should avoid common
|
||
|
mistakes explained in the [Go Code Review Comments][revcomment] page.
|
||
|
|
||
|
### Functional Checks
|
||
|
|
||
|
For PRs that fix an issue, reviewers should try reproduce the issue and verify that the
|
||
|
pull request actually fixes it. Authors can help with this by including a unit test that
|
||
|
fails without (and passes with) the change.
|
||
|
|
||
|
For PRs adding new features, reviewers should attempt to use the feature and comment on
|
||
|
how it feels to use it. Example: if a PR adds a new command line flag, use the program
|
||
|
with the flag and comment on whether the flag feels useful.
|
||
|
|
||
|
We expect appropriate unit test coverage. Reviewers should verify that new code is covered
|
||
|
by unit tests.
|
||
|
|
||
|
### CI
|
||
|
|
||
|
Code submitted must pass all unit tests and static analysis ("lint") checks. We use Travis
|
||
|
CI to test code on Linux, macOS and AppVeyor to test code on Microsoft Windows.
|
||
|
|
||
|
For failing CI builds, the issue may not be related to the PR itself. Such failures are
|
||
|
usually related to flakey tests. These failures can be ignored (authors don't need to fix
|
||
|
unrelated issues), but please file a GH issue so the test gets fixed eventually.
|
||
|
|
||
|
### Commit Messages
|
||
|
|
||
|
Commit messages on the master branch should follow the rule below. PR authors are not
|
||
|
required to use any particular style because the message can be modified at merge time.
|
||
|
Enforcing commit message style is the responsibility of the person merging the PR.
|
||
|
|
||
|
The commit message style we use is similar to the style used by the Go project:
|
||
|
|
||
|
The first line of the change description is conventionally a one-line summary of the
|
||
|
change, prefixed by the primary affected Go package. It should complete the sentence "This
|
||
|
change modifies go-ethereum to _____." The rest of the description elaborates and should
|
||
|
provide context for the change and explain what it does.
|
||
|
|
||
|
Template:
|
||
|
|
||
|
```text
|
||
|
package/path: change XYZ
|
||
|
|
||
|
Longer explanation of the change in the commit. You can use
|
||
|
multiple sentences here. It's usually best to include content
|
||
|
from the PR description in the final commit message.
|
||
|
|
||
|
issue notices, e.g. "Fixes #42353".
|
||
|
```
|
||
|
|
||
|
### Special Situations And How To Deal With Them
|
||
|
|
||
|
As a reviewer, you may find yourself in one of the sitations below. Here's how to deal
|
||
|
with those:
|
||
|
|
||
|
* The author doesn't follow up: ping them after a while (i.e. after a few days). If there
|
||
|
is no further response, close the PR or complete the work yourself.
|
||
|
|
||
|
* Author insists on including refactoring changes alongside bug fix: We can tolerate small
|
||
|
refactorings alongside any change. If you feel lost in the diff, ask the author to
|
||
|
submit the refactoring as an independent PR, or at least as an independent commit in the
|
||
|
same PR.
|
||
|
|
||
|
* Author keeps rejecting your feedback: reviewers have authority to reject any change for technical reasons. If you're unsure, ask the team for a second opinion. You may close the PR if no consensus can be reached.
|
||
|
|
||
|
[effgo]: https://golang.org/doc/effective_go.html
|
||
|
[revcomment]: https://github.com/golang/go/wiki/CodeReviewComments
|