# Owners

Each file in Fuchsia has a set of owners. These are tracked in files
named `OWNERS`. One of these files is present in the root of the
repository, and many directories have their own `OWNERS` files too.

## Contents

Each `OWNERS` file lists a number of individuals (by their email address) who are
familiar with and can provide code reviews for the contents of that directory.

## Responsibilities

Fuchsia requires changes to have an `Code-Review +2` review, which anyone in the
'OWNERS' file can provide. In addition, many `OWNERS` files
contain a `*` allowing anyone to provide such a `+2`.

## Tools

Gerrit has a "find owners" button that will list all the owners for all the
files modified in a given change. More information on this is available on the
[Gerrit find-owners plugin][find-owners] page.

## Format

Fuchsia uses the [Gerrit file syntax][owners-syntax] for `OWNERS`
files, with the addition of a comment indicating the default Monorail component
to use when filing issues related to the contents of this directory.

Here's an example `OWNERS` file:

```none
# These users are owners
validuser1@example.com
validuser2@example.com

# Users listed elsewhere are also owners
include /path/to/another/OWNERS

# This user is only an owner of the listed file
per-file main.c = validuser3@example.com

# The line below helps automate bug triage
# COMPONENT: TopComponent>SubComponent
```

## Best practices

*   It's important to have at least two individuals in an `OWNERS` file. Having areas
    of Fuchsia with a single owner leads to single points of failure. Having multiple
    owners ensures that knowledge and ownership is shared over areas of Fuchsia.
*   When applicable, `include` owners from another file rather than listing individuals.
    This creates fewer "soruces of truth" and makes OWNERS maintenance easier.

[find-owners]: https://gerrit.googlesource.com/plugins/find-owners/+/HEAD/src/main/resources/Documentation/about.md
[owners-syntax]: https://gerrit.googlesource.com/plugins/find-owners/+/HEAD/src/main/resources/Documentation/syntax.md
