-
-
Notifications
You must be signed in to change notification settings - Fork 286
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
base: master
Are you sure you want to change the base?
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
Path outPath = Paths.get(location); | ||
|
||
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.
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_scala
version inMODULE.bazel
from7.1.0
to7.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.patch
to 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_NAME
from the ScalaTest runner implementation.Removes
rules_jvm_external
fromscala/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.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
andRunfiles.preload()
, etc. are from thecom.google.devtools.build.Runfiles
docstring: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 becauseprotobuf
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, theexec_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 latestrules_python
1.5.3 doesn't contain any entries foraarch64-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.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/
[CANCELED] Breaking Change: Dropping support for Bazel+MSVC protocolbuffers/protobuf#20085
[CANCELED] Breaking Change: Dropping support for Bazel+MSVC protocolbuffers/protobuf#20085 (comment)