blob: a57a7b46def4b693ef9e500b3cf120280b669c6f [file] [log] [blame]
.. _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:
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=Role+Nomination&template=006_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 change requests or approval 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 change requests on pull requests should
be addressed by the original submitter. In cases where the changes requested do
not follow the :ref:`expectations <reviewer-expectations>` and the guidelines
of the project or in cases of disagreement, it is the responsibility of the
assignee to advance the review process and resolve any disagreements.
Collaborator approval of pull requests are counted toward the minimum required
approvals needed to merge a PR. Other criteria for merging may apply.
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 and submitters.
See :ref:`pr_technical_escalation`.
* 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.
* Responsibility to triage static analysis issues in their code area.
See :ref:`static_analysis`.
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 approval of pull requests are counted toward the minimum
required approvals needed to merge a PR. Other criteria for merging may apply.
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 and unrelated reviews or reviews not following
:ref:`expectations <reviewer-expectations>` from reviewers and seek reviews
from additional maintainers, developers and contributors
* Right to block pull requests from being merged until issues or changes
requested are addressed
* 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 :ref:`pr_technical_escalation` process
Static Analysis Audit Team
++++++++++++++++++++++++++
The Static Analysis Audit team works closely with the release engineering
team to ensure that static analysis defects opened during a release
cycle are properly addressed. The team has the following rights and
responsibilities:
* Right to revert any triage in a static analysis tool (e.g: Coverity)
that does not follow the project expectations.
* Responsibility to inform code owners about improper classifications.
* Responsibility to alert TSC if any issues are not adequately addressed by the
responsible code owners.
Joining the Static Analysis Audit team
* Contributors highly involved in the project with some expertise
in static analysis.
.. _release-engineering-team:
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
* 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:
Merge Criteria
++++++++++++++
* Minimal of 2 approvals, including an approval by the designated assignee.
* Pull requests should be reviewed by at least a maintainer or collaborator of
each affected area; Unless the changes to a given area are considered trivial
enough, in which case approvals by other affected subsystems
maintainers/collaborators would suffice.
* Four eye principle on the organisation level. We already require at least 2
approvals (basic four eye principle), however, such reviews and approvals
might be unintentionally biased in the case where the submitter is from the
same organisation as the approvers. To allow for project wide review and
approvals, the merge criteria is extended with the guidelines below:
* Changes or additions to common and shared code shall have approvals from
different organisations (at least one approval from an
organisation different than the submitters').
Common and shared code is defined as anything that does not fall under
:file:`soc`, :file:`boards` and :file:`drivers/*/*`.
* Changes or additions to hardware support (driver, SoC, boards) shall at
least have the merger be from a different organisation. This applies only
to implementation of an API supporting vendor specific hardware and not the
APIs.
* Release engineers may make exceptions for areas with contributions primarily
coming from one organisation and where reviews from other organisations are
not possible, however, merges shall be completed by a person from a different
organisation. In such cases, the minimum review period of at least 2 days
shall be strictly followed to allow for additional reviews.
* Release engineers shall not merge code changes originating and reviewed
only by their own organisation. To be able to merge such changes, at least
one review shall be from a different organisation.
* A minimum review period of 2 business days, 4 hours for trivial changes (see
:ref:`review_time`).
* Hotfixes can be merged at any time after CI has passed and are excluded from
most of the conditions listed above.
* All required checks are passing:
* Codeowners
* Device Tree
* Documentation
* Gitlint
* Identity/Emails
* Kconfig
* License checks
* 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)