Skip to content

Commit 507ba36

Browse files
Support building //java with bzlmod
Create WORKSPACE.bzlmod. Before building with Bzlmod resulted in use of full WORKSPACE. Some repos are still there, but the file should eventually be empty. Add dep to rules_kotlin 1.9.0. This was the first version available on BCR. It pushed upgrade of rules_jvm_external to 6.0 and rules_java to 6.5.2 (keep 6.0.0 on Bazel 6.3.0). Add missing maven and other deps to MODULE.bazel CI changes: Disable Bazel 6.4.0 with bzlmod. rules_jvm_external 6.0 use use_repo_rule, which is not supported by Bazel 6. Add C++ build "Bazel7 with Bzlmod" enabled. Add Java builds with "Bazel 7 with/without Bzlmod". Fixes: protocolbuffers#17176 PiperOrigin-RevId: 652773197
1 parent 81bd799 commit 507ba36

File tree

9 files changed

+131
-30
lines changed

9 files changed

+131
-30
lines changed

.github/workflows/test_bazel.yml

+1-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ jobs:
2222
include:
2323
- runner: ubuntu
2424
bazelversion: '6.4.0'
25-
bzlmod: true
26-
- runner: ubuntu
27-
bazelversion: '6.4.0'
25+
# Not running Bazel 6 with bzlmod, because it doesn't support use_repo_rule in rules_jvm_external
2826
bzlmod: false
2927
runs-on: ${{ matrix.runner }}-latest
3028
name: Examples ${{ matrix.runner }} ${{ matrix.bazelversion }}${{ matrix.bzlmod && ' (bzlmod)' || '' }}

.github/workflows/test_cpp.yml

+12-2
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,22 @@ jobs:
3030
- targets: //pkg/... //src/... @com_google_protobuf_examples//... //third_party/utf8_range/...
3131

3232
# Override cases with custom images
33-
- config: { name: "Bazel7" }
33+
- config: { name: "Bazel7", flags: --noenable_bzlmod }
34+
version: Bazel7
3435
image: "us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:7.1.2-cf84e92285ca133b9c8104ad7b14d70e953cbb8e"
3536
targets: "//src/... //third_party/utf8_range/..."
37+
- config: { name: "Bazel7 with Bzlmod", flags: --enable_bzlmod }
38+
version: Bazel7bzlmod
39+
image: "us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:7.1.2-cf84e92285ca133b9c8104ad7b14d70e953cbb8e"
40+
targets: "//src/... //third_party/utf8_range/..."
41+
# TODO: enable back command_line_interface_unittest after bug is fixed
42+
exclude-targets: "-//src/google/protobuf/compiler:command_line_interface_unittest"
3643
- config: { name: "TCMalloc" }
44+
version: TcMalloc
3745
image: "us-docker.pkg.dev/protobuf-build/containers/test/linux/tcmalloc@sha256:1c5133455481f4d1bb8afa477029604f41f1a3c46cebe4d9958cf1af95b5c87c"
3846
targets: "//src/... //third_party/utf8_range/..."
3947
- config: { name: "aarch64" }
48+
version: TcMalloc
4049
targets: "//src/... //src/google/protobuf/compiler:protoc_aarch64_test //third_party/utf8_range/..."
4150
image: "us-docker.pkg.dev/protobuf-build/containers/test/linux/emulation:6.3.0-aarch64-68e662b3a56b881804dc4e9d45f949791cbc4b94"
4251
name: Linux ${{ matrix.config.name }}
@@ -51,8 +60,9 @@ jobs:
5160
with:
5261
image: ${{ matrix.image }}
5362
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
54-
bazel-cache: cpp_linux/${{ matrix.config.name }}
63+
bazel-cache: cpp_linux/${{ matrix.version }}
5564
bazel: test ${{ matrix.targets }} ${{ matrix.config.flags }}
65+
exclude-targets: ${{ matrix.exclude-targets }}
5666

5767
linux-gcc:
5868
strategy:

.github/workflows/test_java.yml

