314 lines
13 KiB
ReStructuredText
314 lines
13 KiB
ReStructuredText
.. _contributor-expectations:
|
|
|
|
Contributor Expectations
|
|
########################
|
|
|
|
Overview
|
|
********
|
|
|
|
The Zephyr project encourages :ref:`contributors <contributor>` to submit
|
|
changes as smaller pull requests. Smaller pull requests (PRs) have the following
|
|
benefits:
|
|
|
|
- Reviewed more quickly and reviewed more thoroughly. It's easier for reviewers
|
|
to set aside a few minutes to review smaller changes several times than it is
|
|
to allocate large blocks of time to review a large PR.
|
|
|
|
- Less wasted work if reviewers or maintainers reject the direction of the
|
|
change.
|
|
|
|
- Easier to rebase and merge. Smaller PRs are less likely to conflict with other
|
|
changes in the tree.
|
|
|
|
- Easier to revert if the PR breaks functionality.
|
|
|
|
.. note::
|
|
This page does not apply to draft PRs which can have any size, any number of
|
|
commits and any combination of smaller PRs for testing and preview purposes.
|
|
Draft PRs have no review expectation and PRs created as drafts from the start
|
|
do not notify anyone by default.
|
|
|
|
|
|
Defining Smaller PRs
|
|
====================
|
|
|
|
- Smaller PRs should encompass one self-contained logical change.
|
|
|
|
- When adding a new large feature or API, the PR should address only one part of
|
|
the feature. In this case create an :ref:`RFC proposal <rfcs>` to describe the
|
|
additional parts of the feature for reviewers.
|
|
|
|
- PRs should include tests or samples under the following conditions:
|
|
|
|
- Adding new features or functionality.
|
|
|
|
- Modifying a feature, especially for API behavior contract changes.
|
|
|
|
- Fixing a hardware agnostic bug. The test should fail without the bug fixed
|
|
and pass with the fix applied.
|
|
|
|
- PRs must update any documentation affected by a functional code change.
|
|
|
|
- If introducing a new API, the PR must include an example usage of the API.
|
|
This provides context to the reviewer and prevents submitting PRs with unused
|
|
APIs.
|
|
|
|
|
|
Multiple Commits on a Single PR
|
|
===============================
|
|
|
|
Contributors are further encouraged to break up PRs into multiple commits. Keep
|
|
in mind each commit in the PR must still build cleanly and pass all the CI
|
|
tests.
|
|
|
|
For example, when introducing an extension to an API, contributors can break up
|
|
the PR into multiple commits targeting these specific changes:
|
|
|
|
#. Introduce the new APIs, including shared devicetree bindings
|
|
#. Update driver implementation X, with driver specific devicetree bindings
|
|
#. Update driver implementation Y
|
|
#. Add tests for the new API
|
|
#. Add a sample using the API
|
|
#. Update the documentation
|
|
|
|
Large Changes
|
|
=============
|
|
|
|
Large changes to the Zephyr project must submit an :ref:`RFC proposal <rfcs>`
|
|
describing the full scope of change and future work. The RFC proposal provides
|
|
the required context to reviewers, but allows for smaller, incremental, PRs to
|
|
get reviewed and merged into the project. The RFC should also define the minimum
|
|
viable implementation.
|
|
|
|
Changes which require an RFC proposal include:
|
|
|
|
- Submitting a new feature.
|
|
- Submitting a new API.
|
|
- :ref:`treewide-changes`.
|
|
- Other large changes that can benefit from the RFC proposal process.
|
|
|
|
Maintainers have the discretion to request that contributors create an RFC for
|
|
PRs that are too large or complicated.
|
|
|
|
PR Requirements
|
|
***************
|
|
|
|
- Each commit in the PR must provide a commit message following the
|
|
:ref:`commit-guidelines`.
|
|
|
|
- All files in the PR must comply with :ref:`Licensing
|
|
Requirements<licensing_requirements>`.
|
|
|
|
- Follow the Zephyr :ref:`coding_style` and :ref:`coding_guidelines`.
|
|
|
|
- PRs must pass all CI checks. This is a requirement to merge the PR.
|
|
Contributors may mark a PR as draft and explicitly request reviewers to
|
|
provide early feedback, even with failing CI checks.
|
|
|
|
- When breaking a PR into multiple commits, each commit must build cleanly. The
|
|
CI system does not enforce this policy, so it is the PR author's
|
|
responsibility to verify.
|
|
|
|
- When major new functionality is added, tests for the new functionality shall
|
|
be added to the automated test suite. All API functions should have test cases
|
|
and there should be tests for the behavior contracts of the API. Maintainers
|
|
and reviewers have the discretion to determine if the provided tests are
|
|
sufficient. The examples below demonstrate best practices on how to test APIs
|
|
effectively.
|
|
|
|
- :zephyr_file:`Kernel timer tests <tests/kernel/timer/timer_behavior>`
|
|
provide around 85% test coverage for the
|
|
:zephyr_file:`kernel timer <kernel/timer.c>`, measured by lines of code.
|
|
- Emulators for off-chip peripherals are an effective way to test driver
|
|
APIs. The :zephyr_file:`fuel gauge tests <tests/drivers/fuel_gauge/sbs_gauge>`
|
|
use the :zephyr_file:`smart battery emulator <drivers/fuel_gauge/sbs_gauge/emul_sbs_gauge.c>`,
|
|
providing test coverage for the
|
|
:zephyr_file:`fuel gauge API <include/zephyr/drivers/fuel_gauge.h>`
|
|
and the :zephyr_file:`smart battery driver <drivers/fuel_gauge/sbs_gauge/sbs_gauge.c>`.
|
|
- Code coverage reports for the Zephyr project are available on `Codecov`_.
|
|
|
|
- Incompatible changes to APIs must also update the release notes for the
|
|
next release detailing the change. APIs marked as experimental are excluded
|
|
from this requirement.
|
|
|
|
- Changes to APIs must increment the API version number according to the API
|
|
version rules.
|
|
|
|
- PRs must also satisfy all :ref:`merge_criteria` before a member of the release
|
|
engineering team merges the PR into the zephyr tree.
|
|
|
|
Maintainers may request that contributors break up a PR into smaller PRs and may
|
|
request that they create an :ref:`RFC proposal <rfcs>`.
|
|
|
|
.. _`Codecov`: https://app.codecov.io/gh/zephyrproject-rtos/zephyr
|
|
|
|
Workflow Suggestions That Help Reviewers
|
|
========================================
|
|
|
|
- Unless they applied the reviewer's recommendation exactly, authors must not
|
|
resolve and hide comments, they must let the initial reviewer do it. The
|
|
Zephyr project does not require all comments to be resolved before merge.
|
|
Leaving some completed discussions open can sometimes be useful to understand
|
|
the greater picture.
|
|
|
|
- Respond to comments using the "Start Review" and "Add Review" green buttons in
|
|
the "Files changed" view. This allows responding to multiple comments and
|
|
publishing the responses in bulk. This reduces the number of emails sent to
|
|
reviewers.
|
|
|
|
- As GitHub does not implement |git range-diff|_, try to minimize rebases in the
|
|
middle of a review. If a rebase is required, push this as a separate update
|
|
with no other changes since the last push of the PR. When pushing a rebase
|
|
only, add a comment to the PR indicating which commit is the rebase.
|
|
|
|
.. |git range-diff| replace:: ``git range-diff``
|
|
.. _`git range-diff`: https://git-scm.com/docs/git-range-diff
|
|
|
|
PR Review Escalation
|
|
====================
|
|
|
|
The Zephyr community is a diverse group of individuals, with different levels of
|
|
commitment and priorities. As such, reviewers and maintainers may not get to a
|
|
PR right away.
|
|
|
|
The `Zephyr Dev Meeting`_ performs a triage of PRs missing reviewer approval,
|
|
following this process:
|
|
|
|
#. Identify and update PRs missing an Assignee.
|
|
#. Identify PRs without any comments or reviews, ping the PR Assignee to start a
|
|
review or assign to a different maintainer.
|
|
#. For PRs that have otherwise stalled, the Zephyr Dev Meeting pings the
|
|
Assignee and any reviewers that have left comments on the PR.
|
|
|
|
Contributors may escalate PRs outside of the Zephyr Dev Meeting triage process
|
|
as follows:
|
|
|
|
- After 1 week of inactivity, ping the Assignee or reviewers on the PR by adding
|
|
a comment to the PR.
|
|
|
|
- After 2 weeks of inactivity, post a message on the `#pr-help`_ channel on
|
|
Discord linking to the PR.
|
|
|
|
- After 2 weeks of inactivity, add the `dev-review`_ label to the PR. This
|
|
explicitly adds the PR to the agenda for the next `Zephyr Dev Meeting`_
|
|
independent of the triage process. Not all contributors have the required
|
|
privileges to add labels to PRs, in this case the contributor should request
|
|
help on Discord or send an email to the `Zephyr devel mailing list`_.
|
|
|
|
Note that for new PRs, contributors should generally wait for at least one
|
|
Zephyr Dev Meeting before escalating the PR themselves.
|
|
|
|
.. _Zephyr devel mailing list: https://lists.zephyrproject.org/g/devel
|
|
|
|
|
|
.. _pr_technical_escalation:
|
|
|
|
PR Technical Escalation
|
|
=======================
|
|
|
|
In cases where a contributor objects to change requests from reviewers, Zephyr
|
|
defines the following escalation process for resolving technical disagreements.
|
|
|
|
Before escalation of technical disagreements, follow the steps below:
|
|
|
|
- Resolve in the PR among assignee, maintainers and reviewer.
|
|
|
|
- Assignee to act as moderator if applicable.
|
|
|
|
- Optionally resolve in the next `Zephyr Dev Meeting`_ meeting with more
|
|
Maintainers and project stakeholders.
|
|
|
|
- The involved parties and the Assignee to be present when the issue is
|
|
discussed.
|
|
|
|
- If no progress is made, the assignee (maintainer) has the right to dismiss
|
|
stale, unrelated or irrelevant change requests by reviewers giving the
|
|
reviewers a minimum of 1 business day to respond and revisit their initial
|
|
change requests or start the escalation process.
|
|
|
|
The assignee has the responsibility to document the reasoning for dismissing
|
|
any reviews in the PR and should notify the reviewer about their review being
|
|
dismissed.
|
|
|
|
To give the reviewers time to respond and escalate, the assignee is
|
|
expected to block the PR from being merged either by not
|
|
approving the PR or by setting the *DNM* label.
|
|
|
|
Escalation can be triggered by any party participating in the review
|
|
process (assignee, reviewers or the original author of the change) following
|
|
the steps below:
|
|
|
|
- Escalate to the `Architecture Working Group`_ by adding the `Architecture
|
|
Review` label on the PR. Beside the weekly meeting where such escalations are
|
|
processed, the `Architecture Working Group`_ shall facilitate an offline
|
|
review of the escalation if requested, especially if any of the parties can't
|
|
attend the meeting.
|
|
|
|
- If all avenues of resolution and escalation have failed, assignees can escalate
|
|
to the TSC and get a binding resolution in the TSC by adding the *TSC* label
|
|
on the PR.
|
|
|
|
- The Assignee is expected to ensure the resolution of the escalation and the
|
|
outcome is documented in the related pull request or issues on Github.
|
|
|
|
.. _#pr-help: https://discord.com/channels/720317445772017664/997527108844798012
|
|
|
|
.. _dev-review: https://github.com/zephyrproject-rtos/zephyr/labels/dev-review
|
|
|
|
.. _Zephyr Dev Meeting: https://github.com/zephyrproject-rtos/zephyr/wiki/Zephyr-Committee-and-Working-Group-Meetings#zephyr-dev-meeting
|
|
|
|
.. _Architecture Project: https://github.com/zephyrproject-rtos/zephyr/projects/18
|
|
|
|
.. _Architecture Working Group: https://github.com/zephyrproject-rtos/zephyr/wiki/Architecture-Working-Group
|
|
|
|
|
|
.. _reviewer-expectations:
|
|
|
|
Reviewer Expectations
|
|
#####################
|
|
|
|
- Be respectful when commenting on PRs. Refer to the Zephyr `Code of Conduct`_
|
|
for more details.
|
|
|
|
- The Zephyr Project recognizes that reviewers and maintainers have limited
|
|
bandwidth. As a reviewer, prioritize review requests in the following order:
|
|
|
|
#. PRs related to items in the `Zephyr Release Plan`_ or those targeting
|
|
the next release during the stabilization period (after RC1).
|
|
#. PRs where the reviewer has requested blocking changes.
|
|
#. PRs assigned to the reviewer as the area maintainer.
|
|
#. All other PRs.
|
|
|
|
- Try to provide feedback on the entire PR in one shot. This provides the
|
|
contributor an opportunity to address all comments in the next PR update.
|
|
|
|
- Partial reviews are permitted, but the reviewer must add a comment indicating
|
|
what portion of the PR they reviewed. Examples of useful partial reviews
|
|
include:
|
|
|
|
- Domain specific reviews (e.g. Devicetree).
|
|
- Code style changes that impact the readability of the PR.
|
|
- Reviewing commits separately when the requested changes cascade into the
|
|
later commits.
|
|
|
|
- Avoid increasing scope of the PR by requesting new features, especially when
|
|
there is a corresponding :ref:`RFC <rfcs>` associated with the PR. Instead,
|
|
reviewers should add suggestions as a comment to the :ref:`RFC <rfcs>`. This
|
|
also encourages more collaboration as it is easier for multiple contributors
|
|
to work on a feature once the minimum implementation has merged.
|
|
|
|
- When using the "Request Changes" option, mark trivial, non-functional,
|
|
requests as "Non-blocking" in the comment. Reviewers should approve PRs once
|
|
only non-blocking changes remain. The PR author has discretion as to whether
|
|
they address all non-blocking comments. PR authors should acknowledge every
|
|
review comment in some way, even if it's just with an emoticon.
|
|
|
|
- Reviewers shall be *clear* and *concise* what changes they are requesting when the
|
|
"Request Changes" option is used. Requested changes shall be in the scope of
|
|
the PR in question and following the contribution and style guidelines of the
|
|
project.
|
|
|
|
.. _Code of Conduct: https://github.com/zephyrproject-rtos/zephyr/blob/main/CODE_OF_CONDUCT.md
|
|
|
|
.. _Zephyr Release Plan: https://github.com/orgs/zephyrproject-rtos/projects/13
|