3 Commits

Author SHA1 Message Date
lEWFkRAD b75422d605 ci: build the Windows CUDA path (nvcc + MSVC host) — the one toolchain no job covers
engine-cuda-syntax compiles backend_cuda.cu with nvcc's GCC host on Linux, and
check.yml's windows job is MinGW/UCRT64 CPU-only by design (#140). Neither
exercises nvcc's MSVC host — the only host compiler nvcc accepts on Windows — so
`make cuda-dll` and `make glm CUDA_DLL=1` are currently built by nothing.

The gap has already cost real bugs, all compile-time, all catchable without a GPU:

  - #158: MSVC rejects the GCC-style -Xcompiler=-Wall,-Wextra ("D8021 invalid
    numeric argument '/Wextra'"), CUDA_HOME/NVCC defaults were unresolvable, and
    the kernel test used POSIX setenv. `make cuda-dll` was unbuildable as shipped.
  - #314: CUDA_HOME containing spaces — the CUDA installer's default layout. This
    job installs to exactly that path, so it reproduces the condition by default.

Two Windows-specific facts the job encodes, both verified by making it fail first:

  - sub-packages needs "cudart", not just "nvcc": cuda-dll *links* the runtime, and
    on Windows the headers/import lib are a separate installer component. With
    '["nvcc"]' alone it dies at `#include <cuda_runtime.h>` — the Linux syntax job
    never notices because it only compiles.
  - runs-on is pinned to windows-2022: windows-latest now ships Visual Studio 18
    (MSVC 14.5x) and CUDA's crt/host_config.h hard-errors on any host newer than
    VS 2022. That is a real constraint on every Windows CUDA user today, so the pin
    tracks what the toolkit supports rather than papering over it with
    -allow-unsupported-compiler.

Build-only on purpose: hosted runners have no NVIDIA device, so this proves the
Windows+MSVC CUDA build stays buildable, not that the kernels or the DLL loader
behave on real silicon — that still needs hardware (#157). A check that overclaims
buys the false confidence the engine-cuda-syntax comment already warns about.

Verified green on a fork before proposing:
https://github.com/lEWFkRAD/colibri/actions/runs/29524302993

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 14:35:30 -04:00
JustVugg 78c77bf6c8 ci: make the CUDA job able to fail, and able to run (#144)
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 <noreply@anthropic.com>
2026-07-16 19:36:31 +02:00
ZacharyZcR 58ead39bde ci: GitHub Actions for engine, web UI, Python tests, and CUDA syntax check
Four jobs, all fast, all free on public repos:
- engine: make glm + make test-c (Linux, CPU, native arch)
- engine-cuda-syntax: nvcc compile-only check (no GPU needed, catches
  backend_cuda.cu syntax/type errors before they reach a real machine)
- web: npm ci + build + vitest (Node 22, cached deps)
- python: unittest discover on c/tests/test_*.py (Python 3.12)

Triggers on push/PR to dev and main. No 20-minute pipelines — the whole
matrix finishes in under 3 minutes on GitHub-hosted runners.
2026-07-14 04:16:07 +08:00