blob: fa046cc0431b207648f2e97a6280cc7d84a28ee2 [file] [view]
Configuration
=============
## The **`submit_rule`** and **`submit_filter`**
To enforce the *owner-approval-before-submit* rule, this plugin provides
**`find_owners:submit_rule/1`** and **`find_owners:submit_filter/2`**
predicates for Gerrit projects.
If a Gerrit project wants to enforce this *owner-approval* policy,
it can add a `submit_rule` to its `rules.pl` file like this:
```prolog
submit_rule(S) :- find_owners:submit_rule(S).
```
If many projects need this *owner-approval* policy,
each of them can have a `submit_rule` defined, or we can simply
define a `submit_filter` in their common parent project's
`rules.pl` file like this:
```prolog
submit_filter(In, Out) :- find_owners:submit_filter(In, Out).
```
By default the `find_owners:submit_rule` calls `gerrit:default_submit`,
and the `find_owners:submit_filter` passes `In` to `Out`.
They add special labels to the output to indicate if *owner* approval
is needed or missing.
* If a change does not need owner approval, `label('Owner-Approved', may(_))`
is added. This is an *optional* requirement that does not affect
a change's submittability.
* If a change needs owner approval, and all changed files have at least one
*owner* voted +1 and no negative vote,
`label('Owner-Approved', ok(user(1)))` is added.
* If a change needs owner approval, but some changed file has no *owner*
+1 vote or has negative *owner* vote,
`label('Owner-Review-Vote', may(_))` is added.
This will show the label but not disable the Submit button.
When a user clicks on the Submit button,
a window will pop up and ask the user to
(1) add missing *owners* to the reviewers list and/or
ask for owner's +1 Code-Review votes, or
(2) add `Exempt-From-Owner-Approval:` to the commit message.
The **`Find Owners`** button is useful in this situation to find
the missing *owners* or +1 votes of any changed files.
When `label('Owner-Approved', may(_))` is added to the submit rule output,
Gerrit displays a grey 'Owner-Approved' label. To avoid confusion,
this 'may(_)' state label could be removed by the `submit_filter` of
the root level `All-Projects`. Special automerge processes could
create changes that do not need either Code-Review vote or owner approval.
Such special conditions can also be handled in the `submit_filter`
of `All-Projects`.
A change can be declared as exempt from owner approval in the submit message,
with a special keyword `Exempt-From-Owner-Approval:` followed by some
explanation.
## Default minimal owner vote level
When `find_owners:submit_rule(S)` or `find_owners:submit_filter(In,Out)`
are applied, the default requirement is **+1** Code-Review
vote from at least one owner of every changed file.
## Default OWNERS file name
This plugin finds owners in default OWNERS files.
If a project has already used OWNERS files for other purpose,
the "ownersFileName" parameter can be used to change the default.
## Validate OWNERS files before upload
To check syntax of OWNERS files before they are uploaded,
set the following variable in project.config files.
```bash
[plugin "find-owners"]
rejectErrorInOwners = true
```
## Example 0, call `submit_filter/2`
The simplest configuration adds to `rules.pl` of the root
`All-Projects` project.
```prolog
submit_filter(In, Out) :- find_owners:submit_filter(In, Out).
```
All projects will need at least +1 vote from an owner of every changed files.
## Example 1, call `submit_rule/2`
Add the following to `rules.pl` of project P,
to change the default and require **+2** owner review votes.
```prolog
submit_rule(S) :- find_owners:submit_rule(S, 2).
```
All patches to project P will need at least +2 vote from
an owner of every changed files.
## Example 2, call `submit_filter/3`
Add the following to `rules.pl` of project P,
to change the default and require **+2** owner review votes.
```prolog
submit_filter(In, Out) :- find_owners:submit_filter(In, Out, 2).
```
All child projects of project P will need at least +2 vote from
an owner of every changed files.
## Example 3, define `minOwnerVoteLevel`
Add the following to global `gerrit.config`
or a project's `project.config` file,
to change the default and require **+2** owner review votes.
```bash
[plugin "find-owners"]
minOwnerVoteLevel = 2
```
## Example 4, call `remove_may_label/2`
If a change does not need *owner approval*, the *optional* greyed out
`Owner-Approved` label might cause some confusion.
To remove that label, we can add the following to `rules.pl` of
the root `All-Projects` project.
```prolog
submit_filter(In, Out) :-
find_owners:submit_filter(In, Temp),
find_owners:remove_may_label(Temp, Out).
```
## Example 5, call `remove_need_label/2`
To make all changes with some special property,
e.g., from the auto merger, exempt from owner approval,
we can add a special filter to `rules.pl` of the root `All-Projects` project.
```prolog
submit_filter(In, Out) :-
is_exempt_from_owner_approval(), % define-your-own-rule
find_owners:remove_need_label(In, Out).
```
## Example 6, define `addDebugMsg`
Add the following to global `gerrit.config`,
to debug the find-owners plugin.
```bash
[plugin "find-owners"]
addDebugMsg = true
```
## Example 7, change default OWNERS file name
Add the following to global `gerrit.config`
or a project's `project.config` file,
to change the default "OWNERS" file name,
e.g., to "OWNERS.android".
```bash
[plugin "find-owners"]
ownersFileName = OWNERS.android
```