summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contributors/devel/owners.md259
-rw-r--r--contributors/guide/README.md9
-rw-r--r--contributors/guide/owners.md259
3 files changed, 268 insertions, 259 deletions
diff --git a/contributors/devel/owners.md b/contributors/devel/owners.md
index eb42335a..1be75e5f 100644
--- a/contributors/devel/owners.md
+++ b/contributors/devel/owners.md
@@ -1,259 +1,4 @@
-# OWNERS files
+This document has been moved to https://git.k8s.io/community/contributors/guide/owners.md
-## Overview
+This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first.
-OWNERS files are used to designate responsibility over different parts of the Kubernetes codebase.
-Today, we use them to assign the **reviewer** and **approver** roles used in our two-phase code
-review process. Our OWNERS files were inspired by [Chromium OWNERS
-files](https://chromium.googlesource.com/chromium/src/+/master/docs/code_reviews.md), which in turn
-inspired [GitHub's CODEOWNERS files](https://help.github.com/articles/about-codeowners/).
-
-The velocity of a project that uses code review is limited by the number of people capable of
-reviewing code. The quality of a person's code review is limited by their familiarity with the code
-under review. Our goal is to address both of these concerns through the prudent use and maintenance
-of OWNERS files
-
-## OWNERS spec
-
-The [k8s.io/test-infra/prow/repowners package](https://git.k8s.io/test-infra/prow/repoowners/repoowners.go)
-is the main consumer of OWNERS files. If this page is out of date, look there.
-
-### OWNERS
-
-Each directory that contains a unit of independent code or content may also contain an OWNERS file.
-This file applies to everything within the directory, including the OWNERS file itself, sibling
-files, and child directories.
-
-OWNERS files are in YAML format and support the following keys:
-
-- `approvers`: a list of GitHub usernames or aliases that can `/approve` a PR
-- `labels`: a list of GitHub labels to automatically apply to a PR
-- `options`: a map of options for how to interpret this OWNERS file, currently only one:
- - `no_parent_owners`: defaults to `false` if not present; if `true`, exclude parent OWNERS files.
- Allows the use case where `a/deep/nested/OWNERS` file prevents `a/OWNERS` file from having any
- effect on `a/deep/nested/bit/of/code`
-- `reviewers`: a list of GitHub usernames or aliases that are good candidates to `/lgtm` a PR
-
-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.
-
-A typical OWNERS file looks like:
-
-```
-approvers:
- - alice
- - bob # this is a comment
-reviewers:
- - alice
- - carol # this is another comment
- - sig-foo # this is an alias
-```
-
-### OWNERS_ALIASES
-
-Each repo may contain at its root an OWNERS_ALIAS file.
-
-OWNERS_ALIAS files are in YAML format and support the following keys:
-
-- `aliases`: a mapping of alias name to a list of GitHub usernames
-
-We use aliases for groups instead of GitHub Teams, because changes to GitHub Teams are not
-publicly auditable.
-
-A sample OWNERS_ALISES file looks like:
-
-```
-aliases:
- sig-foo:
- - david
- - erin
- sig-bar:
- - bob
- - frank
-```
-
-GitHub usernames and aliases listed in OWNERS files are case-insensitive.
-
-## Code Review using OWNERS files
-
-This is a simplified description of our [full PR testing and merge
-workflow](/contributors/devel/pull-requests.md#the-testing-and-merge-workflow)
-that conveniently forgets about the existence of tests, to focus solely on the roles driven by
-OWNERS files. Please see [below](#automation-using-owners-files) for details on how specific
-aspects of this process may be configured on a per-repo basis.
-
-### The Code Review Process
-
-- The **author** submits a PR
-- Phase 0: Automation suggests **reviewers** and **approvers** for the PR
- - Determine the set of OWNERS files nearest to the code being changed
- - Choose at least two suggested **reviewers**, trying to find a unique reviewer for every leaf
- OWNERS file, and request their reviews on the PR
- - Choose suggested **approvers**, one from each OWNERS file, and list them in a comment on the PR
-- Phase 1: Humans review the PR
- - **Reviewers** look for general code quality, correctness, sane software engineering, style, etc.
- - Anyone in the organization can act as a **reviewer** with the exception of the individual who
- opened the PR
- - If the code changes look good to them, a **reviewer** types `/lgtm` in a PR comment or review;
- if they change their mind, they `/lgtm cancel`
- - Once a **reviewer** has `/lgtm`'ed, [prow](https://prow.k8s.io)
- ([@k8s-ci-robot](https://github.com/k8s-ci-robot/)) applies an `lgtm` label to the PR
-- Phase 2: Humans approve the PR
- - The PR **author** `/assign`'s all suggested **approvers** to the PR, and optionally notifies
- them (eg: "pinging @foo for approval")
- - Only people listed in the relevant OWNERS files, either directly or through an alias, can act
- as **approvers**, including the individual who opened the PR
- - **Approvers** look for holistic acceptance criteria, including dependencies with other features,
- forwards/backwards compatibility, API and flag definitions, etc
- - If the code changes look good to them, an **approver** types `/approve` in a PR comment or
- review; if they change their mind, they `/approve cancel`
- - [prow](https://prow.k8s.io) ([@k8s-ci-robot](https://github.com/k8s-ci-robot/)) updates its
- comment in the PR to indicate which **approvers** still need to approve
- - Once all **approvers** (one from each of the previously identified OWNERS files) have approved,
- [prow](https://prow.k8s.io) ([@k8s-ci-robot](https://github.com/k8s-ci-robot/)) applies an
- `approved` label
-- Phase 3: Automation merges the PR:
- - If all of the following are true:
- - All required labels are present (eg: `lgtm`, `approved`)
- - Any blocking labels are missing (eg: there is no `do-not-merge/hold`, `needs-rebase`)
- - And if any of the following are true:
- - there are no presubmit prow jobs configured for this repo
- - there are presubmit prow jobs configured for this repo, and they all pass after automatically
- being re-run one last time
- - Then the PR will automatically be merged
-
-### Quirks of the Process
-
-There are a number of behaviors we've observed that while _possible_ are discouraged, as they go
-against the intent of this review process. Some of these could be prevented in the future, but this
-is the state of today.
-
-- An **approver**'s `/lgtm` is simultaneously interpreted as an `/approve`
- - While a convenient shortcut for some, it can be surprising that the same command is interpreted
- in one of two ways depending on who the commenter is
- - Instead, explicitly write out `/lgtm` and `/approve` to help observers, or save the `/lgtm` for
- a **reviewer**
- - This goes against the idea of having at least two sets of eyes on a PR, and may be a sign that
- there are too few **reviewers** (who aren't also **approver**)
-- An **approver** can `/approve no-issue` to bypass the requirement that PR's must have linked
- issues
- - There is disagreement within the community over whether requiring every PR to have a linked
- issue provides value
- - Protest is being expressed in the form of overuse of `/approve no-issue`
- - Instead, suggest to the PR **author** that they edit the PR description to include a linked
- issue
- - This is a sign that we need to actually deliver value with linked issues, or be able to define
- what a "trivial" PR is in a machine-enforceable way to be able to automatically waive the linked
- issue requirement
-- Technically, anyone who is a member of the kubernetes GitHub organization can drive-by `/lgtm` a
- PR
- - Drive-by reviews from non-members are encouraged as a way of demonstrating experience and
- intent to become a collaborator or reviewer
- - Drive-by `/lgtm`'s from members may be a sign that our OWNERS files are too small, or that the
- existing **reviewers** are too unresponsive
- - This goes against the idea of specifying **reviewers** in the first place, to ensure that
- **author** is getting actionable feedback from people knowledgeable with the code
-- **Reviewers**, and **approvers** are unresponsive
- - This causes a lot of frustration for **authors** who often have little visibility into why their
- PR is being ignored
- - Many **reviewers** and **approvers** are so overloaded by GitHub notifications that @mention'ing
- is unlikely to get a quick response
- - If an **author** `/assign`'s a PR, **reviewers** and **approvers** will be made aware of it on
- their [PR dashboard](https://k8s-gubernator.appspot.com/pr)
- - An **author** can work around this by manually reading the relevant OWNERS files,
- `/unassign`'ing unresponsive individuals, and `/assign`'ing others
- - This is a sign that our OWNERS files are stale; pruning the **reviewers** and **approvers** lists
- would help with this
-- **Authors** are unresponsive
- - This costs a tremendous amount of attention as context for an individual PR is lost over time
- - This hurts the project in general as its general noise level increases over time
- - Instead, close PR's that are untouched after too long (we currently have a bot do this after 90
- days)
-
-## Automation using OWNERS files
-
-### ~[`mungegithub`](https://git.k8s.io/test-infra/mungegithub)~ is deprecated
-
-Mungegithub's blunderbuss and submit-queue mungers are currently used for kubernetes/kubernetes. Their
-equivalents are the prow blunderbuss plugin, and prow's tide cmd. These docs will be removed once
-kubernetes/kubernetes has transitioned over to tide.
-
-~Mungegithub polls GitHub, and "munges" things it finds, including issues and pull requests. It is
-stateful, in that restarting it means it loses track of which things it has munged at what time.~
-
-- ~[munger:
- blunderbuss](https://git.k8s.io/test-infra/mungegithub/mungers/blunderbuss.go)~
- - ~responsible for determining **reviewers** and assigning to them~
-- [munger:
- submit-queue](https://git.k8s.io/test-infra/mungegithub/mungers/submit-queue.go)
- - responsible for merging PR's
- - responsible for updating a GitHub status check explaining why a PR can't be merged (eg: a
- missing `lgtm` or `approved` label)
-
-### [`prow`](https://git.k8s.io/test-infra/prow)
-
-Prow receives events from GitHub, and reacts to them. It is effectively stateless. The following
-pieces of prow are used to implement the code review process above.
-
-- [cmd: tide](https://git.k8s.io/test-infra/prow/cmd/tide)
- - per-repo configuration:
- - `labels`: list of labels required to be present for merge (eg: `lgtm`)
- - `missingLabels`: list of labels required to be missing for merge (eg: `do-not-merge/hold`)
- - `reviewApprovedRequired`: defaults to `false`; when true, require that there must be at least
- one [approved pull request review](https://help.github.com/articles/about-pull-request-reviews/)
- present for merge
- - `merge_method`: defaults to `merge`; when `squash` or `rebase`, use that merge method instead
- when clicking a PR's merge button
- - merges PR's once they meet the appropriate criteria as configured above
- - if there are any presubmit prow jobs for the repo the PR is against, they will be re-run one
- final time just prior to merge
-- [plugin: assign](https://git.k8s.io/test-infra/prow/plugins/assign)
- - assigns GitHub users in response to `/assign` comments on a PR
- - unassigns GitHub users in response to `/unassign` comments on a PR
-- [plugin: approve](https://git.k8s.io/test-infra/prow/plugins/assign)
- - per-repo configuration:
- - `issue_required`: defaults to `false`; when `true`, require that the PR description link to
- an issue, or that at least one **approver** issues a `/approve no-isse`
- - `implicit_self_approve`: defaults to `false`; when `true`, if the PR author is in relevant
- OWNERS files, act as if they have implicitly `/approve`'d
- - adds the `approved` label once an **approver** for each of the required
- OWNERS files has `/approve`'d
- - comments as required OWNERS files are satisfied
- - removes outdated approval status comments
-- [plugin: blunderbuss](https://git.k8s.io/test-infra/prow/plugins/assign)
- - determines **reviewers** and requests their reviews on PR's
-- [plugin: lgtm](https://git.k8s.io/test-infra/prow/plugins/lgtm)
- - adds the `lgtm` label when a **reviewer** comments `/lgtm` on a PR
- - the **PR author** may not `/lgtm` their own PR
-- [pkg: k8s.io/test-infra/prow/repowners](https://git.k8s.io/test-infra/prow/repoowners/repoowners.go)
- - parses OWNERS and OWNERS_ALIAS files
- - if the `no_parent_owners` option is encountered, parent owners are excluded from having
- any influence over files adjacent to or underneath of the current OWNERS file
-
-## Maintaining OWNERS files
-
-OWNERS files should be regularly maintained.
-
-We encourage people to self-nominate or self-remove from OWNERS files via PR's. Ideally in the future we could use metrics-driven automation to assist in this process.
-
-We should strive to:
-
-- grow the number of OWNERS files
-- add new people to OWNERS files
-- ensure OWNERS files only contain org members and repo collaborators
-- ensure OWNERS files only contain people are actively contributing to or reviewing the code they own
-- remove inactive people from OWNERS files
-
-Bad examples of OWNERS usage:
-
-- directories that lack OWNERS files, resulting in too many hitting root OWNERS
-- OWNERS files that have a single person as both approver and reviewer
-- OWNERS files that haven't been touched in over 6 months
-- OWNERS files that have non-collaborators present
-
-Good examples of OWNERS usage:
-
-- team aliases are used that correspond to sigs
-- there are more `reviewers` than `approvers`
-- the `approvers` are not in the `reviewers` section
-- OWNERS files that are regularly updated (at least once per release)
diff --git a/contributors/guide/README.md b/contributors/guide/README.md
index 75578f3d..52098ee9 100644
--- a/contributors/guide/README.md
+++ b/contributors/guide/README.md
@@ -198,8 +198,7 @@ sig-testing is responsible for that official infrastructure and CI. The associa
## Documentation
-
-* Please help write this section.
+- [Contributing to Documentation](https://kubernetes.io/editdocs/)
## Issues Management or Triage
@@ -224,3 +223,9 @@ We follow the general [Cloud Native Computing Foundation guidelines](https://git
## Mentorship
Please learn about our mentoring initiatives [here](http://git.k8s.io/community/mentoring/README.md).
+
+# Advanced Topics
+
+This section includes things that need to be documented, but typical contributors do not need to interact with regularly.
+
+- [OWNERS files](owners.md) - The Kubernetes organizations are managed with OWNERS files, which outline which parts of the code are owned by what groups. \ No newline at end of file
diff --git a/contributors/guide/owners.md b/contributors/guide/owners.md
new file mode 100644
index 00000000..eb42335a
--- /dev/null
+++ b/contributors/guide/owners.md
@@ -0,0 +1,259 @@
+# OWNERS files
+
+## Overview
+
+OWNERS files are used to designate responsibility over different parts of the Kubernetes codebase.
+Today, we use them to assign the **reviewer** and **approver** roles used in our two-phase code
+review process. Our OWNERS files were inspired by [Chromium OWNERS
+files](https://chromium.googlesource.com/chromium/src/+/master/docs/code_reviews.md), which in turn
+inspired [GitHub's CODEOWNERS files](https://help.github.com/articles/about-codeowners/).
+
+The velocity of a project that uses code review is limited by the number of people capable of
+reviewing code. The quality of a person's code review is limited by their familiarity with the code
+under review. Our goal is to address both of these concerns through the prudent use and maintenance
+of OWNERS files
+
+## OWNERS spec
+
+The [k8s.io/test-infra/prow/repowners package](https://git.k8s.io/test-infra/prow/repoowners/repoowners.go)
+is the main consumer of OWNERS files. If this page is out of date, look there.
+
+### OWNERS
+
+Each directory that contains a unit of independent code or content may also contain an OWNERS file.
+This file applies to everything within the directory, including the OWNERS file itself, sibling
+files, and child directories.
+
+OWNERS files are in YAML format and support the following keys:
+
+- `approvers`: a list of GitHub usernames or aliases that can `/approve` a PR
+- `labels`: a list of GitHub labels to automatically apply to a PR
+- `options`: a map of options for how to interpret this OWNERS file, currently only one:
+ - `no_parent_owners`: defaults to `false` if not present; if `true`, exclude parent OWNERS files.
+ Allows the use case where `a/deep/nested/OWNERS` file prevents `a/OWNERS` file from having any
+ effect on `a/deep/nested/bit/of/code`
+- `reviewers`: a list of GitHub usernames or aliases that are good candidates to `/lgtm` a PR
+
+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.
+
+A typical OWNERS file looks like:
+
+```
+approvers:
+ - alice
+ - bob # this is a comment
+reviewers:
+ - alice
+ - carol # this is another comment
+ - sig-foo # this is an alias
+```
+
+### OWNERS_ALIASES
+
+Each repo may contain at its root an OWNERS_ALIAS file.
+
+OWNERS_ALIAS files are in YAML format and support the following keys:
+
+- `aliases`: a mapping of alias name to a list of GitHub usernames
+
+We use aliases for groups instead of GitHub Teams, because changes to GitHub Teams are not
+publicly auditable.
+
+A sample OWNERS_ALISES file looks like:
+
+```
+aliases:
+ sig-foo:
+ - david
+ - erin
+ sig-bar:
+ - bob
+ - frank
+```
+
+GitHub usernames and aliases listed in OWNERS files are case-insensitive.
+
+## Code Review using OWNERS files
+
+This is a simplified description of our [full PR testing and merge
+workflow](/contributors/devel/pull-requests.md#the-testing-and-merge-workflow)
+that conveniently forgets about the existence of tests, to focus solely on the roles driven by
+OWNERS files. Please see [below](#automation-using-owners-files) for details on how specific
+aspects of this process may be configured on a per-repo basis.
+
+### The Code Review Process
+
+- The **author** submits a PR
+- Phase 0: Automation suggests **reviewers** and **approvers** for the PR
+ - Determine the set of OWNERS files nearest to the code being changed
+ - Choose at least two suggested **reviewers**, trying to find a unique reviewer for every leaf
+ OWNERS file, and request their reviews on the PR
+ - Choose suggested **approvers**, one from each OWNERS file, and list them in a comment on the PR
+- Phase 1: Humans review the PR
+ - **Reviewers** look for general code quality, correctness, sane software engineering, style, etc.
+ - Anyone in the organization can act as a **reviewer** with the exception of the individual who
+ opened the PR
+ - If the code changes look good to them, a **reviewer** types `/lgtm` in a PR comment or review;
+ if they change their mind, they `/lgtm cancel`
+ - Once a **reviewer** has `/lgtm`'ed, [prow](https://prow.k8s.io)
+ ([@k8s-ci-robot](https://github.com/k8s-ci-robot/)) applies an `lgtm` label to the PR
+- Phase 2: Humans approve the PR
+ - The PR **author** `/assign`'s all suggested **approvers** to the PR, and optionally notifies
+ them (eg: "pinging @foo for approval")
+ - Only people listed in the relevant OWNERS files, either directly or through an alias, can act
+ as **approvers**, including the individual who opened the PR
+ - **Approvers** look for holistic acceptance criteria, including dependencies with other features,
+ forwards/backwards compatibility, API and flag definitions, etc
+ - If the code changes look good to them, an **approver** types `/approve` in a PR comment or
+ review; if they change their mind, they `/approve cancel`
+ - [prow](https://prow.k8s.io) ([@k8s-ci-robot](https://github.com/k8s-ci-robot/)) updates its
+ comment in the PR to indicate which **approvers** still need to approve
+ - Once all **approvers** (one from each of the previously identified OWNERS files) have approved,
+ [prow](https://prow.k8s.io) ([@k8s-ci-robot](https://github.com/k8s-ci-robot/)) applies an
+ `approved` label
+- Phase 3: Automation merges the PR:
+ - If all of the following are true:
+ - All required labels are present (eg: `lgtm`, `approved`)
+ - Any blocking labels are missing (eg: there is no `do-not-merge/hold`, `needs-rebase`)
+ - And if any of the following are true:
+ - there are no presubmit prow jobs configured for this repo
+ - there are presubmit prow jobs configured for this repo, and they all pass after automatically
+ being re-run one last time
+ - Then the PR will automatically be merged
+
+### Quirks of the Process
+
+There are a number of behaviors we've observed that while _possible_ are discouraged, as they go
+against the intent of this review process. Some of these could be prevented in the future, but this
+is the state of today.
+
+- An **approver**'s `/lgtm` is simultaneously interpreted as an `/approve`
+ - While a convenient shortcut for some, it can be surprising that the same command is interpreted
+ in one of two ways depending on who the commenter is
+ - Instead, explicitly write out `/lgtm` and `/approve` to help observers, or save the `/lgtm` for
+ a **reviewer**
+ - This goes against the idea of having at least two sets of eyes on a PR, and may be a sign that
+ there are too few **reviewers** (who aren't also **approver**)
+- An **approver** can `/approve no-issue` to bypass the requirement that PR's must have linked
+ issues
+ - There is disagreement within the community over whether requiring every PR to have a linked
+ issue provides value
+ - Protest is being expressed in the form of overuse of `/approve no-issue`
+ - Instead, suggest to the PR **author** that they edit the PR description to include a linked
+ issue
+ - This is a sign that we need to actually deliver value with linked issues, or be able to define
+ what a "trivial" PR is in a machine-enforceable way to be able to automatically waive the linked
+ issue requirement
+- Technically, anyone who is a member of the kubernetes GitHub organization can drive-by `/lgtm` a
+ PR
+ - Drive-by reviews from non-members are encouraged as a way of demonstrating experience and
+ intent to become a collaborator or reviewer
+ - Drive-by `/lgtm`'s from members may be a sign that our OWNERS files are too small, or that the
+ existing **reviewers** are too unresponsive
+ - This goes against the idea of specifying **reviewers** in the first place, to ensure that
+ **author** is getting actionable feedback from people knowledgeable with the code
+- **Reviewers**, and **approvers** are unresponsive
+ - This causes a lot of frustration for **authors** who often have little visibility into why their
+ PR is being ignored
+ - Many **reviewers** and **approvers** are so overloaded by GitHub notifications that @mention'ing
+ is unlikely to get a quick response
+ - If an **author** `/assign`'s a PR, **reviewers** and **approvers** will be made aware of it on
+ their [PR dashboard](https://k8s-gubernator.appspot.com/pr)
+ - An **author** can work around this by manually reading the relevant OWNERS files,
+ `/unassign`'ing unresponsive individuals, and `/assign`'ing others
+ - This is a sign that our OWNERS files are stale; pruning the **reviewers** and **approvers** lists
+ would help with this
+- **Authors** are unresponsive
+ - This costs a tremendous amount of attention as context for an individual PR is lost over time
+ - This hurts the project in general as its general noise level increases over time
+ - Instead, close PR's that are untouched after too long (we currently have a bot do this after 90
+ days)
+
+## Automation using OWNERS files
+
+### ~[`mungegithub`](https://git.k8s.io/test-infra/mungegithub)~ is deprecated
+
+Mungegithub's blunderbuss and submit-queue mungers are currently used for kubernetes/kubernetes. Their
+equivalents are the prow blunderbuss plugin, and prow's tide cmd. These docs will be removed once
+kubernetes/kubernetes has transitioned over to tide.
+
+~Mungegithub polls GitHub, and "munges" things it finds, including issues and pull requests. It is
+stateful, in that restarting it means it loses track of which things it has munged at what time.~
+
+- ~[munger:
+ blunderbuss](https://git.k8s.io/test-infra/mungegithub/mungers/blunderbuss.go)~
+ - ~responsible for determining **reviewers** and assigning to them~
+- [munger:
+ submit-queue](https://git.k8s.io/test-infra/mungegithub/mungers/submit-queue.go)
+ - responsible for merging PR's
+ - responsible for updating a GitHub status check explaining why a PR can't be merged (eg: a
+ missing `lgtm` or `approved` label)
+
+### [`prow`](https://git.k8s.io/test-infra/prow)
+
+Prow receives events from GitHub, and reacts to them. It is effectively stateless. The following
+pieces of prow are used to implement the code review process above.
+
+- [cmd: tide](https://git.k8s.io/test-infra/prow/cmd/tide)
+ - per-repo configuration:
+ - `labels`: list of labels required to be present for merge (eg: `lgtm`)
+ - `missingLabels`: list of labels required to be missing for merge (eg: `do-not-merge/hold`)
+ - `reviewApprovedRequired`: defaults to `false`; when true, require that there must be at least
+ one [approved pull request review](https://help.github.com/articles/about-pull-request-reviews/)
+ present for merge
+ - `merge_method`: defaults to `merge`; when `squash` or `rebase`, use that merge method instead
+ when clicking a PR's merge button
+ - merges PR's once they meet the appropriate criteria as configured above
+ - if there are any presubmit prow jobs for the repo the PR is against, they will be re-run one
+ final time just prior to merge
+- [plugin: assign](https://git.k8s.io/test-infra/prow/plugins/assign)
+ - assigns GitHub users in response to `/assign` comments on a PR
+ - unassigns GitHub users in response to `/unassign` comments on a PR
+- [plugin: approve](https://git.k8s.io/test-infra/prow/plugins/assign)
+ - per-repo configuration:
+ - `issue_required`: defaults to `false`; when `true`, require that the PR description link to
+ an issue, or that at least one **approver** issues a `/approve no-isse`
+ - `implicit_self_approve`: defaults to `false`; when `true`, if the PR author is in relevant
+ OWNERS files, act as if they have implicitly `/approve`'d
+ - adds the `approved` label once an **approver** for each of the required
+ OWNERS files has `/approve`'d
+ - comments as required OWNERS files are satisfied
+ - removes outdated approval status comments
+- [plugin: blunderbuss](https://git.k8s.io/test-infra/prow/plugins/assign)
+ - determines **reviewers** and requests their reviews on PR's
+- [plugin: lgtm](https://git.k8s.io/test-infra/prow/plugins/lgtm)
+ - adds the `lgtm` label when a **reviewer** comments `/lgtm` on a PR
+ - the **PR author** may not `/lgtm` their own PR
+- [pkg: k8s.io/test-infra/prow/repowners](https://git.k8s.io/test-infra/prow/repoowners/repoowners.go)
+ - parses OWNERS and OWNERS_ALIAS files
+ - if the `no_parent_owners` option is encountered, parent owners are excluded from having
+ any influence over files adjacent to or underneath of the current OWNERS file
+
+## Maintaining OWNERS files
+
+OWNERS files should be regularly maintained.
+
+We encourage people to self-nominate or self-remove from OWNERS files via PR's. Ideally in the future we could use metrics-driven automation to assist in this process.
+
+We should strive to:
+
+- grow the number of OWNERS files
+- add new people to OWNERS files
+- ensure OWNERS files only contain org members and repo collaborators
+- ensure OWNERS files only contain people are actively contributing to or reviewing the code they own
+- remove inactive people from OWNERS files
+
+Bad examples of OWNERS usage:
+
+- directories that lack OWNERS files, resulting in too many hitting root OWNERS
+- OWNERS files that have a single person as both approver and reviewer
+- OWNERS files that haven't been touched in over 6 months
+- OWNERS files that have non-collaborators present
+
+Good examples of OWNERS usage:
+
+- team aliases are used that correspond to sigs
+- there are more `reviewers` than `approvers`
+- the `approvers` are not in the `reviewers` section
+- OWNERS files that are regularly updated (at least once per release)