+11-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ jobs:
3131
version: '17'
3232
image: us-docker.pkg.dev/protobuf-build/containers/test/linux/java:17-1fdbb997433cb22c1e49ef75ad374a8d6bb88702
3333
targets: //java/... //java/internal:java_version //compatibility/...
34+
- name: Bazel7
35+
version: 'bazel7nobzlmod'
36+
image: us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:7.1.2-cf84e92285ca133b9c8104ad7b14d70e953cbb8e
37+
targets: //java/... //java/internal:java_version //compatibility/...
38+
flags: --noenable_bzlmod
39+
- name: Bazel7 with Bzlmod
40+
version: 'bazel7bzlmod'
41+
image: us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:7.1.2-cf84e92285ca133b9c8104ad7b14d70e953cbb8e
42+
targets: //java/... //java/internal:java_version //compatibility/...
43+
flags: --enable_bzlmod
3444
- name: aarch64
3545
version: 'aarch64'
3646
image: us-docker.pkg.dev/protobuf-build/containers/test/linux/emulation:aarch64-63dd26c0c7a808d92673a3e52e848189d4ab0f17
@@ -49,7 +59,7 @@ jobs:
4959
image: ${{ matrix.image }}
5060
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
5161
bazel-cache: java_linux/${{ matrix.version }}
52-
bazel: test ${{ matrix.targets }} --test_env=KOKORO_JAVA_VERSION
62+
bazel: test ${{ matrix.targets }} ${{ matrix.flags }} --test_env=KOKORO_JAVA_VERSION
5363

5464
# TODO restore this test (or a better one) when gRPC has rebuilt with 26.x
5565
# linkage-monitor:

MODULE.bazel

