From 0f49cd59cb81d653accfea28d3c71ef4b10b9bc6 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 16 Jun 2026 05:18:50 -0400 Subject: [PATCH] Fix GPU CI: route GROUP=GPU to the Core test set via explicit-args run_tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The GPU.yml workflow runs the suite with GROUP="GPU", but the folder-discovery run_tests() only accepts All/Core/QA plus groups declared in test_groups.toml (Core, QA), so it errored: GROUP="GPU" is not a declared group. GPU is a capability lane, not a folder of files — it runs the *same* Core files on a CUDA-equipped runner so the CUDA.functional()-gated testsets in reflect.jl / MCSample.jl self-activate. This cannot be expressed as a separate folder. Switch to explicit-args run_tests (the DeepEquilibriumNetworks.jl convention): core = the 9 Core files in their original runtests order; groups = {"GPU" => core_body}; qa = test/qa; all = ["Core"]. GROUP=GPU now routes to the Core body, matching the pre-v1.2 dispatcher where GPU fell into the non-QA branch. Verified locally on Julia 1.10 against SciMLTesting v1.2: GROUP=GPU -> Core, GROUP=Core -> Core, GROUP=All -> Core, GROUP=QA -> QA. Runic-clean. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/runtests.jl | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index a18a7cc..67425de 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,2 +1,32 @@ using SciMLTesting -run_tests() +using SafeTestsets + +# GPU's GROUP semantics are capability-based, not folder-partitioned: the GPU lane +# runs the *same* Core test files on a CUDA-equipped runner, where the +# `CUDA.functional()`-gated testsets inside reflect.jl/MCSample.jl self-activate. +# It therefore cannot be a separate folder of files, so this uses explicit-args +# run_tests rather than folder discovery. +function core_body() + @safetestset "ProblemConstructors" include("ProblemConstructor.jl") + @safetestset "reflect" include("reflect.jl") + @safetestset "MLP" include("MLP.jl") + @safetestset "Deep Splitting" include("DeepSplitting.jl") + @safetestset "DeepBSDE" include("DeepBSDE.jl") + @safetestset "MC Sample" include("MCSample.jl") + @safetestset "NNStopping" include("NNStopping.jl") + @safetestset "NNKolmogorov" include("NNKolmogorov.jl") + return @safetestset "NNParamKolmogorov" include("NNParamKolmogorov.jl") +end + +run_tests(; + core = core_body, + groups = Dict( + # GPU is the self-hosted CUDA runner lane: the same Core suite, where the + # CUDA-gated testsets run because CUDA.functional() is true there. + "GPU" => core_body, + ), + qa = (; env = joinpath(@__DIR__, "qa"), body = joinpath(@__DIR__, "qa", "qa.jl")), + # Curated "All": run only Core. GPU (self-hosted CUDA lane) and QA stay + # selectable by name but out of the aggregate. + all = ["Core"], +)