name: Sanitizers on: [pull_request, push] concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} cancel-in-progress: true jobs: build: strategy: fail-fast: false matrix: include: - name: asan cmake-flags: "-DCMAKE_BUILD_TYPE=Asan" ctest-env: "" ctest-flags: "-E 'wpilibc'" - name: tsan cmake-flags: "-DCMAKE_BUILD_TYPE=Tsan" ctest-env: "TSAN_OPTIONS=second_deadlock_stack=1" ctest-flags: "-E 'cscore|cameraserver|wpilibc|wpilibNewCommands'" - name: ubsan cmake-flags: "-DCMAKE_BUILD_TYPE=Ubsan" ctest-env: "" ctest-flags: "" name: "${{ matrix.name }}" runs-on: ubuntu-22.04 container: image: wpilib/roborio-cross-ubuntu:2024-22.04 options: --privileged steps: - name: mmap rnd_bits workaround run: sudo sysctl -w vm.mmap_rnd_bits=28 - name: Install Dependencies run: sudo apt-get update && sudo apt-get install -y libopencv-dev libopencv4.5-java python-is-python3 clang-14 libprotobuf-dev protobuf-compiler ninja-build - name: Install QuickBuffers if: runner.os == 'Linux' run: wget https://github.com/HebiRobotics/QuickBuffers/releases/download/1.3.3/protoc-gen-quickbuf_1.3.3_amd64.deb && sudo apt install ./protoc-gen-quickbuf_1.3.3_amd64.deb - name: Run sccache-cache uses: mozilla-actions/sccache-action@v0.0.3 - name: Install jinja run: python -m pip install jinja2 - uses: actions/checkout@v4 - name: configure run: mkdir build && cd build && cmake -G Ninja -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/clang-14 -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/clang++-14 -DWITH_JAVA=OFF ${{ matrix.cmake-flags }} .. env: SCCACHE_GHA_ENABLED: "true" - name: build working-directory: build run: cmake --build . --parallel $(nproc) env: SCCACHE_GHA_ENABLED: "true" - name: test working-directory: build run: ${{ matrix.ctest-env }} ctest --output-on-failure ${{ matrix.ctest-flags }}