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