| # Setup Guide |
| |
| This guide explains how to setup and configure the `code-owners` plugin. |
| |
| **IMPORTANT:** Do this setup **before** installing/enabling the plugin, or |
| enabling the code owners functionality for further projects. This is important |
| because as soon as the code owners functionality is switched on, all changes |
| will immediately require code owner approvals for the submission of changes and |
| you want everything been setup properly so that code owner approvals can be |
| granted and change submission is not blocked. |
| |
| The following configuration steps are recommended: |
| |
| 1. [Configure the code owners backend that should be used](#configureCodeOwnersBackend) |
| 2. [Opt-out projects/repositories that should not use code owners](#optOutProjects) |
| 3. [Opt-out branches that should not use code owners](#optOutBranches) |
| 4. [Configure the label vote that should count as code owner approval](#configureCodeOwnerApproval) |
| 5. [Grant code owners permission to vote on the label that counts as code owner approval](#grantCodeOwnerPermissions) |
| 6. [Configure code owner overrides & fallback code owners](#configureCodeOwnerOverridesAndFallbackCodeOwners) |
| 7. [Configure allowed email domains](#configureAllowedEmailDomains) |
| 8. [Optional Configuration](#optionalConfiguration) |
| 9. [Stop using the find-owners Prolog submit rule](#stopUsingFindOwners) |
| 10. [Add an initial code owner configuration at root level](#configureCodeOwners) |
| 11. [Disable/uninstall the find-owners plugin](#disableFindOwnersPlugin) |
| |
| Recommendations about further configuration parameters can be found in the |
| [config guide](config-guide.html). |
| |
| Please also heck out the [config FAQs](config-faqs.html). |
| |
| ### <a id="configureCodeOwnersBackend">1. Configure the code owners backend that should be used |
| |
| The `code-owners` plugin supports multiple [code owner backends](backends.html) |
| and it must be configured which one should be used. The backend controls which |
| files represent code owner configs and which syntax they use. The backends may |
| also differ in the feature-set that they support. |
| |
| By default, the [find-owners](backend-find-owners.html) backend is used, which |
| reads code owner configs from `OWNERS` files and uses the same |
| [syntax](backend-find-owners.html#syntax) that was previously supported by the |
| deprecated `find-owners` plugin. |
| |
| To configure a different backend globally, set |
| [plugin.code-owners.backend](config.html#pluginCodeOwnersBackend) in |
| `gerrit.config` (requires to be a host admin). |
| |
| Example global configuration in `gerrit.config` that configures the |
| [proto](backend-proto.html) backend: |
| |
| ``` |
| [plugin "code-owners"] |
| backend = proto |
| ``` |
| \ |
| To configure a backend on project-level |
| [codeOwners.backend](config.html#codeOwnersBackend) in the |
| [code-owners.config](config-faqs.html#updateCodeOwnersConfig) file in the |
| `refs/meta/config` branch can be set (requires to be a project owner). |
| |
| Example per-project configuration in `code-owners.config` that configures the |
| [proto](backend-proto.html) backend: |
| |
| ``` |
| [codeOwners] |
| backend = proto |
| ``` |
| \ |
| It's also possible to configure backends per branch by setting |
| [codeOwners.\<branch\>.backend](config.html#codeOwnersBranchBackend) in the |
| [code-owners.config](config-faqs.html#updateCodeOwnersConfig) file in the |
| `refs/meta/config` branch (requires to be a project owner). |
| |
| Example per-branch configuration in `code-owners.config` that configures the |
| [proto](backend-proto.html) backend: |
| |
| ``` |
| [codeOwners "refs/heads/experimental"] |
| backend = proto |
| ``` |
| \ |
| **IMPORTANT:** The `proto` backend is experimental only and should not be used |
| in production. |
| |
| ### <a id="optOutProjects">2. Opt-out projects/repositories that should not use code owners |
| |
| You can skip this step if the code owners functionality should be enabled for |
| all projects/repositories on the host. |
| |
| ##### Variant 1: Enable the code owners functionality only for some projects |
| |
| If the code owners functionality should only be enabled for some |
| projects/repositories, it's best to: |
| |
| ###### a) Disable the code owner functionality globally |
| |
| To disable the code owners functionality globally, set |
| [plugin.code-owners.disabled](config.html#pluginCodeOwnersDisabled) in |
| `gerrit.config` to `true` (requires to be a host admin). |
| |
| `gerrit.config`: |
| ``` |
| [plugin "code-owners"] |
| disabled = true |
| ``` |
| \ |
| Alternatively you may set [codeOwners.disabled](config.html#codeOwnersDisabled) |
| in the [code-owners.config](config-faqs.html#updateCodeOwnersConfig) file in the |
| `refs/meta/config` branch of the `All-Projects` project to `true` (requires to |
| be a host admin). |
| |
| `code-owners.config`: |
| ``` |
| [codeOwners] |
| disabled = true |
| ``` |
| |
| ###### b) Enable the code owners functionality for the projects/repositories that should use code owners |
| |
| Enable the code owners functionality on project-level by setting |
| [codeOwners.disabled](config.html#codeOwnersDisabled) in the |
| [code-owners.config](config-faqs.html#updateCodeOwnersConfig) file in the |
| `refs/meta/config` branch to `false` (requires to be a project owner). |
| |
| `code-owners.config`: |
| ``` |
| [codeOwners] |
| disabled = false |
| ``` |
| |
| ##### Variant 2: Enable the code owners functionality for all projects/repositories, except some projects/repositories |
| |
| If the code owners functionality should only be disabled for some |
| projects/repositories it's best to: |
| |
| ###### a) Enable the code owners functionality globally |
| |
| This is the default. |
| |
| If needed, unset |
| [plugin.code-owners.disabled](config.html#pluginCodeOwnersDisabled) in |
| `gerrit.config` and [codeOwners.disabled](config.html#codeOwnersDisabled) in the |
| [code-owners.config](config-faqs.html#updateCodeOwnersConfig) file in the |
| `refs/meta/config` branch of the `All-Projects` project. |
| |
| ###### b) Disable the code owners functionality in the projects/repositories that should not use code owners |
| |
| Disable the code owners functionality on project-level by setting |
| [codeOwners.disabled](config.html#codeOwnersDisabled) in the |
| [code-owners.config](config-faqs.html#updateCodeOwnersConfig) file in the |
| `refs/meta/config` branch to `true` (requires to be a project owner). |
| |
| `code-owners.config`: |
| ``` |
| [codeOwners] |
| disabled = true |
| ``` |
| |
| ### <a id="optOutBranches">3. Opt-out branches that should not use code owners |
| |
| If the code owners functionality is enabled for a project/repository, it is |
| enabled for all branches of the project/repository, unless branches opted-out. |
| |
| You can skip this section, if the code owners functionality should be enabled |
| for all branches (which is the default configuration). |
| |
| To opt-out branches from using code owners set |
| [codeOwners.disabledBranch](config.html#codeOwnersDisabledBranch) in the |
| [code-owners.config](config-faqs.html#updateCodeOwnersConfig) file in the |
| `refs/meta/config` branch to a regular expression that matches the branches that |
| should be opted-out (requires to be a project owner). |
| |
| `code-owners.config`: |
| ``` |
| [codeOwners] |
| disabledBranch = ^refs/heads/stable-.* |
| ``` |
| |
| ### <a id="configureCodeOwnerApproval">4. Configure the label vote that should count as code owner approval |
| |
| By default `Code-Review+1` votes from [code owners](user-guide.html#codeOwners) |
| count as [code owner approval](user-guide.html#codeOwnerApproval). If this is |
| what you want, you can skip this step. |
| |
| Otherwise you can configure the required code owner approval globally by setting |
| [plugin.code-owners.requiredApproval](config.html#pluginCodeOwnersRequiredApproval) |
| in `gerrit.config` (requires to be a host admin) or per project by setting |
| [codeOwners.requiredApproval](config.html#codeOwnersRequiredApproval) in the |
| [code-owners.config](config-faqs.html#updateCodeOwnersConfig) file in the |
| `refs/meta/config` branch (requires to be a project owner). |
| |
| Example global configuration in `gerrit.config` that requires `Code-Review+2` as |
| code owner approval: |
| |
| ``` |
| [plugin "code-owners"] |
| requiredApproval = Code-Review+2 |
| ``` |
| \ |
| Example per-project configuration in `code-owners.config` that requires |
| `Code-Review+2` as code owner approval: |
| |
| ``` |
| [codeOwners] |
| requiredApproval = Code-Review+2 |
| ``` |
| \ |
| **IMPORTANT:** The specified label must exist for the project. Make sure that |
| the project configuration contains or inherits the definition of the specified |
| label. How to configure a label in `project.config` is described |
| [here](../../../Documentation/config-labels.html#label_custom). You may also use |
| the Gerrit REST API to |
| [create new label definitions](../../../Documentation/rest-api-projects.html#create-label). |
| |
| **IMPORTANT:** Code owners need to be granted permissions to vote on the |
| specified label so that they can grant the code owner approval on changes (see |
| [next step](#grantCodeOwnerPermissions)). |
| |
| **NOTE:** To submit a change, code owner approvals are required **in addition** |
| to labels that are otherwise required for submission. If you want to rely solely |
| on code owner approvals, you may need to reconfigure existing label definitions |
| (e.g. change the `Code-Review` label definition to not require a `Code-Review+2` |
| vote for change submission). |
| |
| **NOTE:** Whether code owner approvals are sticky across patch sets depends on |
| the definition of the required label. If the label definition has [copy |
| rules](../../../Documentation/config-labels.html#label_copyAnyScore) enabled so |
| that votes are sticky across patch sets, then also the code owner approvals |
| which are based on these votes will be sticky. |
| |
| ### <a id="grantCodeOwnerPermissions">5. Grant code owners permission to vote on the label that counts as code owner approval |
| |
| Code owners must be granted permissions to vote on the label that counts as code |
| owner approval (see [previous step](#configureCodeOwnerApproval)) in order to be |
| able grant the code owner approval on changes so that they can be submitted. |
| |
| As for any other permission, the |
| [permission to vote on labels](../../../Documentation/access-control.html#category_review_labels) |
| needs to be granted via the access screen of the project or a parent project (at |
| `https://<host>/admin/repos/<project-name>,access`). |
| |
| ### <a id="configureCodeOwnerOverridesAndFallbackCodeOwners">6. Configure code owner overrides & fallback code owners |
| |
| It's possible that some files have no code owners defined (e.g. missing root |
| code owner config file). In this case changes for these files cannot be code |
| owner approved and hence cannot be submitted. |
| |
| To avoid that this leads to unsubmittable changes, it is recommended to |
| configure code owner overrides and/or fallback code owners. |
| |
| #### <a id="configureCodeOwnerOverrides">Configure code owner overrides |
| |
| It's possible to configure [code owner |
| overrides](user-guide.html#codeOwnerOverride) that allow privileged users to |
| override code owner approvals. This means they can approve changes without being |
| a code owner. |
| |
| Configuring code owner overrides is optional, but recommended. |
| |
| To enable code owner overrides, you must define which label vote is required for |
| an override. This can be done globally by setting |
| [plugin.code-owners.overrideApproval](config.html#pluginCodeOwnersOverrideApproval) |
| in `gerrit.config` (requires to be a host admin) or per project by setting |
| [codeOwners.overrideApproval](config.html#codeOwnersOverrideApproval) in the |
| [code-owners.config](config-faqs.html#updateCodeOwnersConfig) file in the |
| `refs/meta/config` branch (requires to be a project owner). |
| |
| Example global configuration in `gerrit.config` that requires |
| `Owners-Override+1` for a code owner override: |
| |
| ``` |
| [plugin "code-owners"] |
| overrideApproval = Owners-Override+1 |
| ``` |
| \ |
| Example per-project configuration in `code-owners.config` that requires |
| `Owners-Override+1` for a code owner override: |
| |
| ``` |
| [codeOwners] |
| overrideApproval = Owners-Override+1 |
| ``` |
| \ |
| **IMPORTANT:** Same as for the label that is required as code owner approval |
| (see [above](#configureCodeOwnerApproval)), the specified label must exist for |
| the project and permissions to vote on it must be granted separately. |
| |
| Example for the definition of the `Owners-Override` label in `project.config`: |
| ``` |
| [label "Owners-Override"] |
| function = NoBlock |
| value = 0 No score |
| value = +1 Override |
| defaultValue = 0 |
| ``` |
| |
| #### <a id="configureFallbackCodeOwners">Configure fallback code owners |
| |
| It is possible to configure a policy for [fallback code |
| owners](config.html#pluginCodeOwnersFallbackCodeOwners) that controls who should |
| own files for which no code owners have been defined, e.g. all users or no one |
| (default). |
| |
| Configuring fallback code owners is optional. For the initial rollout of the |
| code-owners plugin it is highly recommended to allow fallback code owners so |
| that projects that do not have any code owner config files yet are not |
| disrupted. |
| |
| ### <a id="configureAllowedEmailDomains">7. Configure allowed email domains |
| |
| By default, the emails in code owner config files that make users code owners |
| can have any email domain. It is strongly recommended to limit the allowed email |
| domains to trusted email providers (e.g. email providers that guarantee that an |
| email is never reassigned to a different user, since otherwise the user to which |
| the email is reassigned automatically takes over the code ownerships that are |
| assigned to this email, which is a security issue). |
| |
| To limit the allowed email domains, set |
| [plugin.code-owners.allowedEmailDomain](config.html#pluginCodeOwnersAllowedEmailDomain) |
| in `gerrit.config` (requires to be a host admin). |
| |
| Example `gerrit.config` configuration with restricted email domains: |
| ``` |
| [plugin "code-owners"] |
| allowedEmailDomain = google.com |
| allowedEmailDomain = chromium.org |
| ``` |
| |
| **NOTE:** Allowed email domains cannot be configured on project level. |
| |
| ### <a id="optionalConfiguration">8. Optional Configuration |
| |
| Other optional configuration parameters are described in the [config |
| documentation](config.html). |
| |
| Examples (not an exhaustive list): |
| |
| * [Global code owners](config.html#pluginCodeOwnersGlobalCodeOwner) |
| * Whether [an implicit code owner approval from the change owner is |
| assumed](config.html#codeOwnersEnableImplicitApprovals) (only for patch sets |
| that are uploaded by the change owner) |
| * [Merge commit strategy](config.html#codeOwnersMergeCommitStrategy) that |
| decides which files of merge commits require code owner approvals |
| * [File extension](config.html#codeOwnersFileExtension) that should be used for |
| code owner config files. |
| * Whether [pure reverts should be exempted from requiring code owner |
| approvals](config.html#pluginCodeOwnersExemptPureReverts). |
| * [Users that are exempted from requiring code owner |
| approvals](config.html#pluginCodeOwnersExemptedUser) |
| * [configure](config.html#pluginCodeOwnersPathExpressions) a different syntax |
| for [path expressions](path-expressions.html) in code owner config files (e.g. |
| use plain globs) |
| |
| ### <a id="stopUsingFindOwners">9.Stop using the find-owners Prolog submit rule |
| |
| This section can be skipped if you haven't used the `find-owners` plugin so far. |
| |
| The `find-owners` plugin comes with a Prolog submit rule that prevents the |
| submission of changes that have insufficient code owner approvals. With the |
| `code-owners` plugin this is now being checked by a submit rule that is |
| implemented in Java. Hence the Prolog submit rule from the `find-owners` plugin |
| is no longer needed and you should stop using it before you start using the |
| `code-owners` plugin. |
| |
| **NOTE:** It's possible to use the submit rules from the `code-owners` plugin |
| and `find-owners` plugin at the same time, but then certains things like [code |
| owner overrides](user-guide.html#codeOwnerOverride) and |
| [exemptions](user-guide.html#codeOwnerExemptions) are not working (as they are |
| not supported by the `find-owners` plugin). |
| |
| **NOTE:** Do not yet disable/uninstall the `find-owners` plugin, see |
| [below](#disableFindOwnersPlugin) which preconditions needs to be fulfilled for |
| this. |
| |
| ### <a id="configureCodeOwners">10. Add an initial code owner configuration at root level |
| |
| By enabling the code owners functionality, a code owner approval from code |
| owners will be required for submitting changes. |
| |
| If code owners are not defined yet, changes can only be submitted |
| |
| * with a code owner override (if override labels have been configured, see |
| [above](#configureCodeOwnerOverrides)) |
| * with an approval from a fallback code owner (if fallback code owners have been |
| configured, see [above](#configureFallbackCodeOwners)). |
| |
| Right after the code owners functionality got enabled for a project/branch, it |
| is recommended to add an initial code owner configuration at the root level that |
| defines the code owners for the project/branch explicitly. |
| |
| **NOTE:** Submitting the initial code owner configuration requires an override |
| or an approval from a fallback code owner (see above). |
| |
| **NOTE:** It's recommended to add the initial code owner configuration only |
| after enabling the code owners functionality so that the code owner |
| configuration is [validated](validation.html) on upload, which prevents |
| submitting an invalid code owner config that may block the submission of all |
| changes (e.g. if it is not parseable). |
| |
| **NOTE** If the repository contains pre-existing code owner config files, it is |
| recommended to validate them via the [Check code owners files REST |
| endpoint](rest-api.html#check-code-owner-config-files) and fix the reported |
| issues. |
| |
| **NOTE:** If neither code owner overrides nor fallback code owners are |
| configured an initial code owner configuration must be added before enabling the |
| code owners functionality as otherwise changes can become unsubmittable (they |
| require code-owner approvals, but noone can provide nor override them). |
| |
| **NOTE:** Instead of defining root code owners in all branches, you may also |
| define default code owners in the `refs/meta/config` branch, that then apply to |
| all branches (also see [config guide](config-guide.html#codeOwners)). |
| |
| ### <a id="disableFindOwnersPlugin">11. Disable/uninstall the find-owners plugin |
| |
| If the `find-owners` plugin has been used so far, you likely want to |
| disable/uninstall it after the `code-owners` plugin has been set up. Before |
| doing this it is important to remove all usages of the [find-owners Prolog |
| predicates](https://gerrit.googlesource.com/plugins/find-owners/+/HEAD/src/main/resources/Documentation/config.md#submit-rules-and-filters) |
| from all Prolog submit rules and filters. If the find-owners Prolog predicates |
| are still used when the `find-owners` plugin is disabled/uninstalled, they can |
| no longer be resolved which breaks the submit rules using them. If submit rules |
| are broken, changes cannot be submitted, which most users would consider an |
| outage. Hence before disabling/uninstalling the `find-owners` plugin you want |
| to be sure that the find-owners Prolog predicates are no longer used. |
| |
| --- |
| |
| Back to [@PLUGIN@ documentation index](index.html) |
| |
| Part of [Gerrit Code Review](../../../Documentation/index.html) |