#################################################################################### #################################################################################### # 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. # # alxhub # jelbourn # josephperrott # # ========================================================= # @angular/framework-global-approvers-for-docs-only-changes # ========================================================= # Used for approving minor documentation-only changes that don't require engineering review. version: 3 availability: users_unavailable: [] # Meta field that goes unused by PullApprove to allow for defining aliases to be # used throughout the config. meta: # Note: Because all inactive groups start as pending, we are only checking pending and rejected active groups. no-groups-above-this-pending: &no-groups-above-this-pending len(groups.active.pending.exclude("required-minimum-review")) == 0 no-groups-above-this-rejected: &no-groups-above-this-rejected len(groups.active.rejected.exclude("required-minimum-review")) == 0 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' # https://docs.pullapprove.com/config/overrides/ # Note that overrides are processed in order. overrides: # 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. - if: "draft or 'WIP' in title or 'PR state: WIP' in labels" status: pending explanation: 'Waiting to send reviews as PR is WIP' # Disable PullApprove on specific PRs by adding the `PullApprove: disable` label - if: "'PullApprove: disable' in labels" status: success explanation: "PullApprove skipped because of 'PullApprove: disable' label" # If no file matching based groups are active, report this pull request as failing. Most likely, # the PR author would need to update the PullApprove config, or create new group. - if: len(groups.active.exclude("required-minimum-review").exclude("global-*")) == 0 and len(groups.approved.include("global-*")) == 0 status: failure explanation: 'At least one group must match this PR. Please update an existing review group, or create a new group.' # If any global dev-infra approval is given the status should be passing. - if: len(groups.approved.include("global-dev-infra-approvers")) == 1 status: success explanation: 'Passing as globally approved by dev-infra' # If any global docs approval is given the status should be passing. - if: len(groups.approved.include("global-docs-approvers")) == 1 status: success explanation: 'Passing as globally approved by docs' # If any global approval is given the status should be passing. - if: len(groups.approved.include("global-approvers")) == 1 status: success explanation: 'Passing as globally approved by global approvers' groups: # ========================================================= # Framework: Animations # ========================================================= fw-animations: <<: *defaults conditions: - > contains_any_globs(files, [ 'packages/animations/**/{*,.*}', 'packages/platform-browser/animations/**/{*,.*}', 'aio/content/guide/animations.md', 'aio/content/guide/add-an-animation.md', 'aio/content/guide/animate-state-style.md', 'aio/content/guide/animation-api-summary.md', 'aio/content/guide/understanding-angular-animation.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', 'aio/content/guide/animations-attach-to-html-template.md', 'aio/content/guide/animation-transition-timing.md' ]) reviewers: users: - alxhub - crisbeto - ~jelbourn - jessicajaniuk # ========================================================= # Framework: Compiler # ========================================================= fw-compiler: <<: *defaults conditions: - > contains_any_globs(files, [ 'packages/compiler/**/{*,.*}', 'packages/examples/compiler/**/{*,.*}', 'aio/content/examples/angular-compiler-options/**/{*,.*}', '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', 'aio/content/extended-diagnostics/*.md' ]) reviewers: users: - alxhub - AndrewKushnir - atscott - crisbeto - JoostK - dylhunn # ========================================================= # Framework: Migrations # ========================================================= fw-migrations: <<: *defaults conditions: - files.include("packages/core/schematics/*") reviewers: users: - alxhub - crisbeto - devversion - dylhunn # ========================================================= # Framework: Core # ========================================================= fw-core: <<: *defaults conditions: - > 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/guide/rxjs-interop.md', '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/change-detection.md', 'aio/content/guide/change-detection-zone-pollution.md', 'aio/content/guide/change-detection-slow-computations.md', 'aio/content/guide/change-detection-skipping-subtrees.md', 'aio/content/images/guide/change-detection/**/{*,.*}', 'aio/content/guide/class-binding.md', '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/errors/*.md', 'aio/content/examples/errors/**/{*,.*}', 'aio/content/examples/component-overview/**/{*,.*}', 'aio/content/guide/component-styles.md', 'aio/content/guide/developer-guide-overview.md', 'aio/content/guide/view-encapsulation.md', 'aio/content/examples/component-styles/**/{*,.*}', 'aio/content/examples/content-projection/**/{*,.*}', 'aio/content/guide/content-projection.md', 'aio/content/guide/creating-injectable-service.md', 'aio/content/guide/dependency-injection-overview.md', '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/dependency-injection-context.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/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/guide/image-directive.md', 'aio/content/guide/image-directive-setup.md', '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-overview.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-overview.md', '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/guide/directive-composition-api.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/understanding-template-expr-overview.md', 'aio/content/guide/template-expression-operators.md', 'aio/content/examples/template-expression-operators/**/{*,.*}', 'aio/content/guide/pipes.md', 'aio/content/guide/pipes-custom-data-trans.md', 'aio/content/guide/pipes-overview.md', 'aio/content/guide/pipes-transform-data.md', 'aio/content/guide/pipe-template.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/sharing-ngmodules.md', 'aio/content/guide/standalone-components.md', 'aio/content/guide/standalone-migration.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/understanding-angular-overview.md', 'aio/content/guide/user-input.md', 'aio/content/examples/user-input/**/{*,.*}', 'aio/content/images/guide/user-input/**/{*,.*}', 'aio/content/guide/view-encapsulation.md', 'aio/content/examples/view-encapsulation/**/{*,.*}', 'aio/content/images/guide/view-encapsulation/**/{*,.*}', 'aio/content/special-elements/**/{*,.*}', 'aio/content/guide/hydration.md', 'aio/content/guide/signals.md', 'aio/content/examples/injection-token/**/{*,.*}', ]) reviewers: users: - alxhub - AndrewKushnir - atscott - crisbeto - dylhunn - jessicajaniuk - pkozlowski-opensource # ========================================================= # Framework: Common # ========================================================= fw-common: <<: *defaults conditions: - > contains_any_globs(files.exclude("packages/common/http/*"), [ 'packages/common/**/{*,.*}', 'packages/examples/common/**/{*,.*}', ]) reviewers: users: - alxhub - AndrewKushnir - atscott - dylhunn - jessicajaniuk - pkozlowski-opensource # ========================================================= # Framework: Http # ========================================================= fw-http: <<: *defaults conditions: - > contains_any_globs(files, [ 'packages/common/http/**/{*,.*}', 'packages/examples/http/**/{*,.*}', 'aio/content/guide/understanding-communicating-with-http.md', 'aio/content/guide/http-configure-http-url-parameters.md', 'aio/content/guide/http-handle-request-errors.md', 'aio/content/guide/http-intercept-requests-and-responses.md', 'aio/content/guide/http-interceptor-use-cases.md', 'aio/content/guide/http-make-jsonp-request.md', 'aio/content/guide/http-optimize-server-interaction.md', 'aio/content/guide/http-pass-metadata-to-interceptors.md', 'aio/content/guide/http-request-data-from-server.md', 'aio/content/guide/http-security-xsrf-protection.md', 'aio/content/guide/http-send-data-to-server.md', 'aio/content/guide/http-server-communication.md', 'aio/content/guide/http-setup-server-communication.md', 'aio/content/guide/http-test-requests.md', 'aio/content/guide/http-track-show-request-progress.md', 'aio/content/examples/http/**/{*,.*}', 'aio/content/images/guide/http/**/{*,.*}' ]) reviewers: users: - alxhub - AndrewKushnir - atscott - dylhunn - jessicajaniuk - pkozlowski-opensource # ========================================================= # Framework: Elements # ========================================================= fw-elements: <<: *defaults conditions: - > contains_any_globs(files, [ 'packages/elements/**/{*,.*}', 'aio/content/examples/elements/**/{*,.*}', 'aio/content/images/guide/elements/**/{*,.*}', 'aio/content/guide/elements.md' ]) reviewers: users: - alxhub - AndrewKushnir - andrewseguin - atscott - dylhunn - jessicajaniuk - pkozlowski-opensource # ========================================================= # Framework: Forms # ========================================================= fw-forms: <<: *defaults conditions: - > 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/guide/typed-forms.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 - dylhunn # ========================================================= # Framework: i18n # ========================================================= fw-i18n: <<: *defaults conditions: - > 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-overview.md', 'aio/content/guide/i18n-common-overview.md', 'aio/content/guide/i18n-common-add-package.md', 'aio/content/guide/i18n-common-locale-id.md', 'aio/content/guide/i18n-common-format-data-locale.md', 'aio/content/guide/i18n-common-prepare.md', 'aio/content/guide/i18n-common-translation-files.md', 'aio/content/guide/i18n-common-merge.md', 'aio/content/guide/i18n-common-deploy.md', 'aio/content/guide/i18n-example.md', 'aio/content/guide/i18n-optional-overview.md', 'aio/content/guide/i18n-optional-manual-runtime-locale.md', 'aio/content/guide/i18n-optional-import-global-variants.md', 'aio/content/guide/i18n-optional-manage-marked-text.md', 'aio/content/examples/i18n/**/{*,.*}' ]) reviewers: users: - AndrewKushnir - dgp1130 # ========================================================= # Framework: Platform Server # ========================================================= fw-platform-server: <<: *defaults conditions: - > contains_any_globs(files, [ 'packages/platform-server/**/{*,.*}', 'aio/content/guide/prerendering.md', 'aio/content/guide/universal.md', 'aio/content/examples/universal/**/{*,.*}' ]) reviewers: users: - alan-agius4 - alxhub - AndrewKushnir - atscott - dylhunn - jessicajaniuk - pkozlowski-opensource # ========================================================= # Framework: Router # ========================================================= fw-router: <<: *defaults conditions: - > 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/guide/routing-overview.md', 'aio/content/guide/router-reference.md', 'aio/content/examples/router-tutorial/**/{*,.*}', 'aio/content/examples/router/**/{*,.*}', 'aio/content/images/guide/router/**/{*,.*}', 'aio/content/guide/routing-with-urlmatcher.md', 'aio/content/examples/routing-with-urlmatcher/**/{*,.*}' ]) reviewers: users: - AndrewKushnir - atscott # ========================================================= # Framework: Service Worker # ========================================================= fw-service-worker: <<: *defaults conditions: - > 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/guide/service-worker-notifications.md', 'aio/content/images/guide/service-worker/**/{*,.*}' ]) reviewers: users: - alxhub # ========================================================= # Framework: Upgrade # ========================================================= fw-upgrade: <<: *defaults conditions: - > 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: - alxhub - jessicajaniuk # ========================================================= # Framework: Testing # ========================================================= fw-testing: <<: *defaults conditions: - > contains_any_globs(files.exclude('packages/compiler-cli/*').exclude('packages/language-service/*').exclude('packages/service-worker/*'), [ '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: - alxhub - AndrewKushnir - atscott - dylhunn - jessicajaniuk - pkozlowski-opensource # ========================================================= # Framework: Benchmarks # ========================================================= fw-benchmarks: <<: *defaults conditions: - > contains_any_globs(files, [ 'modules/benchmarks/**/{*,.*}' ]) reviewers: users: - alxhub - AndrewKushnir - atscott - dylhunn - jessicajaniuk - pkozlowski-opensource # ========================================================= # Framework: Playground # ========================================================= fw-playground: <<: *defaults conditions: - > contains_any_globs(files, [ 'modules/playground/**/{*,.*}' ]) reviewers: users: - alxhub - AndrewKushnir - atscott - dylhunn - jessicajaniuk - pkozlowski-opensource # ========================================================= # Framework: Security # ========================================================= fw-security: <<: *defaults conditions: - > 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/**/{*,.*}', 'packages/tsconfig-tsec-base.json', 'packages/tsec-exemption.json', 'tools/tsec.bzl', 'aio/content/guide/security.md', 'aio/content/examples/security/**/{*,.*}', 'aio/content/images/guide/security/**/{*,.*}', ]) reviewers: users: - alxhub - jelbourn - josephperrott - pkozlowski-opensource reviews: request: -1 # request reviews from everyone required: 2 # require at least 2 approvals reviewed_for: required # ========================================================= # Bazel # ========================================================= bazel: <<: *defaults conditions: - > contains_any_globs(files, [ 'packages/bazel/**/{*,.*}', ]) reviewers: users: - devversion - josephperrott # ========================================================= # Language Service # ========================================================= language-service: <<: *defaults conditions: - > contains_any_globs(files, [ 'packages/language-service/**/{*,.*}', 'aio/content/guide/language-service.md', 'aio/content/images/guide/language-service/**/{*,.*}' ]) reviewers: users: - alxhub - atscott # ========================================================= # zone.js # ========================================================= zone-js: <<: *defaults conditions: - > contains_any_globs(files, [ 'packages/zone.js/**/{*,.*}', 'aio/content/guide/zone.md' ]) reviewers: users: - JiaLiPassion # ========================================================= # in-memory-web-api # ========================================================= in-memory-web-api: conditions: - > contains_any_globs(files, [ 'packages/misc/angular-in-memory-web-api/**/{*,.*}', ]) reviewers: users: - alxhub - AndrewKushnir - atscott - crisbeto - dylhunn - jessicajaniuk - pkozlowski-opensource # ========================================================= # Benchpress # ========================================================= benchpress: <<: *defaults conditions: - > contains_any_globs(files, [ 'packages/benchpress/**/{*,.*}' ]) reviewers: users: - devversion - josephperrott - pkozlowski-opensource # ========================================================= # Integration Tests # ========================================================= integration-tests: <<: *defaults conditions: - > contains_any_globs(files, [ 'integration/**/{*,.*}' ]) reviewers: users: - alxhub - AndrewKushnir - atscott - dylhunn - jessicajaniuk - josephperrott - pkozlowski-opensource # ========================================================= # Docs: Contributors # ========================================================= docs-contributors: <<: *defaults conditions: - > contains_any_globs(files, [ 'aio/content/marketing/contributors.json', 'aio/content/images/bios/**/{*,.*}', ]) reviewers: users: - MarkTechson - mgechev - twerske # ========================================================= # Docs: Gettings Started & Tutorial # ========================================================= docs-getting-started-and-tutorial: <<: *defaults conditions: - > 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/demos/first-app/**/{*,.*}', 'aio/content/examples/first-app-*/**/{*,.*}', 'aio/content/images/guide/faa/**/{*,.*}', '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/guide/quick-start.md', 'aio/content/images/guide/start/**/{*,.*}', 'aio/content/examples/what-is-angular/**/{*,.*}', 'aio/content/guide/what-is-angular.md' ]) reviewers: users: - AndrewKushnir - jessicajaniuk # ========================================================= # Docs: Marketing # ========================================================= docs-marketing: <<: *defaults conditions: - > contains_any_globs(files.exclude("aio/content/marketing/contributors.json"), [ 'aio/content/examples/marketing-first-app/**/{*,.*}', '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: - MarkTechson - mgechev - twerske # ========================================================= # Docs: Observables # ========================================================= docs-observables: <<: *defaults conditions: - > 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 - atscott - dylhunn # ========================================================= # Docs: Packaging, Tooling, Releasing # ========================================================= docs-packaging-and-releasing: <<: *defaults conditions: - > 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/examples/deprecation-guide/**/{*,.*}', 'aio/content/guide/migration-module-with-providers.md', 'aio/content/guide/static-query-migration.md', 'aio/content/guide/update-to-latest-version.md', 'aio/content/guide/versions.md', 'aio/content/guide/update-to-version-14.md', 'aio/content/guide/update-to-version-15.md', 'aio/content/guide/update-to-version-16.md', ]) reviewers: users: - alxhub - AndrewKushnir - atscott - jelbourn # ========================================================= # Docs: Angular DevTools # ========================================================= docs-devtools: <<: *defaults conditions: - > contains_any_globs(files, [ 'aio/content/guide/devtools.md', 'aio/content/images/guide/devtools/**/{*,.*}' ]) reviewers: users: - MarkTechson - mgechev - twerske # ========================================================= # 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: - > contains_any_globs(files, [ 'packages/compiler-cli/private/tooling.ts', 'packages/localize/tools/index.ts' ]) reviewers: users: - alan-agius4 - clydin - dgp1130 reviews: request: -1 # request reviews from everyone required: 2 # require at least 2 approvals reviewed_for: required # ========================================================= # Docs: CLI # ========================================================= docs-cli: <<: *defaults conditions: - > 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/images/guide/cli/**/{*,.*}', '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-libraries-tslib.md', 'aio/content/guide/esbuild.md', ]) reviewers: users: - alan-agius4 - clydin - dgp1130 - mgechev # ========================================================= # Docs: CLI Libraries # ========================================================= docs-libraries: <<: *defaults conditions: - > contains_any_globs(files, [ 'aio/content/examples/angular-linker-plugin/webpack.config.mjs', 'aio/content/guide/creating-libraries.md', 'aio/content/guide/libraries.md', 'aio/content/guide/using-libraries.md', 'aio/content/guide/angular-package-format.md' ]) reviewers: users: - alan-agius4 - alxhub - mgechev # ========================================================= # Docs: Schematics # ========================================================= docs-schematics: <<: *defaults conditions: - > 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 - dylhunn - mgechev # ========================================================= # Docs-infra # ========================================================= docs-infra: <<: *defaults conditions: - > 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/tools/examples/shared/boilerplate/cli/.vscode/**/{*,.*}', 'aio/content/BUILD.bazel', '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/docs-lint-errors.md', 'aio/content/images/guide/docs-lint-errors/**/{*,.*}', 'aio/content/guide/localized-documentation.md', 'aio/content/guide/localizing-angular.md', 'aio/content/guide/reviewing-content.md', 'aio/content/guide/updating-content-github-ui.md', 'aio/content/guide/updating-search-keywords.md', 'aio/content/guide/doc-build-test.md', 'aio/content/guide/doc-edit-finish.md', 'aio/content/guide/doc-editing.md', 'aio/content/guide/doc-github-tasks.md', 'aio/content/guide/doc-pr-open.md', 'aio/content/guide/doc-pr-prep.md', 'aio/content/guide/doc-pr-update.md', 'aio/content/guide/doc-prepare-to-edit.md', 'aio/content/guide/doc-select-issue.md', 'aio/content/guide/doc-tasks.md', 'aio/content/guide/doc-update-overview.md', 'aio/content/guide/doc-update-start.md', 'aio/content/guide/docs-lint-errors.md', 'aio/content/images/guide/preparing-to-edit-docs/**/{*,.*}', 'aio/content/images/guide/github-for-docs/**/{*,.*}', 'aio/content/images/guide/doc-update-start/**/{*,.*}', 'aio/content/images/guide/doc-update-overview/**/{*,.*}', 'aio/content/images/guide/doc-pr-update/**/{*,.*}', 'aio/content/images/guide/doc-pr-prep/**/{*,.*}', 'aio/content/images/guide/doc-pr-open/**/{*,.*}', 'aio/content/images/guide/doc-github-tasks/**/{*,.*}', 'aio/content/images/guide/doc-prepare-to-edit/**/{*,.*}', ]) reviewers: users: - AndrewKushnir - jessicajaniuk - josephperrott # ========================================================= # Angular DevTools # ========================================================= devtools: <<: *defaults conditions: - > contains_any_globs(files, [ 'devtools/**/{*,.*}', ]) reviewers: users: - AleksanderBodurri - devversion - dgp1130 - josephperrott - mgechev - twerske # ========================================================= # Dev-infra # ========================================================= dev-infra: <<: *defaults conditions: - > contains_any_globs(files.exclude('.pullapprove.yml'), [ '{*,.*}', '.circleci/**/{*,.*}', '.devcontainer/**/{*,.*}', '.github/**/{*,.*}', '.husky/**/{*,.*}', '.ng-dev/**/{*,.*}', '.vscode/**/{*,.*}', '.yarn/**/{*,.*}', 'docs/*.md', 'docs/images/**/{*,.*}', 'goldens/{*,.*}', 'goldens/public-api/manage.js', 'modules/{*,.*}', 'packages/{*,.*}', 'packages/examples/test-utils/**/{*,.*}', 'packages/private/**/{*,.*}', 'packages/examples/{*,.*}', 'scripts/**/{*,.*}', 'third_party/**/{*,.*}', 'tools/bazel-repo-patches/**/{*,.*}', 'tools/circular_dependency_test/**/{*,.*}', 'tools/contributing-stats/**/{*,.*}', 'tools/esm-interop/**/{*,.*}', 'tools/gulp-tasks/**/{*,.*}', 'tools/legacy-saucelabs/**/{*,.*}', 'tools/rxjs/**/{*,.*}', 'tools/saucelabs/**/{*,.*}', 'tools/saucelabs-daemon/**/{*,.*}', 'tools/symbol-extractor/**/{*,.*}', 'tools/testing/**/{*,.*}', 'tools/tslint/**/{*,.*}', 'tools/utils/**/{*,.*}', 'tools/yarn/**/{*,.*}', 'tools/{*,.*}', '**/*.bzl' ]) reviewers: users: - devversion - josephperrott # ========================================================= # Public API # ========================================================= public-api: <<: *defaults conditions: - *no-groups-above-this-pending - *no-groups-above-this-rejected - > contains_any_globs(files.exclude("goldens/public-api/manage.js"), [ 'goldens/public-api/**/{*,.*}', 'docs/NAMING.md', 'aio/content/guide/angular-package-format.md', 'aio/content/guide/glossary.md', 'aio/content/guide/styleguide.md', 'aio/content/examples/styleguide/**/{*,.*}', 'aio/content/images/guide/styleguide/{*,.*}' ]) reviewers: users: - AndrewKushnir - alxhub - atscott - dylhunn - ~jelbourn - jessicajaniuk - pkozlowski-opensource reviews: request: 3 # Request reviews from 3 people required: 2 # Require that 2 people approve reviewed_for: required # ================================================ # Size tracking # ================================================ size-tracking: <<: *defaults conditions: - *no-groups-above-this-pending - *no-groups-above-this-rejected - > contains_any_globs(files, [ 'goldens/size-tracking/**/{*,.*}' ]) reviewers: users: - alxhub - AndrewKushnir - atscott - dylhunn - ~jelbourn - jessicajaniuk - pkozlowski-opensource reviews: request: 2 # Request reviews from 2 people required: 1 # Require that 1 person approve reviewed_for: required # ================================================ # Circular dependencies # ================================================ circular-dependencies: <<: *defaults conditions: - *no-groups-above-this-pending - *no-groups-above-this-rejected - > contains_any_globs(files, [ 'goldens/circular-deps/packages.json' ]) reviewers: users: - alxhub - AndrewKushnir - atscott - dylhunn - ~jelbourn - jessicajaniuk - pkozlowski-opensource #################################################################################### # Special Cases #################################################################################### # ========================================================= # Code Ownership # ========================================================= code-ownership: <<: *defaults conditions: - > contains_any_globs(files, [ '.pullapprove.yml' ]) reviewers: users: - alxhub - AndrewKushnir - andrewseguin - dgp1130 - ~jelbourn - jessicajaniuk - josephperrott #################################################################################### # Override managed result groups # # Groups which are only used to determine the value of an override are managed at # the bottom of the list as they will set a status on the PR directly, they # therefore can always be process last without concern. #################################################################################### # ========================================================= # 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 # ========================================================= # Global Approvers For Dev-Infra changes # # All reviews performed for global dev-infra approvals # require using the `Reviewed-for:` specifier to set the # approval specificity as documented at: # https://docs.pullapprove.com/reviewed-for/ # ========================================================= global-dev-infra-approvers: type: optional reviewers: teams: - dev-infra-framework 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: 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: - alan-agius4 # Alan Agius - AleksanderBodurri # Aleksander Bodurri - alxhub # Alex Rickabaugh - AndrewKushnir # Andrew Kushnir - andrewseguin # Andrew Seguin - atscott # Andrew Scott - clydin # Charles Lyding - crisbeto # Kristiyan Kostadinov - devversion # Paul Gschwendtner - dgp1130 # Doug Parker - dylhunn # Dylan Hunn - jelbourn # Jeremy Elbourn - jessicajaniuk # Jessica Janiuk - JiaLiPassion # Jia Li - JoostK # Joost Koehoorn - josephperrott # Joey Perrott - MarkTechson # Mark Thompson (Techson) - mgechev # Minko Gechev - mmalerba # Miles Malerba - pkozlowski-opensource # Pawel Kozlowski - twerske # Emma Twersky - zarend # Zach Arend