mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
* it's tricky to get out of the runfiles tree with `bazel test` as `BUILD_WORKSPACE_DIRECTORY` is not set but I employed a trick to read the `DO_NOT_BUILD_HERE` file that is one level up from `execroot` and that contains the workspace directory. This is experimental and if `bazel test //:test.debug` fails than `bazel run` is still guaranteed to work as `BUILD_WORKSPACE_DIRECTORY` will be set in that context * test //integration:bazel_test and //integration:bazel-schematics_test exclusively * run "exclusive" and "manual" bazel-in-bazel integration tests in their own CI job as they take 8m+ to execute ``` //integration:bazel-schematics_test PASSED in 317.2s //integration:bazel_test PASSED in 167.8s ``` * Skip all integration tests that are now handled by angular_integration_test except the tests that are tracked for payload size; these are: - cli-hello-world* - hello_world__closure * add & pin @babel deps as newer versions of babel break //packages/localize/src/tools/test:test @babel/core dep had to be pinned to 7.6.4 or else //packages/localize/src/tools/test:test failed. Also //packages/localize uses @babel/generator, @babel/template, @babel/traverse & @babel/types so these deps were added to package.json as they were not being hoisted anymore from @babel/core transitive. NB: integration/hello_world__systemjs_umd test must run with systemjs 0.20.0 NB: systemjs must be at 0.18.10 for legacy saucelabs job to pass NB: With Bazel 2.0, the glob for the files to test `"integration/bazel/**"` is empty if integation/bazel is in .bazelignore. This glob worked under these conditions with 1.1.0. I did not bother testing with 1.2.x as not having integration/bazel in .bazelignore is correct. PR Close #33927
89 lines
3.5 KiB
Bash
Executable file
89 lines
3.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -eux -o pipefail
|
|
|
|
# sedi makes `sed -i` work on both OSX & Linux
|
|
# See https://stackoverflow.com/questions/2320564/i-need-my-sed-i-command-for-in-place-editing-to-work-with-both-gnu-sed-and-bsd
|
|
function sedi () {
|
|
case $(uname) in
|
|
Darwin*) sedi=('-i' '') ;;
|
|
*) sedi='-i' ;;
|
|
esac
|
|
|
|
sed "${sedi[@]}" "$@"
|
|
}
|
|
|
|
function installLocalPackages() {
|
|
# Install Angular packages that are built locally from HEAD.
|
|
# This also gets around the bug whereby yarn caches local `file://` urls.
|
|
# See https://github.com/yarnpkg/yarn/issues/2165
|
|
readonly pwd=$(pwd)
|
|
readonly packages=(
|
|
animations common compiler core forms platform-browser
|
|
platform-browser-dynamic router bazel compiler-cli language-service
|
|
)
|
|
local local_packages=()
|
|
for package in "${packages[@]}"; do
|
|
local_packages+=("@angular/${package}@file:${pwd}/../node_modules/@angular/${package}")
|
|
done
|
|
|
|
# keep typescript, tslib, and @types/node versions in sync with the ones used in this repo
|
|
local_packages+=("typescript@file:${pwd}/../node_modules/typescript")
|
|
local_packages+=("tslib@file:${pwd}/../node_modules/tslib")
|
|
local_packages+=("@types/node@file:${pwd}/../node_modules/@types/node")
|
|
|
|
yarn add --ignore-scripts --silent "${local_packages[@]}"
|
|
}
|
|
|
|
function patchKarmaConfForHeadless() {
|
|
sedi "s#browsers\: \['Chrome'\],#customLaunchers\: \{ ChromeHeadlessNoSandbox\: \{ base\: 'ChromeHeadless', flags\: \['--no-sandbox', '--headless', '--disable-gpu', '--disable-dev-shm-usage', '--hide-scrollbars', '--mute-audio'\] \} \}, browsers\: \['ChromeHeadlessNoSandbox'\],#" ./karma.conf.js
|
|
}
|
|
|
|
function patchProtractorConfForHeadless() {
|
|
sedi "s#browserName\: 'chrome'#browserName\: 'chrome', chromeOptions\: \{ args: \['--no-sandbox', '--headless', '--disable-gpu', '--disable-dev-shm-usage', '--hide-scrollbars', '--mute-audio'\] \},#" ./e2e/protractor.conf.js
|
|
}
|
|
|
|
function testBazel() {
|
|
# Set up
|
|
bazel version
|
|
ng version
|
|
rm -rf demo
|
|
# Create project
|
|
ng new demo --collection=@angular/bazel --routing --skip-git --skip-install --style=scss
|
|
cd demo
|
|
patchKarmaConfForHeadless
|
|
patchProtractorConfForHeadless
|
|
installLocalPackages
|
|
ng generate component widget --style=css
|
|
ng build
|
|
ng test
|
|
ng e2e
|
|
ng e2e --prod
|
|
if [ -e 'WORKSPACE' ] || [ -e 'BUILD.bazel' ]; then
|
|
echo 'WORKSPACE / BUILD.bazel file should not exist in project'
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function testNonBazel() {
|
|
# Replace angular.json that uses Bazel builder with the default generated by CLI
|
|
mv ./angular.json.bak ./angular.json
|
|
rm -rf dist src/main.dev.ts src/main.prod.ts
|
|
# disable CLI's version check (if version is 0.0.0, then no version check happens)
|
|
yarn --cwd node_modules/@angular/cli version --new-version 0.0.0 --no-git-tag-version
|
|
# re-add build-angular
|
|
yarn add --dev file:../node_modules/@angular-devkit/build-angular
|
|
# TODO: Find a way to use the Chrome version provided by `puppeteer` as the rest of the
|
|
# integration projects. See https://github.com/angular/angular/pull/35049 for details.
|
|
yarn webdriver-manager update --gecko=false --standalone=false --versions.chrome=79.0.3945.130;
|
|
ng build --progress=false
|
|
ng test --progress=false --watch=false
|
|
ng e2e --port 0 --configuration=production --webdriver-update=false
|
|
}
|
|
|
|
testBazel
|
|
|
|
# this test verifies that users can undo bazel - the value of this is questionable
|
|
# because there are way too many manual steps and it would be easier for users to
|
|
# just revert the diff created by `ng add @angular/bazel`
|
|
testNonBazel
|