From 649e64a7baa770674937b640c52a70a55d0a561c Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Fri, 3 May 2024 10:05:45 +0100 Subject: [PATCH] Shard CI (#266) CI is currently unbearably slow because it runs each config sequentially. Instead, run them in parallel. This also opens up matrix support to be able to run more OSes (because we should test on Windows, which increasingly is starting to work :)) --- .github/workflows/ci.yaml | 66 ------------------------- .github/workflows/examples.yaml | 41 +++++++++++++++ .github/workflows/gazelle_examples.yaml | 41 +++++++++++++++ .github/workflows/tests.yaml | 55 +++++++++++++++++++++ 4 files changed, 137 insertions(+), 66 deletions(-) delete mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/examples.yaml create mode 100644 .github/workflows/gazelle_examples.yaml create mode 100644 .github/workflows/tests.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index d1743fdb..00000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,66 +0,0 @@ -name: CI - -# Controls when the action will run. -on: - # Triggers the workflow on push or pull request events but only for the main branch - push: - branches: [main] - pull_request: - branches: [main] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -jobs: - test: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - - uses: actions/checkout@v3 - - - 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: bazel test //... (Java 11) - env: - # Bazelisk will download bazel to here, ensure it is cached between runs. - XDG_CACHE_HOME: ~/.cache/bazel-repo - run: bazel --bazelrc=.github/workflows/ci.bazelrc test --config=jdk11 //... - - - name: bazel test //... (Java 17) - env: - # Bazelisk will download bazel to here, ensure it is cached between runs. - XDG_CACHE_HOME: ~/.cache/bazel-repo - run: bazel --bazelrc=.github/workflows/ci.bazelrc test //... - - - name: bazel test //... (no bzlmod) - env: - # Bazelisk will download bazel to here, ensure it is cached between runs. - XDG_CACHE_HOME: ~/.cache/bazel-repo - # The docs targets are tagged as `manual` to prevent stardoc from running with bzlmod - run: bazel --bazelrc=.github/workflows/ci.bazelrc test --noenable_bzlmod //... //docs:all - - - name: bzlmod tests_and_lints - env: - # Bazelisk will download bazel to here, ensure it is cached between runs. - XDG_CACHE_HOME: ~/.cache/bazel-repo - run: (cd examples/tests_and_lints && bazel --bazelrc=../../.github/workflows/ci.bazelrc test --enable_bzlmod //...) - - - name: bzlmod gazelle - env: - # Bazelisk will download bazel to here, ensure it is cached between runs. - XDG_CACHE_HOME: ~/.cache/bazel-repo - run: (cd examples/gazelle && bazel --bazelrc=../../.github/workflows/ci.bazelrc run --enable_bzlmod //:gazelle && bazel --bazelrc=../../.github/workflows/ci.bazelrc test --enable_bzlmod //...) diff --git a/.github/workflows/examples.yaml b/.github/workflows/examples.yaml new file mode 100644 index 00000000..1e3fd7a2 --- /dev/null +++ b/.github/workflows/examples.yaml @@ -0,0 +1,41 @@ +name: Examples + +on: + push: + branches: [main] + pull_request: + branches: [main] + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + examples: + strategy: + matrix: + runs-on: + - ubuntu-latest + + runs-on: ${{ matrix.runs-on }} + + steps: + - uses: actions/checkout@v3 + + - 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 tests and lints + env: + # Bazelisk will download bazel to here, ensure it is cached between runs. + XDG_CACHE_HOME: ~/.cache/bazel-repo + run: (cd examples/tests_and_lints && bazel --bazelrc=../../.github/workflows/ci.bazelrc test --enable_bzlmod //...) diff --git a/.github/workflows/gazelle_examples.yaml b/.github/workflows/gazelle_examples.yaml new file mode 100644 index 00000000..50dfad9c --- /dev/null +++ b/.github/workflows/gazelle_examples.yaml @@ -0,0 +1,41 @@ +name: Gazelle Examples + +on: + push: + branches: [main] + pull_request: + branches: [main] + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + gazelle_examples: + strategy: + matrix: + runs-on: + - ubuntu-latest + + runs-on: ${{ matrix.runs-on }} + + steps: + - uses: actions/checkout@v3 + + - 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: (cd examples/gazelle && bazelisk --bazelrc=../../.github/workflows/ci.bazelrc run --enable_bzlmod //:gazelle && bazelisk --bazelrc=../../.github/workflows/ci.bazelrc test --enable_bzlmod //...) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 00000000..79c4ff39 --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,55 @@ +name: Tests + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the main branch + push: + branches: [main] + pull_request: + branches: [main] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + test: + strategy: + matrix: + runs-on: + - ubuntu-latest + flags: + - "" + - --config=jdk11 + - --noenable_bzlmod + + # The type of runner that the job will run on + runs-on: ${{ matrix.runs-on }} + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + - uses: actions/checkout@v3 + + - 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: bazel test //... (Java ${{ matrix.java-major-version }}) + 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 ${{ matrix.flags }} //...