From 340e8f79fd3ab2c5e7614fb895a73c456afd7ea8 Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Wed, 16 Oct 2024 15:04:44 -0400 Subject: [PATCH 1/2] Bump to rules_proto 6.0.2, separate protobuf 21.7 This is in preparation for adding a `MODULE.bazel` file, which will bring in dependencies that use rules_proto 6.x. This change avoids that warning, and changing it now ensures that `WORKSPACE` builds are still compatible. As explained in the 6.0.0 release notes, rules_proto 6.x no longer depends directly on com_google_protobuf, so we need to import it separately. We're keeping the Protobuf version as 21.7 for now, because Protobuf 22.x requires C++14 at a minimum, which Bazel 6.x doesn't support by default: - https://protobuf.dev/news/v22/#c11-support - https://github.com/protocolbuffers/protobuf/releases/tag/v22.0 The downside is that, unline rules_proto-5.3.0-21.7, we now end up building (and occasionally rebuilding) `protoc` as part of our build. However, this also enables clients to try "Protobuf Toolchainization" to download precompiled `protoc` binaries. - https://github.com/bazelbuild/rules_proto/releases/tag/6.0.0 - https://docs.google.com/document/d/1CE6wJHNfKbUPBr7-mmk_0Yo3a4TaqcTPE0OWNuQkhPs/edit For now, Protobuf Toolchainization requires Bazel 6.5.0 or Bazel >= 7 and the `--incompatible_enable_proto_toolchain_resolution` flag: - https://bazel.build/reference/command-line-reference#flag--incompatible_enable_proto_toolchain_resolution I've got a working draft implementation in a separate branch, though that experiment is certainly not urgent. --- WORKSPACE | 15 +++++++--- dt_patches/test_dt_patches/WORKSPACE | 12 ++++++-- .../test_dt_patches_user_srcjar/WORKSPACE | 12 +++++++- examples/crossbuild/WORKSPACE | 12 +++++++- examples/scala3/WORKSPACE | 12 +++++++- examples/semanticdb/WORKSPACE | 12 +++++++- .../multi_frameworks_toolchain/WORKSPACE | 12 +++++++- .../testing/scalatest_repositories/WORKSPACE | 12 +++++++- .../specs2_junit_repositories/WORKSPACE | 12 +++++++- scala/private/macros/scala_repositories.bzl | 26 +++++++++++++---- test_cross_build/WORKSPACE | 28 ++++++++++++++----- test_version/WORKSPACE.template | 25 ++++++++++++----- .../test/example_external_workspace/WORKSPACE | 12 +++++++- third_party/test/proto/WORKSPACE | 12 +++++++- 14 files changed, 178 insertions(+), 36 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 08eb52097..179f40d00 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -45,15 +45,22 @@ rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") -# Declares @com_google_protobuf//:protoc pointing to released binary -# This should stop building protoc during bazel build -# See https://github.com/bazelbuild/rules_proto/pull/36 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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + load("//scala:scala_cross_version.bzl", "default_maven_server_urls") load("//twitter_scrooge:twitter_scrooge.bzl", "twitter_scrooge") diff --git a/dt_patches/test_dt_patches/WORKSPACE b/dt_patches/test_dt_patches/WORKSPACE index 01ddd7181..717bff609 100644 --- a/dt_patches/test_dt_patches/WORKSPACE +++ b/dt_patches/test_dt_patches/WORKSPACE @@ -76,12 +76,18 @@ rules_scala_toolchain_deps_repositories( register_toolchains(":dt_scala_toolchain") -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +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("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") +load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") -scala_register_toolchains() +protobuf_deps() diff --git a/dt_patches/test_dt_patches_user_srcjar/WORKSPACE b/dt_patches/test_dt_patches_user_srcjar/WORKSPACE index 3428f472f..ff0cb8f27 100644 --- a/dt_patches/test_dt_patches_user_srcjar/WORKSPACE +++ b/dt_patches/test_dt_patches_user_srcjar/WORKSPACE @@ -125,12 +125,22 @@ rules_scala_toolchain_deps_repositories( register_toolchains(":dt_scala_toolchain") -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") scala_register_toolchains() diff --git a/examples/crossbuild/WORKSPACE b/examples/crossbuild/WORKSPACE index ff01165d1..2d0e286a8 100644 --- a/examples/crossbuild/WORKSPACE +++ b/examples/crossbuild/WORKSPACE @@ -48,12 +48,22 @@ rules_scala_setup() rules_scala_toolchain_deps_repositories() -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") scala_register_toolchains() diff --git a/examples/scala3/WORKSPACE b/examples/scala3/WORKSPACE index e85f48fcf..2e02cad76 100644 --- a/examples/scala3/WORKSPACE +++ b/examples/scala3/WORKSPACE @@ -41,12 +41,22 @@ rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") scala_register_toolchains() diff --git a/examples/semanticdb/WORKSPACE b/examples/semanticdb/WORKSPACE index d9324f8c1..456f76248 100644 --- a/examples/semanticdb/WORKSPACE +++ b/examples/semanticdb/WORKSPACE @@ -44,12 +44,22 @@ rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + #Register and use the custom toolchain that has semanticdb enabled register_toolchains( "//:semanticdb_toolchain", diff --git a/examples/testing/multi_frameworks_toolchain/WORKSPACE b/examples/testing/multi_frameworks_toolchain/WORKSPACE index 8070f0a0d..4bec8b471 100644 --- a/examples/testing/multi_frameworks_toolchain/WORKSPACE +++ b/examples/testing/multi_frameworks_toolchain/WORKSPACE @@ -41,12 +41,22 @@ rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") scala_register_toolchains() diff --git a/examples/testing/scalatest_repositories/WORKSPACE b/examples/testing/scalatest_repositories/WORKSPACE index e5a2a0790..29ed0b2f6 100644 --- a/examples/testing/scalatest_repositories/WORKSPACE +++ b/examples/testing/scalatest_repositories/WORKSPACE @@ -41,12 +41,22 @@ rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") scala_register_toolchains() diff --git a/examples/testing/specs2_junit_repositories/WORKSPACE b/examples/testing/specs2_junit_repositories/WORKSPACE index 1a2dfb287..0b86bd604 100644 --- a/examples/testing/specs2_junit_repositories/WORKSPACE +++ b/examples/testing/specs2_junit_repositories/WORKSPACE @@ -41,12 +41,22 @@ rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") scala_register_toolchains() diff --git a/scala/private/macros/scala_repositories.bzl b/scala/private/macros/scala_repositories.bzl index 204fd5629..2b473bd01 100644 --- a/scala/private/macros/scala_repositories.bzl +++ b/scala/private/macros/scala_repositories.bzl @@ -92,6 +92,23 @@ def rules_scala_setup(scala_compiler_srcjar = None): ], ) + # Needed by protobuf-21.7 and Bazel 6.5.0, as later versions require C++14. + if not native.existing_rule("com_google_absl"): + http_archive( + name = "com_google_absl", + sha256 = "91ac87d30cc6d79f9ab974c51874a704de9c2647c40f6932597329a282217ba8", + strip_prefix = "abseil-cpp-20220623.1", + url = "https://github.com/abseil/abseil-cpp/archive/refs/tags/20220623.1.tar.gz", + ) + + if not native.existing_rule("protobuf"): + http_archive( + name = "com_google_protobuf", + sha256 = "75be42bd736f4df6d702a0e4e4d30de9ee40eac024c4b845d17ae4cc831fe4ae", + strip_prefix = "protobuf-21.7", + url = "https://github.com/protocolbuffers/protobuf/archive/refs/tags/v21.7.tar.gz", + ) + if not native.existing_rule("rules_cc"): http_archive( name = "rules_cc", @@ -112,12 +129,9 @@ def rules_scala_setup(scala_compiler_srcjar = None): if not native.existing_rule("rules_proto"): http_archive( name = "rules_proto", - sha256 = "dc3fb206a2cb3441b485eb1e423165b231235a1ea9b031b4433cf7bc1fa460dd", - strip_prefix = "rules_proto-5.3.0-21.7", - urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/refs/tags/5.3.0-21.7.tar.gz", - "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", ) for scala_version in SCALA_VERSIONS: diff --git a/test_cross_build/WORKSPACE b/test_cross_build/WORKSPACE index 01f22da1c..cb3f9d338 100644 --- a/test_cross_build/WORKSPACE +++ b/test_cross_build/WORKSPACE @@ -24,20 +24,34 @@ py_repositories() http_archive( name = "rules_proto", - sha256 = "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da", - strip_prefix = "rules_proto-7e4afce6fe62dbff0a4a03450143146f9f2d7488", - urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.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", +) + +http_archive( + name = "com_google_protobuf", + sha256 = "75be42bd736f4df6d702a0e4e4d30de9ee40eac024c4b845d17ae4cc831fe4ae", + strip_prefix = "protobuf-21.7", + url = "https://github.com/protocolbuffers/protobuf/archive/refs/tags/v21.7.tar.gz", ) -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + local_repository( name = "io_bazel_rules_scala", path = "..", diff --git a/test_version/WORKSPACE.template b/test_version/WORKSPACE.template index 741f349e1..1fe12f4df 100644 --- a/test_version/WORKSPACE.template +++ b/test_version/WORKSPACE.template @@ -24,20 +24,31 @@ py_repositories() http_archive( name = "rules_proto", - sha256 = "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da", - strip_prefix = "rules_proto-7e4afce6fe62dbff0a4a03450143146f9f2d7488", - urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.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_toolchains") +http_archive( + name = "com_google_protobuf", + sha256 = "75be42bd736f4df6d702a0e4e4d30de9ee40eac024c4b845d17ae4cc831fe4ae", + strip_prefix = "protobuf-21.7", + url = "https://github.com/protocolbuffers/protobuf/archive/refs/tags/v21.7.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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + local_repository( name = "io_bazel_rules_scala", path = "../../" diff --git a/third_party/test/example_external_workspace/WORKSPACE b/third_party/test/example_external_workspace/WORKSPACE index f065d65ba..541ab6c49 100644 --- a/third_party/test/example_external_workspace/WORKSPACE +++ b/third_party/test/example_external_workspace/WORKSPACE @@ -41,12 +41,22 @@ rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") scala_register_toolchains() diff --git a/third_party/test/proto/WORKSPACE b/third_party/test/proto/WORKSPACE index e3f4bc4af..736f5bbc5 100644 --- a/third_party/test/proto/WORKSPACE +++ b/third_party/test/proto/WORKSPACE @@ -35,12 +35,22 @@ load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories") scala_repositories() -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") +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("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + load("@io_bazel_rules_scala//scala_proto:scala_proto.bzl", "scala_proto_repositories") scala_proto_repositories() From ee22e926be0fd718617c1683bd932c7e8cff1a3a Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Wed, 16 Oct 2024 21:18:49 -0400 Subject: [PATCH 2/2] Update check for existing com_google_protobuf I'd previously checked for an existing `protobuf` rule, not `com_google_protobuf`. D'oh! --- scala/private/macros/scala_repositories.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scala/private/macros/scala_repositories.bzl b/scala/private/macros/scala_repositories.bzl index 2b473bd01..80ebbdc32 100644 --- a/scala/private/macros/scala_repositories.bzl +++ b/scala/private/macros/scala_repositories.bzl @@ -101,7 +101,7 @@ def rules_scala_setup(scala_compiler_srcjar = None): url = "https://github.com/abseil/abseil-cpp/archive/refs/tags/20220623.1.tar.gz", ) - if not native.existing_rule("protobuf"): + if not native.existing_rule("com_google_protobuf"): http_archive( name = "com_google_protobuf", sha256 = "75be42bd736f4df6d702a0e4e4d30de9ee40eac024c4b845d17ae4cc831fe4ae",