# SPDX-License-Identifier: MIT # SPDX-FileCopyrightText: 2026 Martino Ferrari # # The three jobs docs/building-and-testing.md describes: the plain debug build # with the whole suite and every adapter, the reproducible coverage report, and # the AddressSanitizer run. Each drives the project through its own preset, so # CI configures exactly what a reader following the docs configures. The test # steps run under xvfb: the GL tests create their own headless EGL context, but # a display costs nothing and keeps the run honest about where a frame would # go. The ImGui adapter fetches its Dear ImGui sources at configure time, which # needs the network a GitHub runner has. name: CI on: push: pull_request: permissions: contents: read jobs: debug: name: debug (tests + all adapters) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y --no-install-recommends \ ninja-build python3-fonttools \ libglfw3-dev qt6-base-dev libgtk-4-dev \ libegl1 libglvnd-dev xvfb - name: Configure (linux-debug) run: cmake --preset linux-debug - name: Build run: cmake --build --preset linux-debug - name: Test run: xvfb-run -a ctest --test-dir build/debug --output-on-failure coverage: name: coverage (floor + measured table) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y --no-install-recommends \ ninja-build lcov python3-fonttools \ libegl1 libglvnd-dev xvfb - name: Measure (tools/coverage.sh) # The script configures build/cov from the linux-coverage preset, runs # the suite, captures src/** with lcov, checks the floors and rewrites # the measured table in docs/coverage.md. Non-zero exit fails the job. run: xvfb-run -a tools/coverage.sh - name: Upload the measured table uses: actions/upload-artifact@v4 with: name: coverage path: docs/coverage.md asan: name: asan (AddressSanitizer) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y --no-install-recommends \ ninja-build python3-fonttools \ libglfw3-dev qt6-base-dev libgtk-4-dev \ libegl1 libglvnd-dev xvfb - name: Configure (linux-asan) run: cmake --preset linux-asan - name: Build run: cmake --build --preset linux-asan - name: Test run: xvfb-run -a ctest --test-dir build/asan --output-on-failure