@@ -3,16 +3,15 @@ name: CI
33# Full, unabridged test + report run for the core tools (dsdlc, dsdl-opt, dsdld)
44# across every supported host platform and every generated-output language.
55#
6- # The Linux job runs INSIDE the project's own toolshed image
7- # (ghcr.io/opencyphal/toolshed:ts26.4.1 — the same image .devcontainer uses), so
8- # LLVM/MLIR 22, clang, cmake and ninja are already present: no per-run toolchain
9- # install of LLVM. The setup action only adds what the image lacks (MLIR dev libs,
10- # Go, Rust, tsc, lit). This job runs identically under `act` locally and on
11- # GitHub-hosted runners.
12- #
13- # The integration suite registers a language's tests only when its toolchain is
14- # found at configure time, so installing the full toolchain set is what makes the
15- # run actually unabridged.
6+ # The container jobs run INSIDE the project's own toolshed image
7+ # (ghcr.io/opencyphal/toolshed:ts26.4.2 — the same image .devcontainer uses). That
8+ # image is the single source of truth for the build environment: LLVM/MLIR 22,
9+ # clang, cmake, ninja, the generated-output language toolchains, and Dafny with
10+ # its solver all come from it. Nothing is installed per run; the setup action
11+ # asserts the toolchains are present and fails loudly if one is missing, because
12+ # the integration suite registers a language's tests only when its toolchain is
13+ # found at configure time — so a silently incomplete image sheds whole lanes
14+ # while still reporting green.
1615
1716on :
1817 push :
3635 name : Full suite (linux / toolshed)
3736 runs-on : ubuntu-26.04
3837 container :
39- image : ghcr.io/opencyphal/toolshed:ts26.4.1
38+ image : ghcr.io/opencyphal/toolshed:ts26.4.2
4039 timeout-minutes : 120
4140 env :
4241 LLVM_DIR : /usr/lib/llvm-22/lib/cmake/llvm
@@ -167,7 +166,7 @@ jobs:
167166 # bounded on PRs (short -runs) and runs deep on the weekly schedule cron.
168167 runs-on : ubuntu-26.04
169168 container :
170- image : ghcr.io/opencyphal/toolshed:ts26.4.1
169+ image : ghcr.io/opencyphal/toolshed:ts26.4.2
171170 timeout-minutes : 120
172171 env :
173172 LLVM_DIR : /usr/lib/llvm-22/lib/cmake/llvm
@@ -252,15 +251,32 @@ jobs:
252251 # LLVM/MLIR build matrix, so it is fast and cannot be skipped by a toolchain gap in
253252 # the heavy lanes.
254253 runs-on : ubuntu-26.04
254+ # Dafny and its solver come from the toolshed image rather than being fetched
255+ # per run.
256+ container :
257+ image : ghcr.io/opencyphal/toolshed:ts26.4.2
255258 timeout-minutes : 15
256259 steps :
257260 - name : Checkout
258261 uses : actions/checkout@v4
259262
260- - name : Set up Dafny
261- uses : dafny-lang/setup-dafny-action@v1.7.0
262- with :
263- dafny-version : " 4.11.0"
263+ - name : Assert the Dafny toolchain
264+ # Deliberately not the shared toolchain action: this lane is independent of
265+ # the LLVM/MLIR build matrix and must not be taken down by a Go or
266+ # TypeScript gap. It needs exactly two things, and Dafny's NuGet package
267+ # ships no solver, so a `dafny` that launches proves nothing on its own.
268+ run : |
269+ set -uo pipefail
270+ missing=()
271+ for tool in dafny z3; do
272+ command -v "${tool}" >/dev/null 2>&1 || missing+=("${tool}")
273+ done
274+ if [ "${#missing[@]}" -gt 0 ]; then
275+ echo "::error::toolshed image is missing: ${missing[*]} — these belong in the image"
276+ exit 1
277+ fi
278+ dafny --version
279+ z3 --version
264280
265281 - name : Verify CyphalSerdes
266282 # `dafny verify` exits non-zero on any failed proof obligation, so a broken model
@@ -284,7 +300,7 @@ jobs:
284300 submodules : recursive
285301
286302 - name : Install LLVM/MLIR + ninja (Homebrew; links libc++)
287- # Pin to the toolshed image's LLVM major (ts26.4.1 -> 22) so the C backend
303+ # Pin to the toolshed image's LLVM major (ts26.4.2 -> 22) so the C backend
288304 # (routed through MLIR/EmitC, whose text may vary across MLIR majors) stays
289305 # comparable. Prefer the versioned formula; fall back to `llvm` (which IS 22
290306 # while 22 is current). The assertion below is the real pin: a Homebrew
0 commit comments