project/project_roles.html · project/project_roles.rst 공식 원문 ↗

Zephyr 3.7.0 · Project

TSC Project 역할

역할 승격과 은퇴, MAINTAINERS 계층, 조직 간 review와 Release Engineering merge 규칙을 연결합니다.

Official pathproject/project_roles.html
Source fileproject/project_roles.rst
Source versionZephyr 3.7.0
TranslationFull · reviewed

본문 기준: Zephyr 3.7.0 LTS3 · 이후 유지보수 패치는 별도입니다.

Part 1

요약·해설

Contributor·Collaborator·Maintainer, 지원 team, GitHub 권한 표, Release Activity, 모든 merge criterion을 원문 순서로 보존합니다.

Main 역할

Contributor → Maintainer

Support

Assignee · Audit · Release

Merge

2 approvals · 2 days · CI

Part 2

접을 수 있는 영어 원문 전체

영어 원문 전체 펼치기
원문 SHA-256 136903C74C1F34E9EC9C6CEF70A4355C6374C4AF5B82F623D7832C3F202A842E
.. _project_roles:

TSC Project Roles
*****************

Project 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:

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:

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.

* Responsibility to drive the pull request to a mergeable state
* 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
* 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:: ../../../project/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)

Part 3

한국어 전문 번역

Project 역할

TSC project에는 일반적으로 Maintainer, Collaborator, Contributor가 참여합니다.

  • Maintainer: TSC가 지정한 architecture, code subsystem 등의 영역에서 Collaborator를 이끕니다. 필요할 때 해당 영역을 대표해 TSC에 참여하며, project Charter의 지침에 따라 TSC voting member가 될 수 있습니다.
  • Collaborator: 하나 이상의 영역에 매우 적극적으로 참여하는 Contributor입니다. 기존 TSC voting member의 승인을 받아 Maintainer가 될 수 있습니다.
  • Contributor: project에 code 또는 documentation을 기여하는 community의 모든 사람입니다. 특정 code-base 영역이나 subsystem의 기존 Collaborator와 Maintainer 승인을 받아 Collaborator가 될 수 있습니다.

Contributor

Contributor는 참여 수준과 관계없이 project에 기여하려는 developer입니다. Contributor에게는 다음 권리와 책임이 있습니다.

  • Code, documentation, translation, artwork 등을 기여할 권리
  • Defect(bug)와 enhancement 제안을 보고할 권리
  • 다른 사람이 제출한 contribution review 과정에 참여할 권리
  • 어떤 communication 수단에서든 discussion을 시작하고 참여할 권리
  • 중요하다고 판단한 사안을 community의 누구에게든 제기할 권리
  • Feature development process에 참여할 권리
  • 결정이 내려진 뒤 이를 따를 책임. 결정을 다시 논의할 새롭고 관련성 있는 정보는 제공할 수 있습니다.
  • 자신의 contribution으로 생긴 issue와 bug에 대한 책임
  • Community 규칙을 존중할 책임
  • Discussion과 contribution review에 참여할 때 건설적인 조언을 제공할 책임
  • Project Code of Conduct를 따를 책임

Contributor는 처음에는 Zephyr GitHub repository에 Read 권한만 받습니다. Read 수준에서는 자신의 pull request에 reviewer를 직접 지정할 수 없으며 자동화 process가 reviewer를 배정합니다. Pull request를 Zephyr devel mailing list 또는 Zephyr Discord Server에 공유할 수도 있습니다.

꾸준한 헌신과 역량을 보인 Contributor는 Zephyr GitHub repository의 Triage permission level을 받을 수 있습니다. 자신이나 다른 GitHub user를 Triage 권한으로 승격하도록 GitHub의 Role Nomination issue template을 사용해 추천할 수 있습니다.

Triage 권한을 받은 Contributor는 pull request에 reviewer를 추가할 수 있고 다른 GitHub user가 reviewer로 지정할 수도 있습니다. 다만 Contributor의 change request나 approval은 pull request 수락·merge에 필요한 승인 수로 계산되지 않습니다. 그렇더라도 pull request author는 Contributor의 comment와 requested change를 검토해야 합니다.

Collaborator

