xref: /aosp_15_r20/external/grpc-grpc/CONTRIBUTING_STEPS.md (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
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      ![Screenshot of creating fork using a non-google account.](doc/images/img/grpc-create-fork.png)
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![Screenshot of Github UI to help to create a pull request.](doc/images/img/grpc-compare-and-pull-request.png)
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![Screenshot of Github UI to help to create a Pull Request.](doc/images/img/grpc-pull-request-details.png)
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![Screenshot of waiting for safe review](doc/images/img/grpc-tests.png)
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![Screenshot of EasyCLA Step 1](doc/images/img/grpc-easycla-authorize.png)
79*cc02d7e2SAndroid Build Coastguard Worker
80*cc02d7e2SAndroid Build Coastguard Worker1.  Select your contributor type:
81*cc02d7e2SAndroid Build Coastguard Worker
82*cc02d7e2SAndroid Build Coastguard Worker![Screenshot of EasyCLA Step 2](doc/images/img/grpc-contributor-type.png)
83*cc02d7e2SAndroid Build Coastguard Worker
84*cc02d7e2SAndroid Build Coastguard Worker1.  Select *SIGN CLA*:
85*cc02d7e2SAndroid Build Coastguard Worker
86*cc02d7e2SAndroid Build Coastguard Worker![Screenshot of EasyCLA Step 3](doc/images/img/grpc-sign-cla.png)
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![Screenshot of EasyCLA Step 5](doc/images/img/grpc-easycla-covered.png)
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![Screenshot after an assignee is added](doc/images/img/grpc-assignee.png)
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![Pull request approved and labelled](doc/images/img/grpc-review-complete.png)
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![Pull request approved and labelled](doc/images/img/grpc-wait-for-merge.png)
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![Copybara commit](doc/images/img/grpc-copybara-commit.png)
134*cc02d7e2SAndroid Build Coastguard Worker
135*cc02d7e2SAndroid Build Coastguard Worker1.  The pull request you originally created will be closed.
136*cc02d7e2SAndroid Build Coastguard Worker![Pull request closed by copybara](doc/images/img/grpc-pr-closed-by-copybara.png)
137*cc02d7e2SAndroid Build Coastguard Worker
138