1*cc02d7e2SAndroid Build Coastguard Worker# Contributing to gRPC: A Step-By-Step Guide 2*cc02d7e2SAndroid Build Coastguard Worker 3*cc02d7e2SAndroid Build Coastguard WorkerNote: This document is not meant for Google employees. 4*cc02d7e2SAndroid Build Coastguard Worker 5*cc02d7e2SAndroid Build Coastguard Worker## Prerequisites 6*cc02d7e2SAndroid Build Coastguard Worker 7*cc02d7e2SAndroid Build Coastguard WorkerTo contribute to the gRPC codebase, you need the following: 8*cc02d7e2SAndroid Build Coastguard Worker 9*cc02d7e2SAndroid Build Coastguard Worker1. An 10*cc02d7e2SAndroid Build Coastguard Worker [active GitHub account](https://docs.github.com/en/get-started/quickstart/creating-an-account-on-github) 11*cc02d7e2SAndroid Build Coastguard Worker1. [An understanding of Git and GitHub](https://docs.github.com/en/get-started/using-git/about-git) 12*cc02d7e2SAndroid Build Coastguard Worker1. [Knowledge of how to fork a repository, clone a repository, merge, rebase, 13*cc02d7e2SAndroid Build Coastguard Worker resolve, push, pull, fetch 14*cc02d7e2SAndroid Build Coastguard Worker etc.](https://docs.github.com/en/get-started/using-git/about-git) 15*cc02d7e2SAndroid Build Coastguard Worker1. [git installed and working on your machine](https://github.com/git-guides/install-git) 16*cc02d7e2SAndroid Build Coastguard Worker1. Knowledge of the language being used, which can be C++, Python, Ruby, 17*cc02d7e2SAndroid Build Coastguard Worker Objective-C, PHP, or C#. 18*cc02d7e2SAndroid Build Coastguard Worker 19*cc02d7e2SAndroid Build Coastguard Worker## Steps to Contribute gRPC C++ Code 20*cc02d7e2SAndroid Build Coastguard Worker 21*cc02d7e2SAndroid Build Coastguard WorkerThe GitHub repository for the C-based gRPC (C++, Python, Ruby, Objective-C, PHP, C#) 22*cc02d7e2SAndroid Build Coastguard Workeris at https://github.com/grpc/grpc. 23*cc02d7e2SAndroid Build Coastguard Worker 24*cc02d7e2SAndroid Build Coastguard Worker### Fork and Clone the Repository 25*cc02d7e2SAndroid Build Coastguard Worker 26*cc02d7e2SAndroid Build Coastguard WorkerIf you want to contribute to the gRPC code base, you need to make a fork of the 27*cc02d7e2SAndroid Build Coastguard Workerrepository. 28*cc02d7e2SAndroid Build Coastguard Worker 29*cc02d7e2SAndroid Build Coastguard Worker1. Create your 30*cc02d7e2SAndroid Build Coastguard Worker[own fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) 31*cc02d7e2SAndroid Build Coastguard Workerfrom https://github.com/grpc/grpc. 32*cc02d7e2SAndroid Build Coastguard Worker 33*cc02d7e2SAndroid Build Coastguard Worker  34*cc02d7e2SAndroid Build Coastguard Worker 35*cc02d7e2SAndroid Build Coastguard Worker1. [Clone your fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo#cloning-your-forked-repository) 36*cc02d7e2SAndroid Build Coastguard Workeron your local machine. 37*cc02d7e2SAndroid Build Coastguard Worker 38*cc02d7e2SAndroid Build Coastguard Worker### Prepare and Push Your Commit 39*cc02d7e2SAndroid Build Coastguard Worker 40*cc02d7e2SAndroid Build Coastguard Worker1. In your cloned repository, create a new branch from `master`. 41*cc02d7e2SAndroid Build Coastguard Worker1. Then prepare a commit for the files that you want to contribute. 42*cc02d7e2SAndroid Build Coastguard Worker1. Commit to this branch. 43*cc02d7e2SAndroid Build Coastguard Worker1. Push the commit to your fork on GitHub. 44*cc02d7e2SAndroid Build Coastguard Worker 45*cc02d7e2SAndroid Build Coastguard WorkerTake care that your commits are aligned with these 46*cc02d7e2SAndroid Build Coastguard Worker[guidelines](https://github.com/grpc/grpc/blob/master/CONTRIBUTING.md#guidelines-for-pull-requests). 47*cc02d7e2SAndroid Build Coastguard Worker 48*cc02d7e2SAndroid Build Coastguard Worker### Prepare a Pull Request 49*cc02d7e2SAndroid Build Coastguard Worker 50*cc02d7e2SAndroid Build Coastguard WorkerAfter pushing your commit, visit https://github.com/grpc/grpc . If the 51*cc02d7e2SAndroid Build Coastguard Workerforking, branch creation, commit and push have been successful, you will see 52*cc02d7e2SAndroid Build Coastguard Workerthe following message: 53*cc02d7e2SAndroid Build Coastguard Worker 54*cc02d7e2SAndroid Build Coastguard Worker 55*cc02d7e2SAndroid Build Coastguard Worker 56*cc02d7e2SAndroid Build Coastguard WorkerTake care to allow edits by maintainers. If there is a specific issue 57*cc02d7e2SAndroid Build Coastguard Workerwith your pull request, the maintainer can help if needed. This access to help will reduce 58*cc02d7e2SAndroid Build Coastguard Workerthe turnaround time for your submission. 59*cc02d7e2SAndroid Build Coastguard Worker 60*cc02d7e2SAndroid Build Coastguard Worker 61*cc02d7e2SAndroid Build Coastguard Worker 62*cc02d7e2SAndroid Build Coastguard WorkerCreate a pull request. 63*cc02d7e2SAndroid Build Coastguard Worker 64*cc02d7e2SAndroid Build Coastguard Worker### Pull Request Status - Safe Review 65*cc02d7e2SAndroid Build Coastguard Worker 66*cc02d7e2SAndroid Build Coastguard WorkerOnce the pull request is ready, you must wait for a reviewer to be 67*cc02d7e2SAndroid Build Coastguard Workerassigned to your pull request. 68*cc02d7e2SAndroid Build Coastguard Worker 69*cc02d7e2SAndroid Build Coastguard WorkerIf you see *Not Covered* in the EasyCLA screen, as shown in the following image, 70*cc02d7e2SAndroid Build Coastguard Workerclick on the mentioned link to start the authorization process. 71*cc02d7e2SAndroid Build Coastguard Worker 72*cc02d7e2SAndroid Build Coastguard Worker 73*cc02d7e2SAndroid Build Coastguard Worker 74*cc02d7e2SAndroid Build Coastguard WorkerYou will see a series of screens: 75*cc02d7e2SAndroid Build Coastguard Worker 76*cc02d7e2SAndroid Build Coastguard Worker1. Select *Authorize LF-Engineering: 77*cc02d7e2SAndroid Build Coastguard Worker 78*cc02d7e2SAndroid Build Coastguard Worker 79*cc02d7e2SAndroid Build Coastguard Worker 80*cc02d7e2SAndroid Build Coastguard Worker1. Select your contributor type: 81*cc02d7e2SAndroid Build Coastguard Worker 82*cc02d7e2SAndroid Build Coastguard Worker 83*cc02d7e2SAndroid Build Coastguard Worker 84*cc02d7e2SAndroid Build Coastguard Worker1. Select *SIGN CLA*: 85*cc02d7e2SAndroid Build Coastguard Worker 86*cc02d7e2SAndroid Build Coastguard Worker 87*cc02d7e2SAndroid Build Coastguard Worker 88*cc02d7e2SAndroid Build Coastguard WorkerSome time after you've digitally signed the document, the EasyCLA will appear as 89*cc02d7e2SAndroid Build Coastguard Worker*Covered*. 90*cc02d7e2SAndroid Build Coastguard Worker 91*cc02d7e2SAndroid Build Coastguard Worker 92*cc02d7e2SAndroid Build Coastguard Worker 93*cc02d7e2SAndroid Build Coastguard Worker After a few hours, you will notice a new "assignee" assigned to the pull request. 94*cc02d7e2SAndroid Build Coastguard Worker 95*cc02d7e2SAndroid Build Coastguard Worker 96*cc02d7e2SAndroid Build Coastguard Worker 97*cc02d7e2SAndroid Build Coastguard WorkerAfter a reviewer is assigned to you, they will help with the next 98*cc02d7e2SAndroid Build Coastguard Workersteps, which are as follows: 99*cc02d7e2SAndroid Build Coastguard Worker 100*cc02d7e2SAndroid Build Coastguard Worker1. You complete the code review and address the comments. 101*cc02d7e2SAndroid Build Coastguard Worker1. Your reviewer may add a few labels as needed. 102*cc02d7e2SAndroid Build Coastguard Worker 103*cc02d7e2SAndroid Build Coastguard Worker### Pull Request Status - Green 104*cc02d7e2SAndroid Build Coastguard Worker 105*cc02d7e2SAndroid Build Coastguard WorkerOnce you have approval from the reviewer, check if the tests are running. After 106*cc02d7e2SAndroid Build Coastguard Workerthe tests are complete, look at the status of all the tests. If 107*cc02d7e2SAndroid Build Coastguard Workereverything is green, everything is good. But usually some failures exist. If 108*cc02d7e2SAndroid Build Coastguard Workerthere are failures, select each failure. The selection will take you to a page 109*cc02d7e2SAndroid Build Coastguard Workerthat has error details. Try to fix the issue. 110*cc02d7e2SAndroid Build Coastguard Worker 111*cc02d7e2SAndroid Build Coastguard Worker### Pull Request Approval 112*cc02d7e2SAndroid Build Coastguard Worker 113*cc02d7e2SAndroid Build Coastguard WorkerFor pull requests that are non-trivial, there is a thorough code review process. 114*cc02d7e2SAndroid Build Coastguard WorkerYou can read more about the process and requirements 115*cc02d7e2SAndroid Build Coastguard Worker[here](https://github.com/grpc/grpc/blob/master/CONTRIBUTING.md#guidelines-for-pull-requests). 116*cc02d7e2SAndroid Build Coastguard Worker 117*cc02d7e2SAndroid Build Coastguard WorkerAfter you fix the code review, you will finally get an approval. After getting 118*cc02d7e2SAndroid Build Coastguard Workerapproval, you can submit the pull request. 119*cc02d7e2SAndroid Build Coastguard Worker 120*cc02d7e2SAndroid Build Coastguard Worker 121*cc02d7e2SAndroid Build Coastguard Worker 122*cc02d7e2SAndroid Build Coastguard Worker### Submission 123*cc02d7e2SAndroid Build Coastguard Worker 124*cc02d7e2SAndroid Build Coastguard WorkerYou **cannot** do submission or merge of a pull request through Github. 125*cc02d7e2SAndroid Build Coastguard Worker 126*cc02d7e2SAndroid Build Coastguard Worker 127*cc02d7e2SAndroid Build Coastguard Worker 128*cc02d7e2SAndroid Build Coastguard WorkerAfter you have approval from a reviewer, a Google employee will trigger 129*cc02d7e2SAndroid Build Coastguard Workerthe submission process. When the submission happens: 130*cc02d7e2SAndroid Build Coastguard Worker 131*cc02d7e2SAndroid Build Coastguard Worker1. A commit with your changes, along with a few additional formatting changes, will 132*cc02d7e2SAndroid Build Coastguard Worker be committed to the `grpc/master` branch. 133*cc02d7e2SAndroid Build Coastguard Worker 134*cc02d7e2SAndroid Build Coastguard Worker 135*cc02d7e2SAndroid Build Coastguard Worker1. The pull request you originally created will be closed. 136*cc02d7e2SAndroid Build Coastguard Worker 137*cc02d7e2SAndroid Build Coastguard Worker 138