| name: Build and Test on Linux |
| |
| on: |
| push: |
| branches: [ master ] |
| paths-ignore: |
| - '**.md' |
| pull_request: |
| branches: [ master ] |
| paths-ignore: |
| - '**.md' |
| |
| env: |
| proc_num: $(nproc) |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} |
| |
| # https://github.com/actions/runner-images |
| jobs: |
| compile-with-make: |
| runs-on: ubuntu-22.04 |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: ./.github/actions/install-all-dependencies |
| |
| - name: gcc with default options |
| uses: ./.github/actions/compile-with-make |
| with: |
| options: --headers=/usr/include --libs=/usr/lib /usr/lib64 --cc=gcc --cxx=g++ --werror |
| |
| - name: gcc with all options |
| uses: ./.github/actions/compile-with-make |
| with: |
| options: --headers=/usr/include --libs=/usr/lib /usr/lib64 --cc=gcc --cxx=g++ --werror \ |
| --with-thrift --with-glog --with-rdma --with-debug-bthread-sche-safety \ |
| --with-debug-lock --with-bthread-tracer --with-asan |
| |
| - name: clang with default options |
| uses: ./.github/actions/compile-with-make |
| with: |
| options: --headers=/usr/include --libs=/usr/lib /usr/lib64 --cc=clang --cxx=clang++ --werror |
| |
| - name: clang with all options |
| uses: ./.github/actions/compile-with-make |
| with: |
| options: --headers=/usr/include --libs=/usr/lib /usr/lib64 --cc=clang --cxx=clang++ --werror \ |
| --with-thrift --with-glog --with-rdma --with-debug-bthread-sche-safety \ |
| --with-debug-lock --with-bthread-tracer --with-asan |
| |
| compile-with-cmake: |
| runs-on: ubuntu-22.04 |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: ./.github/actions/install-all-dependencies |
| |
| - name: gcc with default options |
| run: | |
| export CC=gcc && export CXX=g++ |
| mkdir gcc_build && cd gcc_build && cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 .. |
| make -j ${{env.proc_num}} && make clean |
| |
| - name: gcc with all options |
| run: | |
| export CC=gcc && export CXX=g++ |
| mkdir gcc_build_all && cd gcc_build_all |
| cmake -DWITH_MESALINK=OFF -DWITH_GLOG=ON -DWITH_THRIFT=ON -DWITH_RDMA=ON \ |
| -DWITH_DEBUG_BTHREAD_SCHE_SAFETY=ON -DWITH_DEBUG_LOCK=ON -DWITH_BTHREAD_TRACER=ON \ |
| -DWITH_ASAN=ON -DCMAKE_POLICY_VERSION_MINIMUM=3.5 .. |
| make -j ${{env.proc_num}} && make clean |
| |
| - name: clang with default options |
| run: | |
| export CC=clang && export CXX=clang++ |
| mkdir clang_build && cd clang_build && cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 .. |
| make -j ${{env.proc_num}} && make clean |
| |
| - name: clang with all options |
| run: | |
| export CC=clang && export CXX=clang++ |
| mkdir clang_build_all && cd clang_build_all |
| cmake -DWITH_MESALINK=OFF -DWITH_GLOG=ON -DWITH_THRIFT=ON -DWITH_RDMA=ON \ |
| -DWITH_DEBUG_BTHREAD_SCHE_SAFETY=ON -DWITH_DEBUG_LOCK=ON -DWITH_BTHREAD_TRACER=ON \ |
| -DWITH_ASAN=ON -DCMAKE_POLICY_VERSION_MINIMUM=3.5 .. |
| make -j ${{env.proc_num}} && make clean |
| |
| gcc-compile-with-make-protobuf: |
| runs-on: ubuntu-22.04 |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: ./.github/actions/install-essential-dependencies |
| |
| - name: protobuf 3.5.1 |
| uses: ./.github/actions/compile-with-make-protobuf |
| with: |
| protobuf-version: 3.5.1 |
| protobuf-cpp-version: 3.5.1 |
| protobuf-install-dir: /protobuf-3.5.1 |
| config-brpc-options: --cc=gcc --cxx=g++ --werror |
| |
| - name: protobuf 3.12.4 |
| uses: ./.github/actions/compile-with-make-protobuf |
| with: |
| protobuf-version: 3.12.4 |
| protobuf-cpp-version: 3.12.4 |
| protobuf-install-dir: /protobuf-3.12.4 |
| config-brpc-options: --cc=gcc --cxx=g++ --werror |
| |
| - name: protobuf 21.12 |
| uses: ./.github/actions/compile-with-make-protobuf |
| with: |
| protobuf-version: 21.12 |
| protobuf-cpp-version: 3.21.12 |
| protobuf-install-dir: /protobuf-3.21.12 |
| config-brpc-options: --cc=gcc --cxx=g++ --werror |
| |
| gcc-unittest-with-bazel: |
| runs-on: ubuntu-22.04 |
| steps: |
| - uses: actions/checkout@v2 |
| # Install redis-server/mysql-server so the integration tests that fork a |
| # real server (e.g. brpc_redis_unittest) actually run under bazel instead |
| # of skipping. Same shared action the make-based unittest jobs use. |
| - uses: ./.github/actions/install-essential-dependencies |
| - run: bazel test //test/... |
| |
| gcc-compile-with-bazel-all-options: |
| runs-on: ubuntu-22.04 |
| steps: |
| - uses: actions/checkout@v2 |
| - run: | |
| bazel build --define with_mesalink=false \ |
| --define with_glog=true \ |
| --define with_thrift=true \ |
| --define BRPC_WITH_BORINGSSL=true \ |
| --define with_debug_bthread_sche_safety=true \ |
| --define with_debug_lock=true \ |
| --define with_asan=true \ |
| --define with_bthread_tracer=true \ |
| --define BRPC_WITH_NO_PTHREAD_MUTEX_HOOK=true \ |
| --define with_babylon_counter=true \ |
| -- //:brpc |
| |
| clang-compile-with-make-protobuf: |
| runs-on: ubuntu-22.04 |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: ./.github/actions/install-essential-dependencies |
| |
| - name: protobuf 3.5.1 |
| uses: ./.github/actions/compile-with-make-protobuf |
| with: |
| protobuf-version: 3.5.1 |
| protobuf-cpp-version: 3.5.1 |
| protobuf-install-dir: /protobuf-3.5.1 |
| config-brpc-options: --cc=clang --cxx=clang++ --werror |
| |
| - name: protobuf 3.12.4 |
| uses: ./.github/actions/compile-with-make-protobuf |
| with: |
| protobuf-version: 3.12.4 |
| protobuf-cpp-version: 3.12.4 |
| protobuf-install-dir: /protobuf-3.12.4 |
| config-brpc-options: --cc=clang --cxx=clang++ --werror |
| |
| - name: protobuf 21.12 |
| uses: ./.github/actions/compile-with-make-protobuf |
| with: |
| protobuf-version: 21.12 |
| protobuf-cpp-version: 3.21.12 |
| protobuf-install-dir: /protobuf-3.21.12 |
| config-brpc-options: --cc=clang --cxx=clang++ --werror |
| |
| clang-unittest-with-bazel: |
| runs-on: ubuntu-22.04 |
| steps: |
| - uses: actions/checkout@v2 |
| # Install redis-server/mysql-server so the forked-server integration tests |
| # actually run under bazel (see gcc-unittest-with-bazel). |
| - uses: ./.github/actions/install-essential-dependencies |
| - run: | |
| bazel test --test_output=streamed \ |
| --action_env=CC=clang \ |
| //test/... |
| |
| clang-compile-with-bazel-all-options: |
| runs-on: ubuntu-22.04 |
| steps: |
| - uses: actions/checkout@v2 |
| - run: | |
| bazel build --action_env=CC=clang \ |
| --define with_mesalink=false \ |
| --define with_glog=true \ |
| --define with_thrift=true \ |
| --define BRPC_WITH_BORINGSSL=true \ |
| --define with_debug_bthread_sche_safety=true \ |
| --define with_debug_lock=true \ |
| --define with_asan=true \ |
| --define with_bthread_tracer=true \ |
| --define BRPC_WITH_NO_PTHREAD_MUTEX_HOOK=true \ |
| --define with_babylon_counter=true \ |
| -- //:brpc |
| |
| clang-unittest: |
| runs-on: ubuntu-22.04 |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: ./.github/actions/install-essential-dependencies |
| - uses: ./.github/actions/init-ut-make-config |
| with: |
| options: --with-bthread-tracer |
| - name: compile tests |
| run: | |
| cat config.mk |
| cd test |
| make -j ${{env.proc_num}} |
| - name: run tests |
| run: | |
| cd test |
| sh ./run_tests.sh |
| |
| clang-unittest-asan: |
| runs-on: ubuntu-22.04 |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: ./.github/actions/install-essential-dependencies |
| - uses: ./.github/actions/init-ut-make-config |
| with: |
| options: --with-bthread-tracer --with-asan |
| - name: compile tests |
| run: | |
| cat config.mk |
| cd test |
| make NEED_GPERFTOOLS=0 -j ${{env.proc_num}} |
| - name: run tests |
| run: | |
| cd test |
| # The redis integration tests (sanity/keys_with_spaces/incr_and_decr/by_components/auth) |
| # fork a real redis-server and connect after a fixed 50ms wait; under ASan redis starts |
| # too slowly, so they flake here (connection refused). Skip just those under ASan; the |
| # redis codec/server tests still run, and the full suite runs in clang-unittest. |
| GTEST_FILTER='-RedisTest.sanity:RedisTest.keys_with_spaces:RedisTest.incr_and_decr:RedisTest.by_components:RedisTest.auth' sh ./run_tests.sh |
| |
| clang-unittest-bazel-with-babylon-and-new-pb: |
| runs-on: ubuntu-22.04 |
| env: |
| TEST_PROTOBUF_VERSION: "34.1" |
| # protobuf >= 34.x uses new ProtoInfo fields (option_deps, |
| # extension_declarations) introduced in Bazel 8.x. The repo's |
| # .bazelversion (7.2.1) is too old. bazelisk honors USE_BAZEL_VERSION. |
| USE_BAZEL_VERSION: "8.3.1" |
| steps: |
| - uses: actions/checkout@v2 |
| # Install redis-server/mysql-server so the forked-server integration tests |
| # actually run under bazel (see gcc-unittest-with-bazel). |
| - uses: ./.github/actions/install-essential-dependencies |
| - name: Override protobuf version for testing |
| run: | |
| sed -i -E "s/(bazel_dep\(name = ['\"]protobuf['\"], version = ['\"])[^'\"]+/\1${TEST_PROTOBUF_VERSION}/" MODULE.bazel |
| echo "After override:" |
| grep -E "bazel_dep\(name = ['\"]protobuf['\"]" MODULE.bazel |
| grep -qE "bazel_dep\(name = ['\"]protobuf['\"], version = ['\"]${TEST_PROTOBUF_VERSION}['\"]" MODULE.bazel \ |
| || { echo "ERROR: failed to override protobuf version in MODULE.bazel to ${TEST_PROTOBUF_VERSION}"; exit 1; } |
| - run: | |
| bazel test --action_env=CC=clang --config=rdma \ |
| --define with_babylon_counter=true \ |
| //test/... --test_arg=--gtest_filter=-RdmaRpcTest.* |