blob: 77f4982a097dab1dafc7be9cbbdaeaedf80195e3 [file] [view]
# Gerrit Owners Plugin
The `owners` plugin has the ability to parse the OWNERS file in the repository for
defining who is the owner of the components in a repository and therefore is
entitled to have the final word for the submission of changes associated with
the files owned.
For details on how to configure either plugin, please refer to the docs in the
specific plugin's folder.``
> **NOTE**: A comprehensive introduction to both `owners` and `owners-autoassign` has been
> given as part of the [GerritMeets series in Jan 2025](https://www.youtube.com/watch?v=NfIHnJF30Wo).
> While a further deep dive specifically into newer features of this plugin was
> give at the [GerritMeets in April 2026](https://www.youtube.com/watch?v=DfKYduVKJEY)
This plugin exposes the `has:approval_owners` predicate that can be used with
Gerrit's own
[submit-requirements](/Documentation/config-submit-requirements.html) to ensure
that a change has been approved by
the relevant users defined in the OWNERS file for the target branch of the
change.
This allows the creation of a single repository with multiple nested projects, each
potentially, used by different users/teams with different roles depending on the
particular path where changes are being proposed. A user can be owner in a
specific directory, thus influencing the approvals of changes there, but not
in others, enabling great flexibility when working on repositories shared by
multiple teams.
## Building the plugin
This plugin is built with Bazel using an in Gerrit tree.
Create symbolic links of the owners folders to the Gerrit source code /plugins
directory.
Create a symbolic link of the owners-common-api plugin to the Gerrit source code
directory, which is needed as a pre-requisite for parsing the OWNERS file
and the other utility functions for discovering it inside the repository branches.
>>>>>>> a022e8a (Initial commit)
Then build the owners and owners-autoassign plugins with the usual Gerrit
plugin compile command.
Example:
```
git clone https://gerrit.googlesource.com/plugins/owners
git clone https://gerrit.googlesource.com/plugins/owners-common-api
git clone --recurse-submodules https://gerrit.googlesource.com/gerrit
cd gerrit/plugins
ln -s ../../owners .
ln -s ../../owners-common-api .
ln -sf owners-common-api/external_plugin_deps.bzl .
cd ..
bazel build plugins/owners
```
NOTE: the owners-common folder is producing shared artifacts for the two plugins
and does not need to be built separately being a direct dependency of the build
process. Its resulting .jar must not be installed in gerrit plugins directory.
The output is created in
```
bazel-bin/plugins/owners/owners.jar
```
To execute the tests run:
```
bazel test plugins/owners/...
```
This project can be imported into the Eclipse IDE:
Add the plugin name to the `CUSTOM_PLUGINS` (and in case when you want to run
tests from the IDE to `CUSTOM_PLUGINS_TEST_DEPS`) in Gerrit core in
`tools/bzl/plugins.bzl` file and run:
```
./tools/eclipse/project.py
```