blob: d412c2c7471a1b7cf5087eb8f1593e007c7b7af7 [file] [log] [blame] [view]
# Intro
The `code-owners` plugin provides support for code owners in Gerrit and is
replacing the `find-owners` plugin.
For projects that used code owners with the `find-owners` plugin before, the
existing `OWNERS` files continue to work and the only major difference is that
the `code-owners` plugin comes with a new UI for selecting code owners and
showing the code owner status.
The `code-owners` plugin is an open-source plugin and is maintained by the
Gerrit team at Google.
This document focuses on the workflows in the UI. Further information can be
found in the [backend user guide](user-guide.html).
### Enable the plugin
#### As a user
You dont need to do anything as the plugin is enabled by the host admin.
#### As an admin
The `code-owners` plugin is only supported for the Gerrit version that is
currently developed in master. The first Gerrit release that supports the
`code-owners` plugin is Gerrit 3.3.0.
Before installing/enabling the plugin, or enabling the code owners functionality
for further projects, it is important that the plugin is correctly configured.
The required configuration is described in the plugin [setup
guide](setup-guide.html).
### Bug report / Feedback
Report a bug or send feedback using this [Monorail
template](https://bugs.chromium.org/p/gerrit/issues/entry?template=code-owners-plugin).
You can also report a bug through the bug icon in the reply dialog next to the
`HIDE OWNERS` / `SUGGEST OWNERS` button.
![suggest owners from reply dialog](./suggest-owners-from-reply-dialog.png "Suggest owners")
## Code Owners
### Who are code owners?
A code owner is a user whose approval is required to modify files under a
certain path. Who is a code owner of a path is controlled via `OWNERS` files
that are checked into the repository. For submitting a change Gerrit requires
that all files that were touched in the change are approved by a code owner.
Code owners usually apply their approval by voting with "Code-Review+1" on the
change. Their approval is to confirm that This change is appropriate for our
system and belongs in this directory."
### Why do we leverage Code Owners?
Owners are gatekeepers before a CL is submitted, they enforce standards across
the code base, help disseminate knowledge around their specific area of
ownership, ensure their is appropriate code review coverage, and provide timely
reviews. Code owners is designed as a code quality feature to ensure someone
familiar with the code base reviews any changes to the codebase or a subset of
the codebase they are the Owner of, by making sure the change is appropriate for
the system.
## What is the `code-owners` plugin?
### What is the benefit?
Code owners in Gerrit will be supported by a new `code-owners` plugin which is
developed as an open-source plugin and maintained by the Gerrit team at Google.
The `code-owners` plugin supports:
- [defining code owners](#definingCodeOwners)
- requiring owner approvals for submitting changes
- displaying owner information in the UI & suggesting code owners as reviewers
- overriding owner checks
- a [REST API](rest-api.html) to inspect code owners
### How does it work?
The plugin provides suggestions of owners for the directory or files that you
are modifying in your change based on a score. It also informs you at a glance
about the status of code owners for the change and the status of code owners per
file.
#### Score
The `code-owners` plugin suggests a maximum of 5 closest code owners based on
their score. The code owner score is calculated based on the distance of code
owners to the files.
## <a id="definingCodeOwners">Defining code owners
If you have used code owners via the `find-owners` plugin before, your code
owners are already defined in `OWNERS` files and you don’t need to do anything
since the new `code-owners` plugin just reads the existing `OWNERS` files.
If you haven’t used code owners before, you can now define code owners in
`OWNERS` files which are stored in the source tree. The code owners that are
defined in an `OWNERS` file apply to the directory that contains the `OWNERS`
file, and all its subdirectories (except if a subdirectory contains an `OWNERS`
file that disables the inheritance of code owners from the parent directories).
The syntax of `OWNERS` file is explained in the [backend
documentation](backend-find-owners.html#syntax) and examples can be found in the
[cookbook](backend-find-owners-cookbook.html).
The code-owners plugin does not support an editor to create and edit `OWNERS`
files from the UI. `OWNERS` files must be created and edited manually in the
local repository and then be pushed to the remote repository, the same way as
any other source file.
## <a id="addCodeOwnersAsReviewers">Add owners to your change
1. To add owners of the files in your change, click on `SUGGEST OWNERS` next to
the `Code-Owners` submit requirement.
![suggest owners from change page](./suggest-owners-from-change-page.png "Suggest owners from change page")
2. The Reply dialog opens with the code owners section expanded by default with
owners suggestions. Code owners are suggested by groups of files which share
the same code owners.
![owner suggestions](./owner-suggestions.png "owner suggestions")
3. Hover over a file to view the list of files and their full file path.
![suggestion file groups](./suggestions-file-groups.png "suggestion file groups")
4. Click user chips to select code owners for each file or group of files. The
selected code owner is automatically added to the reviewers section and
automatically selected on other files the code owner owns in the change (if
applicable).
![add or modify reviewers from suggestions](./add-owner-to-reviewer.png "add owner to reviewer")
5. Click `SEND` to notify the code owners you selected on your change.
## Reply dialog use cases
### Approved files
Once a file has received an approval vote by the code owner, the file disappears
from the file list in the reply dialog. This lets you focus on the files that
are not yet assigned to a code owner or are pending approval.
### No code owners found
There are 3 possible reasons for encountering a "Not found" text:
![no owners found](./no-owners-found.png "no owners found")
- No owners were defined for these files.
Reason: This could be due to missing `OWNERS` defined for these files.
- None of the code owners of these files are visible.
Reason: The code owners accounts are not visible to you.
- Code owners defined for these files are invalid.
Reason: The emails cannot be resolved.
For these 3 cases, we advise you to:
1. Ask someone with override powers (e.g. sheriff) to grant an override vote to
unblock the change submission.
2. Contact the project owner to ask them to fix the code owner definitions.
### Renamed files
![renamed file from file list](./renamed-file-from-file-list.png "Renamed files")
![renamed file in code owners](./renamed-file-in-code-owners.png "Renamed files in code owners")
Renamed files (new path) will have a "Renamed" chip attached to them. A renamed
file will be considered as approved only if both old path/name and new path/name
are approved.
### Failed to fetch file
This status is informing you about a failed API call.
**Refresh the page** to recover from this error.
![failed to fetch](./failed-to-fetch-owners.png "Failed to fetch owners")
### Large change
In case of a large change containing a large number of files (hundreds or even
thousands), it will take some time to fetch all suggested code owners. In the
reply dialog, the plugin will show the overall status of the fetching and
results as soon as it has results together with the loading indicator. The
loading will disappear until all files finished fetching, failed files will be
grouped into a single group.
The fetching of suggested code owners should not block the reply itself. So you
still can select from suggestions even when not all files are finished and sent
for reviewing.
## Change page overview
In the change page, you can get an overview of the code owner statuses.
If applicable, the code owner status is displayed:
- Next to the `Code-Owners` submit requirement
![submit requirement](./submit-requirement.png "Submit requirement")
- Next to each file
![owner status](./owner-status.png "Owner status")
### Code owner status
#### `Code-Owners` submit requirement
The `Code-Owners` submit requirement is providing an overview about the code
owner status at a glance.
- Missing a reviewer that can grant the code owner approval
- Pending code owner approval
- Approved by a code owner
**Missing code owner approval**
The change is missing a reviewer that can grant the code owner approval.
![missing owner](./owner-status-missing.png "Missing code owner")
**Pending code owner approval**
- The change is pending a vote from a reviewer that can grant the code owner
approval. Code owners have been added to the change but have not voted yet.
![pending owner's approval 1](./owner-status-pending-1.png "Pending owner's approval")
- A code owner has voted -1 on the change. A -1 doesn't block a file from being
approved by another code owner. The status is pending because the change needs
another round of review.
![pending owner's approval 2](./owner-status-pending-2.png "Pending owner's approval")
**Approved by code owner**
Each file in your change was approved by at least one code owner. It's not
required that all code owners approve a change.
![owner approved](./owner-status-approved.png "Code owner approved")
#### File status
Additionally, the `code-owners` plugin provides a more detailed overview of code
owner status per file in the change with 3 statuses and you can **hover over the
icon** to display a tooltip.
**Missing code owner approval**
A code owner of this file is missing as a reviewer to the change.
![missing owner tooltip](./tooltip-missing-owner.png "Tooltip for missing status")
**Pending code owner approval**
A code owner of this file has been added to the change but have not voted yet.
![pending owner tooltip](./tooltip-pending-owner.png "Tooltip for pending status")
**Approved by code owner**
A code owner of this file has approved the change. You can also see this icon if
you are a code owner of the file as in this case the file is implicitly approved
by you.
![approved owner tooltip](./tooltip-approved-owner.png "Tooltip for approved status")
**Failed to fetch status icon**
This status is informing you about a failed API call.
**Refresh the page** to recover from this error.
![failed owner tooltip](./tooltip-failed-owner.png "Tooltip for failed status")
#### No label and no status
When you own all the files in your change, the `code-owners` plugin will:
- Not show the `Code-Owners` submit requirement
- Not show the file status
### Owners-Override label
#### In the reply dialog
The `Owners-Override` label is votable by a user with certain permissions (e.g.
sheriff). The `Owner-Override` label will show in the reply dialog and you can
vote on it if you have certain permissions.
![code owner override label in reply dialog](./code-owner-override-label-in-reply.png "Vote on owners-override label")
#### In the change page
When a user with certain permissions has voted "Owners-Override+1" and the
`Code-Owners` submit requirement returns the status `Approved
(Owners-Override)`.
![code owner override label in change page](./code-owner-override-label-in-change.png "Owners-override label")