diff --git a/.bazelrc b/.bazelrc index 53d3bd4d9d4f6..44280a99134d9 100644 --- a/.bazelrc +++ b/.bazelrc @@ -10,12 +10,10 @@ try-import %workspace%/.bazelrc.windows.local common --lockfile_mode=off -# Prepare for Bazel 8. These become the default in 8.0.0 -common --incompatible_disallow_empty_glob -common --incompatible_use_plus_in_repo_names +# Bazel 8 compatibility flags. We should find ways to avoid needing these +common --legacy_external_runfiles # Ensure Windows support is accurate. - startup --windows_enable_symlinks build --enable_runfiles @@ -23,14 +21,12 @@ build --flag_alias=pin_browsers=//common:pin_browsers build --flag_alias=headless=//common:headless # Set the default java toolchain - build --java_language_version=21 build --java_runtime_version=remotejdk_21 build --tool_java_language_version=21 build --tool_java_runtime_version=remotejdk_21 # We target java 11 by default - build --javacopt="--release 11" # Require java dependencies to be used and first-order @@ -45,7 +41,7 @@ build --javacopt="-Xep:WildcardImport:ERROR" build --nobuild_runfile_links # More JS magic -build --experimental_allow_unresolved_symlinks +build --allow_unresolved_symlinks # Avoid a warning about directory tracking being unsound startup --host_jvm_args=-DBAZEL_TRACK_SOURCE_DIRECTORIES=1 @@ -62,7 +58,17 @@ query --@aspect_rules_ts//ts:default_to_tsc_transpiler build --incompatible_strict_action_env +# Required for prebuilt protoc to be used +common --incompatible_enable_proto_toolchain_resolution + +# Ensure that we don't accidentally build protobuf or gRPC +common --per_file_copt=external/.*protobuf.*@--PROTOBUF_WAS_NOT_SUPPOSED_TO_BE_BUILT +common --host_per_file_copt=external/.*protobuf.*@--PROTOBUF_WAS_NOT_SUPPOSED_TO_BE_BUILT +common --per_file_copt=external/.*grpc.*@--GRPC_WAS_NOT_SUPPOSED_TO_BE_BUILT +common --host_per_file_copt=external/.*grpc.*@--GRPC_WAS_NOT_SUPPOSED_TO_BE_BUILT + # Required to get `protobuf` compiling, which is required for `rules_closure` +common --incompatible_enable_proto_toolchain_resolution build --incompatible_enable_cc_toolchain_resolution build:linux --cxxopt=-std=c++17 build:linux --host_cxxopt=-std=c++17 @@ -75,19 +81,16 @@ build:windows --host_per_file_copt=external/protobuf\\+.*@/w common --define=protobuf_allow_msvc=true # For build stamping - build --enable_platform_specific_config build:linux --workspace_status_command=scripts/build-info.sh build:macos --workspace_status_command=scripts/build-info.sh build:windows --workspace_status_command="powershell.exe scripts/build-info.ps1" # Make sure we get something helpful when tests fail - build --verbose_failures build --test_output=errors # pass environment variables to the test environment - test --test_env=CI test --test_env=DASHBOARD_URL test --test_env=DISPLAY @@ -99,7 +102,6 @@ test --test_env=PYTHON_VERSION test --test_env=SE_AVOID_STATS=true # Remove once rules_ruby support proper $LOAD_PATH expansion. - test --test_env=RUBYOPT="-Irb/lib -w" # Speed up JRuby startup. @@ -109,7 +111,6 @@ build --action_env=JRUBY_OPTS="--dev" test --test_env=JRUBY_OPTS="--dev" # Expose necessary variables for Selenium-Manager. - test:windows --test_env=PATH test:windows --test_env=LOCALAPPDATA test:windows --test_env=PROCESSOR_ARCHITECTURE diff --git a/.bazelversion b/.bazelversion index 815da58b7a9ed..6d2890793d472 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.4.1 +8.5.0 diff --git a/BUILD.bazel b/BUILD.bazel index 6a156f8f327bd..bef807de1b934 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,6 +1,7 @@ load("@aspect_rules_js//npm:defs.bzl", "npm_link_package") load("@buildifier_prebuilt//:rules.bzl", "buildifier") load("@npm//:defs.bzl", "npm_link_all_packages") +load("@rules_java//java:java_binary.bzl", "java_binary") load("//common:browsers.bzl", "chrome_data", "firefox_data") load("//java:browsers.bzl", "chrome_jvm_flags", "firefox_jvm_flags") load("//java:defs.bzl", "artifact") diff --git a/MODULE.bazel b/MODULE.bazel index e9ed01ac0dc62..0496684a1b9e0 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,37 +1,66 @@ module(name = "selenium") bazel_dep(name = "apple_rules_lint", version = "0.4.0") -bazel_dep(name = "aspect_bazel_lib", version = "2.14.0") -bazel_dep(name = "aspect_rules_esbuild", version = "0.21.0") +bazel_dep(name = "aspect_bazel_lib", version = "2.22.0") +bazel_dep(name = "aspect_rules_esbuild", version = "0.25.0") bazel_dep(name = "aspect_rules_jest", version = "0.24.3") -bazel_dep(name = "aspect_rules_js", version = "2.3.7") -bazel_dep(name = "aspect_rules_ts", version = "3.6.0") -bazel_dep(name = "bazel_features", version = "1.32.0") -bazel_dep(name = "bazel_skylib", version = "1.8.2") -bazel_dep(name = "buildifier_prebuilt", version = "7.3.1") -bazel_dep(name = "contrib_rules_jvm", version = "0.27.0") +bazel_dep(name = "aspect_rules_js", version = "2.8.3") +bazel_dep(name = "aspect_rules_ts", version = "3.8.1") +bazel_dep(name = "bazel_features", version = "1.38.0") +bazel_dep(name = "bazel_skylib", version = "1.9.0") +bazel_dep(name = "buildifier_prebuilt", version = "8.2.1.1") +bazel_dep(name = "contrib_rules_jvm", version = "0.31.1") bazel_dep(name = "platforms", version = "1.0.0") +# If you update this, also update the prebuilt version of `protoc` we use below +bazel_dep(name = "protobuf", version = "32.1") + # Required for rules_rust to import the crates properly -bazel_dep(name = "rules_cc", version = "0.2.8", dev_dependency = True) +bazel_dep(name = "rules_cc", version = "0.2.16", dev_dependency = True) bazel_dep(name = "rules_closure", version = "0.15.0") -bazel_dep(name = "rules_dotnet", version = "0.20.5") -bazel_dep(name = "rules_java", version = "8.7.1") -bazel_dep(name = "rules_jvm_external", version = "6.8") -bazel_dep(name = "rules_multitool", version = "1.3.0") -bazel_dep(name = "rules_nodejs", version = "6.3.2") -bazel_dep(name = "rules_pkg", version = "1.0.1") +bazel_dep(name = "rules_dotnet", version = "0.21.5") + +# See below for actual version used +bazel_dep(name = "rules_java", version = "0.0.0") +bazel_dep(name = "rules_jvm_external", version = "6.9") +bazel_dep(name = "rules_multitool", version = "1.11.1") +bazel_dep(name = "rules_nodejs", version = "6.6.2") +bazel_dep(name = "rules_oci", version = "2.2.7") +bazel_dep(name = "rules_pkg", version = "1.1.0") bazel_dep(name = "rules_python", version = "1.7.0") -bazel_dep(name = "rules_proto", version = "7.0.2") -bazel_dep(name = "rules_ruby", version = "0.19.0") -bazel_dep(name = "rules_rust", version = "0.67.0") +bazel_dep(name = "rules_proto", version = "7.1.0") +bazel_dep(name = "rules_ruby", version = "0.21.1") +bazel_dep(name = "rules_rust", version = "0.68.1") +bazel_dep(name = "toolchains_protoc", version = "0.6.0") + +# Force rules_java version to avoid Unsafe warnings in remote_java_tools +single_version_override( + module_name = "rules_java", + version = "8.15.2", +) -# Until `rules_jvm_external` 6.8 ships +# Provide mechanisms to group javadocs together. single_version_override( module_name = "rules_jvm_external", patch_strip = 1, - patches = ["//java:rules_jvm_external_javadoc.patch"], + patches = ["//third_party/bazel:rules_jvm_external_javadoc.patch"], +) + +# Work around `contrib_rules_jvm` not properly handling non-iterable +# items in lists. +single_version_override( + module_name = "contrib_rules_jvm", + patch_strip = 1, + patches = ["//third_party/bazel:contrib_rules_jvm_select_fix.patch"], +) + +# Patch protobuf to use toolchain resolution for internal_gen_well_known_protos_java +# instead of hardcoding //:protoc dependency, enabling prebuilt protoc usage. +single_version_override( + module_name = "protobuf", + patch_strip = 1, + patches = ["//third_party/bazel:protobuf_toolchain_resolution.patch"], ) multitool = use_extension("@rules_multitool//multitool:extension.bzl", "multitool") @@ -232,6 +261,7 @@ maven.install( fail_on_missing_checksum = True, fetch_sources = True, known_contributing_modules = [ + "protobuf", "rules_closure", "rules_web_testing_java", "selenium", @@ -371,6 +401,13 @@ crate.from_cargo( ) use_repo(crate, "crates") +# Override the toolchain registration from the protobuf module +protoc = use_extension("@toolchains_protoc//protoc:extensions.bzl", "protoc") +protoc.toolchain(version = "v32.1") +use_repo(protoc, "toolchains_protoc_hub") + +register_toolchains("@toolchains_protoc_hub//:all") + selenium_manager_artifacts = use_extension("//common:selenium_manager.bzl", "selenium_manager_artifacts") use_repo( selenium_manager_artifacts, diff --git a/common/remote-build/cc/BUILD b/common/remote-build/cc/BUILD index 88b9ad9cbcd6c..425b4acd189ff 100755 --- a/common/remote-build/cc/BUILD +++ b/common/remote-build/cc/BUILD @@ -14,6 +14,7 @@ # This becomes the BUILD file for @local_config_cc// under non-BSD unixes. +load("@rules_cc//cc:cc_library.bzl", "cc_library") load("@rules_cc//cc:defs.bzl", "cc_toolchain", "cc_toolchain_suite") load(":armeabi_cc_toolchain_config.bzl", "armeabi_cc_toolchain_config") load(":cc_toolchain_config.bzl", "cc_toolchain_config") diff --git a/common/remote-build/cc/armeabi_cc_toolchain_config.bzl b/common/remote-build/cc/armeabi_cc_toolchain_config.bzl index 72ef48ae6d6df..ae0527efe74bb 100755 --- a/common/remote-build/cc/armeabi_cc_toolchain_config.bzl +++ b/common/remote-build/cc/armeabi_cc_toolchain_config.bzl @@ -19,6 +19,7 @@ load( "feature", "tool_path", ) +load("@rules_cc//cc/common:cc_common.bzl", "cc_common") def _impl(ctx): toolchain_identifier = "stub_armeabi-v7a" diff --git a/common/remote-build/cc/cc_toolchain_config.bzl b/common/remote-build/cc/cc_toolchain_config.bzl index 4fd16d733098a..21b78e1ad76c5 100755 --- a/common/remote-build/cc/cc_toolchain_config.bzl +++ b/common/remote-build/cc/cc_toolchain_config.bzl @@ -28,6 +28,7 @@ load( "variable_with_value", "with_feature_set", ) +load("@rules_cc//cc/common:cc_common.bzl", "cc_common") def layering_check_features(compiler): if compiler != "clang": diff --git a/cpp/linux-specific/BUILD.bazel b/cpp/linux-specific/BUILD.bazel index 6fbb8031b2219..f70a1001ffade 100644 --- a/cpp/linux-specific/BUILD.bazel +++ b/cpp/linux-specific/BUILD.bazel @@ -1,3 +1,5 @@ +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") + cc_binary( name = "noblur64", srcs = glob([ diff --git a/java/BUILD.bazel b/java/BUILD.bazel index 71808daaa9c78..b5fd4ee23ecff 100644 --- a/java/BUILD.bazel +++ b/java/BUILD.bazel @@ -1,5 +1,7 @@ load("@bazel_skylib//rules:common_settings.bzl", "string_flag") load("@contrib_rules_jvm//java:defs.bzl", "spotbugs_binary", "spotbugs_config") +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_plugin.bzl", "java_plugin") load(":defs.bzl", "artifact") exports_files( diff --git a/java/defs.bzl b/java/defs.bzl index 995814cf35fef..014fdb62cf309 100644 --- a/java/defs.bzl +++ b/java/defs.bzl @@ -16,8 +16,8 @@ load("//java/private:module.bzl", _java_module = "java_module") load("//java/private:selenium_test.bzl", _selenium_test = "selenium_test") load("//java/private:suite.bzl", _java_selenium_test_suite = "java_selenium_test_suite") -def java_test_suite(name, runner = "junit5", **kwargs): - _java_test_suite(name = name, runner = runner, **kwargs) +def java_test_suite(name, **kwargs): + _java_test_suite(name = name, **kwargs) SINGLE_BROWSER = ["chrome"] diff --git a/java/maven_install.json b/java/maven_install.json index fe664ffdfb1cc..38e9cf8ed401d 100644 --- a/java/maven_install.json +++ b/java/maven_install.json @@ -1,7 +1,7 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -1221745853, - "__RESOLVED_ARTIFACTS_HASH": -267267215, + "__INPUT_ARTIFACTS_HASH": 1543966012, + "__RESOLVED_ARTIFACTS_HASH": -1859504569, "artifacts": { "args4j:args4j": { "shasums": { @@ -173,10 +173,10 @@ }, "com.google.errorprone:error_prone_annotations": { "shasums": { - "jar": "a56e782b5b50811ac204073a355a21d915a2107fce13ec711331ad036f660fcc", - "sources": "8885bccb4277d4de785da8e5cd9b8610cc12fb3740776741555639afb92ec849" + "jar": "ff80626baaf12a09342befd4e84cba9d50662f5fcd7f7a9b3490a6b7cf87e66c", + "sources": "bf08616e340f5e2ef50aaa84aea8baa086fd7bb2ad310501ff4e88ec77f8f31a" }, - "version": "2.41.0" + "version": "2.5.1" }, "com.google.googlejavaformat:google-java-format": { "shasums": { @@ -207,10 +207,10 @@ }, "com.google.j2objc:j2objc-annotations": { "shasums": { - "jar": "84d3a150518485f8140ea99b8a985656749629f6433c92b80c75b36aba3b099b", - "sources": "295938307f4016b3f128f7347101b236ada1394808104519c9e93cd61b64602b" + "jar": "f02a95fa1a5e95edb3ed859fd0fb7df709d121a35290eff8b74dce2ab7f4d6ed", + "sources": "7413eed41f111453a08837f5ac680edded7faed466cbd35745e402e13f4cc3f5" }, - "version": "3.1" + "version": "2.8" }, "com.google.javascript:closure-compiler": { "shasums": { @@ -1026,7 +1026,6 @@ } }, "conflict_resolution": { - "com.google.errorprone:error_prone_annotations:2.43.0": "com.google.errorprone:error_prone_annotations:2.41.0", "com.google.guava:failureaccess:1.0.1": "com.google.guava:failureaccess:1.0.3", "commons-io:commons-io:2.20.0": "commons-io:commons-io:2.5", "io.projectreactor:reactor-core:3.6.2": "io.projectreactor:reactor-core:3.6.6", diff --git a/java/private/BUILD.bazel b/java/private/BUILD.bazel index 750af87a97a5a..21f2c33d3c2ee 100644 --- a/java/private/BUILD.bazel +++ b/java/private/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_java//java:java_binary.bzl", "java_binary") load("@rules_jvm_external//:defs.bzl", "artifact") exports_files( diff --git a/java/private/common.bzl b/java/private/common.bzl index 8f68b4a9b3fcf..1fb1415129762 100644 --- a/java/private/common.bzl +++ b/java/private/common.bzl @@ -1,3 +1,4 @@ +load("@rules_java//java/common:java_info.bzl", "JavaInfo") load("//java/private:module.bzl", "JavaModuleInfo") MavenInfo = provider( diff --git a/java/private/dist_info.bzl b/java/private/dist_info.bzl index 97c8b9bddbc97..09afe15922003 100644 --- a/java/private/dist_info.bzl +++ b/java/private/dist_info.bzl @@ -1,3 +1,4 @@ +load("@rules_java//java/common:java_info.bzl", "JavaInfo") load("//java/private:common.bzl", "MavenInfo", "explode_coordinates", "read_coordinates") load("//java/private:module.bzl", "JavaModuleInfo") diff --git a/java/private/java_test_suite.bzl b/java/private/java_test_suite.bzl index 04ea657c2d7a7..e1fdb3f766fa2 100644 --- a/java/private/java_test_suite.bzl +++ b/java/private/java_test_suite.bzl @@ -6,7 +6,6 @@ load(":junit5_test.bzl", "junit5_test") def java_test_suite( name, srcs, - runner = "junit5", test_suffixes = DEFAULT_TEST_SUFFIXES, package = None, deps = None, @@ -19,9 +18,7 @@ def java_test_suite( test_suffixes = test_suffixes, package = package, define_library = java_library, - # We want to use our own test runner define_test = junit5_test, - runner = runner, deps = deps, runtime_deps = runtime_deps, size = size, diff --git a/java/private/module.bzl b/java/private/module.bzl index f0c9eedec22fa..313dca27e2d85 100644 --- a/java/private/module.bzl +++ b/java/private/module.bzl @@ -1,3 +1,6 @@ +load("@rules_java//java/common:java_common.bzl", "java_common") +load("@rules_java//java/common:java_info.bzl", "JavaInfo") + _GatheredModuleInfo = provider( fields = { "name": "Name of the module, may be `None`.", diff --git a/java/src/org/openqa/selenium/support/locators/RelativeLocator.java b/java/src/org/openqa/selenium/support/locators/RelativeLocator.java index f977874be1a25..486ce4682b1f6 100644 --- a/java/src/org/openqa/selenium/support/locators/RelativeLocator.java +++ b/java/src/org/openqa/selenium/support/locators/RelativeLocator.java @@ -288,6 +288,7 @@ private static Object asAtomLocatorParameter(Object object) { return Map.of((String) raw.get("using"), raw.get("value")); } + @SuppressWarnings("CheckReturnValue") private static void assertLocatorCanBeSerialized(Object locator) { Require.nonNull("Locator", locator); diff --git a/java/test/org/openqa/selenium/bidi/script/LocalValueTest.java b/java/test/org/openqa/selenium/bidi/script/LocalValueTest.java index 2bc9fcc4c30ed..1eac34b2066c9 100644 --- a/java/test/org/openqa/selenium/bidi/script/LocalValueTest.java +++ b/java/test/org/openqa/selenium/bidi/script/LocalValueTest.java @@ -352,7 +352,7 @@ void canCallFunctionWithSetArgument() { EvaluateResultSuccess successResult = (EvaluateResultSuccess) result; assertThat(successResult.getResult().getType()).isEqualTo("set"); - assertThat(successResult.getResult().getValue().isPresent()); + assertThat(successResult.getResult().getValue().isPresent()).isTrue(); List resultValue = (List) successResult.getResult().getValue().get(); assertThat(resultValue).hasSize(1); diff --git a/java/test/org/openqa/selenium/firefox/BUILD.bazel b/java/test/org/openqa/selenium/firefox/BUILD.bazel index ee7f980bd7c94..f2dd16cbfff39 100644 --- a/java/test/org/openqa/selenium/firefox/BUILD.bazel +++ b/java/test/org/openqa/selenium/firefox/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_java//java:java_library.bzl", "java_library") load("@rules_jvm_external//:defs.bzl", "artifact") load("//common:defs.bzl", "copy_file") load("//java:defs.bzl", "JUNIT5_DEPS", "java_selenium_test_suite", "java_test_suite") diff --git a/java/test/org/openqa/selenium/grid/router/BUILD.bazel b/java/test/org/openqa/selenium/grid/router/BUILD.bazel index 4b8096bb9bd24..3b676239d325c 100644 --- a/java/test/org/openqa/selenium/grid/router/BUILD.bazel +++ b/java/test/org/openqa/selenium/grid/router/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_java//java:java_library.bzl", "java_library") load("@rules_jvm_external//:defs.bzl", "artifact") load("//java:defs.bzl", "BIDI_BROWSERS", "JUNIT5_DEPS", "SINGLE_BROWSER", "java_selenium_test_suite", "java_test_suite") load("//java:version.bzl", "TOOLS_JAVA_VERSION") diff --git a/java/test/org/openqa/selenium/netty/server/BUILD.bazel b/java/test/org/openqa/selenium/netty/server/BUILD.bazel index c21993bc25b1c..73e88450158bd 100644 --- a/java/test/org/openqa/selenium/netty/server/BUILD.bazel +++ b/java/test/org/openqa/selenium/netty/server/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_java//java:java_library.bzl", "java_library") load("@rules_jvm_external//:defs.bzl", "artifact") load("//java:defs.bzl", "JUNIT5_DEPS", "java_test_suite") diff --git a/javascript/grid-ui/BUILD.bazel b/javascript/grid-ui/BUILD.bazel index ca3c37dd40584..5d5745b1f50b2 100644 --- a/javascript/grid-ui/BUILD.bazel +++ b/javascript/grid-ui/BUILD.bazel @@ -4,6 +4,7 @@ load("@aspect_rules_jest//jest:defs.bzl", "jest_test") load("@aspect_rules_js//js:defs.bzl", "js_library") load("@aspect_rules_ts//ts:defs.bzl", "ts_project") load("@npm//:defs.bzl", "npm_link_all_packages") +load("@rules_java//java:java_import.bzl", "java_import") load("@rules_pkg//pkg:zip.bzl", "pkg_zip") load("//java:defs.bzl", "merge_jars") diff --git a/javascript/grid-ui/public/BUILD.bazel b/javascript/grid-ui/public/BUILD.bazel index b1635bc09dd94..e9ea37ba9e3b5 100644 --- a/javascript/grid-ui/public/BUILD.bazel +++ b/javascript/grid-ui/public/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_java//java:java_import.bzl", "java_import") load("@rules_pkg//pkg:zip.bzl", "pkg_zip") pkg_zip( diff --git a/javascript/private/BUILD.bazel b/javascript/private/BUILD.bazel index d9f243e2b2a18..998a35f939e15 100644 --- a/javascript/private/BUILD.bazel +++ b/javascript/private/BUILD.bazel @@ -20,6 +20,7 @@ js_binary( data = [ "closure_make_deps_wrapper.js", ":node_modules/google-closure-deps", + ":node_modules/minimatch", ], entry_point = ":closure_make_deps_wrapper.js", visibility = [ diff --git a/javascript/private/closure_make_deps_wrapper.js b/javascript/private/closure_make_deps_wrapper.js index 87bd4b8f37ba2..521c3ad656425 100644 --- a/javascript/private/closure_make_deps_wrapper.js +++ b/javascript/private/closure_make_deps_wrapper.js @@ -26,6 +26,14 @@ const fs = require('fs'); const path = require('path'); + +// Pre-load minimatch before google-closure-deps to work around Windows symlink +// issues in Bazel's runfiles tree. When using pnpm-style node_modules layout +// with aspect_rules_js, transitive dependencies are linked via symlinks. +// On Windows, these symlinks may not resolve correctly. By requiring minimatch +// first, we populate Node's module cache so google-closure-deps can find it. +require('minimatch'); + const closureMakeDeps = require('google-closure-deps').closureMakeDeps; async function main() { diff --git a/javascript/private/package.json b/javascript/private/package.json index 9a1adb83d7ed2..b8ee25d338262 100644 --- a/javascript/private/package.json +++ b/javascript/private/package.json @@ -9,6 +9,7 @@ "url": "https://github.com/SeleniumHQ/selenium.git" }, "dependencies": { - "google-closure-deps": "^20230802.0.0" + "google-closure-deps": "^20230802.0.0", + "minimatch": "^3.1.2" } } diff --git a/javascript/private/test_suite.bzl b/javascript/private/test_suite.bzl index 77bbf3c2e46a2..ca5e4b1c59dcd 100644 --- a/javascript/private/test_suite.bzl +++ b/javascript/private/test_suite.bzl @@ -1,3 +1,4 @@ +load("@rules_java//java:java_binary.bzl", "java_binary") load("@rules_jvm_external//:defs.bzl", "artifact") load("//java:defs.bzl", "selenium_test") @@ -29,7 +30,7 @@ def closure_test_suite(name, data = [], browsers = None): selenium_test(**kwargs) - native.java_binary( + java_binary( name = name + "_debug_server", main_class = "org.openqa.selenium.environment.webserver.NettyAppServer", data = data, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0de1a90707e4c..3c90ad2f9da13 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -122,6 +122,9 @@ importers: google-closure-deps: specifier: ^20230802.0.0 version: 20230802.0.0 + minimatch: + specifier: ^3.1.2 + version: 3.1.2 javascript/selenium-webdriver: dependencies: diff --git a/scripts/BUILD.bazel b/scripts/BUILD.bazel index 6e36656fd43c0..fe7299a351ef0 100644 --- a/scripts/BUILD.bazel +++ b/scripts/BUILD.bazel @@ -1,4 +1,5 @@ load("@py_dev_requirements//:requirements.bzl", "requirement") +load("@rules_java//java:java_binary.bzl", "java_binary") load("@rules_python//python:defs.bzl", "py_binary") load("//java:defs.bzl", "artifact") diff --git a/third_party/bazel/BUILD.bazel b/third_party/bazel/BUILD.bazel new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/third_party/bazel/contrib_rules_jvm_select_fix.patch b/third_party/bazel/contrib_rules_jvm_select_fix.patch new file mode 100644 index 0000000000000..d042836deb41f --- /dev/null +++ b/third_party/bazel/contrib_rules_jvm_select_fix.patch @@ -0,0 +1,28 @@ +diff --git a/java/private/create_jvm_test_suite.bzl b/java/private/create_jvm_test_suite.bzl +--- a/java/private/create_jvm_test_suite.bzl ++++ b/java/private/create_jvm_test_suite.bzl +@@ -117,8 +117,21 @@ def create_jvm_test_suite( + make_var_fields = (kwargs.get("jvm_flags", []) + + kwargs.get("javacopts", []) + + kwargs.get("args", []) + + kwargs.get("env", {}).values()) +- make_var_deps = collections.uniq([dep for dep in deps for flag in make_var_fields if dep in flag]) +- make_var_runtime_deps = collections.uniq([dep for dep in runtime_deps for flag in make_var_fields if dep in flag]) ++ ++ # Handle select() in deps or make_var_fields - select is not iterable, so skip make_var extraction ++ # When any of deps, runtime_deps, or make_var_fields is a select(), we cannot iterate over them ++ # at loading time, so we skip the make_var optimization entirely. ++ can_extract_make_vars = ( ++ type(deps) == "list" and ++ type(runtime_deps) == "list" and ++ type(make_var_fields) == "list" ++ ) ++ if can_extract_make_vars: ++ make_var_deps = collections.uniq([dep for dep in deps for flag in make_var_fields if dep in flag]) ++ make_var_runtime_deps = collections.uniq([dep for dep in runtime_deps for flag in make_var_fields if dep in flag]) ++ else: ++ make_var_deps = [] ++ make_var_runtime_deps = [] + + for src in test_srcs: + suffix = src.rfind(".") diff --git a/third_party/bazel/protobuf_toolchain_resolution.patch b/third_party/bazel/protobuf_toolchain_resolution.patch new file mode 100644 index 0000000000000..6105e88bce010 --- /dev/null +++ b/third_party/bazel/protobuf_toolchain_resolution.patch @@ -0,0 +1,91 @@ +diff --git a/protobuf.bzl b/protobuf.bzl +index 283c85850..ad91faba6 100644 +--- a/protobuf.bzl ++++ b/protobuf.bzl +@@ -1,7 +1,9 @@ + load("@bazel_skylib//lib:versions.bzl", "versions") + load("@rules_cc//cc:defs.bzl", "objc_library") + load("@rules_python//python:defs.bzl", "py_library") ++load("//bazel/common:proto_common.bzl", "proto_common") + load("//bazel/common:proto_info.bzl", "ProtoInfo") ++load("//bazel/private:toolchain_helpers.bzl", "toolchains") + + def _GetPath(ctx, path): + if ctx.label.workspace_root: +@@ -71,6 +73,26 @@ def _CsharpOuts(srcs): + for src in srcs + ] + ++_PROTOC_ATTRS = toolchains.if_legacy_toolchain({ ++ "_proto_compiler": attr.label( ++ cfg = "exec", ++ executable = True, ++ allow_files = True, ++ default = configuration_field("proto", "proto_compiler"), ++ ), ++}) ++_PROTOC_FRAGMENTS = ["proto"] ++_PROTOC_TOOLCHAINS = toolchains.use_toolchain(toolchains.PROTO_TOOLCHAIN) ++ ++def _protoc_files_to_run(ctx): ++ if proto_common.INCOMPATIBLE_ENABLE_PROTO_TOOLCHAIN_RESOLUTION: ++ toolchain = ctx.toolchains[toolchains.PROTO_TOOLCHAIN] ++ if not toolchain: ++ fail("Protocol compiler toolchain could not be resolved.") ++ return toolchain.proto.proto_compiler ++ else: ++ return ctx.attr._proto_compiler[DefaultInfo].files_to_run ++ + ProtoGenInfo = provider( + fields = ["srcs", "import_flags", "deps"], + ) +@@ -310,7 +332,7 @@ def _internal_gen_well_known_protos_java_impl(ctx): + args.add_all([src.path[offset:] for src in dep.direct_sources]) + + ctx.actions.run( +- executable = ctx.executable._protoc, ++ executable = _protoc_files_to_run(ctx), + inputs = descriptors, + outputs = [srcjar], + arguments = [args], +@@ -334,12 +356,9 @@ internal_gen_well_known_protos_java = rule( + "javalite": attr.bool( + default = False, + ), +- "_protoc": attr.label( +- executable = True, +- cfg = "exec", +- default = "//:protoc", +- ), +- }, ++ } | _PROTOC_ATTRS, ++ fragments = _PROTOC_FRAGMENTS, ++ toolchains = _PROTOC_TOOLCHAINS, + ) + + def _internal_gen_kt_protos(ctx): +@@ -373,7 +392,7 @@ def _internal_gen_kt_protos(ctx): + args.add_all([src.path[offset:] for src in dep.direct_sources]) + + ctx.actions.run( +- executable = ctx.executable._protoc, ++ executable = _protoc_files_to_run(ctx), + inputs = descriptors, + outputs = [srcjar], + arguments = [args], +@@ -397,12 +416,9 @@ internal_gen_kt_protos = rule( + "lite": attr.bool( + default = False, + ), +- "_protoc": attr.label( +- executable = True, +- cfg = "exec", +- default = "//:protoc", +- ), +- }, ++ } | _PROTOC_ATTRS, ++ fragments = _PROTOC_FRAGMENTS, ++ toolchains = _PROTOC_TOOLCHAINS, + ) + + def internal_objc_proto_library( diff --git a/java/rules_jvm_external_javadoc.patch b/third_party/bazel/rules_jvm_external_javadoc.patch similarity index 100% rename from java/rules_jvm_external_javadoc.patch rename to third_party/bazel/rules_jvm_external_javadoc.patch