Make Stardoc work with --incompatible_enable_proto_toolchain_resolution. (#237)
diff --git a/BUILD b/BUILD
index ad16037..836e7de 100644
--- a/BUILD
+++ b/BUILD
@@ -44,7 +44,6 @@
"CONTRIBUTORS",
"LICENSE",
"maven_install.json",
- "rules_jvm_external.patch",
"//src/main/java/com/google/devtools/build/stardoc/renderer:srcs",
"//src/main/java/com/google/devtools/build/stardoc/rendering:srcs",
"//stardoc:distro_srcs",
diff --git a/MODULE.bazel b/MODULE.bazel
index ef4ebed..772f583 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -7,8 +7,10 @@
bazel_dep(name = "bazel_skylib", version = "1.6.1")
bazel_dep(name = "rules_java", version = "7.6.1")
-bazel_dep(name = "rules_jvm_external", version = "5.2")
+bazel_dep(name = "rules_jvm_external", version = "6.1")
bazel_dep(name = "rules_license", version = "0.0.7")
+bazel_dep(name = "rules_proto", version = "6.0.2")
+bazel_dep(name = "toolchains_protoc", version = "0.3.1")
# Maven artifacts required by Stardoc; keep consistent with deps.bzl
STARDOC_MAVEN_ARTIFACTS = [
@@ -17,6 +19,7 @@
"com.google.guava:guava:31.1-jre",
"com.google.truth:truth:1.1.3",
"junit:junit:4.13.2",
+ "com.google.protobuf:protobuf-java:4.27.1",
]
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
@@ -36,3 +39,5 @@
#
# Dev-only and test-only dependencies
bazel_dep(name = "rules_pkg", version = "0.10.1", dev_dependency = True)
+
+register_toolchains("//toolchains:all")
diff --git a/WORKSPACE b/WORKSPACE
index bc2138f..d7e67ac 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -70,11 +70,32 @@
# Needed as a transitive dependency of @io_bazel
http_archive(
name = "rules_proto",
- sha256 = "dc3fb206a2cb3441b485eb1e423165b231235a1ea9b031b4433cf7bc1fa460dd",
- strip_prefix = "rules_proto-5.3.0-21.7",
- urls = [
- "https://github.com/bazelbuild/rules_proto/archive/refs/tags/5.3.0-21.7.tar.gz",
- ],
+ sha256 = "6fb6767d1bef535310547e03247f7518b03487740c11b6c6adb7952033fe1295",
+ strip_prefix = "rules_proto-6.0.2",
+ url = "https://github.com/bazelbuild/rules_proto/releases/download/6.0.2/rules_proto-6.0.2.tar.gz",
+)
+
+load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
+
+rules_proto_dependencies()
+
+load("@rules_proto//proto:setup.bzl", "rules_proto_setup")
+
+rules_proto_setup()
+
+load("@rules_proto//proto:toolchains.bzl", "rules_proto_toolchains")
+
+rules_proto_toolchains()
+
+load("@bazel_features//:deps.bzl", "bazel_features_deps")
+
+bazel_features_deps()
+
+load("@toolchains_protoc//protoc:toolchain.bzl", "protoc_toolchains")
+
+protoc_toolchains(
+ name = "protoc_toolchains",
+ version = "v27.1",
)
# Needed only for testing stardoc across local-repository bounds.
@@ -88,8 +109,4 @@
path = "test/testdata/local_repository_test",
)
-load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")
-
-rules_proto_dependencies()
-
-rules_proto_toolchains()
+register_toolchains("//toolchains:all")
diff --git a/deps.bzl b/deps.bzl
index 65bf7b9..35574b7 100644
--- a/deps.bzl
+++ b/deps.bzl
@@ -24,6 +24,7 @@
"com.google.guava:guava:31.1-jre",
"com.google.truth:truth:1.1.3",
"junit:junit:4.13.2",
+ "com.google.protobuf:protobuf-java:4.27.1",
]
def stardoc_external_deps():
diff --git a/maven_install.json b/maven_install.json
index d5755ea..a3a69ae 100644
--- a/maven_install.json
+++ b/maven_install.json
@@ -1,7 +1,7 @@
{
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
- "__INPUT_ARTIFACTS_HASH": -1307148388,
- "__RESOLVED_ARTIFACTS_HASH": 1764595048,
+ "__INPUT_ARTIFACTS_HASH": 1794655755,
+ "__RESOLVED_ARTIFACTS_HASH": 2130017368,
"artifacts": {
"com.beust:jcommander": {
"shasums": {
@@ -57,6 +57,12 @@
},
"version": "1.3"
},
+ "com.google.protobuf:protobuf-java": {
+ "shasums": {
+ "jar": "798c79f6c9fc6859cc76aa5474228aad250821438e1004dad34880d53aa745f9"
+ },
+ "version": "4.27.1"
+ },
"com.google.truth:truth": {
"shasums": {
"jar": "fc0b67782289a2aabfddfdf99eff1dcd5edc890d49143fcd489214b107b8f4f3"
@@ -166,6 +172,10 @@
"com.google.j2objc:j2objc-annotations": [
"com.google.j2objc.annotations"
],
+ "com.google.protobuf:protobuf-java": [
+ "com.google.protobuf",
+ "com.google.protobuf.compiler"
+ ],
"com.google.truth:truth": [
"com.google.common.truth"
],
@@ -255,6 +265,7 @@
"com.google.guava:guava",
"com.google.guava:listenablefuture",
"com.google.j2objc:j2objc-annotations",
+ "com.google.protobuf:protobuf-java",
"com.google.truth:truth",
"junit:junit",
"org.checkerframework:checker-qual",
diff --git a/rules_jvm_external.patch b/rules_jvm_external.patch
deleted file mode 100644
index 8344889..0000000
--- a/rules_jvm_external.patch
+++ /dev/null
@@ -1,142 +0,0 @@
-commit 569fe4da2530d7b1356265d7cc62ca74f93ec7e5
-Author: Yun Peng <pcloudy@google.com>
-Date: Thu Jan 5 16:37:29 2023 +0800
-
- Add targets to make it easier to vendor the `@maven` repository
-
- This change is required to support Bazel's offline bootstrap build.
- More context in https://github.com/bazelbuild/bazel/pull/17112
-
- Instead of checking in jar files in Bazel's source tree, Bazel wants to use rules_jvm_external
- to fetch jars dependencies. However, to support Bazel's bootstrap build,
- we need to patch rules_jvm_external for vendoring the @maven repository.
-
- - Generate a BUILD.vendor file to be used in the vendored `@maven` repository.
- Added a jvm_import and a filegroup rule for each downloaded jar artifact.
- The filegroup rule is required by the bootstrap Java toolchain used in Bazel's
- bootstrap build. The bootstrap Java toolchain cannot depend on a jvm_import target.
- Because the jvm_import rule depends on a java_binary tool "AddJarManifestEntry",
- which requires a Java toolchain. Depending on the jar via a filegroup rule helps
- avoid this cyclic dependency.
- - Added a filegroup rule to collect all sources needed for vendoring `@maven`,
- including BUILD.vendor, WORKSPACE and jar files.
-
-diff --git a/coursier.bzl b/coursier.bzl
-index a71507a..90b4cb0 100644
---- a/coursier.bzl
-+++ b/coursier.bzl
-@@ -49,6 +49,12 @@ bzl_library(
- )
- """
-
-+_BUILD_VENDOR = """
-+load("@rules_jvm_external//private/rules:jvm_import.bzl", "jvm_import")
-+
-+{vendor_targets}
-+"""
-+
- DEFAULT_AAR_IMPORT_LABEL = "@build_bazel_rules_android//android:rules.bzl"
-
- _AAR_IMPORT_STATEMENT = """\
-@@ -473,7 +479,7 @@ def _pinned_coursier_fetch_impl(repository_ctx):
- )
-
- repository_ctx.report_progress("Generating BUILD targets..")
-- (generated_imports, jar_versionless_target_labels) = parser.generate_imports(
-+ (generated_imports, jar_versionless_target_labels, generated_vendor_targets) = parser.generate_imports(
- repository_ctx = repository_ctx,
- dependencies = importer.get_artifacts(maven_install_json_content),
- explicit_artifacts = {
-@@ -512,6 +518,14 @@ def _pinned_coursier_fetch_impl(repository_ctx):
- executable = False,
- )
-
-+ repository_ctx.file(
-+ "BUILD.vendor",
-+ (_BUILD_VENDOR).format(
-+ vendor_targets = generated_vendor_targets,
-+ ),
-+ executable = False,
-+ )
-+
- _add_outdated_files(repository_ctx, artifacts, repositories)
-
- # Generate a compatibility layer of external repositories for all jar artifacts.
-@@ -1036,7 +1050,7 @@ def _coursier_fetch_impl(repository_ctx):
- )
-
- repository_ctx.report_progress("Generating BUILD targets..")
-- (generated_imports, jar_versionless_target_labels) = parser.generate_imports(
-+ (generated_imports, jar_versionless_target_labels, _) = parser.generate_imports(
- repository_ctx = repository_ctx,
- dependencies = v2_lock_file.get_artifacts(lock_file_contents),
- explicit_artifacts = {
-diff --git a/private/dependency_tree_parser.bzl b/private/dependency_tree_parser.bzl
-index 8eea757..0a53528 100644
---- a/private/dependency_tree_parser.bzl
-+++ b/private/dependency_tree_parser.bzl
-@@ -107,6 +107,9 @@ def _generate_imports(repository_ctx, dependencies, explicit_artifacts, neverlin
- for jetify_include_artifact in repository_ctx.attr.jetify_include_list:
- jetify_include_dict[jetify_include_artifact] = None
-
-+ artifact_paths = []
-+ vendor_targets = []
-+
- # Iterate through the list of artifacts, and generate the target declaration strings.
- for artifact in dependencies:
- artifact_path = artifact["file"]
-@@ -347,6 +350,7 @@ def _generate_imports(repository_ctx, dependencies, explicit_artifacts, neverlin
- target_import_string.append(")")
-
- all_imports.append("\n".join(target_import_string))
-+ vendor_targets.append("\n".join(target_import_string))
-
- # 10. Create a versionless alias target
- #
-@@ -357,6 +361,9 @@ def _generate_imports(repository_ctx, dependencies, explicit_artifacts, neverlin
- versioned_target_alias_label = escape(strip_packaging_and_classifier(artifact["coordinates"]))
- all_imports.append("alias(\n\tname = \"%s\",\n\tactual = \"%s\",\n%s)" %
- (versioned_target_alias_label, target_label, alias_visibility))
-+ file_group_target_string = "filegroup(\n\tname = \"%s\",\n\tsrcs = [\"%s\"],\n%s)" % (target_label + "_file", artifact_path, alias_visibility)
-+ all_imports.append(file_group_target_string)
-+ vendor_targets.append(file_group_target_string)
-
- # 11. If using maven_install.json, use a genrule to copy the file from the http_file
- # repository into this repository.
-@@ -370,6 +377,9 @@ def _generate_imports(repository_ctx, dependencies, explicit_artifacts, neverlin
- if repository_ctx.attr.maven_install_json:
- all_imports.append(_genrule_copy_artifact_from_http_file(artifact, default_visibilities))
-
-+ # 12. collect the artifact_path for the filegroup rule collecting all necessary sources for vendoring
-+ artifact_paths.append("\"%s\"" % artifact_path)
-+
- else: # artifact_path == None:
- # Special case for certain artifacts that only come with a POM file.
- # Such artifacts "aggregate" their dependencies, so they don't have
-@@ -421,7 +431,10 @@ def _generate_imports(repository_ctx, dependencies, explicit_artifacts, neverlin
- all_imports.append("alias(\n\tname = \"%s\",\n\tactual = \"%s\",\n%s)" %
- (versioned_target_alias_label, target_label, alias_visibility))
-
-- return ("\n".join(all_imports), jar_versionless_target_labels)
-+ all_imports.append("filegroup(\n\tname = \"srcs\",\n\tsrcs = [\n\t\t%s,\n\t],\n\tvisibility = [\"//visibility:public\"],\n)" %
-+ (",\n\t\t".join(["\"BUILD.vendor\"", "\"defs.bzl\"", "\"WORKSPACE\""] + artifact_paths)))
-+
-+ return ("\n".join(all_imports), jar_versionless_target_labels, "\n".join(vendor_targets))
-
- parser = struct(
- generate_imports = _generate_imports,
-diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/BUILD b/private/tools/java/com/github/bazelbuild/rules_jvm_external/BUILD
-index 63ce118..84e0417 100644
---- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/BUILD
-+++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/BUILD
-@@ -1,10 +1,6 @@
- java_library(
- name = "rules_jvm_external",
- srcs = glob(["*.java"]),
-- javacopts = [
-- "--release",
-- "8",
-- ],
- visibility = [
- "//private/tools/java:__subpackages__",
- "//tests/com:__subpackages__",
diff --git a/setup.bzl b/setup.bzl
index 2b14744..985c2b3 100644
--- a/setup.bzl
+++ b/setup.bzl
@@ -50,13 +50,11 @@
sha256 = "f8ae9ed3887df02f40de9f4f7ac3873e6dd7a471f9cddf63952538b94b59aeb3",
)
- RULES_JVM_EXTERNAL_TAG = "5.2"
- RULES_JVM_EXTERNAL_SHA = "f86fd42a809e1871ca0aabe89db0d440451219c3ce46c58da240c7dcdc00125f"
+ RULES_JVM_EXTERNAL_TAG = "6.1"
+ RULES_JVM_EXTERNAL_SHA = "08ea921df02ffe9924123b0686dc04fd0ff875710bfadb7ad42badb931b0fd50"
maybe(
http_archive,
name = "rules_jvm_external",
- patch_args = ["-p1"],
- patches = ["@io_bazel_stardoc//:rules_jvm_external.patch"],
strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG,
sha256 = RULES_JVM_EXTERNAL_SHA,
url = "https://github.com/bazelbuild/rules_jvm_external/releases/download/%s/rules_jvm_external-%s.tar.gz" % (RULES_JVM_EXTERNAL_TAG, RULES_JVM_EXTERNAL_TAG),
@@ -72,16 +70,22 @@
sha256 = "4531deccb913639c30e5c7512a054d5d875698daeb75d8cf90f284375fe7c360",
)
+ maybe(
+ http_archive,
+ name = "toolchains_protoc",
+ sha256 = "3898f8e621ca5b3c7b94300c5ae19075d5bb28349d6e6f407490a466ba1e2544",
+ strip_prefix = "toolchains_protoc-0.3.1",
+ url = "https://github.com/aspect-build/toolchains_protoc/releases/download/v0.3.1/toolchains_protoc-v0.3.1.tar.gz",
+ )
+
# Transitive dep of com_google_protobuf. Unfortunately, protobuf_deps()
# pulls in a dep that's too old.
maybe(
http_archive,
name = "rules_proto",
- sha256 = "dc3fb206a2cb3441b485eb1e423165b231235a1ea9b031b4433cf7bc1fa460dd",
- strip_prefix = "rules_proto-5.3.0-21.7",
- urls = [
- "https://github.com/bazelbuild/rules_proto/archive/refs/tags/5.3.0-21.7.tar.gz",
- ],
+ sha256 = "6fb6767d1bef535310547e03247f7518b03487740c11b6c6adb7952033fe1295",
+ strip_prefix = "rules_proto-6.0.2",
+ url = "https://github.com/bazelbuild/rules_proto/releases/download/6.0.2/rules_proto-6.0.2.tar.gz",
)
# Transitive dep of com_google_protobuf. Unfortunately, protobuf_deps()
diff --git a/toolchains/BUILD.bazel b/toolchains/BUILD.bazel
new file mode 100644
index 0000000..3e02065
--- /dev/null
+++ b/toolchains/BUILD.bazel
@@ -0,0 +1,12 @@
+proto_lang_toolchain(
+ name = "protoc_java_toolchain",
+ command_line = "--java_out=%s",
+ progress_message = "Generating Java proto_library %{label}",
+ runtime = "@stardoc_maven//:com_google_protobuf_protobuf_java",
+)
+
+toolchain(
+ name = "protoc_java_toolchain.registration",
+ toolchain = ":protoc_java_toolchain",
+ toolchain_type = "@rules_java//java/proto:toolchain_type",
+)