name: Sandbox - cmake + ccache on the pool on: push: branches: [ci/sandbox] workflow_dispatch: env: # Inside the workspace so actions/cache can store it. The path is identical on # every run, which matters because ccache hashes the compiler command line. CCACHE_DIR: ${{ github.workspace }}/.ccache jobs: build: runs-on: cmake defaults: run: shell: bash working-directory: sandbox_c steps: - uses: actions/checkout@v4 - name: Toolchain run: | set -euo pipefail command -v cmake >/dev/null && command -v ccache >/dev/null && exit 0 apt-get update -qq apt-get install -y -qq --no-install-recommends \ cmake ninja-build gcc libc6-dev ccache ca-certificates >/dev/null cmake --version | head -1 ccache --version | head -1 # Cache the compiler cache, never build/: CMake bakes absolute paths into # CMakeCache.txt, so a restored build tree breaks if the workspace moves. - name: Cache ccache uses: actions/cache@v4 with: path: ${{ env.CCACHE_DIR }} key: ccache-${{ hashFiles('sandbox_c/**') }} restore-keys: ccache- - name: ccache before build run: ccache --show-stats | grep -E "cache (hits|misses|read)" || ccache --show-stats - name: Configure run: | cmake -S . -B build -G Ninja \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_BUILD_TYPE=Release - name: Build run: cmake --build build --parallel - name: Test run: ctest --test-dir build --output-on-failure - name: ccache after build if: always() run: | ccache --show-stats set -o pipefail ctest --test-dir build 2>&1 | grep -E "tests passed"