365 lines
14 KiB
ReStructuredText
365 lines
14 KiB
ReStructuredText
.. _project_roles:
|
||
|
||
TSC Project Roles
|
||
*****************
|
||
|
||
Main Roles
|
||
##########
|
||
|
||
TSC projects generally will involve *Maintainers*, *Collaborators*, and
|
||
*Contributors*:
|
||
|
||
**Maintainer**: lead Collaborators on an area identified by the TSC (e.g.
|
||
Architecture, code subsystems, etc.). Maintainers shall also serve as the
|
||
area’s representative on the TSC as needed. Maintainers may become voting
|
||
members of the TSC under the guidelines stated in the project Charter.
|
||
|
||
**Collaborator**: A highly involved Contributor in one or more areas.
|
||
May become a Maintainer with approval of existing TSC voting members.
|
||
|
||
**Contributor**: anyone in the community that contributes code or
|
||
documentation to the project. Contributors may become Collaborators
|
||
by approval of the existing Collaborators and Maintainers of the
|
||
particular code base areas or subsystems.
|
||
|
||
|
||
Contributor
|
||
+++++++++++
|
||
|
||
A *Contributor* is a developer who wishes to contribute to the project,
|
||
at any level.
|
||
|
||
Contributors are granted the following rights and responsibilities:
|
||
|
||
* Right to contribute code, documentation, translations, artwork, etc.
|
||
* Right to report defects (bugs) and suggestions for enhancement.
|
||
* Right to participate in the process of reviewing contributions by others.
|
||
* Right to initiate and participate in discussions in any communication
|
||
methods.
|
||
* Right to approach any member of the community with matters they believe
|
||
to be important.
|
||
* Right to participate in the feature development process.
|
||
* Responsibility to abide by decisions, once made. They are welcome to
|
||
provide new, relevant information to reopen decisions.
|
||
* Responsibility for issues and bugs introduced by one’s own contributions.
|
||
* Responsibility to respect the rules of the community.
|
||
* Responsibility to provide constructive advice whenever participating in
|
||
discussions and in the review of contributions.
|
||
* Responsibility to follow the project’s code of conduct
|
||
(https://github.com/zephyrproject-rtos/zephyr/blob/main/CODE_OF_CONDUCT.md)
|
||
|
||
Contributors are initially only given `Read
|
||
<https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-permission-levels-for-an-organization>`_
|
||
access to the Zephyr GitHub repository. Specifically, at the Read access level,
|
||
Contributors are not allowed to assign reviewers to their own pull requests. An
|
||
automated process will assign reviewers. You may also share the pull request on
|
||
the `Zephyr devel mailing list <https://lists.zephyrproject.org/g/devel>`_ or on
|
||
the `Zephyr Discord Server <https://chat.zephyrproject.org>`_.
|
||
|
||
Contributors who show dedication and skill are granted the Triage permission
|
||
level to the Zephyr GitHub repository.
|
||
|
||
You may nominate yourself, or another GitHub user, for promotion to the Triage
|
||
permission level by creating a GitHub issue, using the :github:`nomination
|
||
template <new?assignees=&labels=bug&template=nomination.md&title=>`.
|
||
|
||
Contributors granted the Triage permission level are permitted to add reviewers
|
||
to a pull request and can be added as a reviewer by other GitHub users.
|
||
Contributor votes on pull requests are not counted with respect to accepting and
|
||
merging a pull request. However, Contributors comments and requested changes
|
||
should still be considered by the pull request author.
|
||
|
||
Collaborator
|
||
++++++++++++
|
||
|
||
A *Collaborator* is a Contributor who is also responsible for the maintenance
|
||
of Zephyr source code. Their opinions weigh more when decisions are made, in a
|
||
fully meritocratic fashion.
|
||
|
||
Collaborators have the following rights and responsibilities,
|
||
in addition to those listed for Contributors:
|
||
|
||
* Right to set goals for the short and medium terms for the project being
|
||
maintained, alongside the Maintainer.
|
||
* Responsibility to participate in the feature development process.
|
||
* Responsibility to review relevant code changes within reasonable time.
|
||
* Responsibility to ensure the quality of the code to expected levels.
|
||
* Responsibility to participate in community discussions.
|
||
* Responsibility to mentor new contributors when appropriate
|
||
* Responsibility to participate in the quality verification and release
|
||
process, when those happen.
|
||
|
||
Contributors are promoted to the Collaborator role by adding the GitHub user
|
||
name to one or more ``collaborators`` sections of the :ref:`maintainers_file` in
|
||
the Zephyr repository.
|
||
|
||
Collaborator votes on pull requests can block or approve the pull request.
|
||
|
||
Maintainer
|
||
++++++++++
|
||
|
||
A *Maintainer* is a Collaborator who is also responsible for knowing,
|
||
directing and anticipating the needs of a given zephyr source code area.
|
||
|
||
Maintainers have the following rights and responsibilities,
|
||
in addition to those listed for Contributors and Collaborators:
|
||
|
||
* Right to set the overall architecture of the relevant subsystems or areas
|
||
of involvement.
|
||
* Right to make decisions in the relevant subsystems or areas of involvement,
|
||
in conjunction with the collaborators.
|
||
* Responsibility to convey the direction of the relevant subsystem or areas to
|
||
the TSC
|
||
* Responsibility to ensure all contributions of the project have been reviewed
|
||
within reasonable time.
|
||
* Responsibility to enforce the code of conduct.
|
||
|
||
Contributors or Collaborators are promoted to the Maintainer role by adding the
|
||
GitHub user name to one or more ``maintainers`` sections of the
|
||
:ref:`maintainers_file` in the Zephyr repository.
|
||
|
||
Maintainer votes on pull requests can block or approve the pull request.
|
||
|
||
Role Retirement
|
||
###############
|
||
|
||
* Individuals elected to the following Project roles, including, Maintainer,
|
||
Release Engineering Team member, Release Manager, but are no longer engaged
|
||
in the project as described by the rights and responsibilities of that role,
|
||
may be requested by the TSC to retire from the role they are elected.
|
||
* Such a request needs to be raised as a motion in the TSC and be
|
||
approved by the TSC voting members.
|
||
By approval of the TSC the individual is considered to be retired
|
||
from the role they have been elected.
|
||
* The above applies to elected TSC Project roles that may be defined
|
||
in addition.
|
||
|
||
|
||
Teams and Supporting Activities
|
||
###############################
|
||
|
||
Assignee
|
||
++++++++
|
||
|
||
An *Assignee* is one of the maintainers of a subsystem or code being changed.
|
||
Assignees are set either automatically based on the code being changed or set
|
||
by the other Maintainers, the Release Engineering team can set an assignee when
|
||
the latter is not possible.
|
||
|
||
* Right to dismiss stale reviews and seek reviews from additional maintainers,
|
||
developers and contributors
|
||
* Right to block pull requests from being merged
|
||
* Responsibility to re-assign a pull request if they are the original submitter
|
||
of the code
|
||
* Responsibility to drive the pull request to a mergeable state
|
||
* Solicit approvals from maintainers of the subsystems affected
|
||
* Responsibility to drive the escalation process
|
||
|
||
Release Engineering Team
|
||
++++++++++++++++++++++++
|
||
|
||
A team of active Maintainers involved in multiple areas.
|
||
|
||
* The members of the Release Engineering team are expected to fill
|
||
the Release Manager role based on a defined cadence and selection process.
|
||
* The cadence and selection process are defined by the Release Engineering
|
||
team and are approved by the TSC.
|
||
* The team reports directly into the TSC.
|
||
|
||
Release Engineering team has the following rights and responsibilities:
|
||
|
||
* Right to merge code changes to the zephyr tree following the project rules.
|
||
* Right to revert any changes that have broken the code base
|
||
* Right to close any stale changes after <N> months of no activity
|
||
* Responsibility to take directions from the TSC and follow them.
|
||
* Responsibility to coordinate code merges with maintainers.
|
||
* Responsibility to merge all contributions regardless of their
|
||
origin and area if they have been approved by the respective
|
||
maintainers and follow the merge criteria of a change.
|
||
* Responsibility to keep the Zephyr code base in a working and passing state
|
||
(as per CI)
|
||
|
||
Joining the Release Engineering team
|
||
|
||
* Maintainers highly involved in the project may be nominated
|
||
by a TSC voting member to join the Release Engineering team.
|
||
Nominees may become members of the team by approval of the
|
||
existing TSC voting members.
|
||
* To ensure a functional Release Engineering team the TSC shall
|
||
periodically review the team’s followed processes,
|
||
the appropriate size, and the membership
|
||
composition (ensure, for example, that team members are
|
||
geographically distributed across multiple locations and
|
||
time-zones).
|
||
|
||
|
||
Release Manager
|
||
+++++++++++++++
|
||
|
||
A *Maintainer* responsible for driving a specific release to
|
||
completion following the milestones and the roadmap of the
|
||
project for this specific release.
|
||
|
||
* TSC has to approve a release manager.
|
||
|
||
A Release Manager is a member of the Release Engineering team and has
|
||
the rights and responsibilities of that team in addition to
|
||
the following:
|
||
|
||
* Right to manage and coordinate all code merges after the
|
||
code freeze milestone (M3, see `program management overview <https://wiki.zephyrproject.org/Program-Management>`_.)
|
||
* Responsibility to drive and coordinate the triaging process
|
||
for the release
|
||
* Responsibility to create the release notes of the release
|
||
* Responsibility to notify all stakeholders of the project,
|
||
including the community at large about the status of the
|
||
release in a timely manner.
|
||
* Responsibility to coordinate with QA and validation and
|
||
verify changes either directly or through QA before major
|
||
changes and major milestones.
|
||
|
||
Roles / Permissions
|
||
+++++++++++++++++++
|
||
|
||
.. table:: Project Roles vs GitHub Permissions
|
||
:widths: 20 20 10 10 10 10 10
|
||
:align: center
|
||
|
||
================ =================== =========== ================ =========== =========== ============
|
||
.. .. **Admin** **Merge Rights** Member Owner Collaborator
|
||
---------------- ------------------- ----------- ---------------- ----------- ----------- ------------
|
||
Main Roles Contributor x
|
||
---------------- ------------------- ----------- ---------------- ----------- ----------- ------------
|
||
.. Collaborator x
|
||
---------------- ------------------- ----------- ---------------- ----------- ----------- ------------
|
||
.. Maintainer x
|
||
Supportive Roles QA/Validation x x
|
||
.. DevOps **x**
|
||
.. System Admin **x** x
|
||
.. Release Engineering **x** **x** x
|
||
|
||
================ =================== =========== ================ =========== =========== ============
|
||
|
||
|
||
.. _maintainers_file:
|
||
|
||
MAINTAINERS File
|
||
################
|
||
|
||
Generic guidelines for deciding and filling in the Maintainers' list
|
||
|
||
* The :zephyr_file:`MAINTAINERS.yml` file shall replace the
|
||
:zephyr_file:`CODEOWNERS` file and will be used for both setting assignees and
|
||
reviewers.
|
||
* We should keep the granularity of code maintainership at a manageable level
|
||
* We should be looking for maintainers for areas of code that
|
||
are orphaned (i.e. without an explicit maintainer)
|
||
|
||
* Un-maintained areas should be indicated clearly in the MAINTAINERS file
|
||
|
||
* All submitted pull requests should have an assignee
|
||
* We Introduce an area/subsystem hierarchy to address the above point
|
||
|
||
* Parent-area maintainer should be acting as default substitute/fallback
|
||
assignee for un-maintained sub-areas
|
||
* Area maintainer gets precedence over parent-area maintainer
|
||
|
||
* Pull requests may be re-assigned if this is needed or more appropriate
|
||
|
||
* Re-assigned by original assignee (see “Assignee” slide)
|
||
|
||
* In general, updates to the MAINTAINERS file should be
|
||
in a standalone commit alongside other changes introducing new files and
|
||
directories to the tree.
|
||
* Major changes to the file, including the addition of new areas with new maintainers
|
||
should come in as standalone pull requests and require TSC review.
|
||
* If additional review by the TSC is required, the maintainers of the file
|
||
should send the requested changes to the TSC and give members of the TSC two
|
||
(2) days to object to any of the changes to maintainership of areas or the
|
||
addition of new maintainers or areas.
|
||
* Path, collaborator and name changes do not require a review by the TSC.
|
||
* Addition of new areas without a maintainer do not require review by the TSC.
|
||
* The MAINTAINERS file itself shall have a maintainer
|
||
* Architectures, core components, sub-systems, samples, tests
|
||
|
||
* Each area shall have an explicit maintainer
|
||
|
||
* Boards (incl relevant samples, tests), SoCs (incl DTS)
|
||
* May have a maintainer, shall have a higher-level platform maintainer
|
||
* Drivers
|
||
|
||
* Shall have a driver-area (and API) maintainer
|
||
* Could have individual driver implementation
|
||
maintainers but preferably collaborator/contributors
|
||
* In the above case, platform-specific PRs may be
|
||
re-assigned to respective collaborator/contributor of driver
|
||
implementation
|
||
|
||
|
||
Release Activity
|
||
################
|
||
|
||
.. figure:: img/img_release_activity.png
|
||
:width: 663px
|
||
:align: center
|
||
:alt: Release Activity
|
||
|
||
Merge Criteria
|
||
++++++++++++++
|
||
|
||
* All continuous integration checks have passed
|
||
|
||
* Codeowners
|
||
* Device Tree
|
||
* Documentation
|
||
* Gitlint
|
||
* Identity/Emails
|
||
* Kconfig
|
||
* License
|
||
* Checkpatch (Coding Style)
|
||
* Pylint
|
||
* Integration Tests (Via twister) on emulation/simulation platforms
|
||
* Simulated Bluetooth Tests
|
||
|
||
* Planned
|
||
|
||
* Footprint
|
||
* Code coverage
|
||
* Coding Guidelines
|
||
* Static Analysis (Coverity)
|
||
* Documentation coverage (APIs)
|
||
|
||
* PR template with checklist
|
||
|
||
* Minimal of 2 approvals
|
||
|
||
* A collaborator from the same subsystem.
|
||
* Alternately another maintainer of another subsystem
|
||
* Approval by the assignee
|
||
|
||
* A minimum review period of 2 days, 4 hours for trivial changes (see
|
||
:ref:`review_time`). Hotfixes can be merged at any time after CI passes.
|
||
* All required checks are passing
|
||
|
||
Escalation Process
|
||
++++++++++++++++++
|
||
|
||
* Contributors may object to change requests or decisions made by
|
||
Maintainers.
|
||
* Process
|
||
|
||
* Resolve in the PR among assignee, maintainers and reviewer
|
||
|
||
* Assignee to act as moderator if applicable
|
||
|
||
* Optionally resolve in the dev review meeting with more Maintainers
|
||
and project stakeholders
|
||
|
||
* The involved parties and the Assignee to be present when
|
||
the (escalated) issue is discussed
|
||
|
||
* TSC: Assignees can escalate to the TSC voting members and get
|
||
a binding resolution in the TSC.
|
||
* Assignee to ensure the resolution of the escalation is
|
||
reflected in the PR review.
|