+26-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ bazel_dep(name = "jsoncpp", version = "1.9.5")
1818
bazel_dep(name = "rules_cc", version = "0.0.9")
1919
bazel_dep(name = "rules_fuzzing", version = "0.5.2")
2020
bazel_dep(name = "rules_java", version = "5.3.5")
21-
bazel_dep(name = "rules_jvm_external", version = "5.1")
21+
bazel_dep(name = "rules_jvm_external", version = "6.0")
22+
bazel_dep(name = "rules_kotlin", version = "1.9.0")
2223
bazel_dep(name = "rules_pkg", version = "0.7.0")
2324
bazel_dep(name = "rules_python", version = "0.28.0")
2425
bazel_dep(name = "rules_rust", version = "0.45.1")
@@ -72,5 +73,29 @@ crate.spec(
7273
crate.from_specs()
7374
use_repo(crate, crate_index = "crates")
7475

76+
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
77+
maven.install(
78+
artifacts = [
79+
"com.google.caliper:caliper:1.0-beta-3",
80+
"com.google.code.findbugs:jsr305:3.0.2",
81+
"com.google.code.gson:gson:2.8.9",
82+
"com.google.errorprone:error_prone_annotations:2.5.1",
83+
"com.google.j2objc:j2objc-annotations:2.8",
84+
"com.google.guava:guava:32.0.1-jre",
85+
"com.google.guava:guava-testlib:32.0.1-jre",
86+
"com.google.truth:truth:1.1.2",
87+
"junit:junit:4.13.2",
88+
"org.mockito:mockito-core:4.3.1",
89+
"biz.aQute.bnd:biz.aQute.bndlib:6.4.0",
90+
"info.picocli:picocli:4.6.3",
91+
],
92+
repositories = [
93+
"https://repo1.maven.org/maven2",
94+
"https://repo.maven.apache.org/maven2",
95+
],
96+
)
97+
use_repo(maven, "maven")
98+
7599
# Development dependencies
100+
bazel_dep(name = "googletest", version = "1.14.0", repo_name = "com_google_googletest", dev_dependency = True)
76101
bazel_dep(name = "rules_testing", version = "0.6.0", dev_dependency = True)

WORKSPACE

+2-2
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,11 @@ load("@rules_cc//cc:repositories.bzl", "rules_cc_dependencies")
9999
rules_cc_dependencies()
100100

101101
# For `kt_jvm_library`
102-
load("@io_bazel_rules_kotlin//kotlin:repositories.bzl", "kotlin_repositories")
102+
load("@rules_kotlin//kotlin:repositories.bzl", "kotlin_repositories")
103103

104104
kotlin_repositories()
105105

106-
load("@io_bazel_rules_kotlin//kotlin:core.bzl", "kt_register_toolchains")
106+
load("@rules_kotlin//kotlin:core.bzl", "kt_register_toolchains")
107107

108108
kt_register_toolchains()
109109

WORKSPACE.bzlmod

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# This is a WORKSPACE file used by bzlmod in combination with MODULE.bazel.
2+
# It's used for a gradual migration and it should be empty.
3+
# Don't remove this file. If the file doesn't exist, bzlmod falls back to WORKSPACE file.
4+
5+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
6+
7+
# TODO: either replace rules_ruby with a maintained version on BCR
8+
# or use bzlmod extensions to depend on this specific repo
9+
http_archive(
10+
name = "rules_ruby",
11+
urls = [
12+
"https://github.com/protocolbuffers/rules_ruby/archive/b7f3e9756f3c45527be27bc38840d5a1ba690436.zip"
13+
],
14+
strip_prefix = "rules_ruby-b7f3e9756f3c45527be27bc38840d5a1ba690436",
15+
sha256 = "347927fd8de6132099fcdc58e8f7eab7bde4eb2fd424546b9cd4f1c6f8f8bad8",
16+
)
17+
18+
load("@rules_ruby//ruby:defs.bzl", "ruby_runtime")
19+
20+
ruby_runtime("system_ruby")
21+
22+
register_toolchains("@system_ruby//:toolchain")
23+
24+
# Follwing are just needed to run conformance tests, not really needed to support them via MODULE.bazel
25+
26+
# For testing runtime against old gencode from a previous major version.
27+
http_archive(
28+
name = "com_google_protobuf_v25.0",
29+
strip_prefix = "protobuf-25.0",
30+
url = "https://github.com/protocolbuffers/protobuf/releases/download/v25.0/protobuf-25.0.tar.gz",
31+
)
32+
33+
# Needed as a dependency of @com_google_protobuf_v25.x, which was before
34+
# utf8_range was merged in.
35+
http_archive(
36+
name = "utf8_range",
37+
strip_prefix = "utf8_range-d863bc33e15cba6d873c878dcca9e6fe52b2f8cb",
38+
url = "https://github.com/protocolbuffers/utf8_range/archive/d863bc33e15cba6d873c878dcca9e6fe52b2f8cb.zip",
39+
)
40+

java/kotlin-lite/BUILD.bazel

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library")
21
load("@rules_jvm_external//:kt_defs.bzl", "kt_jvm_export")
2+
load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library")
33
load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
44
load("//:protobuf.bzl", "internal_gen_kt_protos")
55
load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION")
@@ -50,7 +50,7 @@ kt_jvm_library(
5050
kt_jvm_export(
5151
name = "kotlin-lite_mvn",
5252
deploy_env = [
53-
"@com_github_jetbrains_kotlin//:kotlin-stdlib",
53+
"@rules_kotlin//kotlin/compiler:kotlin-stdlib",
5454
"//java/lite",
5555
],
5656
maven_coordinates = "com.google.protobuf:protobuf-kotlin-lite:%s" % PROTOBUF_JAVA_VERSION,
@@ -99,9 +99,9 @@ kt_jvm_library(
9999
"//java/kotlin:only_for_use_in_proto_generated_code_its_generator_and_tests",
100100
"//java/kotlin:shared_runtime",
101101
"//java/lite",
102-
"@com_github_jetbrains_kotlin//:kotlin-test",
103102
"@maven//:com_google_truth_truth",
104103
"@maven//:junit_junit",
104+
"@rules_kotlin//kotlin/compiler:kotlin-test",
105105
],
106106
)
107107

java/kotlin/BUILD.bazel

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library")
21
load("@rules_jvm_external//:kt_defs.bzl", "kt_jvm_export")
2+
load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library")
33
load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
44
load("//:protobuf.bzl", "internal_gen_kt_protos")
55
load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION")
@@ -53,7 +53,7 @@ kt_jvm_library(
5353
kt_jvm_export(
5454
name = "kotlin_mvn",
5555
deploy_env = [
56-
"@com_github_jetbrains_kotlin//:kotlin-stdlib",
56+
"@rules_kotlin//kotlin/compiler:kotlin-stdlib",
5757
"//java/core",
5858
],
5959
maven_coordinates = "com.google.protobuf:protobuf-kotlin:%s" % PROTOBUF_JAVA_VERSION,
@@ -101,9 +101,9 @@ kt_jvm_library(
101101
deps = [
102102
":bytestring_lib",
103103
"//java/lite",
104-
"@com_github_jetbrains_kotlin//:kotlin-test",
105104
"@maven//:com_google_truth_truth",
106105
"@maven//:junit_junit",
106+
"@rules_kotlin//kotlin/compiler:kotlin-test",
107107
],
108108
)
109109

@@ -136,10 +136,10 @@ kt_jvm_library(
136136
":example_extensible_message_java_proto",
137137
":only_for_use_in_proto_generated_code_its_generator_and_tests",
138138
":shared_runtime",
139-
"@com_github_jetbrains_kotlin//:kotlin-test",
140139
"@maven//:com_google_guava_guava_testlib",
141140
"@maven//:com_google_truth_truth",
142141
"@maven//:junit_junit",
142+
"@rules_kotlin//kotlin/compiler:kotlin-test",
143143
],
144144
)
145145

@@ -162,9 +162,9 @@ kt_jvm_library(
162162
":only_for_use_in_proto_generated_code_its_generator_and_tests",
163163
":shared_runtime",
164164
"//java/core",
165-
"@com_github_jetbrains_kotlin//:kotlin-test",
166165
"@maven//:com_google_truth_truth",
167166
"@maven//:junit_junit",
167+
"@rules_kotlin//kotlin/compiler:kotlin-test",
168168
],
169169
)
170170

protobuf_deps.bzl

+31-13
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,27 @@ def protobuf_deps():
9898
)
9999

100100
if not native.existing_rule("rules_java"):
101-
http_archive(
102-
name = "rules_java",
103-
url = "https://github.com/bazelbuild/rules_java/releases/download/6.0.0/rules_java-6.0.0.tar.gz",
104-
sha256 = "469b7f3b580b4fcf8112f4d6d0d5a4ce8e1ad5e21fee67d8e8335d5f8b3debab",
105-
)
101+
bazel_version = native.bazel_version or "999999.999999.999999"
102+
version_parts = bazel_version.split("-")[0].split(".")
103+
if len(version_parts) != 3:
104+
fail("invalid Bazel version '{}': got {} dot-separated segments, want 3".format(bazel_version, len(version_parts)))
105+
major_version_int = int(version_parts[0])
106+
minor_version_int = int(version_parts[1])
107+
108+
if major_version_int < 6 or (major_version_int == 6 and minor_version_int <= 3):
109+
# Works with Bazel 6.3.0, but not higher
110+
http_archive(
111+
name = "rules_java",
112+
url = "https://github.com/bazelbuild/rules_java/releases/download/6.0.0/rules_java-6.0.0.tar.gz",
113+
sha256 = "469b7f3b580b4fcf8112f4d6d0d5a4ce8e1ad5e21fee67d8e8335d5f8b3debab",
114+
)
115+
else:
116+
# Version 6.5.2 works both with Bazel 6.4.0 and Bazel 7
117+
http_archive(
118+
name = "rules_java",
119+
url = "https://github.com/bazelbuild/rules_java/releases/download/6.5.0/rules_java-6.5.0.tar.gz",
120+
sha256 = "160d1ebf33763124766fb35316329d907ca67f733238aa47624a8e3ff3cf2ef4",
121+
)
106122

107123
# TODO: remove after toolchain types are moved to protobuf
108124
if not native.existing_rule("rules_proto"):
@@ -133,11 +149,12 @@ def protobuf_deps():
133149
)
134150

