diff --git a/.bazelignore b/.bazelignore
index 4d9d89144f813..0430508c73722 100644
--- a/.bazelignore
+++ b/.bazelignore
@@ -6,7 +6,6 @@
node_modules
dist
aio/node_modules
-aio/content/example-playground
aio/tools/examples/shared/node_modules
aio/tools/examples/shared/example-scaffold
@@ -37,3 +36,4 @@ integration/typings_test_rxjs7/node_modules
integration/typings_test_ts49/node_modules
integration/typings_test_ts50/node_modules
integration/typings_test_ts51/node_modules
+integration/typings_test_ts52/node_modules
diff --git a/.bazelrc b/.bazelrc
index 878d1deb4a390..f17f11703d340 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -1,6 +1,10 @@
# Enable debugging tests with --config=debug
test:debug --test_arg=--node_options=--inspect-brk --test_output=streamed --test_strategy=exclusive --test_timeout=9999 --nocache_test_results
+# Do not attempt to de-flake locally.
+# On CI we might set this to `3` to run with deflaking.
+test --flaky_test_attempts=1
+
###############################
# Filesystem interactions #
###############################
@@ -108,9 +112,10 @@ build:remote --define=EXECUTOR=remote
# Set a higher timeout value, just in case.
build:remote --remote_timeout=600
-# Increase the default number of jobs by 50% because our build has lots of
-# parallelism
-build:remote --jobs=150
+# Bazel detects maximum number of jobs based on host resources.
+# Since we run remotely, we can increase this number significantly.
+common:remote --jobs=200
+
build:remote --google_default_credentials
# Limit the number of test jobs for on an AIO local deps build. The example tests running
@@ -130,10 +135,16 @@ build:remote --platforms=@npm//@angular/build-tooling/bazel/remote-execution:pla
# Remote instance and caching
build:remote --remote_instance_name=projects/internal-200822/instances/primary_instance
-build:remote --project_id=internal-200822
+build:remote --bes_instance_name=internal-200822
build:remote --remote_cache=remotebuildexecution.googleapis.com
build:remote --remote_executor=remotebuildexecution.googleapis.com
+# Use HTTP remote cache
+build:remote-cache --remote_cache=https://storage.googleapis.com/angular-team-cache
+build:remote-cache --remote_accept_cached=true
+build:remote-cache --remote_upload_local_results=true
+build:remote-cache --google_default_credentials
+
# Ensure that tags like "no-remote-exec" get propagated to actions created by rules,
# even if the rule implementation does not explicitly pass them to the execution requirements.
# https://bazel.build/reference/command-line-reference#flag--experimental_allow_tags_propagation
diff --git a/.circleci/bazel.common.rc b/.circleci/bazel.common.rc
index a6fc3a7dde6bb..2b4c9ec625d16 100644
--- a/.circleci/bazel.common.rc
+++ b/.circleci/bazel.common.rc
@@ -6,7 +6,8 @@
build --announce_rc
# Retry in the event of flakes, eg. https://circleci.com/gh/angular/angular/31309
-test --flaky_test_attempts=2
+# By default this is set in the project `.bazelrc` to `1`.
+test --flaky_test_attempts=3
# More details on failures
build --verbose_failures=true
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 733e88e9e8630..738b684ca80df 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -89,7 +89,7 @@ executors:
type: string
default: medium
docker:
- - image: cimg/node:16.14.0
+ - image: cimg/node:18.13.0
resource_class: << parameters.resource_class >>
working_directory: ~/ng
@@ -99,7 +99,7 @@ executors:
type: string
default: medium
docker:
- - image: cimg/node:16.14.0-browsers
+ - image: cimg/node:18.13.0-browsers
resource_class: << parameters.resource_class >>
working_directory: ~/ng
@@ -249,57 +249,6 @@ jobs:
- ./ng
- ./bazel_repository_cache
- lint:
- executor: default-executor
- steps:
- - custom_attach_workspace
- - init_environment
-
- - run: yarn -s tslint
- - run: yarn -s --cwd aio lint
- - run: yarn -s ng-dev format changed $CI_GIT_BASE_REVISION --check
- - run: yarn -s ts-circular-deps:check
- - run: yarn -s ng-dev pullapprove verify
- - run: yarn -s ng-dev ngbot verify
- - run: yarn -s ng-dev commit-message validate-range $CI_GIT_BASE_REVISION $CI_GIT_REVISION
- - run: yarn -s check-tooling-setup
-
- test:
- executor:
- name: test-browser-executor
- # Now that large integration tests are running locally in parallel (they can't run on RBE yet
- # as they require network access for yarn install), this test is running out of memory
- # consistently with the xlarge machine.
- # TODO: switch back to xlarge once integration tests are running on remote-exec
- resource_class: 2xlarge+
- steps:
- - custom_attach_workspace
- - init_environment
- - run:
- # We need to explicitly specify the --symlink_prefix option because otherwise we would
- # not be able to easily find the output bin directory when uploading artifacts for size
- # measurements.
- command: yarn test:ci
- no_output_timeout: 20m
- # Publish bundle artifacts which will be used to calculate the size change. **Note**: Make
- # sure that the size plugin from the Angular robot fetches the artifacts from this CircleCI
- # job (see .github/angular-robot.yml). Additionally any artifacts need to be stored with the
- # following path format: "{projectName}/{context}/{fileName}". This format is necessary
- # because otherwise the bot is not able to pick up the artifacts from CircleCI. See:
- # https://github.com/angular/github-robot/blob/master/functions/src/plugins/size.ts#L392-L394
- - store_artifacts:
- path: dist/bin/packages/core/test/bundling/hello_world/bundle.min.js
- destination: core/hello_world/bundle
- - store_artifacts:
- path: dist/bin/packages/core/test/bundling/todo/bundle.min.js
- destination: core/todo/bundle
- - store_artifacts:
- path: dist/bin/packages/core/test/bundling/hello_world/bundle.min.js.br
- destination: core/hello_world/bundle.br
- - store_artifacts:
- path: dist/bin/packages/core/test/bundling/todo/bundle.min.js.br
- destination: core/todo/bundle.br
-
# NOTE: This is currently limited to main builds only. See the `monitoring` configuration.
saucelabs:
executor:
@@ -327,48 +276,6 @@ jobs:
- notify_webhook_on_fail:
webhook_url_env_var: SLACK_DEV_INFRA_CI_FAILURES_WEBHOOK_URL
- test_aio:
- executor:
- name: test-browser-executor
- resource_class: 2xlarge+
- steps:
- - custom_attach_workspace
- - init_environment
-
- # Run all aio tests
- - run:
- command: yarn --cwd aio test:ci
- no_output_timeout: 20m
-
- # Check the bundle sizes.
- - run: yarn --cwd aio payload-size
-
- deploy_aio:
- executor:
- name: test-browser-executor
- resource_class: 2xlarge+
- steps:
- - custom_attach_workspace
- - init_environment
- # Deploy angular.io to production (if necessary)
- - run: setPublicVar_CI_STABLE_BRANCH
- - run: yarn --cwd aio deploy-production
-
- test_aio_local:
- executor:
- name: test-browser-executor
- resource_class: 2xlarge+
- steps:
- - custom_attach_workspace
- - init_environment
- # Run all aio tests (with local Angular packages)
- - run:
- command: yarn --cwd aio test-local:ci
- no_output_timeout: 20m
-
- # Check the bundle sizes.
- - run: yarn --cwd aio payload-size aio-local
-
# The `build-npm-packages` tasks exist for backwards-compatibility with old scripts and
# tests that rely on the pre-Bazel `dist/packages-dist` output structure (build.sh).
# Having multiple jobs that independently build in this manner duplicates some work; we build
@@ -400,47 +307,6 @@ jobs:
- ~/bazel_repository_cache
- ~/.cache/bazelisk
- # This job creates compressed tarballs (`.tgz` files) for all Angular packages and stores them as
- # build artifacts. This makes it easy to try out changes from a PR build for testing purposes.
- # More info CircleCI build artifacts: https://circleci.com/docs/2.0/artifacts
- #
- # NOTE: Currently, this job only runs for PR builds. See `publish_snapshot` for non-PR builds.
- publish_packages_as_artifacts:
- executor: default-executor
- environment:
- AIMWA_PACKAGES_DIR: &aimwa_packages_dir 'dist/angular-in-memory-web-api-dist'
- AIMWA_PACKAGES_ARCHIVES_DIR: &aimwa_packages_archives_dir 'dist/angular-in-memory-web-api-dist-archives'
- NG_PACKAGES_DIR: &ng_packages_dir 'dist/packages-dist'
- NG_PACKAGES_ARCHIVES_DIR: &ng_packages_archives_dir 'dist/packages-dist-archives'
- ZONEJS_PACKAGES_DIR: &zonejs_packages_dir 'dist/zone.js-dist'
- ZONEJS_PACKAGES_ARCHIVES_DIR: &zonejs_packages_archives_dir 'dist/zone.js-dist-archives'
- steps:
- - custom_attach_workspace
- - init_environment
- # Publish `@angular/*` packages.
- - run:
- name: Create artifacts for @angular/* packages
- command: ./scripts/ci/create-package-archives.sh $CI_BRANCH $CI_COMMIT $NG_PACKAGES_DIR $NG_PACKAGES_ARCHIVES_DIR
- - store_artifacts:
- path: *ng_packages_archives_dir
- destination: angular
- # Publish the `angular-in-memory-web-api` package.
- - run:
- name: Create artifacts for the `angular-in-memory-web-api` package
- # Need to remove the zone.js.tgz before archive
- command: ./scripts/ci/create-package-archives.sh $CI_BRANCH $CI_COMMIT $AIMWA_PACKAGES_DIR $AIMWA_PACKAGES_ARCHIVES_DIR
- - store_artifacts:
- path: *aimwa_packages_archives_dir
- destination: angular-in-memory-web-api
- # Publish the `zone.js` package.
- - run:
- name: Create artifacts for the `zone.js` package
- # Need to remove the zone.js.tgz before archive
- command: rm -rf $ZONEJS_PACKAGES_DIR/archive && ./scripts/ci/create-package-archives.sh $CI_BRANCH $CI_COMMIT $ZONEJS_PACKAGES_DIR $ZONEJS_PACKAGES_ARCHIVES_DIR
- - store_artifacts:
- path: *zonejs_packages_archives_dir
- destination: zone.js
-
# This job updates the content of repos like github.com/angular/core-builds
# for every green build on angular/angular.
publish_snapshot:
@@ -457,14 +323,6 @@ jobs:
command: echo "https://${SNAPSHOT_BUILDS_GITHUB_TOKEN}:@github.com" > ${HOME}/.git_credentials
- run: ./scripts/ci/publish-build-artifacts.sh
- aio_misc:
- executor: default-executor
- steps:
- - custom_attach_workspace
- - run:
- name: Check website provided in contributors.json file
- command: yarn node aio/scripts/test-external-urls.js
-
aio_monitoring_stable:
executor: test-browser-executor
steps:
@@ -500,166 +358,6 @@ jobs:
- notify_webhook_on_fail:
webhook_url_env_var: SLACK_DEV_INFRA_CI_FAILURES_WEBHOOK_URL
- legacy-unit-tests-saucelabs:
- executor:
- name: default-executor
- # In order to avoid the bottleneck of having a slow host machine, we acquire a better
- # container for this job. This is necessary because we launch a lot of browsers concurrently
- # and therefore the tunnel and Karma need to process a lot of file requests and tests.
- resource_class: xlarge
- steps:
- - custom_attach_workspace
- - init_environment
- - init_saucelabs_environment
- - run:
- name: Starting Saucelabs tunnel service
- command: ./tools/saucelabs/sauce-service.sh run
- background: true
- # Build test fixtures for a test that rely on Bazel-generated fixtures. Note that disabling
- # specific tests which are reliant on such generated fixtures is not an option as SystemJS
- # in the Saucelabs legacy job always fetches referenced files, even if the imports would be
- # guarded by an check to skip in the Saucelabs legacy job. We should be good running such
- # test in all supported browsers on Saucelabs anyway until this job can be removed.
- - run:
- name: Preparing Bazel-generated fixtures required in legacy tests
- command: |
- yarn bazel build \
- //packages/core/test:downleveled_es5_fixture \
- //packages/common/locales
-
- # Needed for the ES5 downlevel reflector test in `packages/core/test/reflection`.
- mkdir -p dist/legacy-test-out/core/test/reflection/
- cp dist/bin/packages/core/test/reflection/es5_downleveled_inheritance_fixture.js \
- dist/legacy-test-out/core/test/reflection/es5_downleveled_inheritance_fixture.js
- # Locale files are needed for i18n tests running within Saucelabs. These are added
- # directly as sources so that the TypeScript compilation of `/packages/tsconfig.json`
- # can succeed. Note that the base locale and currencies files are checked-in, so
- # we do not need to re-generate those through Bazel.
- mkdir -p packages/common/locales/extra
- cp dist/bin/packages/common/locales/*.ts packages/common/locales
- cp dist/bin/packages/common/locales/extra/*.ts packages/common/locales/extra
- # Build the bundle for all tests to run within Saucelabs
- - run: node tools/legacy-saucelabs/build-saucelabs-test-bundle.mjs
- - run:
- # Waiting on ready ensures that we don't run tests too early without Saucelabs not being ready.
- name: Waiting for Saucelabs tunnel to connect
- command: ./tools/saucelabs/sauce-service.sh ready-wait
- - run:
- name: Running tests on Saucelabs.
- command: |
- KARMA_WEB_TEST_MODE=SL_REQUIRED yarn karma start ./karma-js.conf.js --single-run
- - run:
- name: Stop Saucelabs tunnel service
- command: ./tools/saucelabs/sauce-service.sh stop
-
- test_zonejs:
- executor:
- name: default-executor
- resource_class: xlarge
- steps:
- - custom_attach_workspace
- - init_environment
- - install_java
-
- - run: |
- yarn bazel build -- \
- //packages/zone.js/bundles:zone.umd.js \
- //packages/zone.js:npm_package \
- //packages/zone.js/test/closure:closure_js \
- //packages/zone.js:zone_externs
-
- - run: |
- mkdir -p packages/zone.js/build/
- mkdir -p packages/zone.js/build/test/
- mkdir -p packages/zone.js/test/
-
- cp dist/bin/packages/zone.js/bundles/zone.umd.js packages/zone.js/build/zone.umd.js
- cp dist/bin/packages/zone.js/npm_package/bundles/zone-mix.umd.js ./packages/zone.js/test/extra/
- cp dist/bin/packages/zone.js/npm_package/bundles/zone-patch-electron.umd.js ./packages/zone.js/test/extra/
- cp dist/bin/packages/zone.js/test/closure/zone.closure.mjs ./packages/zone.js/build/test/zone.closure.mjs
- cp dist/bin/packages/zone.js/zone_externs.js ./packages/zone.js/build/zone_externs.js
-
- # Install
- - run: yarn --cwd packages/zone.js install --frozen-lockfile --non-interactive --cache-folder ~/.cache/yarn
- # Run zone.js tools tests
- - run: yarn --cwd packages/zone.js promisetest
- - run: yarn --cwd packages/zone.js promisefinallytest
- - run: yarn --cwd packages/zone.js jest:test
- - run: yarn --cwd packages/zone.js jest:nodetest
- - run: yarn --cwd packages/zone.js electrontest
- - run: yarn --cwd packages/zone.js closuretest
- - run: yarn --cwd packages/zone.js/test/typings install --frozen-lockfile --non-interactive --cache-folder ~/.cache/yarn
- - run: yarn --cwd packages/zone.js/test/typings test
-
- # Windows jobs
- # Docs: https://circleci.com/docs/2.0/hello-world-windows/
- test_win:
- executor: windows-executor
- steps:
- - checkout
-
- # Setup the proper NodeJS version. The image comes pre-installed with `nvm-windows`.
- # Note: This happens immediately after checkout because environment initialization logic
- # might rely on Node and shouldn't use the older image-provided NodeJS version.
- - run:
- name: Install NodeJS version from `.nvmrc`.
- command: |
- nvm on
- nvm install $(cat .nvmrc)
- nvm use $(cat .nvmrc)
- - run:
- name: Debug information for flakiness of Windows job
- command: |
- node -v
- yarn -v
- which node
- which yarn
- echo "Path: $PATH"
- yarn node -v
-
- - save_month_to_file
- - capture_patches_for_cache_key
- - init_environment
- - restore_cache:
- keys:
- - *cache_key_win
- - *cache_key_win_fallback
-
- # Install project dependencies, and install Bazelisk globally. This is necessary as
- # Windows might error when `bazel` is invoked from the project node modules. The Bazel
- # invocation might modify the symlinked project `node_modules` again, causing failures.
- - yarn_install
- - run: yarn global add @bazel/bazelisk@${BAZELISK_VERSION}
-
- - run:
- name: Build all windows CI targets
- command: |
- $(yarn global bin)/bazelisk build //packages/compiler-cli/...
- no_output_timeout: 15m
- - run:
- name: Test all windows CI targets
- command: |
- $(yarn global bin)/bazelisk test --test_tag_filters="-browser:chromium-local" //packages/compiler-cli/...
- no_output_timeout: 15m
-
- - save_cache:
- key: *cache_key_win
- paths:
- - node_modules
- - ~/AppData/Local/bazelisk
-
- test_angular_devtools:
- executor: test-browser-executor
- steps:
- - custom_attach_workspace
- - init_environment
- - run:
- name: Run unit tests
- command: yarn devtools:test
- - run:
- name: Test production build
- command: yarn devtools:build:chrome
-
workflows:
version: 2
default_workflow:
@@ -668,63 +366,19 @@ workflows:
filters:
branches:
ignore: g3
- - lint:
- requires:
- - setup
- - test:
- requires:
- - setup
- build-npm-packages:
requires:
- setup
- - legacy-unit-tests-saucelabs:
- requires:
- - setup
- - test_aio:
- requires:
- - setup
- - deploy_aio:
- requires:
- - test_aio
- - test_aio_local:
- requires:
- - setup
- - publish_packages_as_artifacts:
- requires:
- - build-npm-packages
- publish_snapshot:
<<: *only_release_branches
requires:
- # Only publish if tests and integration tests pass
- - test
- # Only publish if `aio`/`docs` tests using the locally built Angular packages pass
- - test_aio_local
# Get the artifacts to publish from the build-packages-dist job
# since the publishing script expects the legacy outputs layout.
- build-npm-packages
- - legacy-unit-tests-saucelabs
- - test_zonejs:
- requires:
- - setup
- - test_win:
- requires:
- - setup
- - test_angular_devtools:
- requires:
- - setup
monitoring:
jobs:
- setup
- - aio_misc:
- requires:
- - setup
- - aio_monitoring_stable:
- requires:
- - setup
- - aio_monitoring_next:
- requires:
- - setup
- saucelabs:
# Testing saucelabs via Bazel currently taking longer than the legacy saucelabs job as it
# each karma_web_test target is provisioning and tearing down browsers which is adding
diff --git a/.devcontainer/recommended-Dockerfile b/.devcontainer/recommended-Dockerfile
index fb0215d4aab9b..756cbabc0a1b3 100644
--- a/.devcontainer/recommended-Dockerfile
+++ b/.devcontainer/recommended-Dockerfile
@@ -1,7 +1,7 @@
# Image metadata and config.
# Ideally, the Node.js version should match what we use on CI.
# See `executors > default-executor` in `.circleci/config.yml`.
-FROM cimg/node:16.13-browsers
+FROM cimg/node:16.13-browsers@sha256:6c7a82701665dda03e92d682360fa2e4358e07dab8d1b6a7e48f7d36e3d98117
LABEL name="Angular dev environment" \
diff --git a/.github/actions/yarn-install/action.yml b/.github/actions/yarn-install/action.yml
index bee48646f6cf3..9ea5152d01a46 100644
--- a/.github/actions/yarn-install/action.yml
+++ b/.github/actions/yarn-install/action.yml
@@ -4,7 +4,7 @@ description: 'Installs the dependencies using Yarn'
runs:
using: 'composite'
steps:
- - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
+ - uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3
with:
path: |
./node_modules/
diff --git a/.github/angular-robot.yml b/.github/angular-robot.yml
index d58fbaa7daf37..a37cd32125de9 100644
--- a/.github/angular-robot.yml
+++ b/.github/angular-robot.yml
@@ -69,7 +69,6 @@ merge:
# list of PR statuses that need to be successful
requiredStatuses:
- 'ci/circleci: build'
- - 'ci/circleci: lint'
- 'google-internal-tests'
- 'pullapprove'
diff --git a/.github/workflows/aio-preview-build.yml b/.github/workflows/aio-preview-build.yml
index 9876ec7f42d52..8cfdf924c9ead 100644
--- a/.github/workflows/aio-preview-build.yml
+++ b/.github/workflows/aio-preview-build.yml
@@ -22,10 +22,10 @@ jobs:
(github.event.action == 'labeled' && github.event.label.name == 'aio: preview') ||
(github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'aio: preview'))
steps:
- - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
+ - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
- uses: ./.github/actions/yarn-install
- - uses: angular/dev-infra/github-actions/setup-bazel-remote-exec@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ - uses: angular/dev-infra/github-actions/bazel/configure-remote@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
bazelrc: ./.bazelrc.user
@@ -34,7 +34,7 @@ jobs:
# the number of concurrent actions is determined based on the host resources.
- run: bazel build //aio:build --jobs=32 --announce_rc --verbose_failures
- - uses: angular/dev-infra/github-actions/deploy-previews/pack-and-upload-artifact@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ - uses: angular/dev-infra/github-actions/previews/pack-and-upload-artifact@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
workflow-artifact-name: 'aio'
pull-number: '${{github.event.pull_request.number}}'
diff --git a/.github/workflows/aio-preview-deploy.yml b/.github/workflows/aio-preview-deploy.yml
index bec4e5d5d9475..2606e6d1947e0 100644
--- a/.github/workflows/aio-preview-deploy.yml
+++ b/.github/workflows/aio-preview-deploy.yml
@@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3
+ - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
- name: Configure Firebase deploy target
working-directory: aio/
@@ -34,7 +34,7 @@ jobs:
npx -y firebase-tools@latest target:clear --project ${{env.PREVIEW_PROJECT}} hosting aio
npx -y firebase-tools@latest target:apply --project ${{env.PREVIEW_PROJECT}} hosting aio ${{env.PREVIEW_SITE}}
- - uses: angular/dev-infra/github-actions/deploy-previews/upload-artifacts-to-firebase@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ - uses: angular/dev-infra/github-actions/previews/upload-artifacts-to-firebase@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
github-token: '${{secrets.GITHUB_TOKEN}}'
workflow-artifact-name: 'aio'
diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml
index 0c544abc4d92e..0c973be9f384f 100644
--- a/.github/workflows/assistant-to-the-branch-manager.yml
+++ b/.github/workflows/assistant-to-the-branch-manager.yml
@@ -13,9 +13,9 @@ jobs:
assistant_to_the_branch_manager:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
+ - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
persist-credentials: false
- - uses: angular/dev-infra/github-actions/branch-manager@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ - uses: angular/dev-infra/github-actions/branch-manager@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
diff --git a/.github/workflows/benchmark-compare.yml b/.github/workflows/benchmark-compare.yml
index 5c0b3ba1d49b4..78f5be1a0b27f 100644
--- a/.github/workflows/benchmark-compare.yml
+++ b/.github/workflows/benchmark-compare.yml
@@ -4,9 +4,7 @@ on:
issue_comment:
types: [created]
-permissions:
- # Needed in order to be able to comment on the pull request.
- pull-requests: write
+permissions: read-all
jobs:
benchmark-compare:
@@ -24,13 +22,13 @@ jobs:
- uses: peter-evans/create-or-update-comment@c6c9a1a66007646a28c153e2a8580a5bad27bcfa # v3
with:
comment-id: ${{github.event.comment.id}}
- token: '${{secrets.GITHUB_TOKEN}}'
+ token: '${{secrets.BENCHMARK_POST_RESULTS_GITHUB_TOKEN}}'
reactions: 'rocket'
- - uses: alessbell/pull-request-comment-branch@v1.1
+ - uses: alessbell/pull-request-comment-branch@aad01d65d6982b8eacabed5e9a684cd8ceb98da6 # v1.1
id: comment-branch
- - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
+ - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
# Specify repository as the PR branch might be from a fork.
repository: ${{steps.comment-branch.outputs.head_owner}}/${{steps.comment-branch.outputs.head_repo}}
@@ -40,33 +38,31 @@ jobs:
- uses: ./.github/actions/yarn-install
- - uses: angular/dev-infra/github-actions/setup-bazel-remote-exec@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ - uses: angular/dev-infra/github-actions/bazel/configure-remote@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
bazelrc: ./.bazelrc.user
- - name: Extracting comment information
+ - name: Preparing benchmark for GitHub action
id: info
- run: yarn benchmarks extract-compare-comment "${{github.event.comment.body}}"
+ env:
+ # Untrusted input used in an executable code, must be wrapped as an env var to prevent injections
+ COMMENT_BODY: ${{ github.event.comment.body }}
+ run: yarn benchmarks prepare-for-github-action "$COMMENT_BODY"
- - name: Resolving current PR SHA
- id: pr-head
- run: |
- echo "sha=$(git rev-parse ${{steps.comment-branch.outputs.head_ref}})" >> "$GITHUB_OUTPUT"
-
- - run: yarn benchmarks run-compare ${{steps.info.outputs.compareRef}} ${{steps.info.outputs.benchmarkTarget}}
+ - run: yarn benchmarks run-compare ${{steps.info.outputs.compareSha}} ${{steps.info.outputs.benchmarkTarget}}
id: benchmark
name: Running benchmark
- uses: peter-evans/create-or-update-comment@c6c9a1a66007646a28c153e2a8580a5bad27bcfa # v3
with:
issue-number: ${{github.event.issue.number}}
- token: '${{secrets.GITHUB_TOKEN}}'
+ token: '${{secrets.BENCHMARK_POST_RESULTS_GITHUB_TOKEN}}'
body: |
## Benchmark Test Results
**Test**: `${{steps.info.outputs.benchmarkTarget}}`
- ### PR (${{steps.pr-head.outputs.sha}})
+ ### PR (${{steps.info.outputs.prHeadSha}})
${{steps.benchmark.outputs.workingStageResultsText}}
- ### Compare Ref (${{steps.info.outputs.compareRef}})
+ ### Compare Ref (${{steps.info.outputs.compareSha}})
${{steps.benchmark.outputs.comparisonResultsText}}
diff --git a/.github/workflows/ci-privileged.yml b/.github/workflows/ci-privileged.yml
new file mode 100644
index 0000000000000..b84832659a583
--- /dev/null
+++ b/.github/workflows/ci-privileged.yml
@@ -0,0 +1,64 @@
+name: CI
+
+on:
+ pull_request_target:
+ types: [opened, synchronize, reopened]
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref }}
+ cancel-in-progress: true
+
+permissions: {}
+
+defaults:
+ run:
+ shell: bash
+
+jobs:
+ saucelabs:
+ runs-on: ubuntu-latest-4core
+ env:
+ SAUCE_TUNNEL_IDENTIFIER: angular-framework-${{ github.run_number }}
+ SAUCE_USERNAME: ${{ vars.SAUCE_USERNAME }}
+ SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }}
+ steps:
+ - name: Initialize environment
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ with:
+ cache-node-modules: true
+ # Checking out the pull request commit is intended here as we need to run the changed code tests.
+ ref: ${{ github.sha }}
+ - name: Install node modules
+ run: yarn install --frozen-lockfile
+ - name: Setup Bazel
+ uses: angular/dev-infra/github-actions/bazel/setup@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Starting Saucelabs tunnel service
+ run: ./tools/saucelabs/sauce-service.sh run &
+ # Build test fixtures for a test that rely on Bazel-generated fixtures. Note that disabling
+ # specific tests which are reliant on such generated fixtures is not an option as SystemJS
+ # in the Saucelabs legacy job always fetches referenced files, even if the imports would be
+ # guarded by an check to skip in the Saucelabs legacy job. We should be good running such
+ # test in all supported browsers on Saucelabs anyway until this job can be removed.
+ - name: Preparing Bazel-generated fixtures required in legacy tests
+ run: |
+ yarn bazel build //packages/core/test:downleveled_es5_fixture //packages/common/locales
+ # Needed for the ES5 downlevel reflector test in `packages/core/test/reflection`.
+ mkdir -p dist/legacy-test-out/core/test/reflection/
+ cp dist/bin/packages/core/test/reflection/es5_downleveled_inheritance_fixture.js \
+ dist/legacy-test-out/core/test/reflection/es5_downleveled_inheritance_fixture.js
+ # Locale files are needed for i18n tests running within Saucelabs. These are added
+ # directly as sources so that the TypeScript compilation of `/packages/tsconfig.json`
+ # can succeed. Note that the base locale and currencies files are checked-in, so
+ # we do not need to re-generate those through Bazel.
+ mkdir -p packages/common/locales/extra
+ cp dist/bin/packages/common/locales/*.ts packages/common/locales
+ cp dist/bin/packages/common/locales/extra/*.ts packages/common/locales/extra
+ - name: Build bundle of tests to run on Saucelabs
+ run: node tools/legacy-saucelabs/build-saucelabs-test-bundle.mjs
+ - name: Wait and confirm Saucelabs tunnel has connected
+ run: ./tools/saucelabs/sauce-service.sh ready-wait
+ timeout-minutes: 3
+ - name: Running tests on Saucelabs.
+ run: KARMA_WEB_TEST_MODE=SL_REQUIRED yarn karma start ./karma-js.conf.js --single-run
+ - name: Stop Saucelabs tunnel service
+ run: ./tools/saucelabs/sauce-service.sh stop
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000000000..6cc5ba643a1a1
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,236 @@
+name: CI
+
+on:
+ push:
+ branches:
+ - main
+ - '[0-9]+.[0-9]+.x'
+ pull_request:
+ types: [opened, synchronize, reopened]
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+permissions: {}
+
+defaults:
+ run:
+ shell: bash
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Initialize environment
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ with:
+ cache-node-modules: true
+ node-module-directories: |
+ ./node_modules
+ ./aio/node_modules
+ - name: Install node modules
+ run: yarn install --frozen-lockfile
+ - name: Install node modules in aio
+ run: yarn install --frozen-lockfile --cwd aio
+ - name: Check code lint
+ run: yarn -s tslint
+ - name: Check code lint in aio
+ run: yarn -s --cwd aio lint
+ - name: Check for circular dependencies
+ run: yarn -s ts-circular-deps:check
+ - name: Validate pull approve configuration
+ run: yarn -s ng-dev pullapprove verify
+ - name: Validate angular robot configuration
+ run: yarn -s ng-dev ngbot verify
+ - name: Confirm code builds with typescript as expected
+ run: yarn -s check-tooling-setup
+ - name: Check commit message
+ # Commit message validation is only done on pull requests as its too late to validate once
+ # it has been merged.
+ if: github.event_name == 'pull_request'
+ run: yarn ng-dev commit-message validate-range ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}
+ - name: Check code format
+ # Code formatting checks are only done on pull requests as its too late to validate once
+ # it has been merged.
+ if: github.event_name == 'pull_request'
+ run: yarn ng-dev format changed --check ${{ github.event.pull_request.base.sha }}
+
+ devtools:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Initialize environment
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ with:
+ cache-node-modules: true
+ - name: Setup Bazel
+ uses: angular/dev-infra/github-actions/bazel/setup@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Setup Bazel RBE
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Install node modules
+ run: yarn install --frozen-lockfile
+ - name: Run unit tests
+ run: yarn devtools:test
+ - name: Test build
+ run: yarn devtools:build:chrome
+
+ framework-win:
+ runs-on: windows-latest
+ steps:
+ - name: Initialize environment
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ with:
+ cache-node-modules: true
+ - name: Setup Bazel
+ uses: angular/dev-infra/github-actions/bazel/setup@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Setup Bazel Remote Caching
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Install node modules
+ run: yarn install --frozen-lockfile --network-timeout 100000
+ - name: Test all windows CI targets
+ # Skip the simulated file system tests on Windows, because they tend to be flaky.
+ # Note that we need to pass `NG_SKIP_SIMULATED_FS` using `--test_env`, because the
+ # environment variable doesn't get picked up in Bazel when specified through `env` in GHA.
+ run: bazel test --test_tag_filters="-browser:chromium-local" --test_env=NG_SKIP_SIMULATED_FS=true //packages/compiler-cli/...
+
+ test:
+ runs-on: ubuntu-latest-4core
+ steps:
+ - name: Initialize environment
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ with:
+ cache-node-modules: true
+ - name: Setup Bazel
+ uses: angular/dev-infra/github-actions/bazel/setup@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Setup Bazel Remote Caching
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Install node modules
+ run: yarn install --frozen-lockfile --network-timeout 100000
+ - name: Run CI tests for framework
+ run: yarn test:ci
+
+ aio:
+ runs-on: ubuntu-latest-4core
+ steps:
+ - name: Initialize environment
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ with:
+ cache-node-modules: true
+ node-module-directories: |
+ ./aio/node_modules
+ - name: Setup Bazel
+ uses: angular/dev-infra/github-actions/bazel/setup@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Setup Bazel RBE
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Install node modules for aio
+ run: yarn install --cwd aio --frozen-lockfile
+ - name: Run AIO tests with upstream packages
+ run: yarn --cwd aio test:ci
+ - name: Check generated bundle sizes
+ run: yarn --cwd aio payload-size
+
+ aio-local:
+ runs-on:
+ labels: ubuntu-latest-4core
+ steps:
+ - name: Initialize environment
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ with:
+ cache-node-modules: true
+ node-module-directories: |
+ ./aio/node_modules
+ - name: Setup Bazel
+ uses: angular/dev-infra/github-actions/bazel/setup@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Setup Bazel RBE
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Install node modules
+ run: yarn install --cwd aio --frozen-lockfile
+ - name: Run AIO tests with local packages
+ run: yarn --cwd aio test-local:ci
+ - name: Check generated bundle sizes
+ run: yarn --cwd aio payload-size aio-local
+
+ aio-deploy:
+ needs: [aio]
+ if: needs.aio.result == 'success' && github.event_name == 'push'
+ runs-on:
+ labels: ubuntu-latest
+ steps:
+ - name: Initialize environment
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ with:
+ cache-node-modules: true
+ node-module-directories: |
+ ./aio/node_modules
+ - name: Setup Bazel
+ uses: angular/dev-infra/github-actions/bazel/setup@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Setup Bazel RBE
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Install node modules for aio
+ run: yarn install --cwd aio --frozen-lockfile
+ - name: Set the stable branch environment variable
+ id: latest_version
+ run: |
+ echo "CI_STABLE_BRANCH=$(npm info @angular/core dist-tags.latest | sed -r 's/^\s*([0-9]+\.[0-9]+)\.[0-9]+.*$/\1.x/')" >> $GITHUB_OUTPUT
+ echo "CI_BRANCH=$(echo ${{ github.event.ref }} | cut -d '/' -f 3)" >> $GITHUB_OUTPUT
+ - name: Deploy aio to production
+ env:
+ CI_AIO_MIN_PWA_SCORE: '95'
+ CI_COMMIT: ${{ github.event.after }}
+ CI_REPO_NAME: 'angular'
+ CI_PULL_REQUEST: 'false'
+ CI_REPO_OWNER: 'angular'
+ CI_BUILD_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
+ CI_STABLE_BRANCH: ${{ steps.latest_version.outputs.CI_STABLE_BRANCH }}
+ CI_BRANCH: ${{ steps.latest_version.outputs.CI_BRANCH }}
+ CI_SECRET_AIO_DEPLOY_FIREBASE_TOKEN: ${{ secrets.AIO_DEPLOY_TOKEN }}
+ CI_SECRET_PAYLOAD_FIREBASE_TOKEN: ${{ secrets.AIO_PAYLOAD_TOKEN }}
+ run: yarn --cwd aio deploy-production
+
+ zone-js:
+ runs-on:
+ labels: ubuntu-latest-4core
+ steps:
+ - name: Initialize environment
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ with:
+ cache-node-modules: true
+ node-module-directories: |
+ ./node_modules
+ ./packages/zone.js/node_modules
+ ./packages/zone.js/test/typings/node_modules
+ - name: Setup Bazel
+ uses: angular/dev-infra/github-actions/bazel/setup@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Setup Bazel RBE
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Install node modules
+ run: yarn install --frozen-lockfile
+ - run: |
+ yarn bazel build \
+ //packages/zone.js/bundles:zone.umd.js \
+ //packages/zone.js:npm_package \
+ //packages/zone.js/test/closure:closure_js \
+ //packages/zone.js:zone_externs
+
+ - run: |
+ mkdir -p packages/zone.js/build/
+ mkdir -p packages/zone.js/build/test/
+ mkdir -p packages/zone.js/test/
+
+ cp dist/bin/packages/zone.js/bundles/zone.umd.js packages/zone.js/build/zone.umd.js
+ cp dist/bin/packages/zone.js/npm_package/bundles/zone-mix.umd.js ./packages/zone.js/test/extra/
+ cp dist/bin/packages/zone.js/npm_package/bundles/zone-patch-electron.umd.js ./packages/zone.js/test/extra/
+ cp dist/bin/packages/zone.js/test/closure/zone.closure.mjs ./packages/zone.js/build/test/zone.closure.mjs
+ cp dist/bin/packages/zone.js/zone_externs.js ./packages/zone.js/build/zone_externs.js
+
+ # Install
+ - run: yarn --cwd packages/zone.js install --frozen-lockfile --non-interactive
+ # Run zone.js tools tests
+ - run: yarn --cwd packages/zone.js promisetest
+ - run: yarn --cwd packages/zone.js promisefinallytest
+ - run: yarn --cwd packages/zone.js jest:test
+ - run: yarn --cwd packages/zone.js jest:nodetest
+ - run: yarn --cwd packages/zone.js electrontest
+ - run: yarn --cwd packages/zone.js closuretest
+ - run: yarn --cwd packages/zone.js/test/typings install --frozen-lockfile --non-interactive
+ - run: yarn --cwd packages/zone.js/test/typings test
diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml
index 69f0bb603d529..53fc678742745 100644
--- a/.github/workflows/dev-infra.yml
+++ b/.github/workflows/dev-infra.yml
@@ -12,14 +12,14 @@ jobs:
labels:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- - uses: angular/dev-infra/github-actions/commit-message-based-labels@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
+ - uses: angular/dev-infra/github-actions/commit-message-based-labels@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
post_approval_changes:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- - uses: angular/dev-infra/github-actions/post-approval-changes@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
+ - uses: angular/dev-infra/github-actions/post-approval-changes@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml
index ccede570fbd42..dfcbd2d758368 100644
--- a/.github/workflows/feature-requests.yml
+++ b/.github/workflows/feature-requests.yml
@@ -14,6 +14,6 @@ jobs:
if: github.repository == 'angular/angular'
runs-on: ubuntu-latest
steps:
- - uses: angular/dev-infra/github-actions/feature-request@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ - uses: angular/dev-infra/github-actions/feature-request@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
diff --git a/.github/workflows/google-internal-tests.yml b/.github/workflows/google-internal-tests.yml
index 7b717e4acd73c..7747b748c0e97 100644
--- a/.github/workflows/google-internal-tests.yml
+++ b/.github/workflows/google-internal-tests.yml
@@ -12,8 +12,8 @@ jobs:
trigger:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- - uses: angular/dev-infra/github-actions/google-internal-tests@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
+ - uses: angular/dev-infra/github-actions/google-internal-tests@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
run-tests-guide-url: http://go/angular-g3sync-start
github-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/merge-ready-status.yml b/.github/workflows/merge-ready-status.yml
index 663ba0964bc17..45ebf54a13af8 100644
--- a/.github/workflows/merge-ready-status.yml
+++ b/.github/workflows/merge-ready-status.yml
@@ -9,6 +9,6 @@ jobs:
status:
runs-on: ubuntu-latest
steps:
- - uses: angular/dev-infra/github-actions/unified-status-check@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ - uses: angular/dev-infra/github-actions/unified-status-check@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
diff --git a/.github/workflows/monitoring.yml b/.github/workflows/monitoring.yml
new file mode 100644
index 0000000000000..aaa85d714b3db
--- /dev/null
+++ b/.github/workflows/monitoring.yml
@@ -0,0 +1,55 @@
+name: Monitoring
+
+on:
+ schedule:
+ # Run at 10:00AM every day.
+ - cron: '0 10 * * *'
+
+permissions: {}
+
+defaults:
+ run:
+ shell: bash
+
+jobs:
+ check_aio:
+ runs-on: ubuntu-latest
+ env:
+ MINIMUM_PWA_SCORE: 95
+ strategy:
+ fail-fast: false
+ matrix:
+ version: ['https://next.angular.io/', 'https://angular.io/']
+ steps:
+ - name: Initialize environment
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ with:
+ cache-node-modules: true
+ node-module-directories: |
+ ./aio/node_modules
+ - name: Setup Bazel
+ uses: angular/dev-infra/github-actions/bazel/setup@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Setup Bazel RBE
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ - name: Install node modules in aio
+ run: yarn install --frozen-lockfile --cwd aio
+ - name: Run basic e2e and deployment config tests.
+ run: yarn --cwd aio test-production-url --test_env=TARGET_URL="${{ matrix.version }}"
+ - name: Run PWA-score tests.
+ run: yarn --cwd aio test-pwa-score "${{ matrix.version }}" "${{ env.MINIMUM_PWA_SCORE }}"
+ - name: Run a11y tests.
+ run: yarn --cwd aio test-a11y-score "${{ matrix.version }}"
+
+ check_contributor_links:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Initialize environment
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
+ with:
+ cache-node-modules: true
+ node-module-directories: |
+ ./aio/node_modules
+ - name: Install node modules in aio
+ run: yarn install --frozen-lockfile --cwd aio
+ - name: Check website provided in contributors.json file
+ run: node aio/scripts/test-external-urls.js
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index 45669d1fc5f47..6be794bc2c20d 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -25,12 +25,12 @@ jobs:
steps:
- name: 'Checkout code'
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
+ uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
persist-credentials: false
- name: 'Run analysis'
- uses: ossf/scorecard-action@80e868c13c90f172d68d1f4501dee99e2479f7af # v2.1.3
+ uses: ossf/scorecard-action@08b4669551908b1024bb425080c797723083c031 # v2.2.0
with:
results_file: results.sarif
results_format: sarif
@@ -39,7 +39,7 @@ jobs:
# Upload the results as artifacts.
- name: 'Upload artifact'
- uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
+ uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with:
name: SARIF file
path: results.sarif
@@ -47,6 +47,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: 'Upload to code-scanning'
- uses: github/codeql-action/upload-sarif@83f0fe6c4988d98a455712a27f0255212bba9bd4 # v2.3.6
+ uses: github/codeql-action/upload-sarif@04daf014b50eaf774287bf3f0f1869d4b4c4b913 # v2.21.7
with:
sarif_file: results.sarif
diff --git a/.github/workflows/update-cli-help.yml b/.github/workflows/update-cli-help.yml
index cf88d0c85c3c7..81e576742f119 100644
--- a/.github/workflows/update-cli-help.yml
+++ b/.github/workflows/update-cli-help.yml
@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
+ uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
# Setting `persist-credentials: false` prevents the github-action account from being the
# account that is attempted to be used for authentication, instead the remote is set to
@@ -32,7 +32,7 @@ jobs:
env:
ANGULAR_CLI_BUILDS_READONLY_GITHUB_TOKEN: ${{ secrets.ANGULAR_CLI_BUILDS_READONLY_GITHUB_TOKEN }}
- name: Create a PR (if necessary)
- uses: angular/dev-infra/github-actions/create-pr-for-changes@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ uses: angular/dev-infra/github-actions/create-pr-for-changes@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
branch-prefix: update-cli-help
pr-title: 'docs: update Angular CLI help [${{github.ref_name}}]'
diff --git a/.github/workflows/update-events.yml b/.github/workflows/update-events.yml
index 67aabbfa9ef37..5d910c70ae9d6 100644
--- a/.github/workflows/update-events.yml
+++ b/.github/workflows/update-events.yml
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
+ uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
# Setting `persist-credentials: false` prevents the github-action account from being the
# account that is attempted to be used for authentication, instead the remote is set to
@@ -35,7 +35,7 @@ jobs:
- name: Generate `events.json`
run: node aio/scripts/generate-events/index.mjs --ignore-invalid-dates
- name: Create a PR (if necessary)
- uses: angular/dev-infra/github-actions/create-pr-for-changes@5f06c4774df908ed69e1441f4ec63b898acf0c68
+ uses: angular/dev-infra/github-actions/create-pr-for-changes@f245bb8cf1942e3fb147febae2dc31dcb84fd5fa
with:
branch-prefix: docs-update-events
pr-title: 'docs: update events'
diff --git a/.nvmrc b/.nvmrc
index 832d38506443e..d939939b25962 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-16.14.0
+18.13.0
diff --git a/.pullapprove.yml b/.pullapprove.yml
index d9999cfbfd6b6..f7b48e8d0be7a 100644
--- a/.pullapprove.yml
+++ b/.pullapprove.yml
@@ -57,8 +57,7 @@
version: 3
availability:
- users_unavailable:
- - atscott
+ users_unavailable: []
# Meta field that goes unused by PullApprove to allow for defining aliases to be
# used throughout the config.
@@ -168,6 +167,7 @@ groups:
- atscott
- crisbeto
- JoostK
+ - dylhunn
# =========================================================
# Framework: Migrations
@@ -242,6 +242,7 @@ groups:
'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/**/{*,.*}',
@@ -310,6 +311,7 @@ groups:
'aio/content/guide/pipes.md',
'aio/content/guide/pipes-custom-data-trans.md',
'aio/content/guide/pipes-overview.md',
+ 'aio/content/guide/pipe-precedence.md',
'aio/content/guide/pipes-transform-data.md',
'aio/content/guide/pipe-template.md',
'aio/content/examples/pipes/**/{*,.*}',
@@ -336,7 +338,8 @@ groups:
'aio/content/images/guide/view-encapsulation/**/{*,.*}',
'aio/content/special-elements/**/{*,.*}',
'aio/content/guide/hydration.md',
- 'aio/content/guide/signals.md'
+ 'aio/content/guide/signals.md',
+ 'aio/content/examples/injection-token/**/{*,.*}',
])
reviewers:
users:
@@ -378,7 +381,6 @@ groups:
contains_any_globs(files, [
'packages/common/http/**/{*,.*}',
'packages/examples/http/**/{*,.*}',
- 'aio/content/guide/http.md',
'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',
@@ -515,7 +517,9 @@ groups:
'packages/platform-server/**/{*,.*}',
'aio/content/guide/prerendering.md',
'aio/content/guide/universal.md',
- 'aio/content/examples/universal/**/{*,.*}'
+ 'aio/content/examples/universal/**/{*,.*}',
+ 'aio/content/guide/universal-ngmodule.md',
+ 'aio/content/examples/universal-ngmodule/**/{*,.*}'
])
reviewers:
users:
@@ -781,8 +785,9 @@ groups:
])
reviewers:
users:
- - alxhub
+ - devversion
- josephperrott
+ - pkozlowski-opensource
# =========================================================
# Integration Tests
@@ -918,13 +923,7 @@ groups:
'aio/content/guide/releases.md',
'aio/content/guide/updating.md',
'aio/content/guide/deprecations.md',
- 'aio/content/guide/migration-legacy-message-id.md',
'aio/content/examples/deprecation-guide/**/{*,.*}',
- '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/update-to-latest-version.md',
@@ -1127,6 +1126,7 @@ groups:
users:
- AleksanderBodurri
- devversion
+ - dgp1130
- josephperrott
- mgechev
- twerske
@@ -1164,6 +1164,7 @@ groups:
'tools/esm-interop/**/{*,.*}',
'tools/gulp-tasks/**/{*,.*}',
'tools/legacy-saucelabs/**/{*,.*}',
+ 'tools/npm-patches/**/{*,.*}',
'tools/rxjs/**/{*,.*}',
'tools/saucelabs/**/{*,.*}',
'tools/saucelabs-daemon/**/{*,.*}',
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c59690dd2067b..2d67abc3b6af9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,331 @@
+
+# 17.0.0-next.4 (2023-09-13)
+### core
+| Commit | Type | Description |
+| -- | -- | -- |
+| [59387ee476](https://github.com/angular/angular/commit/59387ee476dff1a893a01fe5cbee3c95b93c0cdb) | feat | support styles and styleUrl as strings ([#51715](https://github.com/angular/angular/pull/51715)) |
+### router
+| Commit | Type | Description |
+| -- | -- | -- |
+| [73e4bf2ed2](https://github.com/angular/angular/commit/73e4bf2ed2471faf44a49b591e19a390d5867449) | feat | Add feature to support the View Transitions API ([#51314](https://github.com/angular/angular/pull/51314)) |
+
+
+
+
+# 16.2.5 (2023-09-13)
+
+
+
+
+# 17.0.0-next.3 (2023-09-06)
+## Breaking Changes
+### core
+- `OnPush` components that are created dynamically now
+ only have their host bindings refreshed and `ngDoCheck run` during change
+ detection if they are dirty.
+ Previously, a bug in the change detection would result in the `OnPush`
+ configuration of dynamically created components to be ignored when
+ executing host bindings and the `ngDoCheck` function. This is
+ rarely encountered but can happen if code has a handle on the
+ `ComponentRef` instance and updates values read in the `OnPush`
+ component template without then calling either `markForCheck` or
+ `detectChanges` on that component's `ChangeDetectorRef`.
+### router
+- `urlHandlingStrategy` has been removed from the Router public API.
+ This should instead be configured through the provideRouter or RouterModule.forRoot APIs.
+### core
+| Commit | Type | Description |
+| -- | -- | -- |
+| [40bb45f329](https://github.com/angular/angular/commit/40bb45f3297359866cab39044dba06b3e809b096) | fix | Respect OnPush change detection strategy for dynamically created components ([#51356](https://github.com/angular/angular/pull/51356)) |
+| [88a0af64fd](https://github.com/angular/angular/commit/88a0af64fde58cbf71e8e2a22c39fabb8f0ee8fb) | perf | generate arrow functions for pure function calls ([#51668](https://github.com/angular/angular/pull/51668)) |
+### router
+| Commit | Type | Description |
+| -- | -- | -- |
+| [f464e39364](https://github.com/angular/angular/commit/f464e39364da6436fc4b5a703f66fe7dee70818c) | fix | Ensure title observable gets latest values ([#51561](https://github.com/angular/angular/pull/51561)) |
+| [b2aff43621](https://github.com/angular/angular/commit/b2aff4362129feb746856fc3d0f8e73b1927a037) | fix | Remove `urlHandlingStrategy` from public Router properties ([#51631](https://github.com/angular/angular/pull/51631)) |
+
+
+
+
+# 16.2.4 (2023-09-06)
+
+
+
+
+# 17.0.0-next.2 (2023-08-30)
+## Breaking Changes
+### platform-browser
+- `REMOVE_STYLES_ON_COMPONENT_DESTROY` default value is now `true`. This causes CSS of components to be removed from the DOM when destroyed. You retain the previous behaviour by providing the `REMOVE_STYLES_ON_COMPONENT_DESTROY` injection token.
+
+ ```ts
+ import {REMOVE_STYLES_ON_COMPONENT_DESTROY} from '@angular/platform-browser';
+ ...
+ providers: [{
+ provide: REMOVE_STYLES_ON_COMPONENT_DESTROY,
+ useValue: false,
+ }]
+ ```
+### router
+- The following Router properties have been removed from
+ the public API:
+
+ - canceledNavigationResolution
+ - paramsInheritanceStrategy
+ - titleStrategy
+ - urlUpdateStrategy
+ - malformedUriErrorHandler
+
+ These should instead be configured through the `provideRouter` or
+ `RouterModule.forRoot` APIs.
+### animations
+| Commit | Type | Description |
+| -- | -- | -- |
+| [698c058e1c](https://github.com/angular/angular/commit/698c058e1c975c573722407f4843a4a774ceb92a) | fix | remove code duplication between entry-points ([#51500](https://github.com/angular/angular/pull/51500)) |
+| [18be804c03](https://github.com/angular/angular/commit/18be804c038e8d81a60c9a72521cfa640c8a1d5a) | fix | remove unnecessary escaping in regex expressions ([#51554](https://github.com/angular/angular/pull/51554)) |
+### common
+| Commit | Type | Description |
+| -- | -- | -- |
+| [86c5e34601](https://github.com/angular/angular/commit/86c5e34601d7901a11688124aa902646524177eb) | fix | remove code duplication between entry-points ([#51500](https://github.com/angular/angular/pull/51500)) |
+### compiler-cli
+| Commit | Type | Description |
+| -- | -- | -- |
+| [de2550d988](https://github.com/angular/angular/commit/de2550d9886394e1ecde586d72bf2bab5b65cb39) | fix | correct incomplete escaping ([#51557](https://github.com/angular/angular/pull/51557)) |
+| [3bca9db4a5](https://github.com/angular/angular/commit/3bca9db4a56d61ac22b4ce87591d8862606177c8) | fix | remove unnecessary escaping in regex expressions ([#51554](https://github.com/angular/angular/pull/51554)) |
+### core
+| Commit | Type | Description |
+| -- | -- | -- |
+| [dbffdc09c2](https://github.com/angular/angular/commit/dbffdc09c25c93868aa13ae368c9fd21a4c359fb) | fix | avoid duplicated code between entry-points (primary, testing, rxjs-interop) ([#51500](https://github.com/angular/angular/pull/51500)) |
+| [45d2ded0ea](https://github.com/angular/angular/commit/45d2ded0ea9ef414948256099f8dc9c4598fdc2b) | fix | correct incomplete escaping ([#51557](https://github.com/angular/angular/pull/51557)) |
+| [006577f39c](https://github.com/angular/angular/commit/006577f39c0e46e37491e44687142521fe7fab54) | fix | handle hydration of view containers that use component hosts as anchors ([#51456](https://github.com/angular/angular/pull/51456)) |
+| [1423bfbf8f](https://github.com/angular/angular/commit/1423bfbf8ffa3b43d0dea41054c8f950e669a697) | fix | remove unnecessary escaping in regex expressions ([#51554](https://github.com/angular/angular/pull/51554)) |
+| [3a19d6b743](https://github.com/angular/angular/commit/3a19d6b7437e1812ae70b3784fd6a8a185b330b1) | fix | run afterRender callbacks outside of the Angular zone ([#51385](https://github.com/angular/angular/pull/51385)) |
+| [685d01e106](https://github.com/angular/angular/commit/685d01e1065dad6dc52eaac9eb9527100994f5ce) | perf | chain template instructions ([#51546](https://github.com/angular/angular/pull/51546)) |
+### language-service
+| Commit | Type | Description |
+| -- | -- | -- |
+| [88b1575271](https://github.com/angular/angular/commit/88b157527172d70ed3e5aa11aa8b7963a8612e49) | fix | correct incomplete escaping ([#51557](https://github.com/angular/angular/pull/51557)) |
+### platform-browser
+| Commit | Type | Description |
+| -- | -- | -- |
+| [c340d6e044](https://github.com/angular/angular/commit/c340d6e0440bd982dff6f9f4f4229931c62d2c08) | feat | enable removal of styles on component destroy by default ([#51571](https://github.com/angular/angular/pull/51571)) |
+| [c5daa6ce77](https://github.com/angular/angular/commit/c5daa6ce776724d44c02cc97f1a349a85cb2a819) | feat | expose `EventManagerPlugin` in the public API. ([#49969](https://github.com/angular/angular/pull/49969)) |
+### router
+| Commit | Type | Description |
+| -- | -- | -- |
+| [c62e680098](https://github.com/angular/angular/commit/c62e680098a8c26fb2234336613185f7ab273483) | fix | Remove deprecated Router properties ([#51502](https://github.com/angular/angular/pull/51502)) |
+
+
+
+
+# 16.2.3 (2023-08-30)
+### animations
+| Commit | Type | Description |
+| -- | -- | -- |
+| [04c6574280](https://github.com/angular/angular/commit/04c65742802537c8bd725f9a7a931955a67684d9) | fix | remove unnecessary escaping in regex expressions ([#51554](https://github.com/angular/angular/pull/51554)) |
+### compiler-cli
+| Commit | Type | Description |
+| -- | -- | -- |
+| [dbd761f528](https://github.com/angular/angular/commit/dbd761f528a08cba0fbdd476b115e1445683cf36) | fix | correct incomplete escaping ([#51557](https://github.com/angular/angular/pull/51557)) |
+| [5c36fc784f](https://github.com/angular/angular/commit/5c36fc784f292608f7485c5513aeb98e5745d17c) | fix | remove unnecessary escaping in regex expressions ([#51554](https://github.com/angular/angular/pull/51554)) |
+### core
+| Commit | Type | Description |
+| -- | -- | -- |
+| [dcd1add06f](https://github.com/angular/angular/commit/dcd1add06f9facb87de89c144967cc95a2dac27c) | fix | correct incomplete escaping ([#51557](https://github.com/angular/angular/pull/51557)) |
+| [20d62603c2](https://github.com/angular/angular/commit/20d62603c2f86c810fda0b3b503327dce232a6d3) | fix | handle hydration of view containers that use component hosts as anchors ([#51456](https://github.com/angular/angular/pull/51456)) |
+| [e6b301caa2](https://github.com/angular/angular/commit/e6b301caa25c1532a4db2e8521bdea3f911316b1) | fix | remove unnecessary escaping in regex expressions ([#51554](https://github.com/angular/angular/pull/51554)) |
+| [0c7c852ee7](https://github.com/angular/angular/commit/0c7c852ee7ba3c1943cafce4c58760eef1b0aea4) | fix | run afterRender callbacks outside of the Angular zone ([#51551](https://github.com/angular/angular/pull/51551)) |
+### language-service
+| Commit | Type | Description |
+| -- | -- | -- |
+| [8081fdd22d](https://github.com/angular/angular/commit/8081fdd22d6889f92e11cbe4c53d80bddd496a9a) | fix | correct incomplete escaping ([#51557](https://github.com/angular/angular/pull/51557)) |
+
+
+
+
+# 17.0.0-next.1 (2023-08-23)
+### common
+| Commit | Type | Description |
+| -- | -- | -- |
+| [d910bf8a84](https://github.com/angular/angular/commit/d910bf8a843c07a096969d5e47b49f60981b00e9) | fix | Allow safeUrl for ngSrc in NgOptimizedImage ([#51351](https://github.com/angular/angular/pull/51351)) |
+### compiler-cli
+| Commit | Type | Description |
+| -- | -- | -- |
+| [5bd9fbd2c3](https://github.com/angular/angular/commit/5bd9fbd2c3ab4467074fac5e4d689b3c85bf08cd) | fix | enforce a minimum version to be used when a library uses input transform ([#51413](https://github.com/angular/angular/pull/51413)) |
+### core
+| Commit | Type | Description |
+| -- | -- | -- |
+| [9cc52b9b85](https://github.com/angular/angular/commit/9cc52b9b85ffa5cb65c6886e81b5bff10dde8d52) | feat | support TypeScript 5.2 ([#51334](https://github.com/angular/angular/pull/51334)) |
+| [a9b3c006f8](https://github.com/angular/angular/commit/a9b3c006f8593e0187298df21418644070312a40) | fix | guard the jasmine hooks ([#51394](https://github.com/angular/angular/pull/51394)) |
+### router
+| Commit | Type | Description |
+| -- | -- | -- |
+| [96d94ad130](https://github.com/angular/angular/commit/96d94ad13072032326446e8a20658c9f38fd1b8e) | fix | Ensure `canceledNavigationResolution: 'computed'` works on first page ([#51441](https://github.com/angular/angular/pull/51441)) |
+
+
+
+
+# 16.2.2 (2023-08-23)
+### common
+| Commit | Type | Description |
+| -- | -- | -- |
+| [a43c0772ea](https://github.com/angular/angular/commit/a43c0772ea74410b0492a178c656268a465d3b09) | fix | Allow safeUrl for ngSrc in NgOptimizedImage ([#51351](https://github.com/angular/angular/pull/51351)) |
+### compiler-cli
+| Commit | Type | Description |
+| -- | -- | -- |
+| [39ace8664b](https://github.com/angular/angular/commit/39ace8664b843225a75dd706236ae13e171126d3) | fix | enforce a minimum version to be used when a library uses input transform ([#51413](https://github.com/angular/angular/pull/51413)) |
+### core
+| Commit | Type | Description |
+| -- | -- | -- |
+| [36f434e49d](https://github.com/angular/angular/commit/36f434e49d24f0393950299486141a121d42e044) | fix | guard the jasmine hooks ([#51394](https://github.com/angular/angular/pull/51394)) |
+### router
+| Commit | Type | Description |
+| -- | -- | -- |
+| [b0396e7164](https://github.com/angular/angular/commit/b0396e7164c08e01d24d2d8411edf1ccf4b52826) | fix | Ensure `canceledNavigationResolution: 'computed'` works on first page ([#51441](https://github.com/angular/angular/pull/51441)) |
+
+
+
+
+# 17.0.0-next.0 (2023-08-16)
+
+
+
+
+# 16.2.1 (2023-08-16)
+### router
+| Commit | Type | Description |
+| -- | -- | -- |
+| [232a8c1b8d](https://github.com/angular/angular/commit/232a8c1b8dadf3f886b4bd0142613d116c865759) | fix | Apply named outlets to children empty paths not appearing in the URL ([#51292](https://github.com/angular/angular/pull/51292)) |
+
+
+
+
+# 16.2.0 (2023-08-09)
+### benchpress
+| Commit | Type | Description |
+| -- | -- | -- |
+| [dd850b2ab7](https://github.com/angular/angular/commit/dd850b2ab781f24065550f8a948ced498e0f1e99) | fix | correctly report GC memory amounts ([#50760](https://github.com/angular/angular/pull/50760)) |
+### common
+| Commit | Type | Description |
+| -- | -- | -- |
+| [29d358170b](https://github.com/angular/angular/commit/29d358170b046f4a6773dfdfbbd1050f54deb301) | feat | add component input binding support for NgComponentOutlet ([#51148](https://github.com/angular/angular/pull/51148)) |
+| [1837efb9da](https://github.com/angular/angular/commit/1837efb9daf5c8e86a99a06ecc77bb42bc60dbb0) | feat | Allow ngSrc to be changed post-init ([#50683](https://github.com/angular/angular/pull/50683)) |
+### compiler
+| Commit | Type | Description |
+| -- | -- | -- |
+| [c27a1e61d6](https://github.com/angular/angular/commit/c27a1e61d64a67aa169086f7db11bcfd5bb7d2fc) | feat | scope selectors in @scope queries ([#50747](https://github.com/angular/angular/pull/50747)) |
+### compiler-cli
+| Commit | Type | Description |
+| -- | -- | -- |
+| [12bad6576d](https://github.com/angular/angular/commit/12bad6576d2ffe4667118b214d9c7598ed3d8edb) | fix | libraries compiled with v16.1+ breaking with Angular framework v16.0.x ([#50714](https://github.com/angular/angular/pull/50714)) |
+### core
+| Commit | Type | Description |
+| -- | -- | -- |
+| [e53d4ecf4c](https://github.com/angular/angular/commit/e53d4ecf4cfd9e64d6ba8c8b19adbb7df9cfc047) | feat | add afterRender and afterNextRender ([#50607](https://github.com/angular/angular/pull/50607)) |
+| [98d262fd27](https://github.com/angular/angular/commit/98d262fd27795014ee3988b08d3c48a0dfb63c40) | feat | create injector debugging APIs ([#48639](https://github.com/angular/angular/pull/48639)) |
+| [cdaa2a8a9e](https://github.com/angular/angular/commit/cdaa2a8a9eab490b55bbb841ede4f54a2656df30) | feat | support Provider type in Injector.create ([#49587](https://github.com/angular/angular/pull/49587)) |
+| [9f490da7e2](https://github.com/angular/angular/commit/9f490da7e27e495cb45d2064af9091731422a6b1) | fix | handle hydration of view containers for root components ([#51247](https://github.com/angular/angular/pull/51247)) |
+### router
+| Commit | Type | Description |
+| -- | -- | -- |
+| [0b14e4ef74](https://github.com/angular/angular/commit/0b14e4ef742b1c0f73d873e2c337683b60f46845) | feat | exposes the `fixture` of the `RouterTestingHarness` ([#50280](https://github.com/angular/angular/pull/50280)) |
+
+
+
+
+# 16.1.9 (2023-08-09)
+
+
+
+
+# 16.1.8 (2023-08-02)
+### compiler
+| Commit | Type | Description |
+| -- | -- | -- |
+| [cc722ea1f5](https://github.com/angular/angular/commit/cc722ea1f5b16f5a4fddc1ecd91b21b3005242ae) | fix | return full spans for Comment nodes ([#50855](https://github.com/angular/angular/pull/50855)) |
+
+
+
+
+# 16.1.7 (2023-07-26)
+### http
+| Commit | Type | Description |
+| -- | -- | -- |
+| [916916d835](https://github.com/angular/angular/commit/916916d8357a3b045cbe6ec1b850c980be1bdb12) | fix | check whether `Zone` is defined ([#51119](https://github.com/angular/angular/pull/51119)) |
+
+
+
+
+# 16.1.6 (2023-07-19)
+### http
+| Commit | Type | Description |
+| -- | -- | -- |
+| [dea8dc0378](https://github.com/angular/angular/commit/dea8dc0378c5b777b1879f22189fe32cbe61b36b) | fix | Run fetch request out the angular zone ([#50981](https://github.com/angular/angular/pull/50981)) |
+
+
+
+
+# 16.1.5 (2023-07-13)
+### animations
+| Commit | Type | Description |
+| -- | -- | -- |
+| [f920fcbd94](https://github.com/angular/angular/commit/f920fcbd94d8a1b8cbd2b80f349ed85b4e730a0e) | fix | Ensure elements are removed from the cache after leave animation. ([#50929](https://github.com/angular/angular/pull/50929)) |
+### core
+| Commit | Type | Description |
+| -- | -- | -- |
+| [499fb5c772](https://github.com/angular/angular/commit/499fb5c772332c03ebd8bbf7e1e6cba80dc0def0) | fix | ensure that standalone components get correct injector instances ([#50954](https://github.com/angular/angular/pull/50954)) |
+| [c65913ecb7](https://github.com/angular/angular/commit/c65913ecb7de96ee0178c64136c5ffbc62348f34) | fix | handle `deref` returning `null` on `RefactiveNode`. ([#50992](https://github.com/angular/angular/pull/50992)) |
+### platform-browser
+| Commit | Type | Description |
+| -- | -- | -- |
+| [31419f6a3b](https://github.com/angular/angular/commit/31419f6a3b7d57c5e789d6073d7b6505cf720c13) | perf | do not remove renderer from cache when `REMOVE_STYLES_ON_COMPONENT_DESTROY` is enabled. ([#51005](https://github.com/angular/angular/pull/51005)) |
+### upgrade
+| Commit | Type | Description |
+| -- | -- | -- |
+| [3efb577cf3](https://github.com/angular/angular/commit/3efb577cf3b38dda89cba05871224951d1f88146) | fix | Use `takeUntil` on leaky subscription. ([#50901](https://github.com/angular/angular/pull/50901)) |
+
+
+
+
+# 16.1.4 (2023-07-06)
+### core
+| Commit | Type | Description |
+| -- | -- | -- |
+| [4ba5850ba6](https://github.com/angular/angular/commit/4ba5850ba6b1748cf02b94649ab1ec359b4540ad) | fix | use `setTimeout` when coalescing tasks in Node.js ([#50820](https://github.com/angular/angular/pull/50820)) |
+### upgrade
+| Commit | Type | Description |
+| -- | -- | -- |
+| [a4348355ce](https://github.com/angular/angular/commit/a4348355ce630273f762099fe6887a90ef799119) | fix | allow for downgraded components to work with component-router ([#50871](https://github.com/angular/angular/pull/50871)) |
+
+
+
+
+# 16.1.3 (2023-06-28)
+### core
+| Commit | Type | Description |
+| -- | -- | -- |
+| [dd6fc5785f](https://github.com/angular/angular/commit/dd6fc5785fcf10b88db8b87d726af604668bc143) | fix | expose input transform function on ComponentFactory and ComponentMirror ([#50713](https://github.com/angular/angular/pull/50713)) |
+### elements
+| Commit | Type | Description |
+| -- | -- | -- |
+| [e1bbe47c23](https://github.com/angular/angular/commit/e1bbe47c234a495766cc07a9741a194954a6b9b4) | fix | support input transform functions ([#50713](https://github.com/angular/angular/pull/50713)) |
+### platform-browser
+| Commit | Type | Description |
+| -- | -- | -- |
+| [79dd6a847a](https://github.com/angular/angular/commit/79dd6a847a742ccf69597b122026758ad2b0b629) | fix | wait until animation completion before destroying renderer ([#50677](https://github.com/angular/angular/pull/50677)) |
+| [a797f41d1b](https://github.com/angular/angular/commit/a797f41d1bcf11945673ef6d0474f33ad4614602) | fix | wait until animation completion before destroying renderer ([#50860](https://github.com/angular/angular/pull/50860)) |
+
+
+
+
+# 16.1.2 (2023-06-21)
+### http
+| Commit | Type | Description |
+| -- | -- | -- |
+| [9488a3fd46](https://github.com/angular/angular/commit/9488a3fd4640b902243f441cf54776160da1a0fe) | fix | Send query params on fetch request ([#50740](https://github.com/angular/angular/pull/50740)) |
+| [5ae001829c](https://github.com/angular/angular/commit/5ae001829c3f3594e3c10f30e0b89ea1eb2b84fb) | fix | use serializeBody to support JSON payload in FetchBackend ([#50776](https://github.com/angular/angular/pull/50776)) |
+
+
+
# 16.1.1 (2023-06-14)
### compiler-cli
@@ -121,7 +449,7 @@
# 16.0.0 (2023-05-03)
-[Blog post "Angular v16 is now available"](http://goo.gle/angular-v16).
+[Blog post "Angular v16 is now available"](https://goo.gle/angular-v16).
## Breaking Changes
###
@@ -971,7 +1299,7 @@ Andrew Kushnir
# 15.0.0 (2022-11-16)
-[Blog post "Angular v15 is now available"](http://goo.gle/angular-v15).
+[Blog post "Angular v15 is now available"](https://goo.gle/angular-v15).
## Breaking Changes
### compiler
@@ -1634,7 +1962,7 @@ Adrien Crivelli, Alan Agius, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Dyla
# 14.0.0 (2022-06-02)
-[Blog post "Angular v14 is now available"](http://goo.gle/angular-v14).
+[Blog post "Angular v14 is now available"](https://goo.gle/angular-v14).
## Breaking Changes
### animations
diff --git a/CHANGELOG_ARCHIVE.md b/CHANGELOG_ARCHIVE.md
index b5022107fe25a..06df7b8880f0a 100644
--- a/CHANGELOG_ARCHIVE.md
+++ b/CHANGELOG_ARCHIVE.md
@@ -1660,7 +1660,7 @@ Alex Rickabaugh, Daniel Díaz, David Shevitz, Dylan Hunn, Front-end developer, G
* Minified UMD bundles are no longer included in the distributed NPM packages.
* **animations:** DOM elements are now correctly removed when the root view is removed.
If you are using SSR and use the app's HTML for rendering, you will need
-to ensure that you save the HTML to a variable before destorying the
+to ensure that you save the HTML to a variable before destroying the
app.
It is also possible that tests could be accidentally relying on the old behavior by
trying to find an element that was not removed in a previous test. If
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 99c842141c03b..6574f207e9d44 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -109,7 +109,7 @@ Before you submit your Pull Request (PR) consider the following guidelines:
```shell
git commit --all
```
- Note: the optional commit `-a` command line option will automatically "add" and "rm" edited files.
+ Note: the optional commit `--all` command line option will automatically "add" and "rm" edited files.
10. Push your branch to GitHub:
diff --git a/README.md b/README.md
index 8c17424608d59..98503ac3517ad 100644
--- a/README.md
+++ b/README.md
@@ -3,8 +3,8 @@
- Angular is a development platform for building mobile and desktop web applications
- using TypeScript/JavaScript and other languages.
+ Angular is a development platform for building mobile and desktop web applications
+ using TypeScript/JavaScript and other languages.
diff --git a/WORKSPACE b/WORKSPACE
index 80310d6dc7d53..c0bbdd64d1f80 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -64,12 +64,7 @@ load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
nodejs_register_toolchains(
name = "nodejs",
- node_version = "16.14.0",
-)
-
-nodejs_register_toolchains(
- name = "node18",
- node_version = "18.10.0",
+ node_version = "18.13.0",
)
# Download npm dependencies.
@@ -83,8 +78,9 @@ yarn_install(
data = [
YARN_LABEL,
"//:.yarnrc",
+ "//:tools/npm-patches/@bazel+jasmine+5.8.1.patch",
"//tools:postinstall-patches.js",
- "//tools/esm-interop:patches/npm/@angular+build-tooling+0.0.0-e859696da7af56c811b6589f1ae888222d93d797.patch",
+ "//tools/esm-interop:patches/npm/@angular+build-tooling+0.0.0-0109d498b0f6aae418ed4924a5e5c65695f0ac61.patch",
"//tools/esm-interop:patches/npm/@bazel+concatjs+5.8.1.patch",
"//tools/esm-interop:patches/npm/@bazel+esbuild+5.7.1.patch",
"//tools/esm-interop:patches/npm/@bazel+protractor+5.7.1.patch",
@@ -110,6 +106,7 @@ yarn_install(
data = [
YARN_LABEL,
"//:.yarnrc",
+ "//:tools/npm-patches/@bazel+jasmine+5.8.1.patch",
"//aio:tools/cli-patches/bazel-architect-output.patch",
"//aio:tools/cli-patches/patch.js",
],
@@ -199,10 +196,10 @@ cldr_xml_data_repository(
# sass rules
http_archive(
name = "io_bazel_rules_sass",
- sha256 = "033248203546d4ac5692edfb9314c75bc654de3a163c2eee92762893ea493a06",
- strip_prefix = "rules_sass-13ff55c4a7dea6fbce8c429a1e6dae85bd2f4eca",
+ sha256 = "81758d485da797baca81fb07e2b14a818e33c539beaddeb373054b5c39807010",
+ strip_prefix = "rules_sass-63d77ffdf3039aae1f0bb54e05ff47b7c50f1553",
urls = [
- "https://github.com/bazelbuild/rules_sass/archive/13ff55c4a7dea6fbce8c429a1e6dae85bd2f4eca.zip",
+ "https://github.com/bazelbuild/rules_sass/archive/63d77ffdf3039aae1f0bb54e05ff47b7c50f1553.zip",
],
)
diff --git a/aio/.eslintrc.json b/aio/.eslintrc.json
index 7b4c0ac53df17..4b10a42c45947 100644
--- a/aio/.eslintrc.json
+++ b/aio/.eslintrc.json
@@ -120,7 +120,6 @@
"complexity": "off",
"constructor-super": "error",
"curly": "error",
- "dot-notation": "error",
"eol-last": "error",
"eqeqeq": [
"error",
diff --git a/aio/content/cli/help/build-info.json b/aio/content/cli/help/build-info.json
index bd9741531d4c4..5773d8e89dcf5 100644
--- a/aio/content/cli/help/build-info.json
+++ b/aio/content/cli/help/build-info.json
@@ -1,4 +1,4 @@
{
"branchName": "refs/heads/main",
- "sha": "d29cbad7e25ed9114be351b9582eb8723db14773"
+ "sha": "35d26bbeec46bef742d565e896bbd707435dff0f"
}
\ No newline at end of file
diff --git a/aio/content/cli/help/build.json b/aio/content/cli/help/build.json
index 4d410b828d702..8477d158f1fa6 100644
--- a/aio/content/cli/help/build.json
+++ b/aio/content/cli/help/build.json
@@ -3,7 +3,7 @@
"command": "ng build [project]",
"shortDescription": "Compiles an Angular application or library into an output directory named dist/ at the given output path.",
"longDescriptionRelativePath": "@angular/cli/src/commands/build/long-description.md",
- "longDescription": "The command can be used to build a project of type \"application\" or \"library\".\nWhen used to build a library, a different builder is invoked, and only the `ts-config`, `configuration`, and `watch` options are applied.\nAll other options apply only to building applications.\n\nThe application builder uses the [webpack](https://webpack.js.org/) build tool, with default configuration options specified in the workspace configuration file (`angular.json`) or with a named alternative configuration.\nA \"development\" configuration is created by default when you use the CLI to create the project, and you can use that configuration by specifying the `--configuration development`.\n\nThe configuration options generally correspond to the command options.\nYou can override individual configuration defaults by specifying the corresponding options on the command line.\nThe command can accept option names given in either dash-case or camelCase.\nNote that in the configuration file, you must specify names in camelCase.\n\nSome additional options can only be set through the configuration file,\neither by direct editing or with the `ng config` command.\nThese include `assets`, `styles`, and `scripts` objects that provide runtime-global resources to include in the project.\nResources in CSS, such as images and fonts, are automatically written and fingerprinted at the root of the output folder.\n\nFor further details, see [Workspace Configuration](guide/workspace-config).\n",
+ "longDescription": "The command can be used to build a project of type \"application\" or \"library\".\nWhen used to build a library, a different builder is invoked, and only the `ts-config`, `configuration`, and `watch` options are applied.\nAll other options apply only to building applications.\n\nThe application builder uses the [webpack](https://webpack.js.org/) build tool, with default configuration options specified in the workspace configuration file (`angular.json`) or with a named alternative configuration.\nA \"development\" configuration is created by default when you use the CLI to create the project, and you can use that configuration by specifying the `--configuration development`.\n\nThe configuration options generally correspond to the command options.\nYou can override individual configuration defaults by specifying the corresponding options on the command line.\nThe command can accept option names given in dash-case.\nNote that in the configuration file, you must specify names in camelCase.\n\nSome additional options can only be set through the configuration file,\neither by direct editing or with the `ng config` command.\nThese include `assets`, `styles`, and `scripts` objects that provide runtime-global resources to include in the project.\nResources in CSS, such as images and fonts, are automatically written and fingerprinted at the root of the output folder.\n\nFor further details, see [Workspace Configuration](guide/workspace-config).\n",
"aliases": [
"b"
],
@@ -20,22 +20,21 @@
"default": true,
"description": "Build using Ahead of Time compilation."
},
+ {
+ "name": "app-shell",
+ "type": "boolean",
+ "default": false,
+ "description": "Generates an application shell during build time."
+ },
{
"name": "base-href",
"type": "string",
"description": "Base url for the application being built."
},
{
- "name": "build-optimizer",
- "type": "boolean",
- "default": true,
- "description": "Enables advanced build optimizations when using the 'aot' option."
- },
- {
- "name": "common-chunk",
- "type": "boolean",
- "default": true,
- "description": "Generate a seperate bundle containing code used across multiple bundles."
+ "name": "browser",
+ "type": "string",
+ "description": "The full path for the browser entry point to the application, relative to the current workspace."
},
{
"name": "configuration",
@@ -63,10 +62,9 @@
"description": "Delete the output path before building."
},
{
- "name": "deploy-url",
- "type": "string",
- "deprecated": "Use \"baseHref\" option, \"APP_BASE_HREF\" DI token or a combination of both instead. For more information, see https://angular.io/guide/deployment#the-deploy-url.",
- "description": "URL where files will be deployed."
+ "name": "external-dependencies",
+ "type": "array",
+ "description": "Exclude the listed external dependencies from being bundled into the bundle. Instead, the created bundle relies on these dependencies to be available during runtime."
},
{
"name": "extract-licenses",
@@ -123,22 +121,6 @@
"type": "boolean",
"description": "Translate the bundles in one or more locales."
},
- {
- "name": "main",
- "type": "string",
- "description": "The full path for the main entry point to the app, relative to the current workspace."
- },
- {
- "name": "named-chunks",
- "type": "boolean",
- "default": false,
- "description": "Use file name for lazy loaded chunks."
- },
- {
- "name": "ngsw-config-path",
- "type": "string",
- "description": "Path to ngsw-config.json."
- },
{
"name": "optimization",
"type": "boolean",
@@ -169,8 +151,14 @@
},
{
"name": "polyfills",
- "type": "string",
- "description": "Polyfills to be included in the build."
+ "type": "array",
+ "description": "A list of polyfills to include in the build. Can be a full path for a file, relative to the current workspace or module specifier. Example: 'zone.js'."
+ },
+ {
+ "name": "prerender",
+ "type": "boolean",
+ "default": false,
+ "description": "Prerender (SSG) pages of your application during build time."
},
{
"name": "preserve-symlinks",
@@ -190,15 +178,14 @@
"positional": 0
},
{
- "name": "resources-output-path",
+ "name": "server",
"type": "string",
- "description": "The path where style resources will be placed, relative to outputPath."
+ "description": "The full path for the server entry point to the application, relative to the current workspace."
},
{
"name": "service-worker",
- "type": "boolean",
- "default": false,
- "description": "Generates a service worker config for production builds."
+ "type": "string",
+ "description": "Generates a service worker configuration."
},
{
"name": "source-map",
@@ -206,11 +193,17 @@
"default": false,
"description": "Output source maps for scripts and styles. For more information, see https://angular.io/guide/workspace-config#source-map-configuration."
},
+ {
+ "name": "ssr",
+ "type": "boolean",
+ "default": false,
+ "description": "Server side render (SSR) pages of your application during runtime."
+ },
{
"name": "stats-json",
"type": "boolean",
"default": false,
- "description": "Generates a 'stats.json' file which can be analyzed using tools such as 'webpack-bundle-analyzer'."
+ "description": "Generates a 'stats.json' file which can be analyzed with https://esbuild.github.io/analyze/."
},
{
"name": "subresource-integrity",
@@ -223,12 +216,6 @@
"type": "string",
"description": "The full path for the TypeScript configuration file, relative to the current workspace."
},
- {
- "name": "vendor-chunk",
- "type": "boolean",
- "default": false,
- "description": "Generate a seperate bundle containing only vendor libraries. This option should only be used for development to reduce the incremental compilation time."
- },
{
"name": "verbose",
"type": "boolean",
diff --git a/aio/content/cli/help/generate.json b/aio/content/cli/help/generate.json
index 665e591587884..aba75ce2529fe 100644
--- a/aio/content/cli/help/generate.json
+++ b/aio/content/cli/help/generate.json
@@ -49,41 +49,10 @@
"command": "app-shell",
"shortDescription": "Generates an application shell for running a server-side version of an app.",
"options": [
- {
- "name": "app-id",
- "type": "string",
- "deprecated": "This option is no longer used.",
- "default": "serverApp",
- "description": "The application ID to use in withServerTransition()."
- },
- {
- "name": "main",
- "type": "string",
- "default": "main.server.ts",
- "description": "The name of the main entry-point file."
- },
{
"name": "project",
"type": "string",
"description": "The name of the related client app."
- },
- {
- "name": "root-module-class-name",
- "type": "string",
- "default": "AppServerModule",
- "description": "The name of the root module class."
- },
- {
- "name": "root-module-file-name",
- "type": "string",
- "default": "app.module.server.ts",
- "description": "The name of the root module file"
- },
- {
- "name": "route",
- "type": "string",
- "default": "shell",
- "description": "Route path used to produce the application shell."
}
],
"aliases": [],
@@ -139,8 +108,8 @@
{
"name": "routing",
"type": "boolean",
- "default": false,
- "description": "Create a routing NgModule."
+ "default": true,
+ "description": "Creates an application with routing enabled."
},
{
"name": "skip-install",
diff --git a/aio/content/cli/help/new.json b/aio/content/cli/help/new.json
index ff535aa213dbd..0838280d0b453 100644
--- a/aio/content/cli/help/new.json
+++ b/aio/content/cli/help/new.json
@@ -120,7 +120,7 @@
{
"name": "routing",
"type": "boolean",
- "description": "Generate a routing module for the initial project."
+ "description": "Enable routing in the initial project."
},
{
"name": "skip-git",
diff --git a/aio/content/demos/first-app/src/index.html b/aio/content/demos/first-app/src/index.html
index 1ac50ab8996a8..5507514b4ee8d 100644
--- a/aio/content/demos/first-app/src/index.html
+++ b/aio/content/demos/first-app/src/index.html
@@ -1,4 +1,5 @@
-
+
+
Your first Angular app
diff --git a/aio/content/demos/first-app/tsconfig.json b/aio/content/demos/first-app/tsconfig.json
index cde756b07a9a3..79aaf61a5df69 100644
--- a/aio/content/demos/first-app/tsconfig.json
+++ b/aio/content/demos/first-app/tsconfig.json
@@ -20,6 +20,7 @@
]
},
"angularCompilerOptions": {
+ "disableTypeScriptVersionCheck": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true
}
diff --git a/aio/content/errors/NG0203.md b/aio/content/errors/NG0203.md
index 5366bbeef1836..474f86d8de04e 100644
--- a/aio/content/errors/NG0203.md
+++ b/aio/content/errors/NG0203.md
@@ -1,10 +1,10 @@
@name `inject()` must be called from an injection context
@category runtime
-@shortDescription `inject()` must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with `EnvironmentInjector#runInContext`.
+@shortDescription `inject()` must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`.
@description
-You see this error when you try to use the `inject()` function outside of the allowed injection context. The injection context is available during the class creation and initialization. It is also available to functions
-used with `EnvironmentInjector#runInContext`.
+You see this error when you try to use the [`inject`](api/core/inject) function outside of the allowed [injection context](guide/dependency-injection-context). The injection context is available during the class creation and initialization. It is also available to functions
+used with `runInInjectionContext`.
In practice the `inject()` calls are allowed in a constructor, a constructor parameter and a field initializer:
@@ -23,7 +23,7 @@ export class Car {
}
```
-It is also legal to call `inject` from a provider's factory:
+It is also legal to call [`inject`](api/core/inject) from a provider's factory:
```typescript
providers: [
@@ -35,7 +35,7 @@ providers: [
]
```
-Calls to the `inject()` function outside of the class creation or `runInContext` will result in error. Most notably, calls to `inject()` are disallowed after a class instance was created, in methods (including lifecycle hooks):
+Calls to the [`inject`](api/core/inject) function outside of the class creation or `runInInjectionContext` will result in error. Most notably, calls to `inject()` are disallowed after a class instance was created, in methods (including lifecycle hooks):
```typescript
@Component({ ... })
@@ -52,7 +52,7 @@ export class CarComponent {
Work backwards from the stack trace of the error to identify a place where the disallowed call to `inject()` is located.
-To fix the error move the `inject()` call to an allowed place (usually a class constructor or a field initializer).
+To fix the error move the [`inject`](api/core/inject) call to an allowed place (usually a class constructor or a field initializer).
**Note:** If you are running in a test context, `TestBed.runInInjectionContext` will enable `inject()` to succeed.
@@ -68,4 +68,4 @@ TestBed.runInInjectionContext(() => {
-@reviewed 2022-05-27
+@reviewed 2023-04-11
diff --git a/aio/content/errors/NG0302.md b/aio/content/errors/NG0302.md
index 1d5ef89b3d827..71ad185a32b91 100644
--- a/aio/content/errors/NG0302.md
+++ b/aio/content/errors/NG0302.md
@@ -7,19 +7,19 @@
@description
Angular can't find a pipe with this name.
-The pipe referenced in the template has not been named or declared properly.
+The [pipe](guide/pipes-overview) referenced in the template has not been named or declared properly.
-In order for a [pipe](guide/pipes) to be used:
- - it must be declared as a part of an `NgModule` (added to the `declarations` array) or marked as standalone (by adding the `standalone: true` flag to the Pipe decorator).
- - it must be imported in an `NgModule` or a standalone component where it is used.
- - the name used in a template must match the name defined in the Pipe decorator.
+To use the pipe:
+ - Ensure the name used in a template matches the name defined in the pipe decorator.
+ - Either mark it as standalone by adding the `standalone: true` flag to the pipe's decorator or declare it as a part of an `NgModule` by adding to that module's declarations array.
+ - Import it in the standalone components and/or the `NgModules` where it is needed.
@debugging
Use the pipe name to trace where the pipe is declared and used.
-To resolve this error, ensure that:
- - If the pipe is local to the `NgModule`, it is uniquely named in the pipe's decorator and declared in the `NgModule`.
- - If the pipe is standalone or from another `NgModule`, it is added to the `imports` field of the current `NgModule` or standalone component.
+To resolve this error:
+ - If the pipe is local to the `NgModule`, give it a unique name in the pipe's decorator and declared it in the `NgModule`.
+ - If the pipe is standalone or is declared in another `NgModule`, add it to the `imports` field of the standalone component or the current `NgModule`.
If you recently added an import or declaration, you may need to restart your server to see these changes.
diff --git a/aio/content/errors/NG0507.md b/aio/content/errors/NG0507.md
new file mode 100644
index 0000000000000..9049f09f0847f
--- /dev/null
+++ b/aio/content/errors/NG0507.md
@@ -0,0 +1,12 @@
+@name HTML content was altered after server-side rendering
+@category runtime
+@shortDescription HTML content was altered after server-side rendering
+
+@description
+Angular throws this error when it detects that the content generated by server-side rendering (SSR) was altered after the rendering. The process of hydration relies on the content to be untouched after SSR, which also includes whitespaces and comment nodes. Those whitespaces and comment nodes must be retained in the HTML generated by the SSR process. Learn more in the [Hydration guide](guide/hydration#constraints).
+
+@debugging
+
+Typically this happens in the following cases:
+* Some CDN providers have a built-in feature to remove whitespaces and comment nodes from HTML as an optimization. Please verify if there is such an option in CDN configuration and turn it off.
+* If you use custom post-processing of HTML generated by SSR (as a build step), make sure that this process doesn't remove whitespaces and comment nodes.
\ No newline at end of file
diff --git a/aio/content/errors/NG05104.md b/aio/content/errors/NG05104.md
new file mode 100644
index 0000000000000..f41075c99811a
--- /dev/null
+++ b/aio/content/errors/NG05104.md
@@ -0,0 +1,33 @@
+@name Root element was not found.
+@category runtime
+@shortDescription Root element was not found during bootstrap.
+
+@description
+Boostraped components are defined in the `bootstrap` property of an `@NgModule` decorator or as the first parameter of `boopstrapApplication` for standalone components.
+
+This error happens when Angular tries to boostrap one of these components but cannot find its corresponing node in the DOM.
+
+@debugging
+
+This issue occurs when the selector mismatches the tag
+
+```typescript
+@Component({
+ selector: 'my-app',
+ ...
+})
+class AppComponent {}
+```
+
+```html
+
+
+
+```
+Replace the tag with the correct one:
+
+```html
+
+
+
+```
\ No newline at end of file
diff --git a/aio/content/errors/NG3003.md b/aio/content/errors/NG3003.md
index 898c5f8267773..374ea9de70f95 100644
--- a/aio/content/errors/NG3003.md
+++ b/aio/content/errors/NG3003.md
@@ -30,7 +30,8 @@ parent.component.ts -> child.component.ts -> parent.component.ts
### Remote Scoping
-To avoid adding imports that create cycles, additional code is added to the `NgModule` class where the component that wires up the dependencies is declared.
+If you are using NgModules, to avoid adding imports that create cycles, additional code is added to the `NgModule` class where the component that wires up the dependencies is declared.
+
This is known as "remote scoping".
### Libraries
@@ -53,10 +54,9 @@ The component ChildComponent is used in the template but importing it would crea
Use this to identify how the referenced component, pipe, or directive has a dependency back to the component being compiled.
Here are some ideas for fixing the problem:
-* Try to rearrange your dependencies to avoid the cycle.
- For example, using an intermediate interface that is stored in an independent file that can be imported to both dependent files without causing an import cycle.
-
-* Move the classes that reference each other into the same file, to avoid any imports between them.
-* Convert import statements to type-only imports \(using `import type` syntax\) if the imported declarations are only used as types, as type-only imports do not contribute to cycles.
+* Try to rearrange your dependencies to avoid the cycle.
+ For example, using an intermediate interface that is stored in an independent file that can be imported to both dependent files without causing an import cycle.
+* Move the classes that reference each other into the same file, to avoid any imports between them.
+* Convert import statements to type-only imports \(using `import type` syntax\) if the imported declarations are only used as types, as type-only imports do not contribute to cycles.
-@reviewed 2022-02-28
+@reviewed 2023-08-30
diff --git a/aio/content/errors/NG6999.md b/aio/content/errors/NG6999.md
deleted file mode 100644
index 7d34205306bc4..0000000000000
--- a/aio/content/errors/NG6999.md
+++ /dev/null
@@ -1,14 +0,0 @@
-@name Invalid metadata
-@category compiler
-@shortDescription Invalid @NgModule() metadata
-
-@description
-This error represents the import or export of an `@NgModule()` that doesn't have valid metadata.
-
-@debugging
-The library might have been processed with `ngcc`.
-If this is the case, try removing and reinstalling `node_modules`.
-This error is likely due to the library being published for Angular Ivy, which cannot be used in this View Engine application.
-If that is not the case then it might be a View Engine based library that was converted to Ivy by ngcc during a postinstall step.
-
-Check the peer dependencies to ensure that you're using a compatible version of Angular.
diff --git a/aio/content/examples/accessibility/src/app/app.component.html b/aio/content/examples/accessibility/src/app/app.component.html
index eac0b319c10f6..69984ba3d0bfd 100755
--- a/aio/content/examples/accessibility/src/app/app.component.html
+++ b/aio/content/examples/accessibility/src/app/app.component.html
@@ -1,8 +1,8 @@