chore: add Bazel 8 testing (#39)

* chore: add Bazel 8 testing

* fix: revert rules_uv upgrade

* chore: rules_proto leaked another setup routine for WORKSPACE users

* PYSTAR is now required

* chore: reduce delta

* fix: add a rules_java dependency that protobuf is leaking

* chore: give up on bazel8 without bzlmod

Revert WORKSPACE-only changes

* fix: disable Java toolchain which is causing C++ compiles

* disable python too
diff --git a/.bcr/presubmit.yml b/.bcr/presubmit.yml
index 508ee11..2dcdc32 100644
--- a/.bcr/presubmit.yml
+++ b/.bcr/presubmit.yml
@@ -2,7 +2,7 @@
   module_path: "e2e/smoke"
   matrix:
     platform: ["debian10", "macos", "ubuntu2004", "windows"]
-    bazel: ["7.x"]
+    bazel: ["7.x", "8.x"]
   tasks:
     run_tests:
       name: "Run test module"
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index e21346c..b10c9f9 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -18,13 +18,12 @@
 
 jobs:
   test:
-    uses: bazel-contrib/.github/.github/workflows/bazel.yaml@v6
+    uses: bazel-contrib/.github/.github/workflows/bazel.yaml@646899086d7aaee8e532540480f3e91e00596234 # Dec 11 2024
     with:
       folders: '[".", "e2e/smoke", "examples"]'
       exclude: |
         [
-          {"bazelversion": "6.4.0"},
           {"folder": ".", "bzlmodEnabled": false},
           {"folder": "examples", "bzlmodEnabled": false},
-          {"folder": ".", "os": "windows-latest"}
+          {"bazelversion": "8.0.0", "bzlmodEnabled": false},
         ]
diff --git a/MODULE.bazel b/MODULE.bazel
index 940b2fb..4e9a8cd 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -8,7 +8,7 @@
 
 bazel_dep(name = "bazel_features", version = "1.9.0")
 bazel_dep(name = "bazel_skylib", version = "1.4.1")
-bazel_dep(name = "rules_proto", version = "6.0.0")
+bazel_dep(name = "rules_proto", version = "7.1.0")
 bazel_dep(name = "platforms", version = "0.0.10")
 
 bazel_dep(name = "aspect_bazel_lib", version = "2.8.1", dev_dependency = True)
diff --git a/README.md b/README.md
index 0b9c087..3322fa4 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,4 @@
-# Pre-built protoc toolchain for Bazel 7
-
-> [!CAUTION]
-> Bazel 8 and recent rules_proto changes broke this toolchain.
-> We don't currently have any plans to address this.
-> Instead, we expect someone on the protobuf team to follow through with the
-> "End Goal" promised in https://protobuf.dev/news/2024-10-01/
-> where this functionality is upstreamed.
-> Follow https://github.com/protocolbuffers/protobuf/issues/19558
+# Pre-built protoc toolchain for Bazel
 
 _#NeverCompileProtocAgain_
 
diff --git a/e2e/smoke/.bazelversion b/e2e/smoke/.bazelversion
new file mode 120000
index 0000000..96cf949
--- /dev/null
+++ b/e2e/smoke/.bazelversion
@@ -0,0 +1 @@
+../../.bazelversion
\ No newline at end of file
diff --git a/e2e/smoke/MODULE.bazel b/e2e/smoke/MODULE.bazel
index ae51e6b..72aee7e 100644
--- a/e2e/smoke/MODULE.bazel
+++ b/e2e/smoke/MODULE.bazel
@@ -1,5 +1,5 @@
 bazel_dep(name = "toolchains_protoc", version = "0.0.0")
-bazel_dep(name = "rules_proto", version = "6.0.0-rc2")
+bazel_dep(name = "rules_proto", version = "7.1.0")
 
 local_path_override(
     module_name = "toolchains_protoc",
diff --git a/examples/.bazelrc b/examples/.bazelrc
index 7e8772b..06d1d1b 100644
--- a/examples/.bazelrc
+++ b/examples/.bazelrc
@@ -2,8 +2,5 @@
 common --incompatible_enable_proto_toolchain_resolution
 common --@aspect_rules_py//py:interpreter_version=3.9.18
 
-# See https://github.com/bazelbuild/rules_python/issues/1069#issuecomment-1942053014
-common --action_env=RULES_PYTHON_ENABLE_PYSTAR=0
-
 # Force rules_go to disable CGO even though we have a (fake) C++ toolchain registered.
 common --host_platform=//tools:no_cgo_host_platform
diff --git a/examples/.bazelversion b/examples/.bazelversion
deleted file mode 100644
index 1502020..0000000
--- a/examples/.bazelversion
+++ /dev/null
@@ -1 +0,0 @@
-7.3.0
diff --git a/examples/.bazelversion b/examples/.bazelversion
new file mode 120000
index 0000000..b332604
--- /dev/null
+++ b/examples/.bazelversion
@@ -0,0 +1 @@
+../.bazelversion
\ No newline at end of file
diff --git a/examples/BUILD.bazel b/examples/BUILD.bazel
index ce6cb5f..91da985 100644
--- a/examples/BUILD.bazel
+++ b/examples/BUILD.bazel
@@ -1,6 +1,5 @@
 load("@rules_go//proto:def.bzl", "go_proto_library")
 load("@rules_proto//proto:defs.bzl", "proto_library")
-load("@rules_python//python:proto.bzl", "py_proto_library")
 
 package(default_visibility = ["//visibility:public"])
 
@@ -10,15 +9,21 @@
     deps = ["@com_google_protobuf//:any_proto"],
 )
 
-py_proto_library(
-    name = "foo_py_proto",
-    deps = [":foo_proto"],
-)
+# Broken because rules_python's py_proto_library doesnt produce the same
+# PyInfo symbol that py_test expects.
+# load("@rules_python//python:proto.bzl", "py_proto_library")
+# py_proto_library(
+#     name = "foo_py_proto",
+#     deps = [":foo_proto"],
+# )
 
-java_proto_library(
-    name = "foo_java_proto",
-    deps = [":foo_proto"],
-)
+# Broken by https://github.com/protocolbuffers/protobuf/pull/19679
+# which causes building C++ code from source.
+# TODO: re-enable once protobuf honors the toolchain
+# java_proto_library(
+#     name = "foo_java_proto",
+#     deps = [":foo_proto"],
+# )
 
 go_proto_library(
     name = "foo_go_proto",
diff --git a/examples/MODULE.bazel b/examples/MODULE.bazel
index 90ea055..310bfbf 100644
--- a/examples/MODULE.bazel
+++ b/examples/MODULE.bazel
@@ -1,10 +1,11 @@
 bazel_dep(name = "toolchains_protoc", version = "0.0.0")
-bazel_dep(name = "aspect_bazel_lib", version = "2.8.1")
-bazel_dep(name = "aspect_rules_py", version = "0.7.1")
-bazel_dep(name = "rules_java", version = "7.6.5")
-bazel_dep(name = "rules_proto", version = "6.0.0")
-bazel_dep(name = "rules_python", version = "0.32.2")
-bazel_dep(name = "rules_go", version = "0.48.0")
+bazel_dep(name = "aspect_bazel_lib", version = "2.11.0")
+bazel_dep(name = "aspect_rules_py", version = "1.0.0")
+bazel_dep(name = "platforms", version = "0.0.11")
+bazel_dep(name = "rules_java", version = "8.6.3")
+bazel_dep(name = "rules_proto", version = "7.1.0")
+bazel_dep(name = "rules_python", version = "1.0.0")
+bazel_dep(name = "rules_go", version = "0.52.0")
 bazel_dep(name = "rules_uv", version = "0.10.0")
 
 # This example is in the same repo with the ruleset, so we should point to the code at HEAD
diff --git a/examples/java/BUILD b/examples/java/BUILD
index fe35ad5..e0f5fe8 100644
--- a/examples/java/BUILD
+++ b/examples/java/BUILD
@@ -1,9 +1,10 @@
-java_binary(
-    name = "java",
-    srcs = ["Main.java"],
-    main_class = "Main",
-    deps = [
-        "//:foo_java_proto",
-        "@protobuf-java//jar",
-    ],
-)
+# See comment in examples/BUILD.bazel
+# java_binary(
+#     name = "java",
+#     srcs = ["Main.java"],
+#     main_class = "Main",
+#     deps = [
+#         "//:foo_java_proto",
+#         "@protobuf-java//jar",
+#     ],
+# )
diff --git a/examples/python/BUILD b/examples/python/BUILD
index a55aab0..5f3d3b4 100644
--- a/examples/python/BUILD
+++ b/examples/python/BUILD
@@ -1,5 +1,6 @@
-py_test(
-    name = "message_test",
-    srcs = ["message_test.py"],
-    deps = ["//:foo_py_proto"],
-)
+# See comment in examples/BUILD.bazel
+# py_test(
+#     name = "message_test",
+#     srcs = ["message_test.py"],
+#     deps = ["//:foo_py_proto"],
+# )