chore: move code out of WORKSPACE.bzlmod and into MODULE (#2380)

The WORKSPACE.bzlmod file will eventually be ignored by later Bazel
versions. To support
setup of the extra repos we rely on it for, create a dev-only module
extension that
invokes the necessary repo rules.

Work towards https://github.com/bazelbuild/rules_python/issues/2378
diff --git a/MODULE.bazel b/MODULE.bazel
index 50f1376..4d2f3c6 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -78,11 +78,27 @@
 bazel_dep(name = "rules_testing", version = "0.6.0", dev_dependency = True)
 bazel_dep(name = "rules_shell", version = "0.2.0", dev_dependency = True)
 bazel_dep(name = "rules_multirun", version = "0.9.0", dev_dependency = True)
+bazel_dep(name = "bazel_ci_rules", version = "1.0.0", dev_dependency = True)
 
 # Extra gazelle plugin deps so that WORKSPACE.bzlmod can continue including it for e2e tests.
 # We use `WORKSPACE.bzlmod` because it is impossible to have dev-only local overrides.
 bazel_dep(name = "rules_go", version = "0.41.0", dev_dependency = True, repo_name = "io_bazel_rules_go")
 bazel_dep(name = "gazelle", version = "0.33.0", dev_dependency = True, repo_name = "bazel_gazelle")
+bazel_dep(name = "rules_python_gazelle_plugin", version = "0", dev_dependency = True)
+
+internal_dev_deps = use_extension(
+    "//python/private:internal_dev_deps.bzl",
+    "internal_dev_deps",
+    dev_dependency = True,
+)
+use_repo(internal_dev_deps, "buildkite_config", "wheel_for_testing")
+
+# Add gazelle plugin so that we can run the gazelle example as an e2e integration
+# test and include the distribution files.
+local_path_override(
+    module_name = "rules_python_gazelle_plugin",
+    path = "gazelle",
+)
 
 dev_python = use_extension(
     "//python/extensions:python.bzl",
diff --git a/WORKSPACE.bzlmod b/WORKSPACE.bzlmod
index ca89afe..e69de29 100644
--- a/WORKSPACE.bzlmod
+++ b/WORKSPACE.bzlmod
@@ -1,62 +0,0 @@
-# Copyright 2024 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# This file contains everything that is needed when using bzlmod
-workspace(name = "rules_python")
-
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file")
-
-# Used for Bazel CI
-http_archive(
-    name = "bazelci_rules",
-    sha256 = "eca21884e6f66a88c358e580fd67a6b148d30ab57b1680f62a96c00f9bc6a07e",
-    strip_prefix = "bazelci_rules-1.0.0",
-    url = "https://github.com/bazelbuild/continuous-integration/releases/download/rules-1.0.0/bazelci_rules-1.0.0.tar.gz",
-)
-
-load("@bazelci_rules//:rbe_repo.bzl", "rbe_preconfig")
-
-# Creates a default toolchain config for RBE.
-# Use this as is if you are using the rbe_ubuntu16_04 container,
-# otherwise refer to RBE docs.
-rbe_preconfig(
-    name = "buildkite_config",
-    toolchain = "ubuntu1804-bazel-java11",
-)
-
-# Add gazelle plugin so that we can run the gazelle example as an e2e integration
-# test and include the distribution files.
-local_repository(
-    name = "rules_python_gazelle_plugin",
-    path = "gazelle",
-)
-
-#####################
-
-# This wheel is purely here to validate the wheel extraction code. It's not
-# intended for anything else.
-http_file(
-    name = "wheel_for_testing",
-    downloaded_file_path = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
-    sha256 = "0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2",
-    urls = [
-        "https://files.pythonhosted.org/packages/50/67/3e966d99a07d60a21a21d7ec016e9e4c2642a86fea251ec68677daf71d4d/numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
-    ],
-)
-
-# rules_proto expects //external:python_headers to point at the python headers.
-bind(
-    name = "python_headers",
-    actual = "//python/cc:current_py_cc_headers",
-)
diff --git a/python/private/internal_dev_deps.bzl b/python/private/internal_dev_deps.bzl
new file mode 100644
index 0000000..2a3b84e
--- /dev/null
+++ b/python/private/internal_dev_deps.bzl
@@ -0,0 +1,44 @@
+# Copyright 2024 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Module extension for internal dev_dependency=True setup."""
+
+load("@bazel_ci_rules//:rbe_repo.bzl", "rbe_preconfig")
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
+
+def _internal_dev_deps_impl(mctx):
+    _ = mctx  # @unused
+
+    # This wheel is purely here to validate the wheel extraction code. It's not
+    # intended for anything else.
+    http_file(
+        name = "wheel_for_testing",
+        downloaded_file_path = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
+        sha256 = "0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2",
+        urls = [
+            "https://files.pythonhosted.org/packages/50/67/3e966d99a07d60a21a21d7ec016e9e4c2642a86fea251ec68677daf71d4d/numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
+        ],
+    )
+
+    # Creates a default toolchain config for RBE.
+    # Use this as is if you are using the rbe_ubuntu16_04 container,
+    # otherwise refer to RBE docs.
+    rbe_preconfig(
+        name = "buildkite_config",
+        toolchain = "ubuntu1804-bazel-java11",
+    )
+
+internal_dev_deps = module_extension(
+    implementation = _internal_dev_deps_impl,
+    doc = "This extension creates internal rules_python dev dependencies.",
+)