# Repository Level Ownership # Meta [meta]: #meta - Name: Repository Level Ownership - Start Date: 2022-04-14 - Author(s): @jromero - Status: Draft - RFC Pull Request: (leave blank) - CNB Pull Request: (leave blank) - CNB Issue: (leave blank) - Supersedes: # Summary [summary]: #summary Migrate to using `CODEOWNERS` files to identify repository ownership across the entire project. # Definitions [definitions]: #definitions - sub-teams: Group of individuals focused on narrower sets of concerns related to specific aspects of the project. - maintainers: Individuals that maintain specific code reporitories. # Motivation [motivation]: #motivation The current maintainer model is not ideal for contributors that want to focus on only a single component without taking on responsibilities for all other repositories. By attributing repositories to individual owners, sub-teams can better manage lower-level ownership models. As a consumer, it becomes easier to identify individuals responsible for each repository if the repository had a reference to the "owners" of the repository. # What it is [what-it-is]: #what-it-is A `CODEOWNERS` file in each project repository that identifies individuals and/or teams responsible for the repository. Individuals will be referenced by their GitHub username handle while teams would be referenece by GitHub Team handles. ```CODEOWNERS # GitHub team * @buildpacks/platform-maintainers # individual * @jromero ``` # How it Works [how-it-works]: #how-it-works Instead of a list of repositories and ownership listed in a central place (currently [GOVERNANCE.md][gov]) each repository within the project will contain a `CODEOWNERS` file that lists owners for that particular repository. It is recommended that each repository `CODEOWNERS` file have at least one GitHub team owner as a "fallback" in case any individuals are unreachable. # Migration [migration]: #migration - Remove list of repositories from [`GOVERNANCE.md`][gov]. - Maintainers of current repositories should identify owners and create an `OWNERS` file in each repository. [gov]: https://github.com/buildpacks/community/blob/main/GOVERNANCE.md # Drawbacks [drawbacks]: #drawbacks # Alternatives [alternatives]: #alternatives - Continue to expect ownership of repositories to be only at the sub-team level. - Use _custom_ `OWNERS` and `OWNER_ALIAS` files instead of relying on GitHub specific functionality/standards. - K8s does this: > "We use aliases for groups instead of GitHub Teams, because changes to GitHub Teams are not publicly auditable." # Prior Art [prior-art]: #prior-art - [K8s' OWNERS](https://www.kubernetes.dev/docs/guide/owners/) - [Chromium's OWNERS](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/code_reviews.md#owners-files) - [GitLab's CODEOWNERS](https://docs.gitlab.com/ee/user/project/code_owners.html#set-up-code-owners) # Unresolved Questions [unresolved-questions]: #unresolved-questions - Do owners have to be sub-team maintainers? - This question is out-of-scope of this RFC and would require a larger more impacting governace change and discussion. - How are permissions handled? - At this point in time, it's proposed that maintainers and leads take the appropriete actions necessary to ensure parity. This can easily be automated once adopted.