1.. _project_roles:
2
3TSC Project Roles
4*****************
5
6Main Roles
7##########
8
9TSC projects generally will involve *Maintainers*, *Collaborators*, and
10*Contributors*:
11
12**Maintainer**: lead Collaborators on an area identified by the TSC (e.g.
13Architecture, code subsystems, etc.). Maintainers shall also serve as the
14area’s representative on the TSC as needed. Maintainers may become voting
15members of the TSC under the guidelines stated in the project Charter.
16
17**Collaborator**: A highly involved Contributor in one or more areas.
18May become a Maintainer with approval of existing TSC voting members.
19
20**Contributor**: anyone in the community that contributes code or
21documentation to the project. Contributors may become Collaborators
22by approval of the existing Collaborators and Maintainers of the
23particular code base areas or subsystems.
24
25
26.. _contributor:
27
28Contributor
29+++++++++++
30
31A *Contributor* is a developer who wishes to contribute to the project,
32at any level.
33
34Contributors are granted the following rights and responsibilities:
35
36* Right to contribute code, documentation, translations, artwork, etc.
37* Right to report defects (bugs) and suggestions for enhancement.
38* Right to participate in the process of reviewing contributions by others.
39* Right to initiate and participate in discussions in any communication
40  methods.
41* Right to approach any member of the community with matters they believe
42  to be important.
43* Right to participate in the feature development process.
44* Responsibility to abide by decisions, once made. They are welcome to
45  provide new, relevant information to reopen decisions.
46* Responsibility for issues and bugs introduced by one’s own contributions.
47* Responsibility to respect the rules of the community.
48* Responsibility to provide constructive advice whenever participating in
49  discussions and in the review of contributions.
50* Responsibility to follow the project’s code of conduct
51  (https://github.com/zephyrproject-rtos/zephyr/blob/main/CODE_OF_CONDUCT.md)
52
53Contributors are initially only given `Read
54<https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-permission-levels-for-an-organization>`_
55access to the Zephyr GitHub repository. Specifically, at the Read access level,
56Contributors are not allowed to assign reviewers to their own pull requests. An
57automated process will assign reviewers. You may also share the pull request on
58the `Zephyr devel mailing list <https://lists.zephyrproject.org/g/devel>`_ or on
59the `Zephyr Discord Server <https://chat.zephyrproject.org>`_.
60
61Contributors who show dedication and skill are granted the Triage permission
62level to the Zephyr GitHub repository.
63
64You may nominate yourself, or another GitHub user, for promotion to the Triage
65permission level by creating a GitHub issue, using the :github:`nomination
66template <new?assignees=&labels=Role+Nomination&template=006_nomination.md&title=>`.
67
68Contributors granted the Triage permission level are permitted to add reviewers
69to a pull request and can be added as a reviewer by other GitHub users.
70Contributor votes on pull requests are not counted with respect to accepting and
71merging a pull request. However, Contributors comments and requested changes
72should still be considered by the pull request author.
73
74Collaborator
75++++++++++++
76
77A *Collaborator* is a Contributor who is also responsible for the maintenance
78of Zephyr source code. Their opinions weigh more when decisions are made, in a
79fully meritocratic fashion.
80
81Collaborators have the following rights and responsibilities,
82in addition to those listed for Contributors:
83
84* Right to set goals for the short and medium terms for the project being
85  maintained, alongside the Maintainer.
86* Responsibility to participate in the feature development process.
87* Responsibility to review relevant code changes within reasonable time.
88* Responsibility to ensure the quality of the code to expected levels.
89* Responsibility to participate in community discussions.
90* Responsibility to mentor new contributors when appropriate
91* Responsibility to participate in the quality verification and release
92  process, when those happen.
93
94Contributors are promoted to the Collaborator role by adding the GitHub user
95name to one or more ``collaborators`` sections of the :ref:`maintainers_file` in
96the Zephyr repository.
97
98Collaborator votes on pull requests can block or approve the pull request.
99
100Maintainer
101++++++++++
102
103A *Maintainer* is a Collaborator who is also responsible for knowing,
104directing and anticipating the needs of a given zephyr source code area.
105
106Maintainers have the following rights and responsibilities,
107in addition to those listed for Contributors and Collaborators:
108
109* Right to set the overall architecture of the relevant subsystems or areas
110  of involvement.
111* Right to make decisions in the relevant subsystems or areas of involvement,
112  in conjunction with the collaborators and submitters.
113  See :ref:`pr_technical_escalation`.
114* Responsibility to convey the direction of the relevant subsystem or areas to
115  the TSC
116* Responsibility to ensure all contributions of the project have been reviewed
117  within reasonable time.
118* Responsibility to enforce the code of conduct.
119
120Contributors or Collaborators are promoted to the Maintainer role by adding the
121GitHub user name to one or more ``maintainers`` sections of the
122:ref:`maintainers_file` in the Zephyr repository.
123
124Maintainer votes on pull requests can block or approve the pull request.
125
126Role Retirement
127###############
128
129* Individuals elected to the following Project roles, including, Maintainer,
130  Release Engineering Team member, Release Manager, but are no longer engaged
131  in the project as described by the rights and responsibilities of that role,
132  may be requested by the TSC to retire from the role they are elected.
133* Such a request needs to be raised as a motion in the TSC and be
134  approved by the TSC voting members.
135  By approval of the TSC the individual is considered to be retired
136  from the role they have been elected.
137* The above applies to elected TSC Project roles that may be defined
138  in addition.
139
140
141Teams and Supporting Activities
142###############################
143
144Assignee
145++++++++
146
147An *Assignee* is one of the maintainers of a subsystem or code being changed.
148Assignees are set either automatically based on the code being changed or set
149by the other Maintainers, the Release Engineering team can set an assignee when
150the latter is not possible.
151
152* Right to dismiss stale reviews and seek reviews from additional maintainers,
153  developers and contributors
154* Right to block pull requests from being merged
155* Responsibility to re-assign a pull request if they are the original submitter
156  of the code
157* Responsibility to drive the pull request to a mergeable state
158* Solicit approvals from maintainers of the subsystems affected
159* Responsibility to drive the :ref:`pr_technical_escalation` process
160
161.. _release-engineering-team:
162
163Release Engineering Team
164++++++++++++++++++++++++
165
166A team of active Maintainers involved in multiple areas.
167
168* The members of the Release Engineering team are expected to fill
169  the Release Manager role based on a defined cadence and selection process.
170* The cadence and selection process are defined by the Release Engineering
171  team and are approved by the TSC.
172* The team reports directly into the TSC.
173
174Release Engineering team has the following rights and responsibilities:
175
176* Right to merge code changes to the zephyr tree following the project rules.
177* Right to revert any changes that have broken the code base
178* Right to close any stale changes after <N> months of no activity
179* Responsibility to take directions from the TSC and follow them.
180* Responsibility to coordinate code merges with maintainers.
181* Responsibility to merge all contributions regardless of their
182  origin and area if they have been approved by the respective
183  maintainers and follow the merge criteria of a change.
184* Responsibility to keep the Zephyr code base in a working and passing state
185  (as per CI)
186
187Joining the Release Engineering team
188
189* Maintainers highly involved in the project may be nominated
190  by a TSC voting member to join the Release Engineering team.
191  Nominees may become members of the team by approval of the
192  existing TSC voting members.
193* To ensure a functional Release Engineering team the TSC shall
194  periodically review the team’s followed processes,
195  the appropriate size, and the membership
196  composition (ensure, for example, that team members are
197  geographically distributed across multiple locations and
198  time-zones).
199
200
201Release Manager
202+++++++++++++++
203
204A *Maintainer* responsible for driving a specific release to
205completion following the milestones and the roadmap of the
206project for this specific release.
207
208* TSC has to approve a release manager.
209
210A Release Manager is a member of the Release Engineering team and has
211the rights and responsibilities of that team in addition to
212the following:
213
214* Right to manage and coordinate all code merges after the
215  code freeze milestone (M3, see `program management overview <https://wiki.zephyrproject.org/Program-Management>`_.)
216* Responsibility to drive and coordinate the triaging process
217  for the release
218* Responsibility to create the release notes of the release
219* Responsibility to notify all stakeholders of the project,
220  including the community at large about the status of the
221  release in a timely manner.
222* Responsibility to coordinate with QA and validation and
223  verify changes either directly or through QA before major
224  changes and major milestones.
225
226Roles / Permissions
227+++++++++++++++++++
228
229.. table:: Project Roles vs GitHub Permissions
230    :widths: 20 20 10 10 10 10 10
231    :align: center
232
233    ================ =================== =========== ================ =========== =========== ============
234          ..             ..               **Admin**  **Merge Rights**   Member      Owner     Collaborator
235    ---------------- ------------------- ----------- ---------------- ----------- ----------- ------------
236    Main Roles       Contributor                                                                 x
237    ---------------- ------------------- ----------- ---------------- ----------- ----------- ------------
238        ..           Collaborator                                       x
239    ---------------- ------------------- ----------- ---------------- ----------- ----------- ------------
240        ..           Maintainer                                         x
241    Supportive Roles QA/Validation                                      x                        x
242        ..           DevOps                   **x**
243        ..           System Admin             **x**                                      x
244        ..           Release Engineering      **x**      **x**          x
245
246    ================ =================== =========== ================ =========== =========== ============
247
248
249.. _maintainers_file:
250
251MAINTAINERS File
252################
253
254Generic guidelines for deciding and filling in the Maintainers' list
255
256* The :zephyr_file:`MAINTAINERS.yml` file shall replace the
257  :zephyr_file:`CODEOWNERS` file and will be used for both setting assignees and
258  reviewers.
259* We should keep the granularity of code maintainership at a manageable level
260* We should be looking for maintainers for areas of code that
261  are orphaned (i.e. without an explicit maintainer)
262
263  * Un-maintained areas should be indicated clearly in the MAINTAINERS file
264
265* All submitted pull requests should have an assignee
266* We Introduce an area/subsystem hierarchy to address the above point
267
268  * Parent-area maintainer should be acting as default substitute/fallback
269    assignee for un-maintained sub-areas
270  * Area maintainer gets precedence over parent-area maintainer
271
272* Pull requests may be re-assigned if this is needed or more appropriate
273
274  * Re-assigned by original assignee (see “Assignee” slide)
275
276* In general, updates to the MAINTAINERS file should be
277  in a standalone commit alongside other changes introducing new files and
278  directories to the tree.
279* Major changes to the file, including the addition of new areas with new maintainers
280  should come in as standalone pull requests and require TSC review.
281* If additional review by the TSC is required, the maintainers of the file
282  should send the requested changes to the TSC and give members of the TSC two
283  (2) days to object to any of the changes to maintainership of areas or the
284  addition of new maintainers or areas.
285* Path, collaborator and name changes do not require a review by the TSC.
286* Addition of new areas without a maintainer do not require review by the TSC.
287* The MAINTAINERS file itself shall have a maintainer
288* Architectures, core components, sub-systems, samples, tests
289
290  * Each area shall have an explicit maintainer
291
292* Boards (incl relevant samples, tests), SoCs (incl DTS)
293  * May have a maintainer, shall have a higher-level platform maintainer
294* Drivers
295
296  * Shall have a driver-area (and API) maintainer
297  * Could have individual driver implementation
298    maintainers but preferably collaborator/contributors
299  * In the above case, platform-specific PRs may be
300    re-assigned to respective collaborator/contributor of driver
301    implementation
302
303
304Release Activity
305################
306
307    .. figure:: img/img_release_activity.png
308         :width: 663px
309         :align: center
310         :alt: Release Activity
311
312.. _merge_criteria:
313
314Merge Criteria
315++++++++++++++
316
317* All continuous integration checks have passed
318
319  * Codeowners
320  * Device Tree
321  * Documentation
322  * Gitlint
323  * Identity/Emails
324  * Kconfig
325  * License
326  * Checkpatch (Coding Style)
327  * Pylint
328  * Integration Tests (Via twister) on emulation/simulation platforms
329  * Simulated Bluetooth Tests
330
331* Planned
332
333  * Footprint
334  * Code coverage
335  * Coding Guidelines
336  * Static Analysis (Coverity)
337  * Documentation coverage (APIs)
338
339* PR template with checklist
340
341* Minimal of 2 approvals
342
343  * A collaborator from the same subsystem.
344  * Alternately another maintainer of another subsystem
345  * Approval by the assignee
346
347* A minimum review period of 2 days, 4 hours for trivial changes (see
348  :ref:`review_time`). Hotfixes can be merged at any time after CI passes.
349* All required checks are passing
350