From 328b48b6970b7d317c6f4a3587dd1f295137b86e Mon Sep 17 00:00:00 2001 From: Alex Eagle Date: Thu, 15 Mar 2018 15:36:11 -0700 Subject: [PATCH] test: integration tests now against bazel built packages (#22810) PR Close #22810 --- .circleci/config.yml | 4 ++ integration/README.md | 15 +---- integration/bazel/angular.tsconfig.json | 2 +- integration/run_tests.sh | 59 ++++++++++++++----- .../test/ng_package/example/package.json | 3 +- scripts/ci/test-e2e-2.sh | 6 -- tools/bazel.rc | 1 + 7 files changed, 54 insertions(+), 36 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2e42fceae4..b1eecd02eb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -82,6 +82,10 @@ jobs: # NOTE: Angular developers should typically just bazel build //packages/... or bazel test //packages/... - run: bazel query --output=label //... | xargs bazel test + # We run the integration tests outside of Bazel for now. + # See comments inside this script. + - run: xvfb-run --auto-servernum ./integration/run_tests.sh + # CircleCI will allow us to go back and view/download these artifacts from past builds. # Also we can use a service like https://buildsize.org/ to automatically track binary size of these artifacts. - store_artifacts: diff --git a/integration/README.md b/integration/README.md index a95ef0eef2..ee4ab3699f 100644 --- a/integration/README.md +++ b/integration/README.md @@ -51,18 +51,9 @@ you can install the package directly from `file:../../node_modules`. ## Running integration tests -First you must run `build.sh` to create the current distribution. - -You can iterate on the tests by keeping the dist folder up-to-date. -See the `package.json` of the test(s) you're debugging, to see which dist/ folders they install from. -Then run the right `tsc --watch` command to keep those dist folders up-to-date, for example: - -``` -$ ./node_modules/.bin/tsc -p packages/core/tsconfig-build.json --watch -``` - -Now you can run the integration test, it will re-install from the dist/ folder on each run. - ``` $ ./integration/run_tests.sh ``` + +The test runner will first re-build any stale npm packages, then `cd` into each +subdirectory to execute the test. diff --git a/integration/bazel/angular.tsconfig.json b/integration/bazel/angular.tsconfig.json index 5e3bec6b0c..57184c92e9 100644 --- a/integration/bazel/angular.tsconfig.json +++ b/integration/bazel/angular.tsconfig.json @@ -17,6 +17,6 @@ "node_modules/@angular/bazel/**", "node_modules/@angular/compiler-cli/**", "node_modules/@angular/common/locales/**", - "node_modules/@angular/tsc-wrapped/**" + "node_modules/@angular/*/testing/**" ] } diff --git a/integration/run_tests.sh b/integration/run_tests.sh index fb3fadb977..f8a820825e 100755 --- a/integration/run_tests.sh +++ b/integration/run_tests.sh @@ -2,19 +2,47 @@ set -e -o pipefail -currentDir=$(cd $(dirname $0); pwd) -cd ${currentDir} +# see https://circleci.com/docs/2.0/env-vars/#circleci-built-in-environment-variables +CI=${CI:-false} +cd "$(dirname "$0")" -readonly thisDir=$(cd $(dirname $0); pwd) +# basedir is the workspace root +readonly basedir=$(pwd)/.. +readonly bin=$(bazel info bazel-bin) + +echo "#################################" +echo "Building @angular/* npm packages " +echo "#################################" + +# Ideally these integration tests should run under bazel, and just list the npm +# packages in their deps[]. +# Until then, we have to manually run bazel first to create the npm packages we +# want to test. +bazel query --output=label 'kind(.*_package, //packages/...)' \ + | xargs bazel build + +# Allow this test to run even if dist/ doesn't exist yet. +# Under Bazel we don't need to create the dist folder to run the integration tests +[ -d "${basedir}/dist/packages-dist" ] || mkdir -p $basedir/dist/packages-dist +# Each package is a subdirectory of bazel-bin/packages/ +for pkg in $(ls ${bin}/packages); do + # Skip any that don't have an "npm_package" target + if [ -d "${bin}/packages/${pkg}/npm_package" ]; then + echo "# Copy artifacts to dist/packages-dist/${pkg}" + rm -rf ${basedir}/dist/packages-dist/${pkg} + cp -R ${bin}/packages/${pkg}/npm_package ${basedir}/dist/packages-dist/${pkg} + fi +done # Track payload size functions # TODO(alexeagle): finish migrating these to buildsize.org -if [[ -v TRAVIS ]]; then +if $CI; then # We don't install this by default because it contains some broken Bazel setup - # and also it's a very big dependency that we never use except on Travis. + # and also it's a very big dependency that we never use except when publishing + # payload sizes on CI. yarn add -D firebase-tools@3.12.0 - source ../scripts/ci/payload-size.sh + source ${basedir}/scripts/ci/payload-size.sh fi # Workaround https://github.com/yarnpkg/yarn/issues/2165 @@ -35,6 +63,7 @@ for testDir in $(ls | grep -v node_modules) ; do ( cd $testDir rm -rf dist + pwd yarn install --cache-folder ../$cache yarn test || exit 1 # Track payload size for cli-hello-world and hello_world__closure and the render3 tests @@ -42,17 +71,15 @@ for testDir in $(ls | grep -v node_modules) ; do if [[ $testDir == cli-hello-world ]] || [[ $testDir == hello_world__render3__cli ]]; then yarn build fi - if [[ -v TRAVIS ]]; then - trackPayloadSize "$testDir" "dist/*.js" true false "${thisDir}/_payload-limits.json" - fi - fi - if [[ -v TRAVIS ]]; then - # remove the temporary node modules directory to save space. - rm -rf node_modules + #if $CI; then + # trackPayloadSize "$testDir" "dist/*.js" true false "${basedir}/integration/_payload-limits.json" + #fi fi + # remove the temporary node modules directory to keep the source folder clean. + rm -rf node_modules ) done -if [[ -v TRAVIS ]]; then - trackPayloadSize "umd" "../dist/packages-dist/*/bundles/*.umd.min.js" false false -fi +#if $CI; then +# trackPayloadSize "umd" "../dist/packages-dist/*/bundles/*.umd.min.js" false false +#fi diff --git a/packages/bazel/test/ng_package/example/package.json b/packages/bazel/test/ng_package/example/package.json index 8389bd69d6..92e8fca5b5 100644 --- a/packages/bazel/test/ng_package/example/package.json +++ b/packages/bazel/test/ng_package/example/package.json @@ -1,3 +1,4 @@ { - "name": "example" + "name": "example", + "version": "0.0.0-PLACEHOLDER" } \ No newline at end of file diff --git a/scripts/ci/test-e2e-2.sh b/scripts/ci/test-e2e-2.sh index 8b38217599..27aab37a89 100755 --- a/scripts/ci/test-e2e-2.sh +++ b/scripts/ci/test-e2e-2.sh @@ -13,12 +13,6 @@ travisFoldStart "test.e2e.buildPackages" ./build.sh travisFoldEnd "test.e2e.buildPackages" - -travisFoldStart "test.e2e.integration" - ./integration/run_tests.sh -travisFoldEnd "test.e2e.integration" - - # TODO(i): temporarily disable this test because we don't have rxjs backwards compatibility package # and cdk+material are not yet compatible with rxjs v6 # uncomment when we have cdk and material releases compatible with rxjs v6 diff --git a/tools/bazel.rc b/tools/bazel.rc index 5fdf4ba0d8..1d0f39dfd2 100644 --- a/tools/bazel.rc +++ b/tools/bazel.rc @@ -28,6 +28,7 @@ build --watchfs # Release support # ############################### +# Releases should always be stamped with version control info build --workspace_status_command=./tools/bazel_stamp_vars.sh ###############################