-
-
Notifications
You must be signed in to change notification settings - Fork 286
Fix last_green w/bazel_worker_api, rules_java 8.14 #1756
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Fix last_green w/bazel_worker_api, rules_java 8.14 #1756
Conversation
Uses the `bazel_worker_{api,java}` modules and a legacy `WORKSPACE` shim to replace `@bazel_tools//src/main/protobuf:worker_protocol_java_proto`. This, and bumping `rules_java` to 8.14.0, fixes breakages in the latest `last_green` Bazel at commit 00b48b27aa216befc419e540919a1f1df4cda337. Also: - Removes the `--incompatible_autoload_externally` flag from `.bazelrc`. - Fixes `_get_compiler_srcjar` to return empty `compiler_srcjar_objects` instead of returning a valid object. `test_compiler_srcjar_error 2.12.11` from `dt_patches/dt_patch_test.sh` caught this under `WORKSPACE`. Added `test_fail_if_compiler_srcjar_object_is_empty` to `test/shell/test_compiler_sources_integrity.sh` to catch the specific problem sooner. - Fixed regex in `target_file_location` from `test_helper.sh` to work with Bazel 6.5.0, and fixed unbound variable in `fail` message. - Added logic to `teardown_suite` in `test_bzlmod_macros.sh` to avoid unbound variable breakage when running under Bazel 6.5.0. - Added logic to skip `test_check_module_bazel_template` under Bazel 6 in `test_version.sh`. - Removed restriction to use `protobuf` v29 or lower with Bazel 6 from `README.md`. - Added `scala_compiler_source.*` to the regular expressions for "canonical reproducible" messages in `dt_patches/dt_patch_test.sh`. This resolved a test breakage when `rules_python` began to emit a "canonical reproducible" message. (Also changed `--expunge` to `--expunge_async`.) --- bazelbuild/bazel#26477, which also landed in the 9.0.0-pre.20250714.1 rolling release, broke the `last_green` build: ``` $ USE_BAZEL_VERSION=9.0.0-pre.20250714.1 bazel test //src/... //test/... ERROR: error loading package '@@bazel_tools//src/main/protobuf': Unable to find package for @@[unknown repo 'grpc-java' requested from @@bazel_tools]//:java_grpc_library.bzl: The repository '@@[unknown repo 'grpc-java' requested from @@bazel_tools]' could not be resolved: No repository visible as '@grpc-java' from repository '@@bazel_tools'. ``` The failing target, and several others, depended upon `@bazel_tools//src/main/protobuf:worker_protocol_java_proto`. Nothing else depends on any other target from that package. So upon @Wyverald's advice, I attempted to use the `bazel_worker_java` module to replace this specific dependency: - bazelbuild/bazel#26579 (comment) Using just `bazel_worker_java` 0.0.5 at first produced this breakage: ```txt $ USE_BAZEL_VERSION=last_green bazel build //src/... //test/... ERROR: .../external/bazel_worker_api+/BUILD.bazel:3:1: name 'proto_library' is not defined ``` This is because that version of `bazel_worker_java` still depends upon `bazel_worker_api` 0.0.1, which didn't load `proto_library` from `@com_google_protobuf`. Adding `bazel_worker_api` 0.0.5 directly to `MODULE.bazel` fixed this. The next failure was due to `rules_scala` overriding `rules_java` to be 8.12.0, whereas `last_green` now requires 8.14.0: ```txt $ USE_BAZEL_VERSION=last_green bazel build //src/... //test/... ERROR: src/java/io/bazel/rulesscala/jar/BUILD:3:13: in java_library rule //src/java/io/bazel/rulesscala/jar:jar: Traceback (most recent call last): File ".../external/rules_java+/java/bazel/rules/bazel_java_library.bzl", line 26, column 35, in _proxy return bazel_java_library_rule( File ".../external/rules_java+/java/common/rules/impl/bazel_java_library_impl.bzl", line 68, column 43, in bazel_java_library_rule target, base_info = basic_java_library( File ".../external/rules_java+/java/common/rules/impl/basic_java_library_impl.bzl", line 127, column 49, in basic_java_library java_info, compilation_info = compile_action( File ".../external/rules_java+/java/common/rules/impl/compile_action.bzl", line 139, column 46, in compile_action java_info = _compile_private_for_builtins( File ".../external/rules_java+/java/private/java_common_internal.bzl", line 217, column 68, in compile get_internal_java_common().create_header_compilation_action( Error in create_header_compilation_action: create_header_compilation_action() missing 2 required positional arguments: header_compilation_jar, header_compilation_direct_deps ERROR: src/java/io/bazel/rulesscala/jar/BUILD:3:13: Analysis of target '//src/java/io/bazel/rulesscala/jar:jar' failed ``` Bumping `rules_java` to 8.14.0 in the `single_version_override` fixed that. Finally, since there's no legacy `WORKSPACE` API in bazelbuild/bazel-worker-api, I had to roll my own new `workspace_compat()` macro. This macro creates `@bazel_worker_{api,java}` repos with aliases to targets in `@bazel-worker-api`. Regarding `--incompatible_autoload_externally`, I'd added it in bazel-contrib#1748 when fixing problems with `WORKSPACE` builds under Bazel 8.2.1. However, it's not really necessary, so I removed it.
@simuons @liucijus I've included some small changes from #1755 in this pull request, including the Also, now that we no longer depend on I tested this under the legacy BTW, the last_green CI job for this pull request has passed. @Wyverald Thanks for the tip in bazelbuild/bazel#26579 (comment) for bazelbuild/bazel-worker-api and the bazel_worker_java module. A couple of notes:
|
Adds an extra layer of security that we won't clobber any other repos of the same name.
"https://mirror.bazel.build/github.com/bazelbuild/bazel-worker-api/releases/download/v0.0.5/bazel-worker-api-v0.0.5.tar.gz", | ||
"https://github.com/bazelbuild/bazel-worker-api/releases/download/v0.0.5/bazel-worker-api-v0.0.5.tar.gz", | ||
], | ||
strip_prefix = "bazel-worker-api-0.0.5", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
optional: instead of using _alias_repo
, you could just specify this http_archive
twice, once with name bazel_worker_api
and strip_prefix bazel-worker-api-0.0.5/proto
, and once with name bazel_worker_java
and strip_prefix bazel-worker-api-0.0.5/java
. That's how it works in Bzlmod anyway.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's much better, thanks! Done in 43addd6.
Thanks! I just pushed As for WORKSPACE, since the solution you have is a partial fix anyway, I think we should just let it be. Not sure the full fix is worth it at this point. |
Drops `bazel_worker_api` from `MODULE.bazel` now that `bazel_worker_java` 0.0.6 depends on `bazel_worker_api` 0.0.6. Incorporates the `http_archive` and `strip_prefix` suggestion from @Wyverald in bazel-contrib#1756.
Thanks for the |
Always run `./test_lint.sh` and `bazel run //tools:lint_fix` first!
Description
Uses the
bazel_worker_{api,java}
modules and a legacyWORKSPACE
shim to replace@bazel_tools//src/main/protobuf:worker_protocol_java_proto
. This, and bumpingrules_java
to 8.14.0, fixes breakages in the latestlast_green
Bazel at commit 00b48b27aa216befc419e540919a1f1df4cda337.Also:
Removes the
--incompatible_autoload_externally
flag from.bazelrc
.Fixes
_get_compiler_srcjar
to return emptycompiler_srcjar_objects
instead of returning a valid object.test_compiler_srcjar_error 2.12.11
fromdt_patches/dt_patch_test.sh
caught this underWORKSPACE
. Addedtest_fail_if_compiler_srcjar_object_is_empty
totest/shell/test_compiler_sources_integrity.sh
to catch the specific problem sooner.Fixed regex in
target_file_location
fromtest_helper.sh
to work with Bazel 6.5.0, and fixed unbound variable infail
message.Added logic to
teardown_suite
intest_bzlmod_macros.sh
to avoid unbound variable breakage when running under Bazel 6.5.0.Added logic to skip
test_check_module_bazel_template
under Bazel 6 intest_version.sh
.Removed restriction to use
protobuf
v29 or lower with Bazel 6 fromREADME.md
.Added
scala_compiler_source.*
to the regular expressions for "canonical reproducible" messages indt_patches/dt_patch_test.sh
. This resolved a test breakage whenrules_python
began to emit a "canonical reproducible" message. (Also changed--expunge
to--expunge_async
.)Motivation
bazelbuild/bazel#26477, which also landed in the 9.0.0-pre.20250714.1 rolling release, broke the
last_green
build:The failing target, and several others, depended upon
@bazel_tools//src/main/protobuf:worker_protocol_java_proto
. Nothing else depends on any other target from that package. So upon @Wyverald's advice, I attempted to use thebazel_worker_java
module to replace this specific dependency:Using just
bazel_worker_java
0.0.5 at first produced this breakage:$ USE_BAZEL_VERSION=last_green bazel build //src/... //test/... ERROR: .../external/bazel_worker_api+/BUILD.bazel:3:1: name 'proto_library' is not defined
This is because that version of
bazel_worker_java
still depends uponbazel_worker_api
0.0.1, which didn't loadproto_library
from@com_google_protobuf
. Addingbazel_worker_api
0.0.5 directly toMODULE.bazel
fixed this.The next failure was due to
rules_scala
overridingrules_java
to be 8.12.0, whereaslast_green
now requires 8.14.0:$ USE_BAZEL_VERSION=last_green bazel build //src/... //test/... ERROR: src/java/io/bazel/rulesscala/jar/BUILD:3:13: in java_library rule //src/java/io/bazel/rulesscala/jar:jar: Traceback (most recent call last): File ".../external/rules_java+/java/bazel/rules/bazel_java_library.bzl", line 26, column 35, in _proxy return bazel_java_library_rule( File ".../external/rules_java+/java/common/rules/impl/bazel_java_library_impl.bzl", line 68, column 43, in bazel_java_library_rule target, base_info = basic_java_library( File ".../external/rules_java+/java/common/rules/impl/basic_java_library_impl.bzl", line 127, column 49, in basic_java_library java_info, compilation_info = compile_action( File ".../external/rules_java+/java/common/rules/impl/compile_action.bzl", line 139, column 46, in compile_action java_info = _compile_private_for_builtins( File ".../external/rules_java+/java/private/java_common_internal.bzl", line 217, column 68, in compile get_internal_java_common().create_header_compilation_action( Error in create_header_compilation_action: create_header_compilation_action() missing 2 required positional arguments: header_compilation_jar, header_compilation_direct_deps ERROR: src/java/io/bazel/rulesscala/jar/BUILD:3:13: Analysis of target '//src/java/io/bazel/rulesscala/jar:jar' failed
Bumping
rules_java
to 8.14.0 in thesingle_version_override
fixed that.Finally, since there's no legacy
WORKSPACE
API in bazelbuild/bazel-worker-api, I had to roll my own newworkspace_compat()
macro. This macro instantiates@bazel_worker_{api,java}
repos frombazelbuild/bazel-worker-api
by stripping the prefixes for each module.Regarding
--incompatible_autoload_externally
, I'd added it in #1748 when fixing problems withWORKSPACE
builds under Bazel 8.2.1. However, it's not really necessary, so I removed it.