-
-
Notifications
You must be signed in to change notification settings - Fork 289
Update Runfiles usage to fix BCR, bump versions #1761
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
Update Runfiles usage to fix BCR, bump versions #1761
Conversation
Fixes the runfiles problems with Windows builds for Bazel 8 and later seen in bazelbuild/bazel-central-registry#5490. Bumps a number of dependencies, and bumps the `rules_scala` version in `MODULE.bazel` from `7.1.0` to `7.1.1`. Dependency version bumps include: - Go: 1.24.5 => 1.25.0 - `golang.org/x/tools`: v0.35.0 => v0.36.0 - `jline`: 3.30.4 => 3.30.5 - `protobuf-java`: 4.31.1 => 4.32.0 - `protobuf`: v31.1 => v32.0 - `rules_java`: 8.15.0 => 8.15.1 - `rules_python`: 1.5.2 => 1.5.3 Also: - Restores `examples/crossbuild/protobuf.patch` to a symlink, undoing the change from bazel-contrib#1760. - Fixes precompiled Windows protoc selection on ARM64 in `protoc/private/protoc_toolchains.bzl`. - Removes `RULES_SCALA_MAIN_WS_NAME` from the ScalaTest runner implementation. - Removes `rules_jvm_external` from `scala/latest_deps.bzl`. --- bazelbuild/continuous-integration#2350 resolved the Windows symlink problem, fixing the bazelbuild/bazel-central-registry#5490 Bazel 7 Windows build. This enables the restoration of the original `examples/crossbuild/protobuf.patch` symlink, effectively closing bazelbuild/bazel-central-registry#5506. The `src/java/io/bazel/rulesscala/exe/LauncherFileWriter.java` changes fix the remaining bazelbuild/bazel-central-registry#5490 breakages. Specifically, adding the `.exe` suffix only when necessary under Bazel 7 fixes the Windows builds for Bazel 8 and later. However, we'll have to close that pull request and push the v7.1.1 tag to begin a new release. The updates to use `@AutoBazelRepository` and `Runfiles.preload()`, etc. are from the `com.google.devtools.build.Runfiles` docstring: - https://github.com/bazelbuild/rules_java/blob/8.15.1/java/runfiles/src/main/java/com/google/devtools/build/runfiles/Runfiles.java#L31-L134 `RULES_SCALA_MAIN_WS_NAME` is no longer necessary given proper runfiles library usage, and technically became obsolete in commit f758956. Instantiating `rules_jvm_external` ourselves is no longer necessary because `protobuf` v32.0 contains protocolbuffers/protobuf#22225, which closed protocolbuffers/protobuf#19129. I've tested this change using my personal Windows 11 ARM64 virtual machine, hence the updates to `protoc/private/protoc_toolchains.bzl`. Previously, the `exec_compatible_with` attribute of the toolchain target contained `@platforms//cpu:x86_64` instead of `@platforms//cpu:aarch64`. This caused `@protobuf//bazel/private:proto_toolchain_type` to resolve to `@protobuf//bazel/private/toolchains:protoc_sources`, triggering recompilation. I also had to use `python.single_version_platform_override` and to fix `@bazel_tools//tools/jdk:proguard_whitelister` on Windows ARM64. This is because the latest `rules_python` 1.5.3 doesn't contain any entries for `aarch64-pc-windows-msvc` in `//python:versions.bzl`. However, it appears such entries are coming in the next `rules_python` release, which will eliminate the need for such a workaround. For that reason, I haven't tried to include it in this change. - https://github.com/bazelbuild/bazel/blob/7.6.1/tools/jdk/BUILD.tools#L133-L138 - https://github.com/bazel-contrib/rules_python/blob/1.5.3/python/versions.bzl - https://github.com/astral-sh/python-build-standalone/releases/ - https://rules-python.readthedocs.io/en/latest/api/rules_python/python/extensions/python.html#python.single_version_platform_override - bazel-contrib/rules_python#2276 - bazel-contrib/rules_python#3062 - bazel-contrib/rules_python#3074 - bazel-contrib/rules_python#3116 A couple of interesting new facts I learned about `protobuf` in the process of producing this change: - v32.0 officially drops support for Bazel 6: https://github.com/protocolbuffers/protobuf/releases/tag/v32.0 protocolbuffers/protobuf@da0077e - v34 isn't dropping MSVC support after all: https://protobuf.dev/news/2025-07-16/ protocolbuffers/protobuf#20085 protocolbuffers/protobuf#20085 (comment)
ab5b542 to
23ca37e
Compare
|
|
||
| if (! launcher.toFile().exists()) { | ||
| // Required by Bazel 7 on Windows. | ||
| launcher = Paths.get(launcher.toString() + ".exe"); |
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.
@meteorcloudy This fixes the runfiles problem that broke the Windows builds for Bazel 8 and later in bazelbuild/bazel-central-registry#5490 after bazelbuild/continuous-integration#2350 fixed the symlink problem. The Bazel 7 build passed because it generates bazel_tools/tools/launcher/launcher.exe. Bazel 8 and later don't include the .exe extension.
Thought this would be good to know in case any other BCR PRs get bitten by this detail.
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.
Thanks, @mbland! Really appreciated for digging into this.
|
@simuons My pleasure! Can you push a new v7.1.1 tag to trigger a new BCR pull request? I don't think there's a way for bazelbuild/bazel-central-registry#5490 to pick up this change. |
Description
Fixes the runfiles problems with Windows builds for Bazel 8 and later seen in bazelbuild/bazel-central-registry#5490. Bumps a number of dependencies, and bumps the
rules_scalaversion inMODULE.bazelfrom7.1.0to7.1.1.Dependency version bumps include:
golang.org/x/tools: v0.35.0 => v0.36.0jline: 3.30.4 => 3.30.5protobuf-java: 4.31.1 => 4.32.0protobuf: v31.1 => v32.0rules_java: 8.15.0 => 8.15.1rules_python: 1.5.2 => 1.5.3Also:
Restores
examples/crossbuild/protobuf.patchto a symlink, undoing the change from Fix BCR presubmit, update rules_python to 1.5.2 #1760.Fixes precompiled Windows protoc selection on ARM64 in
protoc/private/protoc_toolchains.bzl.Removes
RULES_SCALA_MAIN_WS_NAMEfrom the ScalaTest runner implementation.Removes
rules_jvm_externalfromscala/latest_deps.bzl.Motivation
bazelbuild/continuous-integration#2350 resolved the Windows symlink problem, fixing the bazelbuild/bazel-central-registry#5490 Bazel 7 Windows build. This enables the restoration of the original
examples/crossbuild/protobuf.patchsymlink, effectively closing bazelbuild/bazel-central-registry#5506.The
src/java/io/bazel/rulesscala/exe/LauncherFileWriter.javachanges fix the remaining bazelbuild/bazel-central-registry#5490 breakages. Specifically, adding the.exesuffix only when necessary under Bazel 7 fixes the Windows builds for Bazel 8 and later. However, we'll have to close that pull request and push the v7.1.1 tag to begin a new release.The updates to use
@AutoBazelRepositoryandRunfiles.preload(), etc. are from thecom.google.devtools.build.Runfilesdocstring:RULES_SCALA_MAIN_WS_NAMEis no longer necessary given proper runfiles library usage, and technically became obsolete in commit f758956.Instantiating
rules_jvm_externalourselves is no longer necessary becauseprotobufv32.0 contains protocolbuffers/protobuf#22225, which closed protocolbuffers/protobuf#19129.I've tested this change using my personal Windows 11 ARM64 virtual machine, hence the updates to
protoc/private/protoc_toolchains.bzl. Previously, theexec_compatible_withattribute of the toolchain target contained@platforms//cpu:x86_64instead of@platforms//cpu:aarch64. This caused@protobuf//bazel/private:proto_toolchain_typeto resolve to@protobuf//bazel/private/toolchains:protoc_sources, triggering recompilation.I also had to use
python.single_version_platform_overrideand to fix@bazel_tools//tools/jdk:proguard_whitelisteron Windows ARM64. This is because the latestrules_python1.5.3 doesn't contain any entries foraarch64-pc-windows-msvcin//python:versions.bzl.However, it appears such entries are coming in the next
rules_pythonrelease, which will eliminate the need for such a workaround. For that reason, I haven't tried to include it in this change.A couple of interesting new facts I learned about
protobufin the process of producing this change:v32.0 officially drops support for Bazel 6:
https://github.com/protocolbuffers/protobuf/releases/tag/v32.0
protocolbuffers/protobuf@da0077e
v34 isn't dropping MSVC support after all:
https://protobuf.dev/news/2025-07-16/
[CANCELED] Breaking Change: Dropping support for Bazel+MSVC protocolbuffers/protobuf#20085
[CANCELED] Breaking Change: Dropping support for Bazel+MSVC protocolbuffers/protobuf#20085 (comment)