diff --git a/.bazelrc b/.bazelrc index e315b0ed..0f705a85 100644 --- a/.bazelrc +++ b/.bazelrc @@ -15,5 +15,7 @@ build --tool_java_language_version=17 test --verbose_failures test --test_output=errors +import %workspace%/.bazelrc.windows + # Load any settings specific to the current user. try-import %workspace%/.bazelrc.user diff --git a/.bazelrc.windows b/.bazelrc.windows new file mode 100644 index 00000000..77496e13 --- /dev/null +++ b/.bazelrc.windows @@ -0,0 +1,4 @@ +# Make things work on Windows +common --enable_platform_specific_config +startup --windows_enable_symlinks +build:windows --enable_runfiles diff --git a/.github/workflows/gazelle_examples.yaml b/.github/workflows/gazelle_examples.yaml index 50dfad9c..8a2a6d4a 100644 --- a/.github/workflows/gazelle_examples.yaml +++ b/.github/workflows/gazelle_examples.yaml @@ -14,12 +14,19 @@ jobs: matrix: runs-on: - ubuntu-latest + - windows-latest runs-on: ${{ matrix.runs-on }} steps: - uses: actions/checkout@v3 + # The windows-latest image comes with Java 8 but rules_jvm_external requires at least 11, so we install a newer JDK. + - uses: actions/setup-java@v4 + with: + distribution: "zulu" + java-version: "21" + - uses: bazelbuild/setup-bazelisk@v2 - name: Mount bazel action cache diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 79c4ff39..4d78234b 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -16,6 +16,7 @@ jobs: strategy: matrix: runs-on: + # Most of the tests don't run on Windows, so we have a separate job for running just the ones that do. - ubuntu-latest flags: - "" diff --git a/.github/workflows/tests_windows.yaml b/.github/workflows/tests_windows.yaml new file mode 100644 index 00000000..8588b81b --- /dev/null +++ b/.github/workflows/tests_windows.yaml @@ -0,0 +1,48 @@ +name: Tests (Windows) + +on: + push: + branches: [main] + pull_request: + branches: [main] + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + # We don't run the tests in the main test job because most of them don't work on Windows, but the Gazelle ones should, so we run those. + test_windows: + strategy: + matrix: + runs-on: + - windows-latest + + runs-on: ${{ matrix.runs-on }} + + steps: + - uses: actions/checkout@v3 + + # The windows-latest image comes with Java 8 but rules_jvm_external requires at least 11, so we install a newer JDK. + - uses: actions/setup-java@v4 + with: + distribution: "zulu" + java-version: "21" + + - uses: bazelbuild/setup-bazelisk@v2 + + - name: Mount bazel action cache + uses: actions/cache@v2 + with: + path: "~/.cache/bazel" + key: bazel + + - name: Mount bazel repo cache + uses: actions/cache@v2 + with: + path: "~/.cache/bazel-repo" + key: bazel-repo + + - name: bzlmod gazelle + env: + # Bazelisk will download bazel to here, ensure it is cached between runs. + XDG_CACHE_HOME: ~/.cache/bazel-repo + run: bazelisk --bazelrc=.github/workflows/ci.bazelrc test //java/gazelle/... diff --git a/MODULE.bazel b/MODULE.bazel index 233e6df1..ea2cdcb2 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -31,6 +31,12 @@ bazel_dep( version = "0.36.0", repo_name = "bazel_gazelle", ) +git_override( + module_name = "gazelle", + commit = "ba2ce367a545e0bdd74a7abca40ef5e0a0cb8dcb", + remote = "https://github.com/bazelbuild/bazel-gazelle.git", +) + bazel_dep( name = "protobuf", version = PROTOBUF_VERSION, diff --git a/examples/gazelle/.bazelrc b/examples/gazelle/.bazelrc index b3179515..23df41ea 100644 --- a/examples/gazelle/.bazelrc +++ b/examples/gazelle/.bazelrc @@ -1,5 +1 @@ -common --enable_platform_specific_config - -# https://bazel.build/docs/windows#symlink -startup --windows_enable_symlinks -run:windows --enable_runfiles +import %workspace%/../../.bazelrc.windows diff --git a/examples/gazelle/MODULE.bazel b/examples/gazelle/MODULE.bazel index c01c0032..e0fc8df1 100644 --- a/examples/gazelle/MODULE.bazel +++ b/examples/gazelle/MODULE.bazel @@ -43,3 +43,8 @@ bazel_dep( name = "gazelle", version = "0.36.0", ) +git_override( + module_name = "gazelle", + commit = "ba2ce367a545e0bdd74a7abca40ef5e0a0cb8dcb", + remote = "https://github.com/bazelbuild/bazel-gazelle.git", +) diff --git a/examples/gazelle/src/test/com/example/gazelle/BUILD.bazel b/examples/gazelle/src/test/com/example/gazelle/BUILD.bazel index ce1daf34..e40a7f31 100644 --- a/examples/gazelle/src/test/com/example/gazelle/BUILD.bazel +++ b/examples/gazelle/src/test/com/example/gazelle/BUILD.bazel @@ -1,5 +1,5 @@ -load("@contrib_rules_jvm//java:defs.bzl", "java_test_suite") load("@bazel_skylib//rules:diff_test.bzl", "diff_test") +load("@contrib_rules_jvm//java:defs.bzl", "java_test_suite") genquery( name = "generated_targets", diff --git a/examples/tests_and_lints/.bazelrc b/examples/tests_and_lints/.bazelrc new file mode 100644 index 00000000..23df41ea --- /dev/null +++ b/examples/tests_and_lints/.bazelrc @@ -0,0 +1 @@ +import %workspace%/../../.bazelrc.windows diff --git a/repositories.bzl b/repositories.bzl index dddfb19e..86950e23 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -100,12 +100,13 @@ def contrib_rules_jvm_gazelle_deps(): ], ) - # We need https://github.com/bazelbuild/bazel-gazelle/pull/1686 + # We need https://github.com/bazelbuild/bazel-gazelle/pull/1798 maybe( http_archive, name = "bazel_gazelle", - sha256 = "75df288c4b31c81eb50f51e2e14f4763cb7548daae126817247064637fd9ea62", - url = "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.36.0/bazel-gazelle-v0.36.0.tar.gz", + sha256 = "d1d72a9abd6dee362354274fa9b60ced8f50ee1f10f9b9fef90b4acfb98d477b", + strip_prefix = "bazel-gazelle-ba2ce367a545e0bdd74a7abca40ef5e0a0cb8dcb", + url = "https://github.com/bazelbuild/bazel-gazelle/archive/ba2ce367a545e0bdd74a7abca40ef5e0a0cb8dcb.zip", ) maybe(