Collaborator는 Zephyr source code 유지보수도 담당하는 Contributor입니다. 완전한 meritocracy 원칙에 따라 결정을 내릴 때 이들의 의견에 더 큰 비중이 주어집니다. Contributor의 권리와 책임에 더해 다음 사항이 적용됩니다.

  • Maintainer와 함께 담당 project의 단기·중기 목표를 정할 권리
  • Feature development process에 참여할 책임
  • 관련 code change를 합리적인 시간 안에 review할 책임
  • Code 품질이 기대 수준을 충족하도록 보장할 책임
  • Community discussion에 참여할 책임
  • 적절한 경우 새 contributor를 mentoring할 책임
  • Quality verification과 release process가 진행될 때 참여할 책임

Contributor는 Zephyr repository의 MAINTAINERS.yml에서 하나 이상의 collaborators section에 GitHub user name이 추가되면 Collaborator로 승격됩니다.

Pull request에서 Collaborator가 요청한 변경은 원래 submitter가 처리해야 합니다. 요청이 reviewer expectation이나 project guideline을 따르지 않거나 의견 충돌이 있으면 assignee가 review process를 진전시키고 이견을 해결할 책임이 있습니다. Collaborator approval은 PR merge에 필요한 최소 승인 수에 포함되지만 다른 merge criterion도 적용될 수 있습니다.

Maintainer

Maintainer는 특정 Zephyr source-code 영역의 필요를 이해하고, 방향을 정하며, 앞으로의 필요까지 예상할 책임을 맡은 Collaborator입니다. Contributor와 Collaborator의 권리·책임에 더해 다음 사항이 적용됩니다.

  • 관련 subsystem 또는 참여 영역의 전체 architecture를 정할 권리
  • Collaborator·submitter와 함께 관련 subsystem 또는 영역의 결정을 내릴 권리. 필요한 경우 PR technical escalation 절차를 사용합니다.
  • 관련 subsystem 또는 영역의 방향을 TSC에 전달할 책임
  • Project의 모든 contribution이 합리적인 시간 안에 review되도록 보장할 책임
  • Code of Conduct를 집행할 책임
  • 담당 code 영역의 static-analysis issue를 triage할 책임

Contributor 또는 Collaborator는 MAINTAINERS.yml의 하나 이상의 maintainers section에 GitHub user name이 추가되면 Maintainer로 승격됩니다. Maintainer approval도 PR merge에 필요한 최소 승인 수에 포함되며 다른 merge criterion이 추가로 적용될 수 있습니다.

역할 은퇴

  • Maintainer, Release Engineering Team member, Release Manager를 포함해 선출된 역할의 권리와 책임에 맞게 더 이상 project에 참여하지 않는 사람에게 TSC는 해당 역할에서 물러나도록 요청할 수 있습니다.
  • 이 요청은 TSC motion으로 제기되고 TSC voting member의 승인을 받아야 합니다. TSC가 승인하면 그 사람은 선출된 역할에서 은퇴한 것으로 간주됩니다.
  • 이 규칙은 앞으로 추가로 정의될 수 있는 다른 선출형 TSC Project 역할에도 적용됩니다.

Team과 지원 활동

Assignee

Assignee는 변경되는 subsystem 또는 code의 maintainer 중 한 명입니다. 변경 code를 기준으로 자동 지정되거나 다른 Maintainer가 지정하며, 두 방법이 불가능하면 Release Engineering team이 assignee를 정할 수 있습니다.

  • Pull request를 merge 가능한 상태까지 이끌 책임
  • 오래되었거나 관련 없는 review, 또는 reviewer expectation을 지키지 않은 review를 dismiss하고 다른 maintainer·developer·contributor에게 review를 요청할 권리
  • 요청된 issue나 변경이 처리될 때까지 pull request merge를 막을 권리
  • 자신이 해당 code의 원래 submitter라면 pull request를 다른 사람에게 재배정할 책임
  • 영향받는 subsystem maintainer에게 approval을 요청할 책임
  • PR technical escalation process를 진행할 책임

Static Analysis Audit Team

