From 3cc6b47f8f9ae5b3bd1e89e9c140f238a61bca69 Mon Sep 17 00:00:00 2001 From: Gary Miguel Date: Mon, 15 Jan 2024 20:39:51 -0800 Subject: [PATCH] GitHub: cache more things (#127) also remove unnecessary remote_download_minimal. We're not using a remote cache so it's pointless. Change-Id: I375b456a064ccbd57d6cdc94f9b548371d92ddaf --- .github/workflows/check.yml | 234 +++++++++++++++++++++-------------- .github/workflows/ci.bazelrc | 13 +- 2 files changed, 149 insertions(+), 98 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index ff6530a..84f728f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -2,9 +2,9 @@ name: check on: push: - branches: [ master ] + branches: [master] pull_request: - branches: [ "*" ] + branches: ["*"] jobs: test: @@ -13,64 +13,92 @@ jobs: fail-fast: false matrix: toolchain: [gcc, clang] - feature: ['', asan, tsan, ubsan] + feature: ["", asan, tsan, ubsan] steps: - - uses: actions/checkout@v3 - - - name: mount bazel cache - uses: actions/cache@v3 - with: - path: "~/.cache/bazel" - key: bazel-test-${{ matrix.toolchain }}-${{ matrix.feature }} - - - name: install libtinfo5 - # clang tools load libtinfo5 for color diagnostics but `ubuntu-latest` - # runners already have `libtinfo.so.6` installed. We just create a - # symlink since it's faster than installing libtinfo5. - # https://github.com/circleci/circleci-images/issues/430#issuecomment-522602495 - run: | - sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5 - - - run: | - bazel \ - --bazelrc=.github/workflows/ci.bazelrc \ - test \ - --config=${{ matrix.toolchain }} \ - --features=${{ matrix.feature }} \ - //... + - uses: actions/checkout@v3 + + - name: mount bazel disk cache + uses: actions/cache@v3 + with: + path: "~/.cache/bazel_disk_cache" + key: bazel-disk-test-${{ matrix.toolchain }}-${{ matrix.feature }} + + - name: mount bazel other caches + # restore only on these jobs because GitHub free doesn't + # give us much cache space. + uses: actions/cache/restore@v3 + with: + path: | + "~/.cache/bazel_install_base" + "~/.cache/bazel_output_base/external" + "~/.cache/bazel_repository_cache" + "~/.cache/bazelisk" + key: bazel-other + + - name: install libtinfo5 + # clang tools load libtinfo5 for color diagnostics but `ubuntu-latest` + # runners already have `libtinfo.so.6` installed. We just create a + # symlink since it's faster than installing libtinfo5. + # https://github.com/circleci/circleci-images/issues/430#issuecomment-522602495 + run: | + sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5 + + - run: | + bazel \ + --bazelrc=.github/workflows/ci.bazelrc \ + test \ + --config=${{ matrix.toolchain }} \ + --features=${{ matrix.feature }} \ + //... coverage: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - - name: mount bazel cache - uses: actions/cache@v3 - with: - path: "~/.cache/bazel" - key: bazel-coverage - - - name: install libtinfo5 - # clang tools load libtinfo5 for color diagnostics but `ubuntu-latest` - # runners already have `libtinfo.so.6` installed. We just create a - # symlink since it's faster than installing libtinfo5. - # https://github.com/circleci/circleci-images/issues/430#issuecomment-522602495 - run: | - sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5 - - - run: | - bazel \ - --bazelrc=.github/workflows/ci.bazelrc \ - coverage \ - --instrumentation_filter="-/:boost_ut" \ - //... - - - uses: codecov/codecov-action@v3 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: ./bazel-out/_coverage/_coverage_report.dat - fail_ci_if_error: true + - uses: actions/checkout@v3 + + - name: muont bazel disk cache + uses: actions/cache@v3 + with: + path: "~/.cache/bazel_disk_cache" + key: bazel-disk-coverage + + - name: mount bazel other caches + # This is the only one that writes to the cache, not restore. + # The contents of this stuff should not be dependent on build flags, + # so can be shared across all jobs. + # Somewhat arbitrary to have this be the one that writes to the cache; + # just taking advantage of the fact that this one is + # not a matrix and so only has one job. + uses: actions/cache@v3 + with: + path: | + "~/.cache/bazel_install_base" + "~/.cache/bazel_output_base/external" + "~/.cache/bazel_repository_cache" + "~/.cache/bazelisk" + key: bazel-other + + - name: install libtinfo5 + # clang tools load libtinfo5 for color diagnostics but `ubuntu-latest` + # runners already have `libtinfo.so.6` installed. We just create a + # symlink since it's faster than installing libtinfo5. + # https://github.com/circleci/circleci-images/issues/430#issuecomment-522602495 + run: | + sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5 + + - run: | + bazel \ + --bazelrc=.github/workflows/ci.bazelrc \ + coverage \ + --instrumentation_filter="-/:boost_ut" \ + //... + + - uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./bazel-out/_coverage/_coverage_report.dat + fail_ci_if_error: true build: runs-on: ubuntu-latest @@ -78,50 +106,70 @@ jobs: fail-fast: false matrix: flag: - - '--config=clang-format' - - '--config=clang-tidy' - - '--config=verbose-clang-tidy' - - '--compilation_mode=opt' + - "--config=clang-format" + - "--config=clang-tidy" + - "--config=verbose-clang-tidy" + - "--compilation_mode=opt" exclude: - flag: ${{ github.event_name == 'pull_request' && '--config=verbose-clang-tidy' || 'dummy' }} steps: - - uses: actions/checkout@v3 - - - name: mount bazel cache - uses: actions/cache@v3 - with: - path: "~/.cache/bazel" - key: bazel-build-${{ matrix.flag }} - - - name: install libtinfo5 - # clang tools load libtinfo5 for color diagnostics but `ubuntu-latest` - # runners already have `libtinfo.so.6` installed. We just create a - # symlink since it's faster than installing libtinfo5. - # https://github.com/circleci/circleci-images/issues/430#issuecomment-522602495 - run: | - sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5 - - - run: | - bazel \ - --bazelrc=.github/workflows/ci.bazelrc \ - build \ - ${{ matrix.flag }} \ - //... + - uses: actions/checkout@v3 + + - name: muont bazel disk cache + uses: actions/cache@v3 + with: + path: "~/.cache/bazel_disk_cache" + key: bazel-disk-build-${{ matrix.flag }} + + - name: mount bazel other caches + uses: actions/cache/restore@v3 + with: + path: | + "~/.cache/bazel_install_base" + "~/.cache/bazel_output_base" + "~/.cache/bazel_repository_cache" + "~/.cache/bazelisk" + key: bazel-other + + - name: install libtinfo5 + # clang tools load libtinfo5 for color diagnostics but `ubuntu-latest` + # runners already have `libtinfo.so.6` installed. We just create a + # symlink since it's faster than installing libtinfo5. + # https://github.com/circleci/circleci-images/issues/430#issuecomment-522602495 + run: | + sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5 + + - run: | + bazel \ + --bazelrc=.github/workflows/ci.bazelrc \ + build \ + ${{ matrix.flag }} \ + //... buildifier: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - - name: mount bazel cache - uses: actions/cache@v3 - with: - path: "~/.cache/bazel" - key: bazel-buildifier - - - run: | - bazel \ - --bazelrc=.github/workflows/ci.bazelrc \ - run \ - //:buildifier.check + - uses: actions/checkout@v3 + + - name: muont bazel disk cache + uses: actions/cache@v3 + with: + path: "~/.cache/bazel_disk_cache" + key: bazel-disk-buildifier + + - name: mount bazel other caches + uses: actions/cache/restore@v3 + with: + path: | + "~/.cache/bazel_install_base" + "~/.cache/bazel_output_base" + "~/.cache/bazel_repository_cache" + "~/.cache/bazelisk" + key: bazel-other + + - run: | + bazel \ + --bazelrc=.github/workflows/ci.bazelrc \ + run \ + //:buildifier.check diff --git a/.github/workflows/ci.bazelrc b/.github/workflows/ci.bazelrc index 5af51c3..52e7b72 100644 --- a/.github/workflows/ci.bazelrc +++ b/.github/workflows/ci.bazelrc @@ -1,11 +1,14 @@ -# This is from Bazel's former travis setup, to avoid blowing up the RAM usage. -startup --host_jvm_args=-Xmx2500m - -build --show_timestamps build --announce_rc build --color=yes +build --show_timestamps build --terminal_columns=120 -build --remote_download_minimal + +common --disk_cache=/home/runner/.cache/bazel_disk_cache +common --repository_cache=/home/runner/.cache/bazel_repository_cache + +startup --host_jvm_args=-Xmx2500m # avoid blowing up the RAM usage. +startup --install_base=/home/runner/.cache/bazel_install_base +startup --output_base=/home/runner/.cache/bazel_output_base test --test_output=all test --test_verbose_timeout_warnings