diff --git a/.bazelrc b/.bazelrc index 6437f29b4580..88bfdaac6be4 100644 --- a/.bazelrc +++ b/.bazelrc @@ -47,6 +47,12 @@ build --incompatible_strict_action_env run --incompatible_strict_action_env test --incompatible_strict_action_env +# Enable remote caching of build/action tree +build --experimental_remote_merkle_tree_cache + +# Ensure sandboxing is enabled even for exclusive tests +test --incompatible_exclusive_test_sandboxed + ############################### # Saucelabs support # # Turn on these settings with # diff --git a/WORKSPACE b/WORKSPACE index bf1b0b5a870f..a329102e2fa1 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -88,3 +88,13 @@ load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", aspect_bazel_lib_dependencies() register_jq_toolchains(version = "1.6") + +nodejs_register_toolchains( + name = "node14", + node_version = "14.17.1", +) + +nodejs_register_toolchains( + name = "node16", + node_version = "16.13.1", +) diff --git a/packages/angular/cli/BUILD.bazel b/packages/angular/cli/BUILD.bazel index 6ee0cb797b21..3628a7cd5e77 100644 --- a/packages/angular/cli/BUILD.bazel +++ b/packages/angular/cli/BUILD.bazel @@ -5,6 +5,7 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "pkg_npm", "ts_library") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") # @external_begin load("//tools:ts_json_schema.bzl", "ts_json_schema") @@ -151,10 +152,17 @@ ts_library( ], ) -jasmine_node_test( - name = "angular-cli_test", - srcs = [":angular-cli_test_lib"], -) +[ + jasmine_node_test( + name = "angular-cli_test_" + toolchain_name, + srcs = [":angular-cli_test_lib"], + toolchain = toolchain, + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] # @external_begin genrule( diff --git a/packages/angular/pwa/BUILD.bazel b/packages/angular/pwa/BUILD.bazel index 37d9e0807fbf..10c6436ee557 100644 --- a/packages/angular/pwa/BUILD.bazel +++ b/packages/angular/pwa/BUILD.bazel @@ -6,6 +6,7 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "pkg_npm", "ts_library") load("//tools:ts_json_schema.bzl", "ts_json_schema") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") licenses(["notice"]) # MIT @@ -62,10 +63,17 @@ ts_library( ], ) -jasmine_node_test( - name = "pwa_test", - srcs = [":pwa_test_lib"], -) +[ + jasmine_node_test( + name = "pwa_test_" + toolchain_name, + srcs = [":pwa_test_lib"], + toolchain = toolchain, + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] genrule( name = "license", diff --git a/packages/angular_devkit/architect/BUILD.bazel b/packages/angular_devkit/architect/BUILD.bazel index d01ef9b03604..1af259b7006a 100644 --- a/packages/angular_devkit/architect/BUILD.bazel +++ b/packages/angular_devkit/architect/BUILD.bazel @@ -5,6 +5,7 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "pkg_npm", "ts_library") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") # @external_begin load("//tools:ts_json_schema.bzl", "ts_json_schema") @@ -90,10 +91,17 @@ ts_library( ], ) -jasmine_node_test( - name = "architect_test", - srcs = [":architect_test_lib"], -) +[ + jasmine_node_test( + name = "architect_test_" + toolchain_name, + srcs = [":architect_test_lib"], + toolchain = toolchain, + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] # @external_begin genrule( diff --git a/packages/angular_devkit/benchmark/BUILD.bazel b/packages/angular_devkit/benchmark/BUILD.bazel index 5fde557128a9..cdffb4b76612 100644 --- a/packages/angular_devkit/benchmark/BUILD.bazel +++ b/packages/angular_devkit/benchmark/BUILD.bazel @@ -5,6 +5,7 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "pkg_npm", "ts_library") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") licenses(["notice"]) # MIT @@ -55,18 +56,25 @@ ts_library( # @external_end ) -jasmine_node_test( - name = "benchmark_test", - srcs = [":benchmark_test_lib"], - deps = [ - "@npm//jasmine", - "@npm//pidtree", - "@npm//pidusage", - "@npm//source-map", - "@npm//tree-kill", - "@npm//yargs-parser", - ], -) +[ + jasmine_node_test( + name = "benchmark_test_" + toolchain_name, + srcs = [":benchmark_test_lib"], + toolchain = toolchain, + deps = [ + "@npm//jasmine", + "@npm//pidtree", + "@npm//pidusage", + "@npm//source-map", + "@npm//tree-kill", + "@npm//yargs-parser", + ], + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] genrule( name = "license", diff --git a/packages/angular_devkit/build_angular/BUILD.bazel b/packages/angular_devkit/build_angular/BUILD.bazel index 52fc3b73e1b4..ab30db833c68 100644 --- a/packages/angular_devkit/build_angular/BUILD.bazel +++ b/packages/angular_devkit/build_angular/BUILD.bazel @@ -6,6 +6,7 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "pkg_npm", "ts_library") load("//tools:ts_json_schema.bzl", "ts_json_schema") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") licenses(["notice"]) # MIT @@ -209,10 +210,17 @@ ts_library( ], ) -jasmine_node_test( - name = "build_angular_test", - srcs = [":build_angular_test_lib"], -) +[ + jasmine_node_test( + name = "build_angular_test_" + toolchain_name, + srcs = [":build_angular_test_lib"], + toolchain = toolchain, + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] genrule( name = "license", @@ -384,16 +392,23 @@ LARGE_SPECS = { ] [ - jasmine_node_test( - name = "build_angular_" + spec + "_test", - size = LARGE_SPECS[spec].get("size", "medium"), - flaky = LARGE_SPECS[spec].get("flaky", False), - shard_count = LARGE_SPECS[spec].get("shards", 2), - # These tests are resource intensive and should not be over-parallized as they will - # compete for the resources of other parallel tests slowing everything down. - # Ask Bazel to allocate multiple CPUs for these tests with "cpu:n" tag. - tags = ["cpu:2"] + LARGE_SPECS[spec].get("tags", []), - deps = [":build_angular_" + spec + "_test_lib"], + [ + jasmine_node_test( + name = "build_angular_" + spec + "_test_" + toolchain_name, + size = LARGE_SPECS[spec].get("size", "medium"), + flaky = LARGE_SPECS[spec].get("flaky", False), + shard_count = LARGE_SPECS[spec].get("shards", 2), + # These tests are resource intensive and should not be over-parallized as they will + # compete for the resources of other parallel tests slowing everything down. + # Ask Bazel to allocate multiple CPUs for these tests with "cpu:n" tag. + tags = ["cpu:2"] + LARGE_SPECS[spec].get("tags", []), + toolchain = toolchain, + deps = [":build_angular_" + spec + "_test_lib"], + ) + for spec in LARGE_SPECS + ] + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, ) - for spec in LARGE_SPECS ] diff --git a/packages/angular_devkit/build_webpack/BUILD.bazel b/packages/angular_devkit/build_webpack/BUILD.bazel index 2cbde79ccf58..28f067d32ba4 100644 --- a/packages/angular_devkit/build_webpack/BUILD.bazel +++ b/packages/angular_devkit/build_webpack/BUILD.bazel @@ -6,6 +6,7 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "pkg_npm", "ts_library") load("//tools:ts_json_schema.bzl", "ts_json_schema") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") licenses(["notice"]) # MIT @@ -87,17 +88,24 @@ ts_library( ], ) -jasmine_node_test( - name = "build_webpack_test", - srcs = [":build_webpack_test_lib"], - # Turns off nodejs require patches and turns on the linker, which sets up up node_modules - # so that standard node module resolution work. - templated_args = ["--nobazel_patch_module_resolver"], - deps = [ - "@npm//jasmine", - "@npm//source-map", - ], -) +[ + jasmine_node_test( + name = "build_webpack_test_" + toolchain_name, + srcs = [":build_webpack_test_lib"], + # Turns off nodejs require patches and turns on the linker, which sets up up node_modules + # so that standard node module resolution work. + templated_args = ["--nobazel_patch_module_resolver"], + toolchain = toolchain, + deps = [ + "@npm//jasmine", + "@npm//source-map", + ], + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] genrule( name = "license", diff --git a/packages/angular_devkit/core/BUILD.bazel b/packages/angular_devkit/core/BUILD.bazel index 2ef8dcfcd0f7..455df84160b8 100644 --- a/packages/angular_devkit/core/BUILD.bazel +++ b/packages/angular_devkit/core/BUILD.bazel @@ -1,5 +1,6 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "pkg_npm", "ts_library") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") # @external_begin load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") @@ -65,17 +66,24 @@ ts_library( ], ) -jasmine_node_test( - name = "core_test", - srcs = [":core_test_lib"], - # TODO: Audit tests to determine if tests can be run in RBE environments - local = True, - deps = [ - # @node_module: ajv - # @node_module: fast_json_stable_stringify - # @node_module: source_map - ], -) +[ + jasmine_node_test( + name = "core_test_" + toolchain_name, + srcs = [":core_test_lib"], + # TODO: Audit tests to determine if tests can be run in RBE environments + local = True, + toolchain = toolchain, + deps = [ + # @node_module: ajv + # @node_module: fast_json_stable_stringify + # @node_module: source_map + ], + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] # @external_begin genrule( diff --git a/packages/angular_devkit/core/node/BUILD.bazel b/packages/angular_devkit/core/node/BUILD.bazel index b99e476d4869..60655649cb8e 100644 --- a/packages/angular_devkit/core/node/BUILD.bazel +++ b/packages/angular_devkit/core/node/BUILD.bazel @@ -5,6 +5,7 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "ts_library") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") licenses(["notice"]) # MIT License @@ -52,13 +53,20 @@ ts_library( ], ) -jasmine_node_test( - name = "node_test", - srcs = [":node_test_lib"], - deps = [ - "@npm//chokidar", - # @node_module: ajv - # @node_module: fast_json_stable_stringify - # @node_module: magic_string - ], -) +[ + jasmine_node_test( + name = "node_test_" + toolchain_name, + srcs = [":node_test_lib"], + toolchain = toolchain, + deps = [ + "@npm//chokidar", + # @node_module: ajv + # @node_module: fast_json_stable_stringify + # @node_module: magic_string + ], + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] diff --git a/packages/angular_devkit/schematics/BUILD.bazel b/packages/angular_devkit/schematics/BUILD.bazel index b0ee2bcc10ba..63e099da0f6d 100644 --- a/packages/angular_devkit/schematics/BUILD.bazel +++ b/packages/angular_devkit/schematics/BUILD.bazel @@ -1,5 +1,6 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "pkg_npm", "ts_library") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") # @external_begin load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") @@ -59,14 +60,21 @@ ts_library( ], ) -jasmine_node_test( - name = "schematics_test", - srcs = [":schematics_test_lib"], - deps = [ - "@npm//jasmine", - "@npm//source-map", - ], -) +[ + jasmine_node_test( + name = "schematics_test_" + toolchain_name, + srcs = [":schematics_test_lib"], + toolchain = toolchain, + deps = [ + "@npm//jasmine", + "@npm//source-map", + ], + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] # @external_begin genrule( diff --git a/packages/angular_devkit/schematics/tools/BUILD.bazel b/packages/angular_devkit/schematics/tools/BUILD.bazel index c7514fb510cd..f1686129e502 100644 --- a/packages/angular_devkit/schematics/tools/BUILD.bazel +++ b/packages/angular_devkit/schematics/tools/BUILD.bazel @@ -1,5 +1,6 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "ts_library") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") # Copyright Google Inc. All Rights Reserved. # @@ -57,11 +58,18 @@ ts_library( ], ) -jasmine_node_test( - name = "tools_test", - srcs = [":tools_test_lib"], - deps = [ - "@npm//jasmine", - "@npm//source-map", - ], -) +[ + jasmine_node_test( + name = "tools_test_" + toolchain_name, + srcs = [":tools_test_lib"], + toolchain = toolchain, + deps = [ + "@npm//jasmine", + "@npm//source-map", + ], + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] diff --git a/packages/angular_devkit/schematics_cli/BUILD.bazel b/packages/angular_devkit/schematics_cli/BUILD.bazel index a3945d0df047..3e198e43632b 100644 --- a/packages/angular_devkit/schematics_cli/BUILD.bazel +++ b/packages/angular_devkit/schematics_cli/BUILD.bazel @@ -1,6 +1,7 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "pkg_npm", "ts_library") load("//tools:ts_json_schema.bzl", "ts_json_schema") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") # Copyright Google Inc. All Rights Reserved. # @@ -74,10 +75,17 @@ ts_library( ], ) -jasmine_node_test( - name = "schematics_cli_test", - srcs = [":schematics_cli_test_lib"], -) +[ + jasmine_node_test( + name = "schematics_cli_test_" + toolchain_name, + srcs = [":schematics_cli_test_lib"], + toolchain = toolchain, + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] ts_json_schema( name = "blank_schema", diff --git a/packages/ngtools/webpack/BUILD.bazel b/packages/ngtools/webpack/BUILD.bazel index 9ee6ba2258fd..f62420dddc16 100644 --- a/packages/ngtools/webpack/BUILD.bazel +++ b/packages/ngtools/webpack/BUILD.bazel @@ -5,6 +5,7 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "pkg_npm", "ts_library") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") licenses(["notice"]) # MIT @@ -57,15 +58,22 @@ ts_library( ], ) -jasmine_node_test( - name = "webpack_test", - srcs = [":webpack_test_lib"], - deps = [ - "@npm//jasmine", - "@npm//source-map", - "@npm//tslib", - ], -) +[ + jasmine_node_test( + name = "webpack_test_" + toolchain_name, + srcs = [":webpack_test_lib"], + toolchain = toolchain, + deps = [ + "@npm//jasmine", + "@npm//source-map", + "@npm//tslib", + ], + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] genrule( name = "license", diff --git a/packages/schematics/angular/BUILD.bazel b/packages/schematics/angular/BUILD.bazel index 39411228344c..5d9a5e464b09 100644 --- a/packages/schematics/angular/BUILD.bazel +++ b/packages/schematics/angular/BUILD.bazel @@ -6,6 +6,7 @@ load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") load("//tools:defaults.bzl", "pkg_npm", "ts_library") load("//tools:ts_json_schema.bzl", "ts_json_schema") +load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") licenses(["notice"]) # MIT @@ -82,14 +83,21 @@ ts_library( ], ) -jasmine_node_test( - name = "no_typescript_runtime_dep_test", - srcs = ["no_typescript_runtime_dep_spec.js"], - deps = [ - ":angular", - "@npm//jasmine", - ], -) +[ + jasmine_node_test( + name = "no_typescript_runtime_dep_test_" + toolchain_name, + srcs = ["no_typescript_runtime_dep_spec.js"], + toolchain = toolchain, + deps = [ + ":angular", + "@npm//jasmine", + ], + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] ts_library( name = "angular_test_lib", @@ -118,15 +126,22 @@ ts_library( # @external_end ) -jasmine_node_test( - name = "angular_test", - srcs = [":angular_test_lib"], - deps = [ - "//packages/schematics/angular/third_party/github.com/Microsoft/TypeScript", - "@npm//jasmine", - "@npm//source-map", - ], -) +[ + jasmine_node_test( + name = "angular_test_" + toolchain_name, + srcs = [":angular_test_lib"], + toolchain = toolchain, + deps = [ + "//packages/schematics/angular/third_party/github.com/Microsoft/TypeScript", + "@npm//jasmine", + "@npm//source-map", + ], + ) + for toolchain_name, toolchain in zip( + TOOLCHAINS_NAMES, + TOOLCHAINS_VERSIONS, + ) +] genrule( name = "license", diff --git a/tools/toolchain_info.bzl b/tools/toolchain_info.bzl new file mode 100644 index 000000000000..4596497b29f6 --- /dev/null +++ b/tools/toolchain_info.bzl @@ -0,0 +1,25 @@ +# look at the toolchains registered in the workspace file with nodejs_register_toolchains + +# the name can be anything the user wants this is just added to the target to create unique names +# the order will match against the order in the TOOLCHAIN_VERSION list. +TOOLCHAINS_NAMES = [ + "node14", + "node16", +] + +# this is the list of toolchains that should be used and are registered with nodejs_register_toolchains in the WORKSPACE file +TOOLCHAINS_VERSIONS = [ + select({ + "@bazel_tools//src/conditions:linux_x86_64": "@node14_linux_amd64//:node_toolchain", + "@bazel_tools//src/conditions:darwin": "@node14_darwin_amd64//:node_toolchain", + "@bazel_tools//src/conditions:windows": "@node14_windows_amd64//:node_toolchain", + }), + select({ + "@bazel_tools//src/conditions:linux_x86_64": "@node14_linux_amd64//:node_toolchain", + "@bazel_tools//src/conditions:darwin": "@node14_darwin_amd64//:node_toolchain", + "@bazel_tools//src/conditions:windows": "@node14_windows_amd64//:node_toolchain", + }), +] + +# A default toolchain for use when only one is necessary +DEFAULT_TOOLCHAIN_VERSION = TOOLCHAINS_VERSIONS[len(TOOLCHAINS_VERSIONS) - 1]