Static Analysis Audit team은 Release Engineering team과 긴밀히 협력해 release cycle 동안 열린 static-analysis defect가 올바르게 처리되도록 합니다.

  • Project expectation을 따르지 않은 static-analysis tool(예: Coverity)의 triage를 되돌릴 권리
  • 부적절하게 분류된 항목을 code owner에게 알릴 책임
  • 담당 code owner가 issue를 적절히 처리하지 않으면 TSC에 알릴 책임

Project에 매우 적극적으로 참여하고 static analysis 전문성이 있는 Contributor가 Static Analysis Audit team에 참여할 수 있습니다.

Release Engineering Team

여러 영역에 적극적으로 참여하는 Maintainer로 구성된 team입니다. Member는 정해진 주기와 선발 절차에 따라 Release Manager 역할을 맡아야 합니다. 주기와 선발 절차는 team이 정의하고 TSC가 승인하며, team은 TSC에 직접 보고합니다.

Release Engineering team에는 다음 권리와 책임이 있습니다.

  • Project 규칙에 따라 code change를 Zephyr tree에 merge할 권리
  • Code base를 깨뜨린 변경을 revert할 권리
  • 활동이 <N>개월 동안 없는 stale change를 닫을 권리
  • TSC의 지시를 받아 이를 따를 책임
  • Maintainer와 code merge를 조정할 책임
  • 출처와 영역에 관계없이 respective maintainer가 승인하고 change merge criterion을 충족한 모든 contribution을 merge할 책임
  • Zephyr code base가 CI 기준으로 동작하고 통과하는 상태를 유지할 책임

Project에 매우 적극적으로 참여하는 Maintainer는 TSC voting member의 추천을 받아 Release Engineering team 후보가 될 수 있고, 기존 TSC voting member의 승인으로 team member가 됩니다. TSC는 team이 실제로 기능하도록 process, 적정 규모, member 구성을 주기적으로 검토해야 하며 여러 지역과 time zone에 분산되어 있는지도 확인합니다.

Release Manager

특정 release의 milestone과 roadmap에 따라 release 완료를 주도하는 Maintainer입니다. TSC 승인이 필요하며 Release Engineering team member로서 team의 모든 권리와 책임에 다음 사항이 더해집니다.

  • Code-freeze milestone인 M3 이후 모든 code merge를 관리하고 조정할 권리. 자세한 milestone은 Program Management overview를 따릅니다.
  • Release triage process를 주도하고 조정할 책임
  • Release note를 작성할 책임
  • 전체 community를 포함한 모든 stakeholder에게 release 상태를 제때 알릴 책임
  • QA·validation과 협력하고 major change와 major milestone 전에 직접 또는 QA를 통해 변경을 검증할 책임

역할과 권한

Project 역할과 GitHub 권한
구분역할AdminMerge 권한MemberOwnerCollaborator
Main 역할Contributor----해당
Main 역할Collaborator--해당--
Main 역할Maintainer--해당--
지원 역할QA/Validation--해당-해당
지원 역할DevOps해당----
지원 역할System Admin해당--해당-
지원 역할Release Engineering해당해당해당--

MAINTAINERS 파일

