Skip to content

Commit bbd5947

Browse files
committed
Migrate to aspect_rules_js
Also builds the Grid UI using `esbuild`. The weird imports in the Grid UI are due to an issue with the way that `esbuild` interacts with `@mui/material-icons`: mui/material-ui#31835 (comment)
1 parent ceaa738 commit bbd5947

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+6594
-80784
lines changed

.bazelignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,6 @@ dotnet/src/webdriver/obj
2222
java/build/production
2323
java/client/build
2424
java/server/build
25+
javascript/grid-ui/node_modules
26+
javascript/node/selenium-webdriver/node_modules
2527
node_modules

.bazelrc

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,24 @@ build --javacopt="--release 11"
2525
build --experimental_strict_java_deps=strict
2626
build --explicit_java_test_deps
2727

28-
# Ensure builds are unpolluted by the user env
28+
# Allow spaces in runfile paths
29+
build --nobuild_runfile_links
2930

30-
build --incompatible_strict_action_env
31+
# More JS magic
32+
build --experimental_allow_unresolved_symlinks
33+
34+
# Required for faster TS builds
35+
build --@aspect_rules_ts//ts:skipLibCheck=always
36+
fetch --@aspect_rules_ts//ts:skipLibCheck=always
37+
query --@aspect_rules_ts//ts:skipLibCheck=always
3138

32-
# Except for the PATH environment variable
39+
build --@aspect_rules_ts//ts:default_to_tsc_transpiler
40+
fetch --@aspect_rules_ts//ts:default_to_tsc_transpiler
41+
query --@aspect_rules_ts//ts:default_to_tsc_transpiler
3342

34-
build --action_env=PATH
43+
# Ensure builds are unpolluted by the user env
44+
45+
build --incompatible_strict_action_env
3546

3647
# For build stamping
3748

@@ -53,7 +64,6 @@ test --test_env=DISPLAY
5364
test --test_env=FIREFOX_NIGHTLY_BINARY
5465
test --test_env=GITHUB_ACTIONS
5566
test --test_env=MOZ_HEADLESS
56-
test --test_env=PATH # Remove once browser pinning works
5767
test --test_env=SELENIUM_BROWSER
5868
test --test_env=TRAVIS
5969
test --test_env=PYTHON_VERSION
@@ -70,8 +80,8 @@ test --test_env=JRUBY_OPTS="--dev"
7080

7181
# JRuby/TruffleRuby: https://github.com/jruby/jruby/issues/5661
7282

73-
build --action_env=HOME
74-
test --test_env=HOME
83+
#build --action_env=HOME
84+
#test --test_env=HOME
7585

7686
# Expose necessary variables for Selenium-Manager.
7787

.github/workflows/ci-javascript.yml

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,4 @@ jobs:
2828
cache-key: node
2929
run: |
3030
export SELENIUM_BROWSER=${{ matrix.browser }}
31-
bazel test --flaky_test_attempts 3 //javascript/node/selenium-webdriver:tests
32-
33-
# As soon as this gets merged https://github.com/facebook/jest/pull/9351, we should upgrade Jest and
34-
# run bazel test javascript/grid-ui:test for these tests
35-
grid-ui:
36-
name: Grid UI Tests
37-
needs: build
38-
runs-on: ubuntu-latest
39-
steps:
40-
- name: Checkout source tree
41-
uses: actions/checkout@v4
42-
- name: Setup Node
43-
uses: actions/setup-node@v4
44-
with:
45-
node-version: 18
46-
- name: NPM install
47-
run: cd javascript/grid-ui && npm install
48-
- name: Run unit tests
49-
run: cd javascript/grid-ui && npm test
31+
bazel test --flaky_test_attempts 3 //javascript/node/selenium-webdriver:${{matrix.browser}}-browser-tests

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ junitvmwatcher*.properties
1010
test-output/
1111
.*.swp
1212
*~
13+
.aspect/
1314
common/build
1415
/build/
1516
cpp/iedriver/IEReturnTypes.h

