name: tests on: push: branches: [main] pull_request: jobs: build-and-test: runs-on: ubuntu-latest container: image: ubuntu:24.04 steps: # actions/checkout@v4 is a Node-based action; the bare ubuntu:24.04 # runner image has no node, so checkout fails with # `exitcode '127': command not found`. Install node + git BEFORE # checkout, then install the rest of the toolchain after. - name: Bootstrap (node + git for actions/checkout) run: | export DEBIAN_FRONTEND=noninteractive apt-get update apt-get install -y --no-install-recommends \ git \ ca-certificates \ nodejs - uses: actions/checkout@v4 - name: Install C++ toolchain run: | export DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ build-essential \ cmake \ ninja-build \ libasio-dev \ libyaml-cpp-dev \ python3 \ python3-yaml - name: Configure (Release) run: cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release - name: Build (Release) run: cmake --build build - name: Unit tests (Release) run: build/secsgem_tests thread-sanitizer: runs-on: ubuntu-latest container: image: ubuntu:24.04 steps: - name: Bootstrap (node + git for actions/checkout) run: | export DEBIAN_FRONTEND=noninteractive apt-get update apt-get install -y --no-install-recommends \ git ca-certificates nodejs - uses: actions/checkout@v4 - name: Install C++ toolchain run: | export DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ build-essential cmake ninja-build \ libasio-dev libyaml-cpp-dev \ python3 python3-yaml # Debug + -fsanitize=thread. Catches data races in the # io_context strand contract documented in INTEGRATION.md ยง3. # halt_on_error=1 makes TSan-flagged races fail the job, not # just print a warning. - name: Configure (TSan) run: cmake -S . -B build-tsan -G Ninja -DCMAKE_BUILD_TYPE=Debug -DSECSGEM_TSAN=ON - name: Build (TSan) run: cmake --build build-tsan - name: Unit tests (TSan) env: TSAN_OPTIONS: halt_on_error=1 run: build-tsan/secsgem_tests