Maintainer 목록을 결정하고 작성할 때 적용하는 일반 지침은 다음과 같습니다.

  • MAINTAINERS.yml은 CODEOWNERS를 대체하며 assignee와 reviewer를 지정하는 데 모두 사용합니다.
  • Code maintainership의 세분화 수준은 관리 가능한 범위로 유지합니다.
  • 명시적 maintainer가 없는 orphan code 영역에는 maintainer를 찾아야 하며, 유지보수되지 않는 영역은 MAINTAINERS 파일에 분명히 표시합니다.
  • 제출된 모든 pull request에는 assignee가 있어야 합니다.
  • 이를 위해 area/subsystem hierarchy를 둡니다. Parent-area maintainer는 maintainer가 없는 sub-area의 기본 대체 assignee이며, area maintainer는 parent-area maintainer보다 우선합니다.
  • 필요하거나 더 적절하면 pull request를 재배정할 수 있으며 원래 assignee가 재배정합니다.
  • 일반적으로 새 file과 directory를 tree에 추가할 때 MAINTAINERS 변경은 다른 변경과 나란히 독립 commit으로 제출합니다.
  • 새 maintainer가 있는 새 area 추가를 포함한 큰 변경은 독립 pull request로 제출하고 TSC review를 받아야 합니다.
  • 추가 TSC review가 필요하면 파일 maintainer가 TSC에 변경을 보내고, area maintainership 변경이나 새 maintainer·area 추가에 이의를 제기할 시간을 TSC member에게 2일 제공합니다.
  • Path, collaborator, name 변경은 TSC review가 필요하지 않습니다. Maintainer 없는 새 area 추가도 TSC review가 필요하지 않습니다.
  • MAINTAINERS 파일 자체에도 maintainer가 있어야 합니다.
  • Architecture, core component, subsystem, sample, test의 각 area에는 명시적 maintainer가 있어야 합니다.
  • 관련 sample·test를 포함한 board와 DTS를 포함한 SoC에는 maintainer가 있을 수 있으며, 상위 platform maintainer는 반드시 있어야 합니다.
  • Driver에는 driver area와 API maintainer가 반드시 있어야 합니다. 개별 driver implementation maintainer를 둘 수도 있지만 collaborator/contributor가 맡는 편을 권장합니다. 이 경우 platform-specific PR을 해당 driver implementation의 collaborator/contributor에게 재배정할 수 있습니다.

Release 활동

Release Activity
Contributor·Collaborator·Maintainer

GitHub에 review와 pull request 제출

CI

Required check와 test 실행

Assignee

Review를 해결하고 merge 가능 상태로 진행

Release Engineering

Merge criterion 확인 후 병합

Git repository

통과한 변경을 Zephyr tree에 반영

역할별 review와 자동 검사, assignee 판단, release engineering merge가 하나의 흐름을 이룹니다.

Merge 기준

  • 최소 2개의 approval이 필요하며 지정 assignee의 approval이 반드시 포함되어야 합니다.
  • 영향받는 각 area의 Maintainer 또는 Collaborator가 pull request를 review해야 합니다. 특정 area의 변경이 충분히 사소하다면 다른 영향 subsystem의 Maintainer/Collaborator approval로 대신할 수 있습니다.
  • 조직 수준에서도 four-eye principle을 적용합니다. 최소 2 approval만으로는 submitter와 approver가 같은 조직일 때 의도치 않은 편향이 생길 수 있으므로 아래 지침을 추가합니다.
  • Common/shared code의 변경 또는 추가는 서로 다른 조직의 approval을 받아야 하며, 최소 하나는 submitter와 다른 조직에서 와야 합니다. Common/shared code는 soc, boards, drivers/*/*에 속하지 않는 모든 code입니다.
  • Driver·SoC·board 같은 hardware support의 변경 또는 추가는 최소한 merger가 submitter와 다른 조직 소속이어야 합니다. Vendor-specific hardware를 지원하는 API implementation에만 적용되고 API 자체에는 적용되지 않습니다.
  • 주로 한 조직에서 contribution이 들어와 다른 조직의 review가 불가능한 영역은 Release Engineer가 예외를 둘 수 있습니다. 그래도 merge는 다른 조직 사람이 해야 하며, 추가 review 기회를 위해 최소 2일 review period를 엄격히 지켜야 합니다.
  • Release Engineer는 자신의 조직에서 작성되고 같은 조직만 review한 code change를 merge해서는 안 됩니다. Merge하려면 다른 조직의 review가 최소 하나 필요합니다.
  • 최소 review 기간은 business day 기준 2일이며 trivial change는 4시간입니다.
  • Hotfix는 CI 통과 뒤 언제든 merge할 수 있고 위 조건 대부분에서 제외됩니다.
  • 필수 check인 Codeowners, Device Tree, Documentation, Gitlint, Identity/Emails, Kconfig, License checks, Checkpatch(Coding Style), Pylint, emulation/simulation platform의 Twister Integration Tests, Simulated Bluetooth Tests가 모두 통과해야 합니다.
  • 향후 추가할 check로 Footprint, Code coverage, Coding Guidelines, Static Analysis(Coverity), API Documentation coverage가 계획되어 있습니다.

Source

출처

영어 원문에는 문단, 문서 지시문, 표, 코드, 코드 심벌, 경로를 그대로 보존했습니다.