blob: a71219f560671be7833c6be6a20931bf3333e2ee [file] [log] [blame] [view]
clapre0a06d852021-05-28 17:11:00 -04001# Contributing to Matter (formerly Project CHIP)
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
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +02005license your contribution to the Connectivity Standards Alliance and the
6community, and agree by submitting the patch that your contributions are
7licensed under the [Apache 2.0 license](./LICENSE). Before submitting the pull
8request, please make sure you have tested your changes and that they follow the
9project guidelines for 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
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +020015as contribute bug fixes and features that do not impact Matter specification as
16a pull request. For example: ports of Matter to add APIs to alternative
17programming languages (e.g. Java, JS), hardware ports, or an optimized
18implementation of existing functionality. For features that impact the
19specification, please join Matter work group within the Connectivity Standards
20Alliance. The requirements to become an open source contributor of the
21[Matter 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
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +020026 [Matter Working Group CLA](https://gist.github.com/clapre/65aa9fc63981da765039e0bb7e8701be)
Justin Woodd4a06152020-07-01 08:58:02 -070027
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +020028# Contributing as a Connectivity Standards Alliance Matter Working Group Member
Justin Woodd4a06152020-07-01 08:58:02 -070029
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +020030As a participant of the Connectivity Standards Alliance Matter Working Group,
31you can attend Working Group meetings, propose changes to the Matter
Justin Woodd4a06152020-07-01 08:58:02 -070032specification, and contribute code for approved updates to the specification.
33The requirements to become a member of the
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +020034[Matter Repository](https://github.com/project-chip/connectedhomeip) are:
Justin Woodd4a06152020-07-01 08:58:02 -070035
36- Must be a [Participant member](http://www.zigbeealliance.org/join) or higher
clapre0a06d852021-05-28 17:11:00 -040037 of the Connectivity Standards Alliance
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +020038- Must be a Matter Working Group member
39- Have signed the Alliance Matter Working 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
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +020070Matter 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
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +0200761. Fork the [Matter repository](https://github.com/project-chip/connectedhomeip)
77 by clicking "Fork" on the web UI.
Justin Woodc9bbb252020-03-03 10:03:58 -080078
792. All contributions must pass all checks and reviews to be accepted.
80
81Setup your local development environment:
82
83```bash
84# Clone your fork
85git clone git@github.com:<username>/connectedhomeip.git
86
87# Configure upstream alias
88git remote add upstream git@github.com:project-chip/connectedhomeip.git
89```
90
91### Submitting a Pull Request
92
93#### Branch
94
95For each new feature, create a working branch:
96
97```bash
98# Create a working branch for your new feature
99git branch --track <branch-name> origin/master
100
101# Checkout the branch
102git checkout <branch-name>
103```
104
105#### Create Commits
106
107```bash
108# Add each modified file you'd like to include in the commit
109git add <file1> <file2>
110
111# Create a commit
112git commit
113```
114
115This will open up a text editor where you can craft your commit message.
116
117#### Upstream Sync and Clean Up
118
119Prior to submitting your pull request, you might want to do a few things to
120clean up your branch and make it as simple as possible for the original
121repository's maintainer to test, accept, and merge your work.
122
123If any commits have been made to the upstream master branch, you should rebase
124your development branch so that merging it will be a simple fast-forward that
125won't require any conflict resolution work.
126
127```bash
128# Fetch upstream master and merge with your repository's master branch
129git checkout master
130git pull upstream master
131
132# If there were any new commits, rebase your development branch
133git checkout <branch-name>
134git rebase master
135```
136
137Now, it may be desirable to squash some of your smaller commits down into a
138small number of larger more cohesive commits. You can do this with an
139interactive rebase:
140
141```bash
142# Rebase all commits on your development branch
Matt Smithe9d068f2021-06-17 02:21:03 +0800143git checkout <branch-name>
Justin Woodc9bbb252020-03-03 10:03:58 -0800144git rebase -i master
145```
146
147This will open up a text editor where you can specify which commits to squash.
148
Justin Woodc9bbb252020-03-03 10:03:58 -0800149#### Push and Test
150
151```bash
152# Checkout your branch
153git checkout <branch-name>
154
155# Push to your GitHub fork:
156git push origin <branch-name>
157```
158
Justin Wood0a9545e2020-04-20 18:15:21 -0700159This will trigger the continuous-integration checks. You can view the results in
160the respective services. Note that the integration checks will report failures
161on occasion.
Justin Woodc9bbb252020-03-03 10:03:58 -0800162
Justin Wood7b116512020-03-03 16:13:59 -0800163### Review Requirements
Justin Wood0a9545e2020-04-20 18:15:21 -0700164
Justin Woodd4a06152020-07-01 08:58:02 -0700165#### Documentation Best Practices
Justin Wood7b116512020-03-03 16:13:59 -0800166
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +0200167Matter uses Doxygen to markup (or markdown) all C, C++, Objective C, Objective
168C++, Perl, Python, and Java code. Read our
Justin Woodd4a06152020-07-01 08:58:02 -0700169[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 -0800170
171#### Submit Pull Request
172
Justin Wood0a9545e2020-04-20 18:15:21 -0700173Once you've validated the CI results, go to the page for your fork on GitHub,
174select your development branch, and click the pull request button. If you need
175to make any adjustments to your pull request, just push the updates to GitHub.
176Your pull request will automatically track the changes on your development
177branch and update.
Justin Woodc9bbb252020-03-03 10:03:58 -0800178
Justin Wood95174b42020-03-03 15:58:18 -0800179#### Merge Requirements
180
Justin Woodd4a06152020-07-01 08:58:02 -0700181- Github Workflows pass
182- Builds pass
183- Tests pass
Justin Wood0a9545e2020-04-20 18:15:21 -0700184- Linting passes
185- Code style passes
Justin Wood95174b42020-03-03 15:58:18 -0800186
Justin Woodd4a06152020-07-01 08:58:02 -0700187When can I merge? After these have been satisfied, a reviewer will merge the PR
188into master
Justin Woodc9bbb252020-03-03 10:03:58 -0800189
Justin Woodd4a06152020-07-01 08:58:02 -0700190#### Documentation
Justin Woodc9bbb252020-03-03 10:03:58 -0800191
Justin Woodd4a06152020-07-01 08:58:02 -0700192Documentation undergoes the same review process as code See the
193[Documentation Style Guide](https://github.com/project-chip/connectedhomeip/blob/master/docs/STYLE_GUIDE.md)
194for more information on how to author and format documentation for contribution.
Justin Wood8839e4c2021-10-22 17:27:05 -0700195
196## Merge Processes
197
198Merges require at least 3 approvals from unique require-reviewers lists, and all
199CI tests passing.
200
201### Shorter Reviews
202
203Development Lead & Vice Leads can merge a change with fewer then the required
204approvals have been submitted.
205
206A separate "fast track" label will be created that will only require a single
207checkbox to be set, this label shall only be set by the Development Lead, and/or
208Vice Lead (unless they’re both unavailable, in which case a replacement can be
209temporarily appointed)
210
211"Day" here means "business day" (i.e. PRs on friday do not get fast-tracked
212faster).
213
214### Fast track types
215
216### Trivial changes
217
218Small changes or changes that do not affect the main functionality of the code
219can be fast tracked immediately. Examples:
220
221- Adding/removing documentation (.md files)
222- Adding tests (may include small reorganization/method adding/changes to
223 enable testability):
224 - certification tests
225 - stability tests
226 - integration tests
227 - functional tests
228 - Test scripts
229 - Additional tests following a pattern (e.g. YAML tests)
230- Adding/updating/fixing tooling to aid in development
231- Re-running code generation
232- Code readability refactors:
233 - renaming enum/classes/structure members
234 - moving constant header location
235 - Obviously trivial build rule changes (e.g. adding missing files to build
236 rules)
237 - Changing comments
238 - Adding/removing includes (include what you need and only what you need
239 rules)
240- Pulling new third-party repo files
241- Platform vendors/maintainers adding platform features/logic/bug fixes to
242 their own platforms
243- Most changes to existing docker files (pulling new versions, reorganizing)
244- Most changes to new dockerfile version in workflows
245
246#### Fast track changes
247
248Larger functionality changes are allowed to be fast tracked with these
249requirements/restrictions:
250
251- Require at least 1 day to have passed since the creation of the PR
252- Require at least 1 checkmark from someone familiar with the code or problem
253 space
254 - This requirement shall be dropped after a PR is 3 days old with stale or
255 no feedback.
256- Code is sufficiently covered by automated tests (or impossible to
257 automatically test with a very solid reason for this - e.g. changes to BLE
258 parameters cannot be automatically tested, but should have been manually
259 verified)
260
261Fast tracking these changes will involve resolving any obviously 'resolved'
262comments (judgment call here: were they replied to or addressed) and merging the
263change.
264
265Any "request for changes" marker will always be respected unless obviously
266resolved (i.e. author marked "requesting changes because of X and X was done in
267the PR")
268
269- This requirement shall be dropped after a PR is 3 days old with stale or no
270 feedback.