From 78c77bf6c856d740a1c86270e61e9f0560cc79df Mon Sep 17 00:00:00 2001 From: JustVugg Date: Thu, 16 Jul 2026 19:36:31 +0200 Subject: [PATCH] ci: make the CUDA job able to fail, and able to run (#144) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two independent defects in the CUDA syntax job, both caught on its first run. 1. `cuda: '12.6.3'` — Jimver/cuda-toolkit@v0.2.19's version table stops at 12.6.2, so the install step died with "Version not available: 12.6.3" before nvcc was ever invoked. One digit. 2. `nvcc ... 2>&1 | head -40` — a pipeline exits with the status of its LAST command, so head's 0 masked every nvcc error. The job printed "CUDA syntax check passed" unconditionally: it could not fail. Defect 1 is why we found out, since it broke the step *before* the pipe. The second one is the one that matters. backend_cuda.cu is compiled by nothing else in this repo — no local build, no test — so this job is the only thing standing between a CUDA change and a user's GPU. A check that cannot fail is worse than no check: it buys false confidence in exactly the file that most needs the real thing. #298 spent a night debugging CUDA against no oracle at all; this job is supposed to be that oracle. It is also, precisely, the disease of the week in YAML form: a signal that measures its own intention rather than the thing it claims to measure. See the `~335 GB I/O saved` counter that counted dropped experts instead of bytes not read (#303), and `route_agree: 95.3%` cited as "quality preserved" when it only measures which experts coincide. The other three jobs (engine, web, python) passed on the first run. Co-Authored-By: ZacharyZcR <#144> Co-Authored-By: Claude Opus 4.8 --- .github/workflows/ci.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bff030e..e18f1b3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,14 +25,20 @@ jobs: - name: Install CUDA toolkit (compiler only) uses: Jimver/cuda-toolkit@v0.2.19 with: - cuda: '12.6.3' + # v0.2.19's version table stops at 12.6.2 — 12.6.3 fails the install + # step with "Version not available" before nvcc is ever reached. + cuda: '12.6.2' method: network sub-packages: '["nvcc"]' - name: Compile backend_cuda.cu (syntax only, no GPU) run: | cd c + # NOT `nvcc ... | head -40`: a pipeline exits with the status of its + # LAST command, so head's 0 masked every nvcc error and the job could + # only ever be green. A check that cannot fail is worse than no check — + # it buys false confidence in the one file nothing else compiles. nvcc -O2 -std=c++17 -arch=sm_80 -c backend_cuda.cu -o /dev/null \ - -Xcompiler=-Wall,-Wextra 2>&1 | head -40 + -Xcompiler=-Wall,-Wextra echo "CUDA syntax check passed" web: