https://github.com/angular/angular
Revision 03d2fc28341cc4500e265fe9cf9d1a559a34e7f6 authored by Andrew Kushnir on 21 April 2021, 16:50:07 UTC, committed by GitHub on 21 April 2021, 16:50:07 UTC
1 parent 8f3e5a5
Raw File
Tip revision: 03d2fc28341cc4500e265fe9cf9d1a559a34e7f6 authored by Andrew Kushnir on 21 April 2021, 16:50:07 UTC
release: cut the v11.2.11 release
Tip revision: 03d2fc2
.pullapprove.yml
####################################################################################
####################################################################################
#                               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:
  # The following groups have no file based conditions and will be initially `active` on all PRs
  # - `global-approvers`
  # - `global-docs-approvers`
  # - `required-minimum-review`
  #
  # By checking the number of active/pending/rejected groups when these are excluded, we can determine
  # if any other groups are matched.
  #
  # Note: Because all inactive groups start as pending, we are only checking pending and rejected active groups.
  #
  # Also note that the ordering of groups matters in this file. The only groups visible to the current
  # one are those that appear above it.
  no-groups-above-this-pending: &no-groups-above-this-pending
    len(groups.active.pending.exclude("required-minimum-review").exclude("global-approvers").exclude("global-docs-approvers")) == 0
  no-groups-above-this-rejected: &no-groups-above-this-rejected
    len(groups.active.rejected.exclude("required-minimum-review").exclude("global-approvers").exclude("global-docs-approvers")) == 0
  no-groups-above-this-active: &no-groups-above-this-active
    len(groups.active.exclude("required-minimum-review").exclude("global-approvers").exclude("global-docs-approvers")) == 0

  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:
  # For PRs which are still being worked on, either still in draft mode or indicated through WIP in
  # title or label, PullApprove stays in a pending state until its ready for review.
  - 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"
  # Disable PullApprove on specific PRs by adding the `PullApprove: disable` label
  - condition: "'PullApprove: disable' not in labels"
    unmet_status: success
    explanation: "PullApprove skipped because of 'PullApprove: disable' label"


groups:
  # =========================================================
  #  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

  # =========================================================
  # 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:
    conditions:
      - *can-be-global-approved
      - *can-be-global-docs-approved
    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
      reviewed_for: ignored # All reviews apply to this group whether noted via Reviewed-for or not
    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
         - jessicajaniuk           # Jessica Janiuk
         - 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
         - mgechev                 # Minko Gechev
         - mhevery                 # Miško Hevery
         - mmalerba                # Miles Malerba
         - petebacondarwin         # Pete Bacon Darwin
         - pkozlowski-opensource   # Pawel Kozlowski
         - Splaktar                # Michael Prentice
         - twerske                 # Emma Twersky
         - zarend                  # Zach Arend

  # =========================================================
  #  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:
        - crisbeto
        - IgorMinar
        - jelbourn


  # =========================================================
  #  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/platform-browser/**',
          'packages/examples/platform-browser/**',
          'packages/platform-browser-dynamic/**',
          '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-overview.md',
          'aio/content/examples/component-overview/**',
          'aio/content/guide/component-styles.md',
          'aio/content/guide/view-encapsulation.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/lightweight-injection-tokens.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/example-apps-list.md',
          '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/guide/built-in-template-functions.md',
          'aio/content/examples/built-in-template-functions/**',
          'aio/content/guide/event-binding.md',
          'aio/content/guide/event-binding-concepts.md',
          'aio/content/examples/event-binding/**',
          'aio/content/guide/interpolation.md',
          'aio/content/examples/interpolation/**',
          'aio/content/examples/template-syntax/**',
          'aio/content/images/guide/template-syntax/**',
          'aio/content/guide/binding-syntax.md',
          'aio/content/examples/binding-syntax/**',
          'aio/content/guide/property-binding.md',
          'aio/content/examples/property-binding/**',
          'aio/content/guide/property-binding-best-practices.md',
          'aio/content/guide/attribute-binding.md',
          'aio/content/examples/attribute-binding/**',
          'aio/content/guide/two-way-binding.md',
          'aio/content/examples/two-way-binding/**',
          'aio/content/guide/built-in-directives.md',
          'aio/content/examples/built-in-directives/**',
          'aio/content/images/guide/built-in-directives/**',
          'aio/content/guide/template-reference-variables.md',
          'aio/content/examples/template-reference-variables/**',
          'aio/content/guide/inputs-outputs.md',
          'aio/content/examples/inputs-outputs/**',
          'aio/content/images/guide/inputs-outputs/**',
          'aio/content/guide/template-expression-operators.md',
          '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/images/guide/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/guide/svg-in-templates.md',
          'aio/content/guide/style-precedence.md',
          'aio/content/images/guide/structural-directives/**',
          'aio/content/guide/template-statements.md',
          '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
        - jessicajaniuk
        # OOO as of 2020-09-28 - pkozlowski-opensource


  # =========================================================
  #  Framework: Common
  # =========================================================
  fw-common:
    <<: *defaults
    conditions:
      - *can-be-global-approved
      - *can-be-global-docs-approved
      - >
        contains_any_globs(files.exclude("packages/core/schematics/**"), [
          'packages/common/**',
          'packages/examples/common/**',
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - ~kara # do not request reviews from Kara, but allow her to approve PRs
        - mhevery
        - jessicajaniuk
        # OOO as of 2020-09-28 - 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
        - petebacondarwin


  # =========================================================
  #  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/**',
          'packages/core/src/render3/instructions/i18n.ts',
          '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/guide/router-tutorial-toh.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/**').exclude('packages/language-service/**'), [
          'packages/**/testing/**',
          'aio/content/guide/testing.md',
          'aio/content/guide/test-debugging.md',
          'aio/content/guide/testing-attribute-directives.md',
          'aio/content/guide/testing-code-coverage.md',
          'aio/content/guide/testing-components-basics.md',
          'aio/content/guide/testing-components-scenarios.md',
          'aio/content/guide/testing-pipes.md',
          'aio/content/guide/testing-services.md',
          'aio/content/guide/testing-utility-apis.md',
          'aio/content/examples/testing/**',
          'aio/content/images/guide/testing/**'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - IgorMinar
        # OOO as of 2020-09-28 - pkozlowski-opensource


  # =========================================================
  #  Framework: Benchmarks
  # =========================================================
  fw-benchmarks:
    <<: *defaults
    conditions:
      - *can-be-global-approved
      - >
        contains_any_globs(files, [
          'modules/benchmarks/**'
          ])
    reviewers:
      users:
        - IgorMinar
        # OOO as of 2020-09-28 - pkozlowski-opensource


  # =========================================================
  #  Framework: Playground
  # =========================================================
  fw-playground:
    <<: *defaults
    conditions:
      - *can-be-global-approved
      - >
        contains_any_globs(files, [
          'modules/playground/**'
          ])
    reviewers:
      users:
        - IgorMinar
        - jelbourn
        # OOO as of 2020-09-28 - 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
        # OOO as of 2020-09-28 - 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:
        - kyliau
        - atscott
        - zarend


  # =========================================================
  #  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: Contributors
  # =========================================================
  docs-contributors:
    <<: *defaults
    conditions:
      - *can-be-global-approved
      - *can-be-global-docs-approved
      - >
        contains_any_globs(files, [
          'aio/content/marketing/contributors.json',
          'aio/content/images/bios/**',
          ])
    reviewers:
      users:
        - mgechev
        - twerske


  # =========================================================
  #  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/**',
          'aio/content/examples/what-is-angular/**',
          'aio/content/guide/what-is-angular.md'
          ])
    reviewers:
      users:
        - aikidave
        - IgorMinar
        - jelbourn


  # =========================================================
  #  Docs: Marketing
  # =========================================================
  docs-marketing:
    <<: *defaults
    conditions:
      - *can-be-global-approved
      - *can-be-global-docs-approved
      - >
        contains_any_globs(files.exclude("aio/content/marketing/contributors.json"), [
          'aio/content/guide/roadmap.md',
          'aio/content/marketing/**',
          'aio/content/images/marketing/**',
          'aio/content/file-not-found.md',
          'aio/content/license.md',
          'aio/content/navigation.json'
          ])
    reviewers:
      users:
        - aikidave
        - IgorMinar
        - mgechev

  # =========================================================
  #  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-11.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/strict-mode.md',
          'aio/content/guide/web-worker.md',
          'aio/content/guide/workspace-config.md',
          'aio/content/guide/migration-solution-style-tsconfig.md',
          'aio/content/guide/migration-update-module-and-target-compiler-options.md',
          'aio/content/guide/migration-update-libraries-tslib.md',
          ])
    reviewers:
      users:
        - alan-agius4
        - 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/images/guide/contributors-guide/**',
          'aio/content/guide/contributors-guide-overview.md',
          'aio/content/guide/docs-style-guide.md',
          'aio/content/examples/docs-style-guide/**',
          'aio/content/images/guide/docs-style-guide/**',
          'aio/content/guide/reviewing-content.md',
          'aio/content/guide/updating-content-github-ui.md',
          'aio/content/guide/updating-search-keywords.md',
          '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, [
          '*',
          '.circleci/**',
          '.devcontainer/**',
          '.github/**',
          '.husky/**',
          '.ng-dev/**',
          '.vscode/**',
          '.yarn/**',
          'dev-infra/**',
          'docs/*.md',
          'docs/images/**',
          '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'
          ])
    reviewers:
      users:
        - devversion
        - filipesilva
        - gkalpak
        - IgorMinar
        - josephperrott


  # =========================================================
  #  Public API
  # =========================================================
  public-api:
    <<: *defaults
    conditions:
      - *no-groups-above-this-pending
      - *no-groups-above-this-rejected
      - *can-be-global-approved
      - >
        contains_any_globs(files, [
          'goldens/public-api/**',
          'docs/NAMING.md',
          'aio/content/errors/*.md',
          'aio/content/guide/glossary.md',
          'aio/content/guide/styleguide.md',
          'aio/content/examples/errors/**',
          'aio/content/examples/styleguide/**',
          'aio/content/images/guide/styleguide/*'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - IgorMinar
        - alxhub
        - atscott
        - jelbourn
        - petebacondarwin
        - jessicajaniuk
        # OOO as of 2020-09-28 - pkozlowski-opensource
    reviews:
      request: 4 # Request reviews from four people
      required: 3 # Require that three people approve
      reviewed_for: required


  # ================================================
  #  Size tracking
  # ================================================
  size-tracking:
    <<: *defaults
    conditions:
      - *no-groups-above-this-pending
      - *no-groups-above-this-rejected
      - *can-be-global-approved
      - >
        contains_any_globs(files, [
          'goldens/size-tracking/**'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - IgorMinar
        - alxhub
        - atscott
        - jelbourn
        - petebacondarwin
        - jessicajaniuk
        # OOO as of 2020-09-28 - pkozlowski-opensource
    reviews:
      request: 4 # Request reviews from four people
      required: 2 # Require that two people approve
      reviewed_for: required


  # ================================================
  #  Circular dependencies
  # ================================================
  circular-dependencies:
    <<: *defaults
    conditions:
      - *no-groups-above-this-pending
      - *no-groups-above-this-rejected
      - *can-be-global-approved
      - >
        contains_any_globs(files, [
          'goldens/circular-deps/packages.json'
        ])
    reviewers:
      users:
        - AndrewKushnir
        - IgorMinar
        - alxhub
        - atscott
        - jelbourn
        - petebacondarwin
        - jessicajaniuk
        # OOO as of 2020-09-28 - pkozlowski-opensource


####################################################################################
#  Special Cases
####################################################################################

  # =========================================================
  #  Code Ownership
  # =========================================================
  code-ownership:
    <<: *defaults
    conditions:
      - *can-be-global-approved
      - >
        contains_any_globs(files, [
          '.pullapprove.yml'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - IgorMinar
        - alxhub
        - atscott
        - jelbourn
        - josephperrott
        - mhevery


  # ====================================================
  #  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:
      - *no-groups-above-this-active
      # When any of the `global-*` groups is approved, they cause other groups to deactivate.
      # In those cases, the condition above would evaluate to `true` while in reality, only a global
      # approval has been provided. To ensure we don't activate the fallback group in such cases,
      # ensure that no explicit global approval has been provided.
      - *can-be-global-approved
      - *can-be-global-docs-approved
back to top