This change adds an implicit approval for any change by the PR author. This allows for a PR author to provide the required owner approval for an area of the code base. This change helps to align the review methodology with how Google's internal system works. Where anyone is able to provide the LGTM for a change if thats all that is needed. PR Close #36915
1232 lines
41 KiB
YAML
1232 lines
41 KiB
YAML
####################################################################################
|
|
####################################################################################
|
|
# Angular Code Ownership #
|
|
####################################################################################
|
|
####################################################################################
|
|
#
|
|
# Configuration of code ownership and review approvals for the angular/angular repo.
|
|
#
|
|
# More info: https://docs.pullapprove.com/
|
|
#
|
|
# =========================================================
|
|
# General rules / philosophy
|
|
# =========================================================
|
|
#
|
|
# - We trust that people do the right thing and won't approve changes they don't feel confident reviewing
|
|
# - We enforce that only approved PRs are merged ensuring that unreviewed code isn't accidentally merged
|
|
# - We distribute approval rights as much as possible to help us scale better
|
|
# - Groups have one or two global approvers groups as fallbacks:
|
|
# - @angular/fw-global-approvers: for approving minor changes, large-scale refactorings, and emergency situations.
|
|
# - @angular/fw-global-approvers-for-docs-only-changes: for approving minor documentation-only changes that don't require engineering review
|
|
# - A small number of file groups have very limited number of reviewers because incorrect changes to the files they guard would have serious consequences (e.g. security, public api)
|
|
#
|
|
# Configuration nuances:
|
|
#
|
|
# - This configuration works in conjunction with the protected branch settings that require all changes to be made via pull requests with at least one approval.
|
|
# - This approval can come from an appropriate codeowner, or any repo collaborator (person with write access) if the PR is authored by a codeowner.
|
|
# - All groups whose pullapprove rules are matched will be required for overall approval.
|
|
#
|
|
# NOTE:
|
|
# In the case of emergency, the repo administrators which include the current angular caretaker
|
|
# can bypass this reviewer approval requirement, this is expected as a last resort and to be
|
|
# done exceedingly sparingly.
|
|
|
|
####################################################################################
|
|
# GitHub usernames
|
|
####################################################################################
|
|
# See reviewer list under `required-minimum-review` group. Team member names and
|
|
# usernames are managed there.
|
|
|
|
|
|
####################################################################################
|
|
# Approval Groups
|
|
####################################################################################
|
|
# =========================================================
|
|
# @angular/framework-global-approvers
|
|
# =========================================================
|
|
# Used for approving minor changes, large-scale refactorings, and in emergency situations.
|
|
#
|
|
# IgorMinar
|
|
# jelbourn
|
|
# josephperrott
|
|
# mhevery
|
|
#
|
|
# =========================================================
|
|
# @angular/framework-global-approvers-for-docs-only-changes
|
|
# =========================================================
|
|
# Used for approving minor documentation-only changes that don't require engineering review.
|
|
#
|
|
# aikidave
|
|
# gkalpak
|
|
# kapunahelewong
|
|
# petebacondarwin
|
|
|
|
|
|
version: 3
|
|
|
|
# Meta field that goes unused by PullApprove to allow for defining aliases to be
|
|
# used throughout the config.
|
|
meta:
|
|
can-be-global-approved: &can-be-global-approved "\"global-approvers\" not in groups.approved"
|
|
can-be-global-docs-approved: &can-be-global-docs-approved "\"global-docs-approvers\" not in groups.approved"
|
|
defaults: &defaults
|
|
reviews:
|
|
# Authors provide their approval implicitly, this approval allows for a reviewer
|
|
# from a group not to need a review specifically for an area of the repository
|
|
# they own. This is coupled with the `required-minimum-review` group which requires
|
|
# that all PRs are reviewed by at least one team member who is not the author of
|
|
# the PR.
|
|
author_value: 1
|
|
|
|
# turn on 'draft' support
|
|
# https://docs.pullapprove.com/config/github-api-version/
|
|
# https://developer.github.com/v3/previews/#draft-pull-requests
|
|
github_api_version: "shadow-cat-preview"
|
|
|
|
pullapprove_conditions:
|
|
- condition: "'WIP' not in title"
|
|
unmet_status: pending
|
|
explanation: "Waiting to send reviews as PR is WIP"
|
|
- condition: "'PR state: WIP' not in labels"
|
|
unmet_status: pending
|
|
explanation: "Waiting to send reviews as PR is WIP"
|
|
- condition: "not draft"
|
|
unmet_status: pending
|
|
explanation: "Waiting to send reviews as PR is in draft"
|
|
|
|
|
|
groups:
|
|
# =========================================================
|
|
# Require review on all PRs
|
|
#
|
|
# All PRs require at least one review. This rule will not
|
|
# request any reviewers, however will require that at least
|
|
# one review is provided before the group is satisfied.
|
|
# =========================================================
|
|
required-minimum-review:
|
|
reviews:
|
|
request: 0 # Do not request any reviews from the reviewer group
|
|
required: 1 # Require that all PRs have approval from at least one of the users in the group
|
|
author_value: 0 # The author of the PR cannot provide an approval for themself
|
|
reviewers:
|
|
users:
|
|
- aikidave # Dave Shevitz
|
|
- alan-agius4 # Alan Agius
|
|
- alxhub # Alex Rickabaugh
|
|
- AndrewKushnir # Andrew Kushnir
|
|
- andrewseguin # Andrew Seguin
|
|
- atscott # Andrew Scott
|
|
- ayazhafiz # Ayaz Hafiz
|
|
- clydin # Charles Lyding
|
|
- crisbeto # Kristiyan Kostadinov
|
|
- dennispbrown # Denny Brown
|
|
- devversion # Paul Gschwendtner
|
|
- dgp1130 # Doug Parker
|
|
- filipesilva # Filipe Silva
|
|
- gkalpak # Georgios Kalpakas
|
|
- gregmagolan # Greg Magolan
|
|
- IgorMinar # Igor Minar
|
|
- jbogarthyde # Judy Bogart
|
|
- jelbourn # Jeremy Elbourn
|
|
- JiaLiPassion # Jia Li
|
|
- JoostK # Joost Koehoorn
|
|
- josephperrott # Joey Perrott
|
|
- juleskremer # Jules Kremer
|
|
- kapunahelewong # Kapunahele Wong
|
|
- kara # Kara Erickson
|
|
- kyliau # Keen Yee Liau
|
|
- manughub # Manu Murthy
|
|
- matsko # Matias Niemela
|
|
- mgechev # Minko Gechev
|
|
- mhevery # Miško Hevery
|
|
- michaelprentice # Michael Prentice
|
|
- mmalerba # Miles Malerba
|
|
- petebacondarwin # Pete Bacon Darwin
|
|
- pkozlowski-opensource # Pawel Kozlowski
|
|
- StephenFluin # Stephen Fluin
|
|
|
|
# =========================================================
|
|
# Global Approvers
|
|
#
|
|
# All reviews performed for global approvals require using
|
|
# the `Reviewed-for:` specifier to set the approval
|
|
# specificity as documented at:
|
|
# https://docs.pullapprove.com/reviewed-for/
|
|
# =========================================================
|
|
global-approvers:
|
|
type: optional
|
|
reviewers:
|
|
teams:
|
|
- framework-global-approvers
|
|
reviews:
|
|
request: 0
|
|
required: 1
|
|
reviewed_for: required
|
|
|
|
# =========================================================
|
|
# Global Approvers For Docs
|
|
#
|
|
# All reviews performed for global docs approvals require
|
|
# using the `Reviewed-for:` specifier to set the approval
|
|
# specificity as documented at:
|
|
# https://docs.pullapprove.com/reviewed-for/
|
|
# =========================================================
|
|
global-docs-approvers:
|
|
type: optional
|
|
reviewers:
|
|
teams:
|
|
- framework-global-approvers-for-docs-only-changes
|
|
reviews:
|
|
request: 0
|
|
required: 1
|
|
reviewed_for: required
|
|
|
|
# =========================================================
|
|
# Framework: Animations
|
|
# =========================================================
|
|
fw-animations:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/animations/**',
|
|
'packages/platform-browser/animations/**',
|
|
'aio/content/guide/animations.md',
|
|
'aio/content/examples/animations/**',
|
|
'aio/content/images/guide/animations/**',
|
|
'aio/content/guide/complex-animation-sequences.md',
|
|
'aio/content/guide/reusable-animations.md',
|
|
'aio/content/guide/route-animations.md',
|
|
'aio/content/guide/transition-and-triggers.md'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- matsko
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Compiler
|
|
# =========================================================
|
|
fw-compiler:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files.exclude('packages/compiler-cli/ngcc/**'), [
|
|
'packages/compiler/**',
|
|
'packages/examples/compiler/**',
|
|
'packages/compiler-cli/**',
|
|
'aio/content/guide/angular-compiler-options.md',
|
|
'aio/content/guide/aot-compiler.md',
|
|
'aio/content/guide/aot-metadata-errors.md',
|
|
'aio/content/guide/template-typecheck.md '
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alxhub
|
|
- AndrewKushnir
|
|
- JoostK
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Compiler / ngcc
|
|
# =========================================================
|
|
fw-ngcc:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- files.include('packages/compiler-cli/ngcc/**')
|
|
reviewers:
|
|
users:
|
|
- alxhub
|
|
- gkalpak
|
|
- JoostK
|
|
- petebacondarwin
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Migrations
|
|
# =========================================================
|
|
fw-migrations:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- files.include("packages/core/schematics/**")
|
|
reviewers:
|
|
users:
|
|
- alxhub
|
|
- crisbeto
|
|
- devversion
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Core
|
|
# =========================================================
|
|
fw-core:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files.exclude("packages/core/schematics/**"), [
|
|
'packages/core/**',
|
|
'packages/examples/core/**',
|
|
'packages/common/**',
|
|
'packages/platform-browser/**',
|
|
'packages/examples/platform-browser/**',
|
|
'packages/platform-browser-dynamic/**',
|
|
'packages/platform-webworker/**',
|
|
'packages/platform-webworker-dynamic/**',
|
|
'packages/examples/common/**',
|
|
'packages/docs/**',
|
|
'aio/content/guide/accessibility.md',
|
|
'aio/content/examples/accessibility/**',
|
|
'aio/content/guide/architecture-components.md',
|
|
'aio/content/guide/architecture-modules.md',
|
|
'aio/content/guide/architecture-next-steps.md',
|
|
'aio/content/guide/architecture-services.md',
|
|
'aio/content/guide/architecture.md',
|
|
'aio/content/examples/architecture/**',
|
|
'aio/content/images/guide/architecture/**',
|
|
'aio/content/guide/attribute-directives.md',
|
|
'aio/content/examples/attribute-directives/**',
|
|
'aio/content/images/guide/attribute-directives/**',
|
|
'aio/content/guide/bootstrapping.md',
|
|
'aio/content/examples/bootstrapping/**',
|
|
'aio/content/guide/cheatsheet.md',
|
|
'aio/content/guide/component-interaction.md',
|
|
'aio/content/examples/component-interaction/**',
|
|
'aio/content/images/guide/component-interaction/**',
|
|
'aio/content/guide/component-styles.md',
|
|
'aio/content/examples/component-styles/**',
|
|
'aio/content/guide/dependency-injection.md',
|
|
'aio/content/examples/dependency-injection/**',
|
|
'aio/content/images/guide/dependency-injection/**',
|
|
'aio/content/guide/dependency-injection-in-action.md',
|
|
'aio/content/examples/dependency-injection-in-action/**',
|
|
'aio/content/images/guide/dependency-injection-in-action/**',
|
|
'aio/content/guide/dependency-injection-navtree.md',
|
|
'aio/content/guide/dependency-injection-providers.md',
|
|
'aio/content/guide/displaying-data.md',
|
|
'aio/content/examples/displaying-data/**',
|
|
'aio/content/images/guide/displaying-data/**',
|
|
'aio/content/guide/dynamic-component-loader.md',
|
|
'aio/content/examples/dynamic-component-loader/**',
|
|
'aio/content/images/guide/dynamic-component-loader/**',
|
|
'aio/content/guide/entry-components.md',
|
|
'aio/content/guide/feature-modules.md',
|
|
'aio/content/examples/feature-modules/**',
|
|
'aio/content/images/guide/feature-modules/**',
|
|
'aio/content/guide/frequent-ngmodules.md',
|
|
'aio/content/images/guide/frequent-ngmodules/**',
|
|
'aio/content/guide/hierarchical-dependency-injection.md',
|
|
'aio/content/examples/hierarchical-dependency-injection/**',
|
|
'aio/content/examples/providers-viewproviders/**',
|
|
'aio/content/examples/resolution-modifiers/**',
|
|
'aio/content/guide/lazy-loading-ngmodules.md',
|
|
'aio/content/examples/lazy-loading-ngmodules/**',
|
|
'aio/content/images/guide/lazy-loading-ngmodules/**',
|
|
'aio/content/guide/lifecycle-hooks.md',
|
|
'aio/content/examples/lifecycle-hooks/**',
|
|
'aio/content/images/guide/lifecycle-hooks/**',
|
|
'aio/content/examples/ngcontainer/**',
|
|
'aio/content/guide/ngmodules.md',
|
|
'aio/content/examples/ngmodules/**',
|
|
'aio/content/guide/ngmodule-api.md',
|
|
'aio/content/guide/ngmodule-faq.md',
|
|
'aio/content/guide/ngmodule-vs-jsmodule.md',
|
|
'aio/content/guide/module-types.md',
|
|
'aio/content/guide/template-syntax.md',
|
|
'aio/content/examples/built-in-template-functions/**',
|
|
'aio/content/examples/event-binding/**',
|
|
'aio/content/examples/interpolation/**',
|
|
'aio/content/examples/template-syntax/**',
|
|
'aio/content/images/guide/template-syntax/**',
|
|
'aio/content/examples/binding-syntax/**',
|
|
'aio/content/examples/property-binding/**',
|
|
'aio/content/examples/attribute-binding/**',
|
|
'aio/content/examples/two-way-binding/**',
|
|
'aio/content/examples/built-in-directives/**',
|
|
'aio/content/images/guide/built-in-directives/**',
|
|
'aio/content/examples/template-reference-variables/**',
|
|
'aio/content/examples/inputs-outputs/**',
|
|
'aio/content/images/guide/inputs-outputs/**',
|
|
'aio/content/examples/template-expression-operators/**',
|
|
'aio/content/guide/pipes.md',
|
|
'aio/content/examples/pipes/**',
|
|
'aio/content/images/guide/pipes/**',
|
|
'aio/content/guide/providers.md',
|
|
'aio/content/examples/providers/**',
|
|
'aio/content/guide/singleton-services.md',
|
|
'aio/content/guide/set-document-title.md',
|
|
'aio/content/examples/set-document-title/**',
|
|
'aio/content/images/guide/set-document-title/**',
|
|
'aio/content/guide/sharing-ngmodules.md',
|
|
'aio/content/guide/structural-directives.md',
|
|
'aio/content/examples/structural-directives/**',
|
|
'aio/content/images/guide/structural-directives/**',
|
|
'aio/content/guide/user-input.md',
|
|
'aio/content/examples/user-input/**',
|
|
'aio/content/images/guide/user-input/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alxhub
|
|
- AndrewKushnir
|
|
- atscott
|
|
- ~kara # do not request reviews from Kara, but allow her to approve PRs
|
|
- mhevery
|
|
- pkozlowski-opensource
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Http
|
|
# =========================================================
|
|
fw-http:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/common/http/**',
|
|
'packages/examples/http/**',
|
|
'aio/content/guide/http.md',
|
|
'aio/content/examples/http/**',
|
|
'aio/content/images/guide/http/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alxhub
|
|
- IgorMinar
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Elements
|
|
# =========================================================
|
|
fw-elements:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/elements/**',
|
|
'aio/content/examples/elements/**',
|
|
'aio/content/images/guide/elements/**',
|
|
'aio/content/guide/elements.md'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- andrewseguin
|
|
- gkalpak
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Forms
|
|
# =========================================================
|
|
fw-forms:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/forms/**',
|
|
'packages/examples/forms/**',
|
|
'aio/content/guide/forms.md',
|
|
'aio/content/examples/forms/**',
|
|
'aio/content/images/guide/forms/**',
|
|
'aio/content/guide/forms-overview.md',
|
|
'aio/content/examples/forms-overview/**',
|
|
'aio/content/images/guide/forms-overview/**',
|
|
'aio/content/guide/form-validation.md',
|
|
'aio/content/examples/form-validation/**',
|
|
'aio/content/images/guide/form-validation/**',
|
|
'aio/content/guide/dynamic-form.md',
|
|
'aio/content/examples/dynamic-form/**',
|
|
'aio/content/images/guide/dynamic-form/**',
|
|
'aio/content/guide/reactive-forms.md',
|
|
'aio/content/examples/reactive-forms/**',
|
|
'aio/content/images/guide/reactive-forms/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- AndrewKushnir
|
|
|
|
|
|
# =========================================================
|
|
# Framework: i18n
|
|
# =========================================================
|
|
fw-i18n:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/core/src/i18n/**',
|
|
'packages/core/src/render3/i18n.ts',
|
|
'packages/core/src/render3/i18n.md',
|
|
'packages/core/src/render3/interfaces/i18n.ts',
|
|
'packages/common/locales/**',
|
|
'packages/common/src/i18n/**',
|
|
'packages/common/src/pipes/date_pipe.ts',
|
|
'packages/common/src/pipes/i18n_plural_pipe.ts',
|
|
'packages/common/src/pipes/i18n_select_pipe.ts',
|
|
'packages/common/src/pipes/number_pipe.ts',
|
|
'packages/compiler/src/i18n/**',
|
|
'packages/compiler/src/render3/view/i18n/**',
|
|
'packages/compiler-cli/src/extract_i18n.ts',
|
|
'packages/localize/**',
|
|
'aio/content/guide/i18n.md',
|
|
'aio/content/examples/i18n/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- AndrewKushnir
|
|
- mhevery
|
|
- petebacondarwin
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Platform Server
|
|
# =========================================================
|
|
fw-platform-server:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/platform-server/**',
|
|
'aio/content/guide/universal.md',
|
|
'aio/content/examples/universal/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alxhub
|
|
- kyliau
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Router
|
|
# =========================================================
|
|
fw-router:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/router/**',
|
|
'packages/examples/router/**',
|
|
'aio/content/guide/router.md',
|
|
'aio/content/guide/router-tutorial.md',
|
|
'aio/content/examples/router-tutorial/**',
|
|
'aio/content/examples/router/**',
|
|
'aio/content/images/guide/router/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- atscott
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Service Worker
|
|
# =========================================================
|
|
fw-service-worker:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/service-worker/**',
|
|
'packages/examples/service-worker/**',
|
|
'aio/content/guide/service-worker-getting-started.md',
|
|
'aio/content/examples/service-worker-getting-started/**',
|
|
'aio/content/guide/app-shell.md',
|
|
'aio/content/guide/service-worker-communications.md',
|
|
'aio/content/guide/service-worker-config.md',
|
|
'aio/content/guide/service-worker-devops.md',
|
|
'aio/content/guide/service-worker-intro.md',
|
|
'aio/content/images/guide/service-worker/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alxhub
|
|
- gkalpak
|
|
- IgorMinar
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Upgrade
|
|
# =========================================================
|
|
fw-upgrade:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/upgrade/**',
|
|
'packages/common/upgrade/**',
|
|
'packages/examples/upgrade/**',
|
|
'aio/content/guide/upgrade.md',
|
|
'aio/content/examples/upgrade-lazy-load-ajs/**',
|
|
'aio/content/examples/upgrade-module/**',
|
|
'aio/content/images/guide/upgrade/**',
|
|
'aio/content/examples/upgrade-phonecat-1-typescript/**',
|
|
'aio/content/examples/upgrade-phonecat-2-hybrid/**',
|
|
'aio/content/examples/upgrade-phonecat-3-final/**',
|
|
'aio/content/guide/upgrade-performance.md',
|
|
'aio/content/guide/upgrade-setup.md',
|
|
'aio/content/guide/ajs-quick-reference.md',
|
|
'aio/content/examples/ajs-quick-reference/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- gkalpak
|
|
- petebacondarwin
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Testing
|
|
# =========================================================
|
|
fw-testing:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files.exclude('packages/compiler-cli/**'), [
|
|
'**/testing/**',
|
|
'aio/content/guide/testing.md',
|
|
'aio/content/examples/testing/**',
|
|
'aio/content/images/guide/testing/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- AndrewKushnir
|
|
- IgorMinar
|
|
- pkozlowski-opensource
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Benchmarks
|
|
# =========================================================
|
|
fw-benchmarks:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'modules/benchmarks/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- IgorMinar
|
|
- pkozlowski-opensource
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Playground
|
|
# =========================================================
|
|
fw-playground:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'modules/playground/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- IgorMinar
|
|
- jelbourn
|
|
- pkozlowski-opensource
|
|
|
|
|
|
# =========================================================
|
|
# Framework: Security
|
|
# =========================================================
|
|
fw-security:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/core/src/sanitization/**',
|
|
'packages/core/test/linker/security_integration_spec.ts',
|
|
'packages/compiler/src/schema/**',
|
|
'packages/platform-browser/src/security/**',
|
|
'aio/content/guide/security.md',
|
|
'aio/content/examples/security/**',
|
|
'aio/content/images/guide/security/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- IgorMinar
|
|
- mhevery
|
|
- jelbourn
|
|
- pkozlowski-opensource
|
|
reviews:
|
|
request: -1 # request reviews from everyone
|
|
required: 2 # require at least 2 approvals
|
|
reviewed_for: required
|
|
|
|
|
|
# =========================================================
|
|
# Bazel
|
|
# =========================================================
|
|
bazel:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/bazel/**',
|
|
])
|
|
reviewers:
|
|
users:
|
|
- IgorMinar
|
|
- josephperrott
|
|
- kyliau
|
|
|
|
|
|
# =========================================================
|
|
# Language Service
|
|
# =========================================================
|
|
language-service:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/language-service/**',
|
|
'aio/content/guide/language-service.md',
|
|
'aio/content/images/guide/language-service/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- ayazhafiz
|
|
- kyliau
|
|
|
|
|
|
# =========================================================
|
|
# zone.js
|
|
# =========================================================
|
|
zone-js:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/zone.js/**',
|
|
'aio/content/guide/zone.md'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- JiaLiPassion
|
|
- mhevery
|
|
|
|
# =========================================================
|
|
# in-memory-web-api
|
|
# =========================================================
|
|
in-memory-web-api:
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/misc/angular-in-memory-web-api/**',
|
|
])
|
|
reviewers:
|
|
users:
|
|
- IgorMinar
|
|
- crisbeto
|
|
|
|
# =========================================================
|
|
# Benchpress
|
|
# =========================================================
|
|
benchpress:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/benchpress/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alxhub
|
|
- josephperrott
|
|
|
|
|
|
# =========================================================
|
|
# Integration Tests
|
|
# =========================================================
|
|
integration-tests:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'integration/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- IgorMinar
|
|
- josephperrott
|
|
- mhevery
|
|
|
|
|
|
# =========================================================
|
|
# Docs: Gettings Started & Tutorial
|
|
# =========================================================
|
|
docs-getting-started-and-tutorial:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'aio/content/guide/setup-local.md',
|
|
'aio/content/images/guide/setup-local/**',
|
|
'aio/content/tutorial/**',
|
|
'aio/content/images/guide/toh/**',
|
|
'aio/content/examples/toh-pt0/**',
|
|
'aio/content/examples/toh-pt1/**',
|
|
'aio/content/examples/toh-pt2/**',
|
|
'aio/content/examples/toh-pt3/**',
|
|
'aio/content/examples/toh-pt4/**',
|
|
'aio/content/examples/toh-pt5/**',
|
|
'aio/content/examples/toh-pt6/**',
|
|
'aio/content/examples/getting-started-v0/**',
|
|
'aio/content/examples/getting-started/**',
|
|
'aio/content/start/**',
|
|
'aio/content/images/guide/start/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- aikidave
|
|
- IgorMinar
|
|
- StephenFluin
|
|
|
|
|
|
# =========================================================
|
|
# Docs: Marketing
|
|
# =========================================================
|
|
docs-marketing:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'aio/content/marketing/**',
|
|
'aio/content/images/bios/**',
|
|
'aio/content/images/marketing/**',
|
|
'aio/content/file-not-found.md',
|
|
'aio/content/license.md',
|
|
'aio/content/navigation.json'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- aikidave
|
|
- IgorMinar
|
|
- StephenFluin
|
|
|
|
# =========================================================
|
|
# Docs: Observables
|
|
# =========================================================
|
|
docs-observables:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'aio/content/guide/observables.md',
|
|
'aio/content/examples/observables/**',
|
|
'aio/content/guide/comparing-observables.md',
|
|
'aio/content/examples/comparing-observables/**',
|
|
'aio/content/guide/observables-in-angular.md',
|
|
'aio/content/examples/observables-in-angular/**',
|
|
'aio/content/guide/practical-observable-usage.md',
|
|
'aio/content/examples/practical-observable-usage/**',
|
|
'aio/content/guide/rx-library.md',
|
|
'aio/content/examples/rx-library/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alxhub
|
|
|
|
|
|
# =========================================================
|
|
# Docs: Packaging, Tooling, Releasing
|
|
# =========================================================
|
|
docs-packaging-and-releasing:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'docs/PUBLIC_API.md',
|
|
'docs/RELEASE_SCHEDULE.md',
|
|
'aio/content/guide/npm-packages.md',
|
|
'aio/content/guide/browser-support.md',
|
|
'aio/content/guide/releases.md',
|
|
'aio/content/guide/updating.md',
|
|
'aio/content/guide/deprecations.md',
|
|
'aio/content/guide/migration-renderer.md',
|
|
'aio/content/guide/migration-undecorated-classes.md',
|
|
'aio/content/guide/migration-dynamic-flag.md',
|
|
'aio/content/guide/migration-injectable.md',
|
|
'aio/content/guide/migration-localize.md',
|
|
'aio/content/guide/migration-module-with-providers.md',
|
|
'aio/content/guide/static-query-migration.md',
|
|
'aio/content/guide/updating-to-version-9.md',
|
|
'aio/content/guide/ivy-compatibility.md',
|
|
'aio/content/guide/ivy-compatibility-examples.md'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- IgorMinar
|
|
- jelbourn
|
|
|
|
|
|
# =========================================================
|
|
# Tooling: Compiler API shared with Angular CLI
|
|
#
|
|
# Changing this API might break Angular CLI, so we require
|
|
# the CLI team to approve changes here.
|
|
# =========================================================
|
|
tooling-cli-shared-api:
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'packages/compiler-cli/src/tooling.ts'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alan-agius4
|
|
- clydin
|
|
- kyliau
|
|
- IgorMinar
|
|
reviews:
|
|
request: -1 # request reviews from everyone
|
|
required: 2 # require at least 2 approvals
|
|
reviewed_for: required
|
|
|
|
|
|
# =========================================================
|
|
# Docs: CLI
|
|
# =========================================================
|
|
docs-cli:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'aio/content/cli/**',
|
|
'aio/content/guide/typescript-configuration.md',
|
|
'aio/content/examples/setup/**',
|
|
'aio/content/guide/build.md',
|
|
'aio/content/images/guide/build/**',
|
|
'aio/content/guide/cli-builder.md',
|
|
'aio/content/examples/cli-builder/**',
|
|
'aio/content/guide/deployment.md',
|
|
'aio/content/images/guide/deployment/**',
|
|
'aio/content/guide/file-structure.md',
|
|
'aio/content/guide/ivy.md',
|
|
'aio/content/guide/web-worker.md',
|
|
'aio/content/guide/workspace-config.md',
|
|
])
|
|
reviewers:
|
|
users:
|
|
- clydin
|
|
- IgorMinar
|
|
- mgechev
|
|
|
|
|
|
# =========================================================
|
|
# Docs: CLI Libraries
|
|
# =========================================================
|
|
docs-libraries:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'aio/content/guide/creating-libraries.md',
|
|
'aio/content/guide/libraries.md',
|
|
'aio/content/guide/using-libraries.md'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alan-agius4
|
|
- IgorMinar
|
|
- mgechev
|
|
|
|
|
|
# =========================================================
|
|
# Docs: Schematics
|
|
# =========================================================
|
|
docs-schematics:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'aio/content/guide/schematics.md',
|
|
'aio/content/guide/schematics-authoring.md',
|
|
'aio/content/guide/schematics-for-libraries.md',
|
|
'aio/content/images/guide/schematics/**',
|
|
'aio/content/examples/schematics-for-libraries/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alan-agius4
|
|
- IgorMinar
|
|
- mgechev
|
|
|
|
|
|
# =========================================================
|
|
# Docs-infra
|
|
# =========================================================
|
|
docs-infra:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- *can-be-global-docs-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'aio/*',
|
|
'aio/aio-builds-setup/**',
|
|
'aio/content/cli-src/**',
|
|
'aio/content/examples/*',
|
|
'aio/scripts/**',
|
|
'aio/src/**',
|
|
'aio/tests/**',
|
|
'aio/tools/**',
|
|
'aio/content/guide/docs-style-guide.md',
|
|
'aio/content/examples/docs-style-guide/**',
|
|
'aio/content/images/guide/docs-style-guide/**',
|
|
'aio/content/guide/visual-studio-2015.md'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- gkalpak
|
|
- IgorMinar
|
|
- petebacondarwin
|
|
|
|
|
|
# =========================================================
|
|
# Dev-infra
|
|
# =========================================================
|
|
dev-infra:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- >
|
|
contains_any_globs(files.exclude("CHANGELOG.md"), [
|
|
'*',
|
|
'.circleci/**',
|
|
'.devcontainer/**',
|
|
'.github/**',
|
|
'.ng-dev/**',
|
|
'.vscode/**',
|
|
'.yarn/**',
|
|
'dev-infra/**',
|
|
'docs/BAZEL.md',
|
|
'docs/CARETAKER.md',
|
|
'docs/COMMITTER.md',
|
|
'docs/DEBUG.md',
|
|
'docs/DEBUG_COMPONENTS_REPO_IVY.md',
|
|
'docs/DEVELOPER.md',
|
|
'docs/GITHUB_PROCESS.md',
|
|
'docs/PR_REVIEW.md',
|
|
'docs/SAVED_REPLIES.md',
|
|
'docs/TOOLS.md',
|
|
'docs/TRIAGE_AND_LABELS.md',
|
|
'goldens/*',
|
|
'modules/*',
|
|
'packages/*',
|
|
'packages/examples/test-utils/**',
|
|
'packages/private/**',
|
|
'packages/examples/*',
|
|
'scripts/**',
|
|
'third_party/**',
|
|
'tools/build/**',
|
|
'tools/circular_dependency_test/**',
|
|
'tools/contributing-stats/**',
|
|
'tools/gulp-tasks/**',
|
|
'tools/npm/**',
|
|
'tools/npm_integration_test/**',
|
|
'tools/rxjs/**',
|
|
'tools/saucelabs/**',
|
|
'tools/size-tracking/**',
|
|
'tools/source-map-test/**',
|
|
'tools/symbol-extractor/**',
|
|
'tools/testing/**',
|
|
'tools/ts-api-guardian/**',
|
|
'tools/tslint/**',
|
|
'tools/utils/**',
|
|
'tools/yarn/**',
|
|
'tools/*',
|
|
'**/*.bzl',
|
|
'**/*.bazel'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- devversion
|
|
- filipesilva
|
|
- gkalpak
|
|
- IgorMinar
|
|
- josephperrott
|
|
|
|
|
|
# =========================================================
|
|
# Public API
|
|
# =========================================================
|
|
public-api:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'goldens/public-api/**',
|
|
'CHANGELOG.md',
|
|
'docs/NAMING.md',
|
|
'aio/content/guide/glossary.md',
|
|
'aio/content/guide/styleguide.md',
|
|
'aio/content/examples/styleguide/**',
|
|
'aio/content/images/guide/styleguide/*'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alxhub
|
|
- IgorMinar
|
|
- jelbourn
|
|
- pkozlowski-opensource
|
|
reviews:
|
|
request: -1 # request reviews from everyone
|
|
required: 3 # require at least 3 approvals
|
|
reviewed_for: required
|
|
|
|
|
|
# ================================================
|
|
# Size tracking
|
|
# ================================================
|
|
size-tracking:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'goldens/size-tracking/**'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- alxhub
|
|
- IgorMinar
|
|
- jelbourn
|
|
- pkozlowski-opensource
|
|
reviews:
|
|
request: -1 # request reviews from everyone
|
|
required: 2 # require at least 2 approvals
|
|
reviewed_for: required
|
|
|
|
|
|
# ================================================
|
|
# Circular dependencies
|
|
# ================================================
|
|
circular-dependencies:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'goldens/circular-deps/packages.json'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- IgorMinar
|
|
- jelbourn
|
|
- josephperrott
|
|
- pkozlowski-opensource
|
|
|
|
|
|
####################################################################################
|
|
# Special Cases
|
|
####################################################################################
|
|
|
|
# =========================================================
|
|
# Code Ownership
|
|
# =========================================================
|
|
code-ownership:
|
|
<<: *defaults
|
|
conditions:
|
|
- *can-be-global-approved
|
|
- >
|
|
contains_any_globs(files, [
|
|
'.pullapprove.yml'
|
|
])
|
|
reviewers:
|
|
users:
|
|
- IgorMinar
|
|
|
|
|
|
# ====================================================
|
|
# Catch all for if no groups match the code change
|
|
# ====================================================
|
|
fallback:
|
|
<<: *defaults
|
|
# A group is considered to be `active` for a PR if at least one of group's
|
|
# conditions matches the PR.
|
|
#
|
|
# The PullApprove CI check should fail if a PR has no `active` groups, as
|
|
# this indicates the PR is modifying a file that has no owner.
|
|
#
|
|
# This is enforced through the pullapprove verification check done
|
|
# as part of the CircleCI lint job. Failures in this lint job should be
|
|
# fixed as part of the PR. This can be done by updating the
|
|
# `.pullapprove.yml` file cover the unmatched path.
|
|
# The pullapprove verification script is part of the ng-dev tool and can be
|
|
# run locally with the command: `yarn -s ng-dev pullapprove verify`
|
|
#
|
|
# For cases in which the verification check fails to ensure coverage, this
|
|
# group will be active. The expectation is that this should be remedied
|
|
# before merging the PR as described above. In an emergency situation
|
|
# `global-approvers` can still approve PRs that match this `fallback` rule,
|
|
# but that should be an exception and not an expectation.
|
|
conditions:
|
|
- *can-be-global-approved
|
|
# The following groups have no conditions and will be `active` on all PRs
|
|
# - `global-approvers`
|
|
# - `global-docs-approvers`
|
|
#
|
|
# Since this means the minimum number of active groups a PR can have is 2, this
|
|
# `fallback` group should be matched anytime the number of active groups is at or
|
|
# below this minimum. This work as a protection to ensure that pullapprove does
|
|
# not incidently mark a PR as passing without meeting the review criteria.
|
|
- len(groups.active) <= 2
|