name: CI on: push: branches: [master] pull_request: jobs: build: name: build + test (linux x86_64, mcpp) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # Bootstrap xlings — the tool that the workspace's `.xlings.json` # binds tool versions to (here it pins mcpp 0.0.3). - name: Install xlings env: XLINGS_VERSION: 0.4.25 run: | tarball="xlings-${XLINGS_VERSION}-linux-x86_64.tar.gz" curl -fsSL -o "/tmp/${tarball}" \ "https://github.com/d2learn/xlings/releases/download/v${XLINGS_VERSION}/${tarball}" tar -xzf "/tmp/${tarball}" -C /tmp "/tmp/xlings-${XLINGS_VERSION}-linux-x86_64/subos/default/bin/xlings" self install echo "$HOME/.xlings/subos/current/bin" >> "$GITHUB_PATH" # Resolves `.xlings.json` → installs mcpp@0.0.3 (and any other # workspace tools listed). Idempotent on cache hits. - name: Install workspace tools (.xlings.json) run: xlings install -y # Cache mcpp's self-bootstrapped sandbox: musl-gcc + binutils + # glibc + ninja + patchelf, plus the cloned mcpp-index. ~800 MB # one-time download — reused across runs since mcpp 0.0.3's # toolchain set is version-pinned. - name: Cache mcpp sandbox uses: actions/cache@v4 with: path: ~/.xlings/data/xpkgs/xim-x-mcpp/0.0.3/registry key: mcpp-sandbox-${{ runner.os }}-mcpp0.0.3 - name: Build with mcpp run: mcpp build - name: Run tests run: mcpp test