diff --git a/.codefresh/Dockerfile.win-1809 b/.codefresh/Dockerfile.win-1809
new file mode 100644
index 0000000000..c5169f97eb
--- /dev/null
+++ b/.codefresh/Dockerfile.win-1809
@@ -0,0 +1,103 @@
+ARG core=mcr.microsoft.com/windows/servercore:1809
+ARG target=mcr.microsoft.com/powershell:windowsservercore-1809
+
+FROM $core as download
+
+ARG node_version=10.13.0
+ARG yarn_version=1.13.0
+
+SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
+
+ENV GPG_VERSION 2.3.4
+
+RUN Invoke-WebRequest $('https://files.gpg4win.org/gpg4win-vanilla-{0}.exe' -f $env:GPG_VERSION) -OutFile 'gpg4win.exe' -UseBasicParsing ; \
+ Start-Process .\gpg4win.exe -ArgumentList '/S' -NoNewWindow -Wait
+
+RUN @( \
+ '94AE36675C464D64BAFA68DD7434390BDBE9B9C5', \
+ 'FD3A5288F042B6850C66B31F09FE44734EB7990E', \
+ '71DCFD284A79C3B38668286BC97EC7A07EDE3FC1', \
+ 'DD8F2338BAE7501E3DD5AC78C273792F7D83545D', \
+ 'C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8', \
+ 'B9AE9905FFD7803F25714661B63B535A4C206CA9', \
+ '77984A986EBC2AA786BC0F66B01FBB92821C587A', \
+ '8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600', \
+ '4ED778F539E3634C779C87C6D7062848A1AB005C', \
+ 'A48C2BEE680E841632CD4E44F07496B3EB3C1762', \
+ 'B9E2F5981AA6E0CD28160D9FF13993A75599653C' \
+ ) | foreach { \
+ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys $_ ; \
+ }
+
+ENV NODE_VERSION=$node_version
+
+RUN Invoke-WebRequest $('https://nodejs.org/dist/v{0}/SHASUMS256.txt.asc' -f $env:NODE_VERSION) -OutFile 'SHASUMS256.txt.asc' -UseBasicParsing ; \
+ gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc
+
+RUN Invoke-WebRequest $('https://nodejs.org/dist/v{0}/node-v{0}-win-x64.zip' -f $env:NODE_VERSION) -OutFile 'node.zip' -UseBasicParsing ; \
+ $sum = $(cat SHASUMS256.txt.asc | sls $(' node-v{0}-win-x64.zip' -f $env:NODE_VERSION)) -Split ' ' ; \
+ if ((Get-FileHash node.zip -Algorithm sha256).Hash -ne $sum[0]) { Write-Error 'SHA256 mismatch' } ; \
+ Expand-Archive node.zip -DestinationPath C:\ ; \
+ Rename-Item -Path $('C:\node-v{0}-win-x64' -f $env:NODE_VERSION) -NewName 'C:\nodejs'
+
+ENV YARN_VERSION=$yarn_version
+
+RUN [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 ; \
+ Invoke-WebRequest $('https://yarnpkg.com/downloads/{0}/yarn-{0}.msi' -f $env:YARN_VERSION) -OutFile yarn.msi -UseBasicParsing ; \
+ $sig = Get-AuthenticodeSignature yarn.msi ; \
+ if ($sig.Status -ne 'Valid') { Write-Error 'Authenticode signature is not valid' } ; \
+ Write-Output $sig.SignerCertificate.Thumbprint ; \
+ if (@( \
+ '7E253367F8A102A91D04829E37F3410F14B68A5F', \
+ 'AF764E1EA56C762617BDC757C8B0F3780A0CF5F9' \
+ ) -notcontains $sig.SignerCertificate.Thumbprint) { Write-Error 'Unknown signer certificate' } ; \
+ Start-Process msiexec.exe -ArgumentList '/i', 'yarn.msi', '/quiet', '/norestart' -NoNewWindow -Wait
+
+ENV GIT_VERSION 2.20.1
+ENV GIT_DOWNLOAD_URL https://github.com/git-for-windows/git/releases/download/v${GIT_VERSION}.windows.1/MinGit-${GIT_VERSION}-busybox-64-bit.zip
+ENV GIT_SHA256 9817ab455d9cbd0b09d8664b4afbe4bbf78d18b556b3541d09238501a749486c
+
+RUN [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 ; \
+ Invoke-WebRequest -UseBasicParsing $env:GIT_DOWNLOAD_URL -OutFile git.zip; \
+ if ((Get-FileHash git.zip -Algorithm sha256).Hash -ne $env:GIT_SHA256) {exit 1} ; \
+ Expand-Archive git.zip -DestinationPath C:\git; \
+ Remove-Item git.zip
+
+FROM $target as baseimage
+
+ENV NPM_CONFIG_LOGLEVEL info
+
+COPY --from=download /nodejs /nodejs
+COPY --from=download [ "/Program Files (x86)/yarn", "/yarn" ]
+COPY --from=download /git /git
+
+ARG SETX=/M
+RUN setx %SETX% PATH "%PATH%;C:\nodejs;C:\yarn\bin;C:\git\cmd;C:\git\mingw64\bin;C:\git\usr\bin"
+
+CMD [ "node.exe" ]
+
+FROM baseimage
+
+SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
+
+RUN Invoke-WebRequest -UseBasicParsing 'https://www.7-zip.org/a/7z1805-x64.exe' -OutFile 7z.exe; \
+ Start-Process -FilePath 'C:\\7z.exe' -ArgumentList '/S', '/D=C:\\7zip0' -NoNewWindow -Wait; \
+ Invoke-WebRequest -UseBasicParsing 'http://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-20180531.tar.xz' -OutFile msys2.tar.xz; \
+ Start-Process -FilePath 'C:\\7zip\\7z' -ArgumentList 'e', 'msys2.tar.xz' -Wait; \
+ Start-Process -FilePath 'C:\\7zip\\7z' -ArgumentList 'x', 'msys2.tar', '-oC:\\' -Wait; \
+ Remove-Item msys2.tar.xz; \
+ Remove-Item msys2.tar; \
+ Remove-Item 7z.exe; \
+ Remove-Item -Recurse 7zip; \
+ [Environment]::SetEnvironmentVariable('Path', $env:Path + ';C:\msys64\usr\bin', [System.EnvironmentVariableTarget]::Machine); \
+ [Environment]::SetEnvironmentVariable('BAZEL_SH', 'C:\msys64\usr\bin\bash.exe', [System.EnvironmentVariableTarget]::Machine); \
+ Invoke-WebRequest -UseBasicParsing 'https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe' -OutFile vc_redist.x64.exe; \
+ Start-Process 'c:\\vc_redist.x64.exe' -ArgumentList '/Install', '/Passive', '/NoRestart' -NoNewWindow -Wait; \
+ Remove-Item vc_redist.x64.exe
+
+# Add a fix for https://github.com/docker/for-win/issues/2920 as entry point to the container.
+SHELL ["cmd", "/c"]
+COPY "fix-msys64.cmd" "C:\\fix-msys64.cmd"
+ENTRYPOINT cmd /C C:\\fix-msys64.cmd && cmd /c
+
+CMD ["cmd.exe"]
\ No newline at end of file
diff --git a/.codefresh/README.md b/.codefresh/README.md
new file mode 100644
index 0000000000..88d0102a05
--- /dev/null
+++ b/.codefresh/README.md
@@ -0,0 +1,31 @@
+# CodeFresh configuration
+
+This folder contains configuration for the [CodeFresh]( based CI checks for this repository.
+
+## The build pipeline
+
+CodeFresh uses a several pipeline for each repository. The `codefresh.yml` file defines pipeline [build steps](https://codefresh.io/docs/docs/configure-ci-cd-pipeline/introduction-to-codefresh-pipelines/) for this repository.
+
+Run results can be seen in the GitHub checks interface and in the [public pipeline dashboard](https://g.codefresh.io/public/accounts/angular/pipelines/angular/angular/angular).
+
+Although most configuration is done via `pipeline.yml`, some options are only available in the online [pipeline settings](https://g.codefresh.io/pipelines/angular/services?repoOwner=angular&repoName=angular&project=angular%2Fangular&context=github&serviceName=angular%2Fangular), which needs a login to access.
+
+
+## Caretaker
+
+CodeFresh status can be found at .
+
+Issues related to the CodeFresh setup should be escalated to the Tools Team via the current caretaker, followed by Alex Eagle and Filipe Silva.
+
+## Rollout strategy
+
+Currently it is only used for tests on Windows platforms, on the master branch, and without pushing user-facing reports. It's only possible to see current builds in the [public pipeline dashboard](https://g.codefresh.io/public/accounts/angular/pipelines/angular/angular/angular).
+
+After a week or two of running like this, we should reassess how stable and reliable it is.
+
+Next steps include:
+- building PRs
+- showing build status publicly
+- blocking PRs that break the build
+- expanding the test suite
+
diff --git a/.codefresh/bazel.rc b/.codefresh/bazel.rc
new file mode 100644
index 0000000000..e4f8426a4f
--- /dev/null
+++ b/.codefresh/bazel.rc
@@ -0,0 +1,40 @@
+# These options are enabled when running on CI
+# We do this by copying this file to /etc/bazel.bazelrc at the start of the build.
+# See documentation in /docs/BAZEL.md
+
+# Save downloaded repositories in a location that can be cached by CodeFresh. This helps us
+# speeding up the analysis time significantly with Bazel managed node dependencies on the CI.
+# build --repository_cache=C:/codefresh/volume/bazel_repository_cache
+
+# Don't be spammy in the logs
+# TODO(gmagolan): Hide progress again once build performance improves
+# Presently, CircleCI can timeout during bazel test ... with the following
+# error: Too long with no output (exceeded 10m0s)
+# build --noshow_progress
+
+# Print all the options that apply to the build.
+# This helps us diagnose which options override others
+# (e.g. /etc/bazel.bazelrc vs. tools/bazel.rc)
+build --announce_rc
+
+# Workaround https://github.com/bazelbuild/bazel/issues/3645
+# Bazel doesn't calculate the memory ceiling correctly when running under Docker.
+# Limit Bazel to consuming resources that fit in CodeFresh VMs
+# TODO(filipesilva): determine the correct memory limit
+build --local_resources=8000,8.0,1.0
+
+# Retry in the event of flakes, eg. https://circleci.com/gh/angular/angular/31309
+test --flaky_test_attempts=2
+
+# More details on failures
+build --verbose_failures=true
+
+# Include PATH in Windows build/tests
+# https://github.com/bazelbuild/rules_typescript/pull/356
+build --action_env=PATH
+test --action_env=PATH --test_env=PATH
+
+# Exclude tests known to not work on Windows.
+
+# Chrome web tests are currently broken.
+test --test_tag_filters=-browser:chromium-local
diff --git a/.codefresh/codefresh.yml b/.codefresh/codefresh.yml
new file mode 100644
index 0000000000..9454a339fc
--- /dev/null
+++ b/.codefresh/codefresh.yml
@@ -0,0 +1,26 @@
+version: '1.0'
+
+steps:
+ BuildImage:
+ type: build
+ image_name: node-bazel-windows
+ working_directory: ./.codefresh
+ no_cf_cache: true
+ build_arguments:
+ - node_version=10.13.0
+ - yarn_version=1.13.0
+ dockerfile: ./Dockerfile.win-1809
+
+ RunTests:
+ title: Run Example
+ image: ${{BuildImage}}
+ commands:
+ # Install dependencies
+ - yarn install --frozen-lockfile --non-interactive --network-timeout 100000 --no-progress
+ # Create symlinks needed for Windows.
+ - scripts\windows\create-symlinks.cmd
+ # Add Bazel CI config
+ - copy .codefresh\bazel.rc %ProgramData%\bazel.bazelrc
+ # Run tests
+ - yarn bazel test //tools/ts-api-guardian:all
+ - yarn test-ivy-aot //packages/animations/test //packages/common/test //packages/forms/test //packages/http/test //packages/platform-browser/test //packages/platform-browser-dynamic/test //packages/router/test
diff --git a/.codefresh/fix-msys64.cmd b/.codefresh/fix-msys64.cmd
new file mode 100644
index 0000000000..3869596d08
--- /dev/null
+++ b/.codefresh/fix-msys64.cmd
@@ -0,0 +1,6 @@
+@echo off
+REM Fix for https://github.com/docker/for-win/issues/2920
+REM echo "Fixing msys64 folder..."
+REM Touch all .dll files inside C:\msys64\
+forfiles /p C:\msys64\ /s /m *.dll /c "cmd /c Copy /B @path+,, >NUL"
+REM echo "Fixed msys64 folder."
\ No newline at end of file
diff --git a/package.json b/package.json
index 23c4b83bb5..adfa9c2e0f 100644
--- a/package.json
+++ b/package.json
@@ -110,7 +110,7 @@
"// 3": "when updating @bazel/bazel version you also need to update the RBE settings in .bazelrc (see https://github.com/angular/angular/pull/27935)",
"devDependencies": {
"@angular/cli": "^7.3.2",
- "@bazel/bazel": "0.23.0",
+ "@bazel/bazel": "0.23.2",
"@bazel/buildifier": "^0.19.2",
"@bazel/ibazel": "~0.9.0",
"@types/minimist": "^1.2.0",
diff --git a/scripts/windows/create-symlinks.cmd b/scripts/windows/create-symlinks.cmd
new file mode 100644
index 0000000000..4b93d90b60
--- /dev/null
+++ b/scripts/windows/create-symlinks.cmd
@@ -0,0 +1,2 @@
+move /Y packages\upgrade\static\src packages\upgrade\static\src.old
+mklink /D packages\upgrade\static\src ..\src
diff --git a/yarn.lock b/yarn.lock
index 6c8363320a..b9bc0a552e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -80,29 +80,29 @@
semver "5.6.0"
symbol-observable "1.2.0"
-"@bazel/bazel-darwin_x64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.23.0.tgz#11f40d23d282e3034da5c223462f17924adc6c42"
- integrity sha512-kEn+SzN9zK2dHeKpTpkZma4ZqZdlzEagYLf2EY7yqRWKpD8oW5MZ2S2JxwvR4w1ZrHCth/x4dFsxwPlNA585JQ==
+"@bazel/bazel-darwin_x64@0.23.2":
+ version "0.23.2"
+ resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.23.2.tgz#619544c9ef444af71d4f4603c0874da951ad1949"
+ integrity sha512-wLqOtUm9Lr5EMePLqimgePB3GLU9ZJ/FE0ZawcQbKWXROGaGB2cTkOCpPp13T5fGY0Y7tJ/jjzIMBqphfyebLA==
-"@bazel/bazel-linux_x64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-0.23.0.tgz#5c3a0ebc9e68fa3a4bb7a0d05367febca15897a2"
- integrity sha512-B+FQOEcrRCM+D/w2hB5uh8j/HiZC2XN4+nthWvgkvdsgiKDXUf0oP/kLCVF/J7T5FAWafky97KDLPPcD6w1Fhg==
+"@bazel/bazel-linux_x64@0.23.2":
+ version "0.23.2"
+ resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-0.23.2.tgz#702d1e78bc12d9f0b8a00861f70e51c30e0f435c"
+ integrity sha512-b2CEoceQdaG5A2pXLbZcQZYk148wpPE141y6o4D9BL8JhbeW0TcnwtCziPVnSiW+nublDk9iNR3eVuNgsxgypw==
-"@bazel/bazel-win32_x64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-0.23.0.tgz#9956051d6f66ccf43ed74f0855522c8c673eff97"
- integrity sha512-88RfiUwqulva7KmPmgqjYK7EPE1qOwi03jOeDs+U3tb+HUwkyr88t5DKtZU5KBsYjk1UbFFes+RVZtkPmKmcmQ==
+"@bazel/bazel-win32_x64@0.23.2":
+ version "0.23.2"
+ resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-0.23.2.tgz#3c48c8615c2c9c6ee8c67b8f302e94324db153e2"
+ integrity sha512-wjcgN3ecj47osfgX3asiRb37wBd0RNgaTXejOwc7ZUCHKazDUkZzQyYH5S/4RgLaj9sT+cMEXVo1RI4nNRMqIA==
-"@bazel/bazel@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@bazel/bazel/-/bazel-0.23.0.tgz#22e71d55ccebfd76f6f0bd8a15076160adfac61f"
- integrity sha512-6XQ51t4ssEpdCea0rquiGB6cPr5/1Hef4LyHOzYDI8UnLt3pFAKAfOwEqC7HPD21zX3+usa3zSHrID6oOADppg==
+"@bazel/bazel@0.23.2":
+ version "0.23.2"
+ resolved "https://registry.yarnpkg.com/@bazel/bazel/-/bazel-0.23.2.tgz#94ac42cc29c5bcb6b35fe112624d94c803dd78a8"
+ integrity sha512-FP7sPD13sf0B2c2484DzJl2WzonrYJL2fAKgKl4Of8nBwlgNymvm2JAr3tZE3Ew+s9UwnEBrBDuf3eLn8xC9eg==
optionalDependencies:
- "@bazel/bazel-darwin_x64" "0.23.0"
- "@bazel/bazel-linux_x64" "0.23.0"
- "@bazel/bazel-win32_x64" "0.23.0"
+ "@bazel/bazel-darwin_x64" "0.23.2"
+ "@bazel/bazel-linux_x64" "0.23.2"
+ "@bazel/bazel-win32_x64" "0.23.2"
"@bazel/buildifier-darwin_x64@0.19.2":
version "0.19.2"