Run some Bazel tests on `rules_java` presubmits

This should help catch (most) issues sooner and hopefully obviate the need to make Bazel PRs with unreleased `rules_java` archives.

This will also come in handy when migrating the rules out of `@builtins`.

For now, this is only for linux. I'll add testing on other platforms as a followup.

PiperOrigin-RevId: 595654881
Change-Id: I71d98e94921996155a3d9c68d89df2c1ab938409
diff --git a/.bazel_checkout/__README b/.bazel_checkout/__README
new file mode 100644
index 0000000..6de50f3
--- /dev/null
+++ b/.bazel_checkout/__README
@@ -0,0 +1,4 @@
+This directory exists just so we can clone Bazel sources and run tests on presubmit
+
+At some point, we should migrate the tests we care about, out of Bazel and into
+rules_java.
\ No newline at end of file
diff --git a/.bazel_checkout/setup.sh b/.bazel_checkout/setup.sh
new file mode 100644
index 0000000..f1981a6
--- /dev/null
+++ b/.bazel_checkout/setup.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+set -e
+set -x
+
+FAKE_BCR_ROOT=$(mktemp -d --tmpdir fake-bcr.XXX)
+FAKE_RULES_JAVA_ROOT=${FAKE_BCR_ROOT}/modules/rules_java
+FAKE_MODULE_VERSION=9999
+FAKE_MODULE_ROOT=${FAKE_RULES_JAVA_ROOT}/${FAKE_MODULE_VERSION}
+FAKE_ARCHIVE=${FAKE_MODULE_ROOT}/rules_java.tar.gz
+mkdir -p ${FAKE_MODULE_ROOT}
+
+# relying on the line number is not great, but :shrugs:
+sed -e "3 c version = \"${FAKE_MODULE_VERSION}\"," ../MODULE.bazel > ${FAKE_MODULE_ROOT}/MODULE.bazel
+
+tar zcf ${FAKE_ARCHIVE} ../
+RULES_JAVA_INTEGRITY_SHA256=`cat ${FAKE_ARCHIVE} | openssl dgst -sha256 -binary | base64`
+cat << EOF > ${FAKE_MODULE_ROOT}/source.json
+{
+    "integrity": "sha256-${RULES_JAVA_INTEGRITY_SHA256}",
+    "strip_prefix": "",
+    "url": "file://${FAKE_ARCHIVE}"
+}
+EOF
+
+# fetch and setup bazel sources
+git init
+git remote add origin https://github.com/bazelbuild/bazel.git
+git pull origin master
+sed -i.bak -e 's/^# android_sdk_repository/android_sdk_repository/' \
+  -e 's/^#  android_ndk_repository/android_ndk_repository/' \
+  WORKSPACE.bzlmod
+rm -f WORKSPACE.bzlmod.bak
+rm -rf $HOME/bazeltest
+mkdir $HOME/bazeltest
+
+echo "common --registry=https://bcr.bazel.build" >> .bazelrc
+echo "common --registry=file://${FAKE_BCR_ROOT}" >> .bazelrc
+echo "add_to_bazelrc \"common --registry=https://bcr.bazel.build\"" >> src/test/shell/testenv.sh.tmpl
+echo "add_to_bazelrc \"common --registry=file://${FAKE_BCR_ROOT}\"" >> src/test/shell/testenv.sh.tmpl
+
+SED_CMD="s/bazel_dep(name = \"rules_java\".*/bazel_dep(name = \"rules_java\", version = \"${FAKE_MODULE_VERSION}\")/"
+sed -i "${SED_CMD}" MODULE.bazel
+sed -i "${SED_CMD}" src/MODULE.tools
+
+BAZEL_QUIET_MODE_ARGS="--ui_event_filters=error,fail"
+
+bazel run ${BAZEL_QUIET_MODE_ARGS} //src/test/tools/bzlmod:update_default_lock_file -- \
+  --registry="https://bcr.bazel.build" --registry="file://${FAKE_BCR_ROOT}" ${BAZEL_QUIET_MODE_ARGS}
+bazel mod deps --lockfile_mode=update
+# populate repo cache so tests don't need to access network
+bazel fetch --config=ci-linux --all ${BAZEL_QUIET_MODE_ARGS}
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index e11ebe7..f7efa15 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -49,3 +49,30 @@
     build_flags:
       - "--config=bzlmod"
     build_targets: *build_targets_bzlmod
+  ubuntu2004_bazel_tests:
+    environment:
+      USE_BAZEL_DIFF: ""
+    platform: ubuntu2004
+    working_directory: .bazel_checkout
+    shell_commands:
+      - sh setup.sh
+    build_flags:
+      - "--config=ci-linux"
+    test_flags:
+      - "--config=ci-linux"
+    build_targets:
+      - "//:bazel-distfile.zip"
+      - "//scripts/packages/debian:bazel-debian.deb"
+      - "//scripts/packages:with-jdk/install.sh"
+      - "//src:bazel"
+      - "//src:bazel_jdk_minimal"
+      - "//src:test_repos"
+      - "//src/main/java/..."
+    test_targets:
+      - "//src/java_tools/..."
+      - "//src/test/java/com/google/devtools/build/lib/rules/java/..."
+      - "//src/test/java/com/google/devtools/build/lib/view/java/..."
+      - "//src/test/shell/bazel:bazel_java_test"
+      - "//src/test/shell/bazel:bazel_coverage_java_test"
+      # Re-enable once fixed: https://github.com/bazelbuild/bazel/issues/8162
+      - "-//src/java_tools/import_deps_checker/..."