blob: ce5743b2b161864e3bda17e24684fde3bbe3f059 [file] [log] [blame] [view]
Justin Woodd4a06152020-07-01 08:58:02 -07001# Contributing to Project Connected Home over IP
Justin Woodc9bbb252020-03-03 10:03:58 -08002
Justin Wood0a9545e2020-04-20 18:15:21 -07003Want to contribute? Great! First, read this page (including the small print at
4the end). By submitting a pull request, you represent that you have the right to
Justin Woodd4a06152020-07-01 08:58:02 -07005license your contribution to the Zigbee Alliance and the community, and agree by
6submitting the patch that your contributions are licensed under the
7[Apache 2.0 license](./LICENSE). Before submitting the pull request, please make
8sure you have tested your changes and that they follow the project guidelines
9for contributing code.
Justin Woodc9bbb252020-03-03 10:03:58 -080010
Justin Woodd4a06152020-07-01 08:58:02 -070011# Contributing as an Open Source Contributor
Justin Woodc9bbb252020-03-03 10:03:58 -080012
Justin Woodd4a06152020-07-01 08:58:02 -070013As an open source contributor you can report bugs and request features in the
14[Issue Tracker](https://github.com/project-chip/connectedhomeip/issues), as well
15as contribute bug fixes and features that do not impact the Project CHIP
16specification as a pull request. For example: ports of Project CHIP to add APIs
17to alternative programming languages (e.g. Java, JS), hardware ports, or an
18optimized implementation of existing functionality. For features that impact the
19specification, please join Project CHIP work group within the Zigbee Alliance.
20The requirements to become an open source contributor of the
21[Project CHIP Repository](https://github.com/project-chip/connectedhomeip) are:
Justin Wood2eb74872020-03-03 15:36:27 -080022
Justin Wood0a9545e2020-04-20 18:15:21 -070023- Agree to the [Code of Conduct](./CODE_OF_CONDUCT.md)
24- Agree to the [License](./LICENSE)
Justin Woodd4a06152020-07-01 08:58:02 -070025- Have signed the
26 [Zigbee Project CHIP Working Group CLA](https://gist.github.com/clapre/65aa9fc63981da765039e0bb7e8701be)
27
28# Contributing as a Zigbee Alliance Project CHIP Working Group Member
29
30As a participant of the Zigbee Alliance Project CHIP working group, you can
31attend working group meetings, propose changes to the Project CHIP
32specification, and contribute code for approved updates to the specification.
33The requirements to become a member of the
34[Project CHIP Repository](https://github.com/project-chip/connectedhomeip) are:
35
36- Must be a [Participant member](http://www.zigbeealliance.org/join) or higher
37 of the Zigbee Alliance
38- Must be a Project CHIP Working Group member
39- Have signed the Zigbee Project CHIP Work Group CLA
Justin Wood0a9545e2020-04-20 18:15:21 -070040- Have approval from your company's official approver
Justin Wood2eb74872020-03-03 15:36:27 -080041
Justin Woodd4a06152020-07-01 08:58:02 -070042# Bugs
Justin Woodc9bbb252020-03-03 10:03:58 -080043
Justin Wood0a9545e2020-04-20 18:15:21 -070044If you find a bug in the source code, you can help us by
45[submitting a GitHub Issue](https://github.com/project-chip/connectedhomeip/issues/new).
46The best bug reports provide a detailed description of the issue and
47step-by-step instructions for predictably reproducing the issue. Even better,
Justin Woodd4a06152020-07-01 08:58:02 -070048you can
49[submit a Pull Request](https://github.com/project-chip/connectedhomeip/blob/master/CONTRIBUTING.md#submitting-a-pull-request)
50with a fix.
Justin Woodc9bbb252020-03-03 10:03:58 -080051
Justin Woodd4a06152020-07-01 08:58:02 -070052# New Features
Justin Woodc9bbb252020-03-03 10:03:58 -080053
Justin Wood0a9545e2020-04-20 18:15:21 -070054You can request a new feature by
55[submitting a GitHub Issue](https://github.com/project-chip/connectedhomeip/issues/new).
Justin Wood0a9545e2020-04-20 18:15:21 -070056If you would like to implement a new feature, please consider the scope of the
57new feature:
Justin Woodc9bbb252020-03-03 10:03:58 -080058
Justin Wood0a9545e2020-04-20 18:15:21 -070059- _Large feature_: first
60 [submit a GitHub Issue](https://github.com/project-chip/connectedhomeip/issues/new)
61 and communicate your proposal so that the community can review and provide
62 feedback. Getting early feedback will help ensure your implementation work
63 is accepted by the community. This will also allow us to better coordinate
64 our efforts and minimize duplicated effort.
Justin Wood0a9545e2020-04-20 18:15:21 -070065- _Small feature_: can be implemented and directly
Justin Woodd4a06152020-07-01 08:58:02 -070066 [submitted as a Pull Request](https://github.com/project-chip/connectedhomeip/blob/master/CONTRIBUTING.md#submitting-a-pull-request).
Justin Woodc9bbb252020-03-03 10:03:58 -080067
Justin Woodd4a06152020-07-01 08:58:02 -070068# Contributing Code
Justin Woodc9bbb252020-03-03 10:03:58 -080069
Justin Woodd4a06152020-07-01 08:58:02 -070070Project CHIP follows the "Fork-and-Pull" model for accepting contributions.
Justin Woodc9bbb252020-03-03 10:03:58 -080071
72### Initial Setup
73
74Setup your GitHub fork and continuous-integration services:
75
Justin Woodd4a06152020-07-01 08:58:02 -0700761. Fork the
77 [Project CHIP repository](https://github.com/project-chip/connectedhomeip) by
78 clicking "Fork" on the web UI.
Justin Woodc9bbb252020-03-03 10:03:58 -080079
802. All contributions must pass all checks and reviews to be accepted.
81
82Setup your local development environment:
83
84```bash
85# Clone your fork
86git clone git@github.com:<username>/connectedhomeip.git
87
88# Configure upstream alias
89git remote add upstream git@github.com:project-chip/connectedhomeip.git
90```
91
92### Submitting a Pull Request
93
94#### Branch
95
96For each new feature, create a working branch:
97
98```bash
99# Create a working branch for your new feature
100git branch --track <branch-name> origin/master
101
102# Checkout the branch
103git checkout <branch-name>
104```
105
106#### Create Commits
107
108```bash
109# Add each modified file you'd like to include in the commit
110git add <file1> <file2>
111
112# Create a commit
113git commit
114```
115
116This will open up a text editor where you can craft your commit message.
117
118#### Upstream Sync and Clean Up
119
120Prior to submitting your pull request, you might want to do a few things to
121clean up your branch and make it as simple as possible for the original
122repository's maintainer to test, accept, and merge your work.
123
124If any commits have been made to the upstream master branch, you should rebase
125your development branch so that merging it will be a simple fast-forward that
126won't require any conflict resolution work.
127
128```bash
129# Fetch upstream master and merge with your repository's master branch
130git checkout master
131git pull upstream master
132
133# If there were any new commits, rebase your development branch
134git checkout <branch-name>
135git rebase master
136```
137
138Now, it may be desirable to squash some of your smaller commits down into a
139small number of larger more cohesive commits. You can do this with an
140interactive rebase:
141
142```bash
143# Rebase all commits on your development branch
144git checkout
145git rebase -i master
146```
147
148This will open up a text editor where you can specify which commits to squash.
149
Justin Woodc9bbb252020-03-03 10:03:58 -0800150#### Push and Test
151
152```bash
153# Checkout your branch
154git checkout <branch-name>
155
156# Push to your GitHub fork:
157git push origin <branch-name>
158```
159
Justin Wood0a9545e2020-04-20 18:15:21 -0700160This will trigger the continuous-integration checks. You can view the results in
161the respective services. Note that the integration checks will report failures
162on occasion.
Justin Woodc9bbb252020-03-03 10:03:58 -0800163
Justin Wood7b116512020-03-03 16:13:59 -0800164### Review Requirements
Justin Wood0a9545e2020-04-20 18:15:21 -0700165
Justin Woodd4a06152020-07-01 08:58:02 -0700166#### Documentation Best Practices
Justin Wood7b116512020-03-03 16:13:59 -0800167
Justin Woodd4a06152020-07-01 08:58:02 -0700168Project CHIP uses Doxygen to markup (or markdown) all C, C++, Objective C,
169Objective C++, Perl, Python, and Java code. Read our
170[Doxygen Best Practices, Conventions, and Style](https://github.com/project-chip/connectedhomeip/blob/master/docs/style/DOXYGEN.adoc)
Justin Woodc9bbb252020-03-03 10:03:58 -0800171
172#### Submit Pull Request
173
Justin Wood0a9545e2020-04-20 18:15:21 -0700174Once you've validated the CI results, go to the page for your fork on GitHub,
175select your development branch, and click the pull request button. If you need
176to make any adjustments to your pull request, just push the updates to GitHub.
177Your pull request will automatically track the changes on your development
178branch and update.
Justin Woodc9bbb252020-03-03 10:03:58 -0800179
Justin Wood95174b42020-03-03 15:58:18 -0800180#### Merge Requirements
181
Justin Woodd4a06152020-07-01 08:58:02 -0700182- Github Workflows pass
183- Builds pass
184- Tests pass
Justin Wood0a9545e2020-04-20 18:15:21 -0700185- Linting passes
186- Code style passes
Justin Wood95174b42020-03-03 15:58:18 -0800187
Justin Woodd4a06152020-07-01 08:58:02 -0700188When can I merge? After these have been satisfied, a reviewer will merge the PR
189into master
Justin Woodc9bbb252020-03-03 10:03:58 -0800190
Justin Woodd4a06152020-07-01 08:58:02 -0700191#### Documentation
Justin Woodc9bbb252020-03-03 10:03:58 -0800192
Justin Woodd4a06152020-07-01 08:58:02 -0700193Documentation undergoes the same review process as code See the
194[Documentation Style Guide](https://github.com/project-chip/connectedhomeip/blob/master/docs/STYLE_GUIDE.md)
195for more information on how to author and format documentation for contribution.