135151
if not native.existing_rule("rules_jvm_external"):
136-
_github_archive(
152+
# Version 6.0 is the lowest that works with rules_kotlin 1.9.0
153+
http_archive(
137154
name = "rules_jvm_external",
138-
repo = "https://github.com/bazelbuild/rules_jvm_external",
139-
commit = "906875b0d5eaaf61a8ca2c9c3835bde6f435d011",
140-
sha256 = "744bd7436f63af7e9872948773b8b106016dc164acb3960b4963f86754532ee7",
155+
strip_prefix = "rules_jvm_external-6.0",
156+
sha256 = "85fd6bad58ac76cc3a27c8e051e4255ff9ccd8c92ba879670d195622e7c0a9b7",
157+
url = "https://github.com/bazelbuild/rules_jvm_external/releases/download/6.0/rules_jvm_external-6.0.tar.gz",
141158
)
142159

143160
if not native.existing_rule("rules_pkg"):
@@ -164,11 +181,12 @@ def protobuf_deps():
164181
url = "https://github.com/bazelbuild/apple_support/releases/download/1.12.0/apple_support.1.12.0.tar.gz",
165182
)
166183

167-
if not native.existing_rule("io_bazel_rules_kotlin"):
184+
if not native.existing_rule("rules_kotlin"):
185+
# Version 1.9.0 is the lowest available on BCR
168186
http_archive(
169-
name = "io_bazel_rules_kotlin",
170-
urls = ["https://github.com/bazelbuild/rules_kotlin/releases/download/v1.8.1/rules_kotlin_release.tgz"],
171-
sha256 = "a630cda9fdb4f56cf2dc20a4bf873765c41cf00e9379e8d59cd07b24730f4fde",
187+
name = "rules_kotlin",
188+
sha256 = "5766f1e599acf551aa56f49dab9ab9108269b03c557496c54acaf41f98e2b8d6",
189+
url = "https://github.com/bazelbuild/rules_kotlin/releases/download/v1.9.0/rules_kotlin-v1.9.0.tar.gz",
172190
)
173191

174192
# Python Downloads

0 commit comments

Comments
 (0)