From 5241ea086d5def1923ca500ca415e5f167207960 Mon Sep 17 00:00:00 2001 From: Wei Huang Date: Thu, 2 Aug 2018 00:02:36 -0400 Subject: [PATCH] test(bazel): Run Angular test on RBE (#25370) PR Close #25370 --- .circleci/bazel.rc | 3 ++ .circleci/config.yml | 48 ++++++++++--------------------- .circleci/rbe-bazel.rc | 6 ++-- tools/BUILD.bazel | 31 ++++++++++++++++++++ tools/ts-api-guardian/BUILD.bazel | 1 + 5 files changed, 53 insertions(+), 36 deletions(-) diff --git a/.circleci/bazel.rc b/.circleci/bazel.rc index da0906c648..3ab299f8e8 100644 --- a/.circleci/bazel.rc +++ b/.circleci/bazel.rc @@ -28,3 +28,6 @@ build --local_resources=14336,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 diff --git a/.circleci/config.yml b/.circleci/config.yml index 0786abfc35..62be945b4a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -26,6 +26,11 @@ var_4: &setup-bazel-remote-cache command: ~/bazel-remote-proxy -backend circleci:// background: true +var_5: &setup_bazel_remote_execution + run: + name: "Setup bazel RBE remote execution" + command: openssl aes-256-cbc -d -in .circleci/gcp_token -k "${CIRCLE_PROJECT_REPONAME}" -out /home/circleci/.gcp_credentials && echo "export GOOGLE_APPLICATION_CREDENTIALS=/home/circleci/.gcp_credentials" >> $BASH_ENV && sudo bash -c "cat .circleci/rbe-bazel.rc >> /etc/bazel.bazelrc" + # Settings common to each job anchor_1: &job_defaults working_directory: ~/ng @@ -69,22 +74,20 @@ jobs: - *define_env_vars - checkout: <<: *post_checkout - # See remote cache documentation in /docs/BAZEL.md - - run: .circleci/setup_cache.sh - run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc - - *setup-bazel-remote-cache - - restore_cache: - key: *cache_key - - - run: ls /home/circleci/bazel_repository_cache || true - run: bazel info release - run: bazel run @nodejs//:yarn # Use bazel query so that we explicitly ask for all buildable targets to be built as well # This avoids waiting for the slowest build target to finish before running the first test # See https://github.com/bazelbuild/bazel/issues/4257 # NOTE: Angular developers should typically just bazel build //packages/... or bazel test //packages/... - - run: bazel query --output=label //... | xargs bazel test --build_tag_filters=-ivy-only --test_tag_filters=-manual,-ivy-only + # Setup remote execution and run RBE-compatible tests. + - *setup_bazel_remote_execution + - run: bazel query --output=label //... | xargs bazel test --build_tag_filters=-ivy-only --test_tag_filters=-manual,-ivy-only,-local + # Now run RBE incompatible tests locally. + - run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc + - run: bazel query --output=label //... | xargs bazel test --build_tag_filters=-ivy-only,local --test_tag_filters=-manual,-ivy-only,local # 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. @@ -118,15 +121,10 @@ jobs: - *define_env_vars - checkout: <<: *post_checkout - # See remote cache documentation in /docs/BAZEL.md - - run: .circleci/setup_cache.sh - run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc - - *setup-bazel-remote-cache - - - restore_cache: - key: *cache_key - run: bazel run @yarn//:yarn + - *setup_bazel_remote_execution - run: bazel query --output=label //... | xargs bazel test --define=compile=jit --build_tag_filters=ivy-jit --test_tag_filters=-manual,ivy-jit test_ivy_aot: @@ -136,15 +134,10 @@ jobs: - *define_env_vars - checkout: <<: *post_checkout - # See remote cache documentation in /docs/BAZEL.md - - run: .circleci/setup_cache.sh - run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc - - *setup-bazel-remote-cache - - - restore_cache: - key: *cache_key - run: bazel run @yarn//:yarn + - *setup_bazel_remote_execution - run: bazel query --output=label //... | xargs bazel test --define=compile=local --build_tag_filters=ivy-local --test_tag_filters=-manual,ivy-local aio_preview: @@ -178,21 +171,10 @@ jobs: - *define_env_vars - checkout: <<: *post_checkout - # See remote cache documentation in /docs/BAZEL.md - run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc - run: bazel run @nodejs//:yarn - - run: - # RBE is enabled by appending rbe-bazel.rc. - name: Enable RBE - command: 'sudo bash -c "cat .circleci/rbe-bazel.rc >> /etc/bazel.bazelrc"' - - run: - name: "Setup GCP environment" - command: 'openssl aes-256-cbc -d -in .circleci/gcp_token -k "${CIRCLE_PROJECT_REPONAME}" -out /home/circleci/.gcp_credentials' - - run: - name: build-packages-dist - command: scripts/build-packages-dist.sh - environment: - GOOGLE_APPLICATION_CREDENTIALS: /home/circleci/.gcp_credentials + - *setup_bazel_remote_execution + - run: scripts/build-packages-dist.sh # Save the npm packages from //packages/... for other workflow jobs to read # https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs diff --git a/.circleci/rbe-bazel.rc b/.circleci/rbe-bazel.rc index d76aaeffa1..74608cfc79 100644 --- a/.circleci/rbe-bazel.rc +++ b/.circleci/rbe-bazel.rc @@ -34,9 +34,9 @@ build --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 # "exec_compatible_with"). # More about platforms: https://docs.bazel.build/versions/master/platforms.html build --extra_toolchains=@bazel_toolchains//configs/ubuntu16_04_clang/1.0/bazel_0.15.0/cpp:cc-toolchain-clang-x86_64-default -build --extra_execution_platforms=@bazel_toolchains//configs/ubuntu16_04_clang/1.0:rbe_ubuntu1604 -build --host_platform=@bazel_toolchains//configs/ubuntu16_04_clang/1.0:rbe_ubuntu1604 -build --platforms=@bazel_toolchains//configs/ubuntu16_04_clang/1.0:rbe_ubuntu1604 +build --extra_execution_platforms=//tools:rbe_ubuntu1604-angular +build --host_platform=//tools:rbe_ubuntu1604-angular +build --platforms=//tools:rbe_ubuntu1604-angular # Set various strategies so that all actions execute remotely. Mixing remote # and local execution will lead to errors unless the toolchain and remote diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel index 4509a207c3..6205f2731c 100644 --- a/tools/BUILD.bazel +++ b/tools/BUILD.bazel @@ -1 +1,32 @@ exports_files(["tsconfig.json"]) + +# The toolchain container used for execution is defined in the target indicated +# by "extra_execution_platforms", "host_platform" and "platforms". +# If you are using your own toolchain container, you need to create a platform +# target with "constraint_values" that allow for the toolchain specified with +# "extra_toolchains" to be selected (given constraints defined in +# "exec_compatible_with"). +# More about platforms: https://docs.bazel.build/versions/master/platforms.html +platform( + name = "rbe_ubuntu1604-angular", + constraint_values = [ + "@bazel_tools//platforms:x86_64", + "@bazel_tools//platforms:linux", + "@bazel_tools//tools/cpp:clang", + "@bazel_toolchains//constraints:xenial", + ], + # We are currently using the docker container image provided by RBE. Once + # Angular has the billing account setup, we should start using/maintaining + # our own docker container image. + remote_execution_properties = """ + properties: { + name: "container-image" + value:"docker://gcr.io/asci-toolchain/nosla-ubuntu16_04-webtest@sha256:55fae2e51ecf38fec9778ab93a9b4edd7d318eeb5f420602450d3b509b52edf9" + } + properties: { + name: "dockerAddCapabilities" + value: "SYS_ADMIN" + } + """, + visibility = ["//visibility:public"], +) diff --git a/tools/ts-api-guardian/BUILD.bazel b/tools/ts-api-guardian/BUILD.bazel index 20057f6a9b..ff6b1cd7c1 100644 --- a/tools/ts-api-guardian/BUILD.bazel +++ b/tools/ts-api-guardian/BUILD.bazel @@ -62,4 +62,5 @@ jasmine_node_test( ":ts-api-guardian", ], node_modules = "@ts-api-guardian_runtime_deps//:node_modules", + tags = ["local"], )