From 808715cb07c5155e189885df7648e91f1c8ae2fc Mon Sep 17 00:00:00 2001 From: Oliver Lee Date: Sat, 23 Dec 2023 01:12:49 -0800 Subject: [PATCH] enable github check workflow --- .bazelrc | 15 +++++ .github/workflows/check.yml | 126 +++++++++++++++++++++++++++++++++++ .github/workflows/ci.bazelrc | 11 +++ 3 files changed, 152 insertions(+) create mode 100644 .github/workflows/check.yml create mode 100644 .github/workflows/ci.bazelrc diff --git a/.bazelrc b/.bazelrc index 59f3df2..1c9a6e9 100644 --- a/.bazelrc +++ b/.bazelrc @@ -23,4 +23,19 @@ build:verbose-clang-tidy --@bazel_clang_tidy//:clang_tidy_executable=//tools:ver build:clang-tidy --config=clang-tidy-base build:clang-tidy --@bazel_clang_tidy//:clang_tidy_executable=@llvm_toolchain//:clang-tidy +coverage --combined_report=lcov +coverage --strategy=CoverageReport=local + +# At least some of this is needed for the coverage tool to work. +coverage --experimental_split_coverage_postprocessing +coverage --experimental_fetch_all_coverage_outputs +coverage --remote_download_outputs=all +coverage --experimental_remote_download_regex=.*/((testlogs/.*/_coverage/.*)|coverage.dat$|_coverage/_coverage_report.dat$) + +# Not sure why it doesn't work with clang. Should be possible. +coverage --extra_toolchains=//toolchain:gcc + +# Needed because our tests are in a different package than the code they test. +coverage --instrumentation_filter='//...' + try-import %workspace%/user.bazelrc diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..b451428 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,126 @@ +name: check + +on: + push: + branches: [ main ] + pull_request: + branches: [ "*" ] + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + toolchain: [gcc, clang] + 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 }} \ + //... + + 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 \ + //... + + - 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 + strategy: + fail-fast: false + matrix: + flag: + - '--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 }} \ + //... + + 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 diff --git a/.github/workflows/ci.bazelrc b/.github/workflows/ci.bazelrc new file mode 100644 index 0000000..649b2d7 --- /dev/null +++ b/.github/workflows/ci.bazelrc @@ -0,0 +1,11 @@ +# 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 --terminal_columns=120 +build --remote_download_minimal + +test --test_output=all +test --test_verbose_timeout_warnings \ No newline at end of file