build: fixes for cross-platform RBE (#33708)
The earlier update to nodejs rules 0.40.0 fixes the cross-platform RBE issues with nodejs_binary. This commit adds a work-around for rules_webtesting cross-platform RBE issues. PR Close #33708
This commit is contained in:
parent
f2828a08bd
commit
e6045ee0b7
|
@ -113,12 +113,9 @@ load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories"
|
|||
|
||||
web_test_repositories()
|
||||
|
||||
load("@io_bazel_rules_webtesting//web/versioned:browsers-0.3.2.bzl", "browser_repositories")
|
||||
load("//tools/browsers:browser_repositories.bzl", "browser_repositories")
|
||||
|
||||
browser_repositories(
|
||||
chromium = True,
|
||||
firefox = True,
|
||||
)
|
||||
browser_repositories()
|
||||
|
||||
# Setup the rules_typescript tooolchain
|
||||
load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace")
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")
|
||||
load("//tools:defaults.bzl", "protractor_web_test_suite")
|
||||
|
||||
"""
|
||||
Macro that can be used to define a benchmark test. This differentiates from
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")
|
||||
load("//tools:defaults.bzl", "ts_library")
|
||||
load("//tools:defaults.bzl", "protractor_web_test_suite", "ts_library")
|
||||
|
||||
def example_test(name, srcs, server, data = [], **kwargs):
|
||||
ts_library(
|
||||
|
|
|
@ -34,8 +34,8 @@ function nodejs_repository() {
|
|||
const nodejsBinaryExt = os.platform() === 'win32' ? '.bat' : '.sh';
|
||||
const ngcBin = require.resolve(`./ngc_bin${nodejsBinaryExt}`);
|
||||
const xi18nBin = require.resolve(`./ng_xi18n${nodejsBinaryExt}`);
|
||||
const nodeBin =
|
||||
require.resolve(`${nodejs_repository()}/bin/node${(os.platform() === 'win32' ? '.cmd' : '')}`);
|
||||
const nodeBin = require.resolve(
|
||||
`${nodejs_repository()}/${(os.platform() === 'win32' ? 'bin/nodejs/node.exe' : 'bin/nodejs/bin/node')}`);
|
||||
const jasmineBin = require.resolve('npm/node_modules/jasmine/bin/jasmine.js');
|
||||
|
||||
// Prepare the test directory before building the integration test output. This ensures that
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load("//tools:defaults.bzl", "ng_module", "ts_library")
|
||||
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")
|
||||
load("//tools:defaults.bzl", "ng_module", "protractor_web_test_suite", "ts_library")
|
||||
load("@npm_bazel_typescript//:index.bzl", "ts_devserver")
|
||||
|
||||
ng_module(
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load("//tools:defaults.bzl", "jasmine_node_test", "ng_module", "ts_library")
|
||||
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")
|
||||
load("//tools:defaults.bzl", "jasmine_node_test", "ng_module", "protractor_web_test_suite", "ts_library")
|
||||
load("@npm_bazel_typescript//:index.bzl", "ts_devserver")
|
||||
|
||||
ng_module(
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load("//tools:defaults.bzl", "ng_module", "ts_library")
|
||||
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")
|
||||
load("//tools:defaults.bzl", "ng_module", "protractor_web_test_suite", "ts_library")
|
||||
load("@npm_bazel_typescript//:index.bzl", "ts_devserver")
|
||||
|
||||
ng_module(
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load("//tools:defaults.bzl", "ng_module", "ts_library")
|
||||
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")
|
||||
load("//tools:defaults.bzl", "ng_module", "protractor_web_test_suite", "ts_library")
|
||||
load("@npm_bazel_typescript//:index.bzl", "ts_devserver")
|
||||
|
||||
ng_module(
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load("//tools:defaults.bzl", "ng_module", "ts_library")
|
||||
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")
|
||||
load("//tools:defaults.bzl", "ng_module", "protractor_web_test_suite", "ts_library")
|
||||
load("@npm_bazel_typescript//:index.bzl", "ts_devserver")
|
||||
|
||||
ng_module(
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
load("//tools:defaults.bzl", "ng_module", "ts_library")
|
||||
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")
|
||||
load("//tools:defaults.bzl", "ng_module", "protractor_web_test_suite", "ts_library")
|
||||
load("@npm_bazel_typescript//:index.bzl", "ts_devserver")
|
||||
|
||||
"""
|
||||
|
|
|
@ -101,6 +101,7 @@ def karma_test(name, env_srcs, env_deps, env_entry_point, test_srcs, test_deps,
|
|||
":" + name + "_env_trim_map",
|
||||
] + bootstrap +
|
||||
_karma_test_required_dist_files,
|
||||
browsers = ["//tools/browsers:chromium"],
|
||||
static_files = [
|
||||
":assets/sample.json",
|
||||
":assets/worker.js",
|
||||
|
@ -123,6 +124,7 @@ def karma_test(name, env_srcs, env_deps, env_entry_point, test_srcs, test_deps,
|
|||
":" + name + "_env_trim_map",
|
||||
"//packages/zone.js/dist:zone-testing-bundle-dist-test",
|
||||
] + _karma_test_required_dist_files,
|
||||
browsers = ["//tools/browsers:chromium"],
|
||||
config_file = "//:karma-js.conf.js",
|
||||
configuration_env_vars = ["KARMA_WEB_TEST_MODE"],
|
||||
data = [
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
# Copyright 2016 Google Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
################################################################################
|
||||
#
|
||||
load("@io_bazel_rules_webtesting//web:web.bzl", "browser", "web_test_archive")
|
||||
|
||||
# Override of chromium web_test_archive so that the archive is selected based on platform
|
||||
web_test_archive(
|
||||
name = "chromium_archive",
|
||||
testonly = True,
|
||||
archive = select({
|
||||
"@io_bazel_rules_webtesting//common/conditions:linux": "@org_chromium_chromium_amd64//file",
|
||||
"@io_bazel_rules_webtesting//common/conditions:mac": "@org_chromium_chromium_macos//file",
|
||||
"@io_bazel_rules_webtesting//common/conditions:windows": "@org_chromium_chromium_windows//file",
|
||||
}),
|
||||
extract = "build",
|
||||
named_files = select({
|
||||
"@io_bazel_rules_webtesting//common/conditions:linux": {"CHROMIUM": "chrome-linux/chrome"},
|
||||
"@io_bazel_rules_webtesting//common/conditions:mac": {"CHROMIUM": "chrome-mac/Chromium.app/Contents/MacOS/chromium"},
|
||||
"@io_bazel_rules_webtesting//common/conditions:windows": {"CHROMIUM": "chrome-win/chrome.exe"},
|
||||
}),
|
||||
visibility = ["//tools/browsers:__subpackages__"],
|
||||
)
|
||||
|
||||
# Override of chromedriver web_test_archive so that the archive is selected based on platform
|
||||
web_test_archive(
|
||||
name = "chromedriver_archive",
|
||||
testonly = True,
|
||||
archive = select({
|
||||
"@io_bazel_rules_webtesting//common/conditions:linux": "@org_chromium_chromedriver_amd64//file",
|
||||
"@io_bazel_rules_webtesting//common/conditions:mac": "@org_chromium_chromedriver_macos//file",
|
||||
"@io_bazel_rules_webtesting//common/conditions:windows": "@org_chromium_chromedriver_windows//file",
|
||||
}),
|
||||
extract = "build",
|
||||
named_files = select({
|
||||
"@io_bazel_rules_webtesting//common/conditions:linux": {
|
||||
"CHROMEDRIVER": "chromedriver_linux64/chromedriver",
|
||||
},
|
||||
"@io_bazel_rules_webtesting//common/conditions:mac": {
|
||||
"CHROMEDRIVER": "chromedriver_mac64/chromedriver",
|
||||
},
|
||||
"@io_bazel_rules_webtesting//common/conditions:windows": {
|
||||
"CHROMEDRIVER": "chromedriver_win32/chromedriver.exe",
|
||||
},
|
||||
}),
|
||||
visibility = ["//tools/browsers:__subpackages__"],
|
||||
)
|
||||
|
||||
browser(
|
||||
name = "chromium",
|
||||
metadata = "chromium.json",
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
":chromedriver_archive",
|
||||
":chromium_archive",
|
||||
"@io_bazel_rules_webtesting//go/wsl",
|
||||
],
|
||||
)
|
|
@ -0,0 +1,87 @@
|
|||
# Copyright 2018 The Bazel Authors. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
"""Pinned browser versions.
|
||||
|
||||
This function is here to make browser repositories work with cross-platform RBE.
|
||||
Unlike the rules_webtesting browser_repositories, this function defines
|
||||
separate repositories for each platform
|
||||
"""
|
||||
|
||||
load("@io_bazel_rules_webtesting//web/internal:platform_http_file.bzl", _platform_http_file = "platform_http_file")
|
||||
|
||||
def platform_http_file(name, licenses, sha256, urls):
|
||||
"""Platform spepcific browser repository.
|
||||
|
||||
This works around a dificiency in io_bazel_rules_webtesting platform_http_file in that
|
||||
it selects the platform when the repository rule is executed. This limits browsers
|
||||
tests to run on the local user platform only. For cross-platform RBE we want a repository
|
||||
to be defined per platform so the correct one can be selected.
|
||||
"""
|
||||
|
||||
_platform_http_file(
|
||||
name = name,
|
||||
amd64_sha256 = sha256,
|
||||
amd64_urls = urls,
|
||||
licenses = licenses,
|
||||
macos_sha256 = sha256,
|
||||
macos_urls = urls,
|
||||
windows_sha256 = sha256,
|
||||
windows_urls = urls,
|
||||
)
|
||||
|
||||
def browser_repositories():
|
||||
"""Load pinned rules_webtesting browser versions."""
|
||||
|
||||
platform_http_file(
|
||||
name = "org_chromium_chromium_amd64",
|
||||
licenses = ["notice"], # BSD 3-clause (maybe more?)
|
||||
sha256 = "b1e30c4dec8a451f8fe10d1f2d3c71e491d0333425f32247fe5c80a0a354303d",
|
||||
urls = ["https://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/664981/chrome-linux.zip"],
|
||||
)
|
||||
|
||||
platform_http_file(
|
||||
name = "org_chromium_chromium_macos",
|
||||
licenses = ["notice"], # BSD 3-clause (maybe more?)
|
||||
sha256 = "7c0ba93616f44a421330b1c1262e8899fbdf7916bed8b04c775e0426f6f35ec6",
|
||||
urls = ["https://commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/665002/chrome-mac.zip"],
|
||||
)
|
||||
|
||||
platform_http_file(
|
||||
name = "org_chromium_chromium_windows",
|
||||
licenses = ["notice"], # BSD 3-clause (maybe more?)
|
||||
sha256 = "f2facd0066270078d0e8999e684595274c359cac3946299a1ceedba2a5de1c63",
|
||||
urls = ["https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win/664999/chrome-win.zip"],
|
||||
)
|
||||
|
||||
platform_http_file(
|
||||
name = "org_chromium_chromedriver_amd64",
|
||||
licenses = ["reciprocal"], # BSD 3-clause, ICU, MPL 1.1, libpng (BSD/MIT-like), Academic Free License v. 2.0, BSD 2-clause, MIT
|
||||
sha256 = "0ead02145854b60a3317b59031205b362fb4cfdb680fef20e95c89582e6e38be",
|
||||
urls = ["https://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/664981/chromedriver_linux64.zip"],
|
||||
)
|
||||
|
||||
platform_http_file(
|
||||
name = "org_chromium_chromedriver_macos",
|
||||
licenses = ["reciprocal"], # BSD 3-clause, ICU, MPL 1.1, libpng (BSD/MIT-like), Academic Free License v. 2.0, BSD 2-clause, MIT
|
||||
sha256 = "8dd159e27b13b16262afa6993b15321e736c3b484da363c0e03bb050d72522c9",
|
||||
urls = ["https://commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/665002/chromedriver_mac64.zip"],
|
||||
)
|
||||
|
||||
platform_http_file(
|
||||
name = "org_chromium_chromedriver_windows",
|
||||
licenses = ["reciprocal"], # BSD 3-clause, ICU, MPL 1.1, libpng (BSD/MIT-like), Academic Free License v. 2.0, BSD 2-clause, MIT
|
||||
sha256 = "1cc881364974102182257a5c5c2b9cfed513689dee28924ca44df082bdf9fd60",
|
||||
urls = ["https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win/664999/chromedriver_win32.zip"],
|
||||
)
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"environment" : "local",
|
||||
"capabilities" : {
|
||||
"browserName" : "chrome",
|
||||
"goog:chromeOptions" : {
|
||||
"binary" : "%FILE:CHROMIUM%",
|
||||
"args" : [
|
||||
"--headless",
|
||||
"--use-gl=swiftshader-webgl"
|
||||
]
|
||||
},
|
||||
"google:wslConfig": {
|
||||
"binary": "%FILE:CHROMEDRIVER%",
|
||||
"port":"%WSLPORT:WSL%",
|
||||
"args": ["--port=%WSLPORT:WSL%"],
|
||||
"status": true,
|
||||
"shutdown": true
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@ load("@build_bazel_rules_nodejs//:index.bzl", _nodejs_binary = "nodejs_binary",
|
|||
load("@npm_bazel_jasmine//:index.bzl", _jasmine_node_test = "jasmine_node_test")
|
||||
load("@npm_bazel_karma//:index.bzl", _karma_web_test = "karma_web_test", _karma_web_test_suite = "karma_web_test_suite")
|
||||
load("@npm_bazel_typescript//:index.bzl", _ts_library = "ts_library")
|
||||
load("@npm_bazel_protractor//:index.bzl", _protractor_web_test_suite = "protractor_web_test_suite")
|
||||
load("//packages/bazel:index.bzl", _ng_module = "ng_module", _ng_package = "ng_package")
|
||||
load("//tools/ng_rollup_bundle:ng_rollup_bundle.bzl", _ng_rollup_bundle = "ng_rollup_bundle")
|
||||
load("//tools:ng_benchmark.bzl", _ng_benchmark = "ng_benchmark")
|
||||
|
@ -203,28 +204,19 @@ def karma_web_test_suite(bootstrap = [], deps = [], runtime_deps = [], **kwargs)
|
|||
"//tools/testing:browser",
|
||||
] + runtime_deps
|
||||
|
||||
tags = kwargs.pop("tags", [])
|
||||
|
||||
# rules_webtesting has a required_tag "native" for `chromium-local` browser
|
||||
if not "native" in tags:
|
||||
tags = tags + ["native"]
|
||||
|
||||
_karma_web_test_suite(
|
||||
runtime_deps = local_runtime_deps,
|
||||
bootstrap = bootstrap,
|
||||
deps = local_deps,
|
||||
# Run unit tests on local Chromium by default.
|
||||
# You can exclude tests based on tags, e.g. to skip Firefox testing,
|
||||
# `yarn bazel test --test_tag_filters=-browser:firefox-local [targets]`
|
||||
browsers = [
|
||||
"@io_bazel_rules_webtesting//browsers:chromium-local",
|
||||
# Don't test on local Firefox by default, for faster builds.
|
||||
# We think that bugs in Angular tend to be caught the same in any
|
||||
# evergreen browser.
|
||||
# "@io_bazel_rules_webtesting//browsers:firefox-local",
|
||||
# TODO(alexeagle): add remote browsers on SauceLabs
|
||||
],
|
||||
tags = tags,
|
||||
browsers = ["//tools/browsers:chromium"],
|
||||
**kwargs
|
||||
)
|
||||
|
||||
def protractor_web_test_suite(**kwargs):
|
||||
"""Default values for protractor_web_test_suite"""
|
||||
|
||||
_protractor_web_test_suite(
|
||||
browsers = ["//tools/browsers:chromium"],
|
||||
**kwargs
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue