chore: make gazelle bcr tests compatible with bcr presubmit environment (#3365)

BCR recently changed how it extracts archives in its presubmits: instead
of extracting
the whole archive, only the specified portion (`gazelle/` in this case)
is extracted.
This broke the gazelle tests because they reference files above the
gazelle directory.

To fix, move the module it runs as a test under the gazelle directory.

Because the test module also refers to rules_python, which is above the
gazelle
directory, the bcr presubmit has disable that override using
`--override_module`.
This means, going forward, the gazelle module, when bcr tests it, will
use the
version in the MODULE file (rather than the vendored copy).

Fixes https://github.com/bazel-contrib/rules_python/issues/3364
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index 119ad49..6ed93b0 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -329,20 +329,20 @@
     <<: *minimum_supported_version
     <<: *reusable_build_test_all
     <<: *coverage_targets_example_bzlmod_build_file_generation
-    name: "examples/bzlmod_build_file_generation: Ubuntu, minimum Bazel"
-    working_directory: examples/bzlmod_build_file_generation
+    name: "gazelle/examples/bzlmod_build_file_generation: Ubuntu, minimum Bazel"
+    working_directory: gazelle/examples/bzlmod_build_file_generation
     platform: ubuntu2204
     bazel: 7.x
   integration_test_bzlmod_generation_build_files_ubuntu:
     <<: *reusable_build_test_all
     <<: *coverage_targets_example_bzlmod_build_file_generation
-    name: "examples/bzlmod_build_file_generation: Ubuntu"
-    working_directory: examples/bzlmod_build_file_generation
+    name: "gazelle/examples/bzlmod_build_file_generation: Ubuntu"
+    working_directory: gazelle/examples/bzlmod_build_file_generation
     platform: ubuntu2204
   integration_test_bzlmod_generation_build_files_ubuntu_run:
     <<: *reusable_build_test_all
-    name: "examples/bzlmod_build_file_generation: Ubuntu, Gazelle and pip"
-    working_directory: examples/bzlmod_build_file_generation
+    name: "gazelle/examples/bzlmod_build_file_generation: Ubuntu, Gazelle and pip"
+    working_directory: gazelle/examples/bzlmod_build_file_generation
     platform: ubuntu2204
     shell_commands:
     - "bazel run //:gazelle_python_manifest.update"
@@ -350,20 +350,20 @@
   integration_test_bzlmod_build_file_generation_debian:
     <<: *reusable_build_test_all
     <<: *coverage_targets_example_bzlmod_build_file_generation
-    name: "examples/bzlmod_build_file_generation: Debian"
-    working_directory: examples/bzlmod_build_file_generation
+    name: "gazelle/examples/bzlmod_build_file_generation: Debian"
+    working_directory: gazelle/examples/bzlmod_build_file_generation
     platform: debian11
   integration_test_bzlmod_build_file_generation_macos:
     <<: *reusable_build_test_all
     <<: *coverage_targets_example_bzlmod_build_file_generation
-    name: "examples/bzlmod_build_file_generation: MacOS"
-    working_directory: examples/bzlmod_build_file_generation
+    name: "gazelle/examples/bzlmod_build_file_generation: MacOS"
+    working_directory: gazelle/examples/bzlmod_build_file_generation
     platform: macos
   integration_test_bzlmod_build_file_generation_windows:
     <<: *reusable_build_test_all
     # coverage is not supported on Windows
-    name: "examples/bzlmod_build_file_generation: Windows"
-    working_directory: examples/bzlmod_build_file_generation
+    name: "gazelle/examples/bzlmod_build_file_generation: Windows"
+    working_directory: gazelle/examples/bzlmod_build_file_generation
     platform: windows
 
   integration_test_multi_python_versions_ubuntu_workspace:
diff --git a/.bazelignore b/.bazelignore
index fb99909..dd58b79 100644
--- a/.bazelignore
+++ b/.bazelignore
@@ -26,6 +26,10 @@
 examples/pip_repository_annotations/bazel-pip_repository_annotations
 examples/py_proto_library/bazel-py_proto_library
 gazelle/bazel-gazelle
+gazelle/examples/bzlmod_build_file_generation/bazel-bin
+gazelle/examples/bzlmod_build_file_generation/bazel-bzlmod_build_file_generation
+gazelle/examples/bzlmod_build_file_generation/bazel-out
+gazelle/examples/bzlmod_build_file_generation/bazel-testlog
 tests/integration/compile_pip_requirements/bazel-compile_pip_requirements
 tests/integration/ignore_root_user_error/bazel-ignore_root_user_error
 tests/integration/local_toolchains/bazel-local_toolchains
diff --git a/.bazelrc b/.bazelrc
index 801b963..b5c9c7c 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -9,6 +9,9 @@
 
 test --test_output=errors
 
+common --deleted_packages=gazelle/examples/bzlmod_build_file_generation
+common --deleted_packages=gazelle/examples/bzlmod_build_file_generation/runfiles
+
 # Do NOT implicitly create empty __init__.py files in the runfiles tree.
 # By default, these are created in every directory containing Python source code
 # or shared libraries, and every parent directory of those directories,
diff --git a/.bcr/gazelle/presubmit.yml b/.bcr/gazelle/presubmit.yml
index bceed4f..ff1c9e7 100644
--- a/.bcr/gazelle/presubmit.yml
+++ b/.bcr/gazelle/presubmit.yml
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 bcr_test_module:
-  module_path: "../examples/bzlmod_build_file_generation"
+  module_path: "examples/bzlmod_build_file_generation"
   matrix:
     platform: ["debian11", "macos", "ubuntu2004", "windows"]
     # last_rc is to get latest 8.x release. Replace with 8.x when available.
@@ -23,6 +23,8 @@
       name: "Run test module"
       platform: ${{ platform }}
       bazel: ${{ bazel }}
+      shell_commands:
+        - "echo 'common --override_module=rules_python=' >> .bazelrc"
       build_targets:
         - "//..."
         - ":modules_map"
diff --git a/examples/bzlmod_build_file_generation/other_module/MODULE.bazel b/examples/bzlmod_build_file_generation/other_module/MODULE.bazel
deleted file mode 100644
index 992e120..0000000
--- a/examples/bzlmod_build_file_generation/other_module/MODULE.bazel
+++ /dev/null
@@ -1,5 +0,0 @@
-module(
-    name = "other_module",
-)
-
-bazel_dep(name = "rules_python", version = "")
diff --git a/gazelle/.bazelignore b/gazelle/.bazelignore
new file mode 100644
index 0000000..5930a06
--- /dev/null
+++ b/gazelle/.bazelignore
@@ -0,0 +1,8 @@
+bazel-bin
+bazel-gazelle
+bazel-out
+bazel-testlogs
+examples/bzlmod_build_file_generation/bazel-bin
+examples/bzlmod_build_file_generation/bazel-bzlmod_build_file_generation
+examples/bzlmod_build_file_generation/bazel-out
+examples/bzlmod_build_file_generation/bazel-testlog
diff --git a/gazelle/.bazelrc b/gazelle/.bazelrc
index 791b939..9a38133 100644
--- a/gazelle/.bazelrc
+++ b/gazelle/.bazelrc
@@ -1,3 +1,6 @@
+common --deleted_packages=examples/bzlmod_build_file_generation
+common --deleted_packages=examples/bzlmod_build_file_generation/runfiles
+
 test --test_output=errors
 
 # Do NOT implicitly create empty __init__.py files in the runfiles tree.
diff --git a/examples/bzlmod_build_file_generation/.bazelignore b/gazelle/examples/bzlmod_build_file_generation/.bazelignore
similarity index 100%
rename from examples/bzlmod_build_file_generation/.bazelignore
rename to gazelle/examples/bzlmod_build_file_generation/.bazelignore
diff --git a/examples/bzlmod_build_file_generation/.bazelrc b/gazelle/examples/bzlmod_build_file_generation/.bazelrc
similarity index 100%
rename from examples/bzlmod_build_file_generation/.bazelrc
rename to gazelle/examples/bzlmod_build_file_generation/.bazelrc
diff --git a/examples/bzlmod_build_file_generation/.gitignore b/gazelle/examples/bzlmod_build_file_generation/.gitignore
similarity index 100%
rename from examples/bzlmod_build_file_generation/.gitignore
rename to gazelle/examples/bzlmod_build_file_generation/.gitignore
diff --git a/examples/bzlmod_build_file_generation/BUILD.bazel b/gazelle/examples/bzlmod_build_file_generation/BUILD.bazel
similarity index 100%
rename from examples/bzlmod_build_file_generation/BUILD.bazel
rename to gazelle/examples/bzlmod_build_file_generation/BUILD.bazel
diff --git a/examples/bzlmod_build_file_generation/MODULE.bazel b/gazelle/examples/bzlmod_build_file_generation/MODULE.bazel
similarity index 91%
rename from examples/bzlmod_build_file_generation/MODULE.bazel
rename to gazelle/examples/bzlmod_build_file_generation/MODULE.bazel
index 3436fbf..5ace7f3 100644
--- a/examples/bzlmod_build_file_generation/MODULE.bazel
+++ b/gazelle/examples/bzlmod_build_file_generation/MODULE.bazel
@@ -13,26 +13,28 @@
 # For typical setups you set the version.
 # See the releases page for available versions.
 # https://github.com/bazel-contrib/rules_python/releases
-bazel_dep(name = "rules_python", version = "0.0.0")
+bazel_dep(name = "rules_python", version = "1.0.0")
 
+# NOTE: This override is removed for BCR presubmits and the version
+# specified by bazel_dep() is used instead.
 # The following loads rules_python from the file system.
 # For usual setups you should remove this local_path_override block.
 local_path_override(
     module_name = "rules_python",
-    path = "../..",
+    path = "../../..",
 )
 
 # The following stanza defines the dependency rules_python_gazelle_plugin.
 # For typical setups you set the version.
 # See the releases page for available versions.
 # https://github.com/bazel-contrib/rules_python/releases
-bazel_dep(name = "rules_python_gazelle_plugin", version = "0.0.0")
+bazel_dep(name = "rules_python_gazelle_plugin", version = "1.5.0")
 
 # The following starlark loads the gazelle plugin from the file system.
 # For usual setups you should remove this local_path_override block.
 local_path_override(
     module_name = "rules_python_gazelle_plugin",
-    path = "../../gazelle",
+    path = "../..",
 )
 
 # The following stanza defines the dependency for gazelle
@@ -84,7 +86,7 @@
 
 # This project includes a different module that is on the local file system.
 # Add the module to this parent project.
-bazel_dep(name = "other_module", version = "", repo_name = "our_other_module")
+bazel_dep(name = "other_module", version = "0.0.0", repo_name = "our_other_module")
 local_path_override(
     module_name = "other_module",
     path = "other_module",
diff --git a/examples/bzlmod_build_file_generation/README.md b/gazelle/examples/bzlmod_build_file_generation/README.md
similarity index 100%
rename from examples/bzlmod_build_file_generation/README.md
rename to gazelle/examples/bzlmod_build_file_generation/README.md
diff --git a/examples/bzlmod_build_file_generation/WORKSPACE b/gazelle/examples/bzlmod_build_file_generation/WORKSPACE
similarity index 100%
rename from examples/bzlmod_build_file_generation/WORKSPACE
rename to gazelle/examples/bzlmod_build_file_generation/WORKSPACE
diff --git a/examples/bzlmod_build_file_generation/__main__.py b/gazelle/examples/bzlmod_build_file_generation/__main__.py
similarity index 100%
rename from examples/bzlmod_build_file_generation/__main__.py
rename to gazelle/examples/bzlmod_build_file_generation/__main__.py
diff --git a/examples/bzlmod_build_file_generation/__test__.py b/gazelle/examples/bzlmod_build_file_generation/__test__.py
similarity index 100%
rename from examples/bzlmod_build_file_generation/__test__.py
rename to gazelle/examples/bzlmod_build_file_generation/__test__.py
diff --git a/examples/bzlmod_build_file_generation/gazelle_python.yaml b/gazelle/examples/bzlmod_build_file_generation/gazelle_python.yaml
similarity index 100%
rename from examples/bzlmod_build_file_generation/gazelle_python.yaml
rename to gazelle/examples/bzlmod_build_file_generation/gazelle_python.yaml
diff --git a/examples/bzlmod_build_file_generation/gazelle_python_with_types.yaml b/gazelle/examples/bzlmod_build_file_generation/gazelle_python_with_types.yaml
similarity index 100%
rename from examples/bzlmod_build_file_generation/gazelle_python_with_types.yaml
rename to gazelle/examples/bzlmod_build_file_generation/gazelle_python_with_types.yaml
diff --git a/examples/bzlmod_build_file_generation/lib.py b/gazelle/examples/bzlmod_build_file_generation/lib.py
similarity index 100%
rename from examples/bzlmod_build_file_generation/lib.py
rename to gazelle/examples/bzlmod_build_file_generation/lib.py
diff --git a/gazelle/examples/bzlmod_build_file_generation/other_module/MODULE.bazel b/gazelle/examples/bzlmod_build_file_generation/other_module/MODULE.bazel
new file mode 100644
index 0000000..3deeeb6
--- /dev/null
+++ b/gazelle/examples/bzlmod_build_file_generation/other_module/MODULE.bazel
@@ -0,0 +1,7 @@
+module(
+    name = "other_module",
+)
+
+# Version doesn't matter because the root module overrides it,
+# but Bazel requires it exist in the registry.
+bazel_dep(name = "rules_python", version = "1.0.0")
diff --git a/examples/bzlmod_build_file_generation/other_module/WORKSPACE b/gazelle/examples/bzlmod_build_file_generation/other_module/WORKSPACE
similarity index 100%
rename from examples/bzlmod_build_file_generation/other_module/WORKSPACE
rename to gazelle/examples/bzlmod_build_file_generation/other_module/WORKSPACE
diff --git a/examples/bzlmod_build_file_generation/other_module/other_module/pkg/BUILD.bazel b/gazelle/examples/bzlmod_build_file_generation/other_module/other_module/pkg/BUILD.bazel
similarity index 100%
rename from examples/bzlmod_build_file_generation/other_module/other_module/pkg/BUILD.bazel
rename to gazelle/examples/bzlmod_build_file_generation/other_module/other_module/pkg/BUILD.bazel
diff --git a/examples/bzlmod_build_file_generation/other_module/other_module/pkg/data/data.txt b/gazelle/examples/bzlmod_build_file_generation/other_module/other_module/pkg/data/data.txt
similarity index 100%
rename from examples/bzlmod_build_file_generation/other_module/other_module/pkg/data/data.txt
rename to gazelle/examples/bzlmod_build_file_generation/other_module/other_module/pkg/data/data.txt
diff --git a/examples/bzlmod_build_file_generation/other_module/other_module/pkg/lib.py b/gazelle/examples/bzlmod_build_file_generation/other_module/other_module/pkg/lib.py
similarity index 100%
rename from examples/bzlmod_build_file_generation/other_module/other_module/pkg/lib.py
rename to gazelle/examples/bzlmod_build_file_generation/other_module/other_module/pkg/lib.py
diff --git a/examples/bzlmod_build_file_generation/requirements.in b/gazelle/examples/bzlmod_build_file_generation/requirements.in
similarity index 100%
rename from examples/bzlmod_build_file_generation/requirements.in
rename to gazelle/examples/bzlmod_build_file_generation/requirements.in
diff --git a/examples/bzlmod_build_file_generation/requirements_lock.txt b/gazelle/examples/bzlmod_build_file_generation/requirements_lock.txt
similarity index 100%
rename from examples/bzlmod_build_file_generation/requirements_lock.txt
rename to gazelle/examples/bzlmod_build_file_generation/requirements_lock.txt
diff --git a/examples/bzlmod_build_file_generation/requirements_windows.txt b/gazelle/examples/bzlmod_build_file_generation/requirements_windows.txt
similarity index 100%
rename from examples/bzlmod_build_file_generation/requirements_windows.txt
rename to gazelle/examples/bzlmod_build_file_generation/requirements_windows.txt
diff --git a/examples/bzlmod_build_file_generation/runfiles/BUILD.bazel b/gazelle/examples/bzlmod_build_file_generation/runfiles/BUILD.bazel
similarity index 100%
rename from examples/bzlmod_build_file_generation/runfiles/BUILD.bazel
rename to gazelle/examples/bzlmod_build_file_generation/runfiles/BUILD.bazel
diff --git a/examples/bzlmod_build_file_generation/runfiles/data/data.txt b/gazelle/examples/bzlmod_build_file_generation/runfiles/data/data.txt
similarity index 100%
rename from examples/bzlmod_build_file_generation/runfiles/data/data.txt
rename to gazelle/examples/bzlmod_build_file_generation/runfiles/data/data.txt
diff --git a/examples/bzlmod_build_file_generation/runfiles/runfiles_test.py b/gazelle/examples/bzlmod_build_file_generation/runfiles/runfiles_test.py
similarity index 100%
rename from examples/bzlmod_build_file_generation/runfiles/runfiles_test.py
rename to gazelle/examples/bzlmod_build_file_generation/runfiles/runfiles_test.py