# Global approvers
#
# Someone should be a global approver if they commonly make large-scale changes
# across the whole codebase. For example, people who maintain the various
# languages, toolchains, and other build system components often should be
# global approvers. Additionally, the set of global approvers should have good
# coverage across the world to support contributors in every timezone.
#
# Code reviews should be sent to a global approver if the change manipulates
# the root directory or has broad (typically mechanical) impact across the
# codebase. If the change manipulates a specific part of the codebase, the code
# review should be sent to a more specific approver. Global approvers should
# use their judgement as to when to redirect review requests to more specific
# approvers.
#
# The list of global approvers will change over time as the set of people
# making large-scale changes evolves over time. Please do not take it
# personally if you are added or removed from this list. This list is not a
# "honor role" of respected contributors. It is a list of people who often make
# certain kinds of changes to the codebase.
#
# To become a Global Approver:
#
# - The applicant must have a demonstrated ability to make large-scale
#   changes across the whole codebase.
#
# - The applicant may self-nominate or get nominated by another committer.
#
# - The applicant must send out a CL notifying all existing global
#   approvers, and then wait at least one business day for discussion and
#   approval.

aaronwood@google.com
abarth@google.com
abdulla@google.com
digit@google.com
etiennej@google.com
ianloic@google.com
jamesr@google.com
jeremymanson@google.com
joshuaseaton@google.com
lindkvist@google.com
maruel@google.com
mcgrathr@google.com
phosek@google.com
qsr@google.com
shayba@google.com
surajmalhotra@google.com
tamird@google.com
thatguy@google.com
tmandry@google.com

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

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

# Python-language support files
per-file pyrightconfig.json = file:/build/python/OWNERS
