name: Sanitizers on: [pull_request, push] concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} cancel-in-progress: true env: SCCACHE_WEBDAV_ENDPOINT: "https://frcmaven.wpi.edu/artifactory/wpilib-generic-cache-cmake-local" SCCACHE_WEBDAV_KEY_PREFIX: "sccache" jobs: build: strategy: fail-fast: false matrix: include: - name: asan cmake-flags: "-DCMAKE_BUILD_TYPE=Asan" ctest-env: "" ctest-flags: "" - name: tsan cmake-flags: "-DCMAKE_BUILD_TYPE=Tsan" ctest-env: "TSAN_OPTIONS=second_deadlock_stack=1:suppressions=$GITHUB_WORKSPACE/tsan_suppressions.txt" ctest-flags: "-E 'cscore|cameraserver'" - name: ubsan cmake-flags: "-DCMAKE_BUILD_TYPE=Ubsan" ctest-env: "" ctest-flags: "" name: "${{ matrix.name }}" runs-on: ubuntu-24.04 container: wpilib/roborio-cross-ubuntu:2025-24.04 steps: - name: Install Dependencies run: sudo apt-get update && sudo apt-get install -y libopencv-dev clang-18 ninja-build avahi-daemon - name: Install sccache uses: mozilla-actions/sccache-action@v0.0.10 - uses: actions/checkout@v6 - 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-18 -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/clang++-18 ${{ matrix.cmake-flags }} .. env: SCCACHE_WEBDAV_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} SCCACHE_WEBDAV_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} - name: Setup avahi-daemon run: | sudo service dbus start sudo avahi-daemon -D - name: build working-directory: build run: cmake --build . --parallel $(nproc) env: SCCACHE_WEBDAV_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} SCCACHE_WEBDAV_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} - name: test working-directory: build run: ${{ matrix.ctest-env }} ctest --output-on-failure ${{ matrix.ctest-flags }}