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 |