# This file intentionally contains no individual users. Please do not add any.

# If a contributor has a legitimate need to approve changes across the
# code base to a particular kind of file, add a per-file rule using
# **. If that access is only needed temporarily, provide a date on
# which that per-file rule should be reassessed."

# For broad changes across the codebase, please request Owners-Override approval (see
# https://fuchsia.dev/fuchsia-src/contribute/community/contributor-roles#global-approver)

# NOTE: This file uses the 'GLOB' style path expressions (not the `find-owners`
# style), which is documented here:
# https://android-review.googlesource.com/plugins/code-owners/Documentation/path-expressions.html#findOwnersCaveat
#
# - 'foo' matches the file 'foo' in this directory only (not in any subdirectories).
# - '**/foo' matches the file 'foo' in any subdirectory (not in this directory).
# - '{**/,}foo' matches the file 'foo' in this directory and any subdirectory.
# - '*.foo' matches files in this directory only.
# - '**.foo' matches files in this directory and any subdirectory.

# Build system files throughout the tree
per-file **.gn,**.gni,**.bazel,**.bzl,fuchsia.code-workspace = file:/build/OWNERS

# Go-language support files
per-file go.mod,go.sum,fuchsia.code-workspace = file:/build/go/OWNERS

# Rust-language support files
per-file rustfmt.toml,fuchsia.code-workspace = file:/build/rust/OWNERS

# Python-language support files
per-file pyproject.toml,pyrightconfig.json,fuchsia.code-workspace = file:/build/python/OWNERS

# SHAC support files
per-file shac.star,shac.textproto = file:/scripts/shac/OWNERS

# Add owners to .gitmodules for submodule update tool
per-file .gitmodules = file:/third_party/OWNERS

# Add owners to source related files
per-file .gitignore,.gitmodules = file:/infra/OWNERS

# OSS Compliance:
per-file **/README.fuchsia = file:/build/licenses/OWNERS
per-file **/*LICENSE* = file:/build/licenses/OWNERS
per-file **/*LICENCE* = file:/build/licenses/OWNERS
per-file **/*NOTICE* = file:/build/licenses/OWNERS
per-file **/*COPYRIGHT* = file:/build/licenses/OWNERS
per-file **/*COPYING* = file:/build/licenses/OWNERS

# For the LSC to migrate platform components into Software Assembly, add the
# following special-cased ownership.  This should be re-evaluated for removal
# quarterly, the next review at the start of 2023Q4: 2023-10-01
per-file {**/,}README.md = aaronwood@google.com
per-file **.cml = aaronwood@google.com

# For the effort to reform the way we handle Global Approvers, grant some folks
# ownership over OWNERS files.  This should be re-evaluated for removal
# quarterly, the next review at the start of 2024Q1: 2024-01-01
per-file {**/,}OWNERS = hjfreyer@google.com,neelsa@google.com

per-file .ignore = *