.npmrc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Disabling pnpm [hoisting](https://pnpm.io/npmrc#hoist) by setting `hoist=false` is recommended on
2+
# projects using rules_js so that pnpm outside of Bazel lays out a node_modules tree similar to what
3+
# rules_js lays out under Bazel (without a hidden node_modules/.pnpm/node_modules). See
4+
# https://github.com/aspect-build/rules_js/blob/7377f2d0387cc2a9251137929b1c53ccdb3fbcf0/docs/npm_import.md#npm_translate_lock
5+
# documentation for more information.
6+
hoist=false

BUILD.bazel

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1+
load("@aspect_rules_js//npm:defs.bzl", "npm_link_package")
12
load("@com_github_bazelbuild_buildtools//buildifier:def.bzl", "buildifier")
3+
load("@npm//:defs.bzl", "npm_link_all_packages")
24
load("//common:browsers.bzl", "chrome_data", "firefox_data")
35
load("//java:browsers.bzl", "chrome_jvm_flags", "firefox_jvm_flags")
46
load("//java:defs.bzl", "artifact")
57

8+
exports_files([
9+
"package.json",
10+
"pnpm-workspace.yaml",
11+
])
12+
13+
npm_link_all_packages(name = "node_modules")
14+
615
filegroup(
716
name = "license",
817
srcs = [
@@ -53,6 +62,11 @@ java_binary(
5362
],
5463
)
5564

65+
npm_link_package(
66+
name = "node_modules/selenium-webdriver",
67+
src = "//javascript/node/selenium-webdriver",
68+
)
69+
5670
platform(
5771
name = "rosetta",
5872
constraint_values = [

WORKSPACE

Lines changed: 71 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,14 @@ load("@maven//:defs.bzl", "pinned_maven_install")
192192

193193
pinned_maven_install()
194194

195+
# Stop `aspect_rules_js` and `rules_dotnet` from fighting over `aspect_bazel_lib`
196+
http_archive(
197+
name = "aspect_bazel_lib",
198+
sha256 = "4d6010ca5e3bb4d7045b071205afa8db06ec11eb24de3f023d74d77cca765f66",
199+
strip_prefix = "bazel-lib-1.39.0",
200+
url = "https://github.com/aspect-build/bazel-lib/releases/download/v1.39.0/bazel-lib-v1.39.0.tar.gz",
201+
)
202+
195203
http_archive(
196204
name = "rules_dotnet",
197205
sha256 = "d01b0f44e58224deeb8ac81afe8701385d41b16c8028709d3a4ed5b46f1c48a0",
@@ -252,26 +260,78 @@ load("@crates//:defs.bzl", "crate_repositories")
252260
crate_repositories()
253261

254262
http_archive(
255-
name = "build_bazel_rules_nodejs",
256-
sha256 = "709cc0dcb51cf9028dd57c268066e5bc8f03a119ded410a13b5c3925d6e43c48",
257-
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.4/rules_nodejs-5.8.4.tar.gz"],
263+
name = "aspect_rules_js",
264+
sha256 = "a2f941e27f02e84521c2d47fd530c66d57dd6d6e44b4a4f1496fe304851d8e48",
265+
strip_prefix = "rules_js-1.35.0",
266+
url = "https://github.com/aspect-build/rules_js/releases/download/v1.35.0/rules_js-v1.35.0.tar.gz",
258267
)
259268

260-
load("@build_bazel_rules_nodejs//:repositories.bzl", "build_bazel_rules_nodejs_dependencies")
269+
load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies")
261270

262-
build_bazel_rules_nodejs_dependencies()
271+
rules_js_dependencies()
263272

264-
load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "npm_install")
273+
load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
265274

266-
node_repositories(
275+
nodejs_register_toolchains(
276+
name = "nodejs",
267277
node_version = "18.17.0",
268278
)
269279

270-
npm_install(
280+
load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
281+
282+
npm_translate_lock(
271283
name = "npm",
272-
package_json = "//:package.json",
273-
package_lock_json = "//:package-lock.json",
274-
symlink_node_modules = False,
284+
data = [
285+
"@//:package.json",
286+
"@//:pnpm-workspace.yaml",
287+
"@//javascript/grid-ui:package.json",
288+
"@//javascript/node/selenium-webdriver:package.json",
289+
],
290+
generate_bzl_library_targets = True,
291+
npmrc = "//:.npmrc",
292+
pnpm_lock = "//:pnpm-lock.yaml",
293+
update_pnpm_lock = True,
294+
verify_node_modules_ignored = "//:.bazelignore",
295+
)
296+
297+
load("@npm//:repositories.bzl", "npm_repositories")
298+
299+
npm_repositories()
300+
301+
http_archive(
302+
name = "aspect_rules_ts",
303+
sha256 = "bd3e7b17e677d2b8ba1bac3862f0f238ab16edb3e43fb0f0b9308649ea58a2ad",
304+
strip_prefix = "rules_ts-2.1.0",
305+
url = "https://github.com/aspect-build/rules_ts/releases/download/v2.1.0/rules_ts-v2.1.0.tar.gz",
306+
)
307+
308+
load("@aspect_rules_ts//ts:repositories.bzl", "rules_ts_dependencies")
309+
310+
rules_ts_dependencies(
311+
ts_version = "4.9.5",
312+
)
313+
314+
load("@bazel_features//:deps.bzl", "bazel_features_deps")
315+
316+
bazel_features_deps()
317+
318+
http_archive(
319+
name = "aspect_rules_esbuild",
320+
sha256 = "999349afef62875301f45ec8515189ceaf2e85b1e67a17e2d28b95b30e1d6c0b",
321+
strip_prefix = "rules_esbuild-0.18.0",
322+
url = "https://github.com/aspect-build/rules_esbuild/releases/download/v0.18.0/rules_esbuild-v0.18.0.tar.gz",
323+
)
324+
325+
load("@aspect_rules_esbuild//esbuild:dependencies.bzl", "rules_esbuild_dependencies")
326+
327+
rules_esbuild_dependencies()
328+
329+
# Register a toolchain containing esbuild npm package and native bindings
330+
load("@aspect_rules_esbuild//esbuild:repositories.bzl", "esbuild_register_toolchains")
331+
332+
esbuild_register_toolchains(
333+
name = "esbuild",
334+
esbuild_version = "0.19.9",
275335
)
276336

277337
http_archive(

common/extensions/BUILD.bazel

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
load("@aspect_rules_js//js:defs.bzl", "js_library")
2+
13
filegroup(
24
name = "extensions",
35
srcs = glob([
@@ -9,12 +11,22 @@ filegroup(
911
"//java/test/org/openqa/selenium/edge:__pkg__",
1012
"//java/test/org/openqa/selenium/environment:__pkg__",
1113
"//java/test/org/openqa/selenium/firefox:__pkg__",
12-
"//javascript/node/selenium-webdriver:__pkg__",
14+
"//javascript/node/selenium-webdriver:__subpackages__",
1315
"//py:__pkg__",
1416
"//rb/spec:__subpackages__",
1517
],
1618
)
1719

20+
js_library(
21+
name = "js-lib",
22+
data = [
23+
":extensions",
24+
],
25+
visibility = [
26+
"//javascript/node/selenium-webdriver:__subpackages__",
27+
],
28+
)
29+
1830
exports_files(
1931
[
2032
"webextensions-selenium-example.xpi",
@@ -23,6 +35,7 @@ exports_files(
2335
],
2436
visibility = [
2537
"//java/test/org/openqa/selenium/firefox:__pkg__",
38+
"//javascript/node/selenium-webdriver:__subpackages__",
2639
"//py:__pkg__",
2740
],
2841
)

common/private/drivers.bzl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,17 @@ def _symlink_if_available(repository_ctx, driver_name):
88

99
return "\n".join([
1010
"bool_setting(name = \"use_%s\", build_setting_default = %s)" % (driver_name, driver != None),
11+
"",
1112
"exports_files([\"%s\"])" % driver_name,
1213
"",
14+
"""js_library(name = "%s-js", data = [":%s"])""" % (driver_name, driver_name),
15+
"",
1316
])
1417

1518
def _local_drivers_impl(repository_ctx):
1619
contents = [
1720
"load(\"@bazel_skylib//rules:common_settings.bzl\", \"bool_setting\")",
21+
"load(\"@aspect_rules_js//js:defs.bzl\", \"js_library\")",
1822
"",
1923
"package(default_visibility = [\"//visibility:public\"])",
2024
_symlink_if_available(repository_ctx, "chromedriver"),

0 commit comments

Comments
 (0)