#################################################################################### #################################################################################### # 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 - StephenFluin # Stephen Fluin - twerske # Emma Twersky # ========================================================= # 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 # OOO as of 2020-09-28 - 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 # ========================================================= # 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/**' ]) reviewers: users: - aikidave - IgorMinar - StephenFluin # ========================================================= # 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 - 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-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/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").exclude("packages/compiler-cli/**/BUILD.bazel"), [ '*', '.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', '**/*.bazel' ]) reviewers: users: # OOO as of 2020-09-28 - 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/**', 'CHANGELOG.md', 'docs/NAMING.md', 'aio/content/errors/*.md', 'aio/content/guide/glossary.md', 'aio/content/guide/styleguide.md', '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