contributors/guide/owners: Document OWNERS' 'filters' key

Catching up with kubernetes/test-infra@e8c6b7f1 (Add OWNERS file
support for regexp filters, 2018-01-08, kubernetes/test-infra#6411).

The relative-path assertion is based on Cole's comment [1].  The
sibling limitation is based on Cole's comment [2].

[1]: https://github.com/kubernetes/community/pull/2596#discussion_r213768438
[2]: https://github.com/kubernetes/community/pull/2596#discussion_r213788099
This commit is contained in:
W. Trevor King 2018-08-28 16:46:22 -07:00
parent ab4ada7475
commit 99f251cbca
1 changed files with 42 additions and 2 deletions

View File

@ -34,12 +34,14 @@ OWNERS files are in YAML format and support the following keys:
effect on `a/deep/nested/bit/of/code` effect on `a/deep/nested/bit/of/code`
- `reviewers`: a list of GitHub usernames or aliases that are good candidates to `/lgtm` a PR - `reviewers`: a list of GitHub usernames or aliases that are good candidates to `/lgtm` a PR
The above keys constitute a *simple OWNERS configuration*.
All users are expected to be assignable. In GitHub terms, this means they are either collaborators All users are expected to be assignable. In GitHub terms, this means they are either collaborators
of the repo, or members of the organization to which the repo belongs. of the repo, or members of the organization to which the repo belongs.
A typical OWNERS file looks like: A typical OWNERS file looks like:
``` ```yaml
approvers: approvers:
- alice - alice
- bob # this is a comment - bob # this is a comment
@ -49,6 +51,41 @@ reviewers:
- sig-foo # this is an alias - sig-foo # this is an alias
``` ```
#### Filters
An OWNERS file may also include a `filters` key.
The `filters` key is a map whose keys are [Go regular expressions][go-regex] and whose values are [simple OWNERS configurations](#owners).
The regular expression keys are matched against paths relative to the OWNERS file in which the keys are declared.
For example:
```yaml
filters:
".*":
labels:
- re/all
"\\.go$":
labels:
- re/go
```
If you set `filters` you must not set a [simple OWNERS configuration](#owners) outside of `filters`.
For example:
```yaml
# WARNING: This use of 'labels' and 'filters' as siblings is invalid.
labels:
- re/all
filters:
"\\.go$":
labels:
- re/go
```
Instead, set a `.*` key inside `filters` (as shown in the previous example).
**WARNING**: The `approve` plugin [does not currently respect `filters`][test-infra-7690].
Until that is fixed, `filters` should only be used for the the `labels` key (as shown in the above example).
### OWNERS_ALIASES ### OWNERS_ALIASES
Each repo may contain at its root an OWNERS_ALIAS file. Each repo may contain at its root an OWNERS_ALIAS file.
@ -62,7 +99,7 @@ publicly auditable.
A sample OWNERS_ALISES file looks like: A sample OWNERS_ALISES file looks like:
``` ```yaml
aliases: aliases:
sig-foo: sig-foo:
- david - david
@ -257,3 +294,6 @@ Good examples of OWNERS usage:
- there are more `reviewers` than `approvers` - there are more `reviewers` than `approvers`
- the `approvers` are not in the `reviewers` section - the `approvers` are not in the `reviewers` section
- OWNERS files that are regularly updated (at least once per release) - OWNERS files that are regularly updated (at least once per release)
[go-regex]: https://golang.org/pkg/regexp/#pkg-overview
[test-infra-7690]: https://github.com/kubernetes/test-infra/issues/7690