From e56dd1513eb343af3421b14db56e594dac51854d Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 9 Jun 2026 18:02:02 -0400 Subject: [PATCH 1/4] Canonical CI: grouped-tests.yml + root test/test_groups.toml Convert the root test workflow (Tests.yml) to the canonical grouped-tests.yml@v1 thin caller, with the group x version matrix declared once in test/test_groups.toml. - test/test_groups.toml: [Core] on lts/1/pre, [QA] on lts/1. - runtests.jl: dispatch on GROUP. Core (and All) runs the functional MethodOfLines example suite as before; QA activates an isolated test/qa environment and runs Aqua/JET. - test/qa/Project.toml + test/qa.jl: newly-wired QA group, isolating Aqua/JET (+ the package via [sources]) out of the main test env. - Tests.yml: thin caller. Linux-only (no os field); coverage-directories set to "src" (no ext/). on:/concurrency: preserved verbatim. - Project.toml: add [compat] entries for every [extras] dep (Lux/MethodOfLines/NonlinearSolve/OptimizationOptimJL/SafeTestsets/Test); julia already at the 1.10 LTS floor. The dead NeuralPDE matrix cells (commented out in runtests.jl, deps unresolvable) are dropped and replaced by the standard QA group. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Tests.yml | 18 +++--------------- Project.toml | 6 ++++++ test/qa.jl | 9 +++++++++ test/qa/Project.toml | 11 +++++++++++ test/runtests.jl | 30 ++++++++++++++++++------------ test/test_groups.toml | 5 +++++ 6 files changed, 52 insertions(+), 27 deletions(-) create mode 100644 test/qa.jl create mode 100644 test/qa/Project.toml create mode 100644 test/test_groups.toml diff --git a/.github/workflows/Tests.yml b/.github/workflows/Tests.yml index 7ad19aa..b7fa567 100644 --- a/.github/workflows/Tests.yml +++ b/.github/workflows/Tests.yml @@ -10,20 +10,8 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} jobs: - test: - name: "Tests" - strategy: - fail-fast: false - matrix: - group: - - MOL - - NeuralPDE - version: - - 'lts' - - '1' - - 'pre' - uses: "SciML/.github/.github/workflows/tests.yml@v1" + tests: + uses: "SciML/.github/.github/workflows/grouped-tests.yml@v1" with: - julia-version: "${{ matrix.version }}" - group: "${{ matrix.group }}" + coverage-directories: "src" secrets: "inherit" diff --git a/Project.toml b/Project.toml index c7d44e9..88b1ade 100644 --- a/Project.toml +++ b/Project.toml @@ -16,11 +16,17 @@ SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462" [compat] DomainSets = "0.6, 0.7" Interpolations = "0.14, 0.15, 0.16" +Lux = "1" Markdown = "1" +MethodOfLines = "0.11, 0.12" ModelingToolkit = "9.7.1, 10, 11" +NonlinearSolve = "3, 4" +OptimizationOptimJL = "0.3, 0.4" OrdinaryDiffEq = "6.80.0, 7" OrdinaryDiffEqSDIRK = "1.2.0, 2" +SafeTestsets = "0.1" SciMLBase = "2.69.0, 3.1" +Test = "1" julia = "1.10" [extras] diff --git a/test/qa.jl b/test/qa.jl new file mode 100644 index 0000000..b75e15a --- /dev/null +++ b/test/qa.jl @@ -0,0 +1,9 @@ +using PDESystemLibrary, Aqua, JET, Test + +@testset "Aqua" begin + Aqua.test_all(PDESystemLibrary) +end + +@testset "JET" begin + JET.test_package(PDESystemLibrary; target_defined_modules = true) +end diff --git a/test/qa/Project.toml b/test/qa/Project.toml new file mode 100644 index 0000000..623bb0d --- /dev/null +++ b/test/qa/Project.toml @@ -0,0 +1,11 @@ +[deps] +Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" +JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" +PDESystemLibrary = "d14f9848-fe58-4297-bd22-c1aba6f3000d" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[sources] +PDESystemLibrary = {path = "../.."} + +[compat] +julia = "1.10" diff --git a/test/runtests.jl b/test/runtests.jl index f91233f..b2cd811 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,18 +1,24 @@ # The test is simply that all of the examples build! -using SafeTestsets - const GROUP = get(ENV, "GROUP", "All") -const is_APPVEYOR = Sys.iswindows() && haskey(ENV, "APPVEYOR") -const is_TRAVIS = haskey(ENV, "TRAVIS") -if GROUP == "All" || GROUP == "MOL" - @time @safetestset "Test against MethodOfLines.jl" begin - include("mol_test.jl") +if GROUP == "QA" + using Pkg + Pkg.activate(joinpath(@__DIR__, "qa")) + Pkg.develop(path = joinpath(@__DIR__, "..")) + Pkg.instantiate() + include("qa.jl") +else + using SafeTestsets + + if GROUP == "All" || GROUP == "Core" + @time @safetestset "Test against MethodOfLines.jl" begin + include("mol_test.jl") + end end -end -# TODO: fix this when NeuralPDE.jl can be added to the test environment. (compat with Symbolics.jl 5) + # TODO: fix this when NeuralPDE.jl can be added to the test environment. (compat with Symbolics.jl 5) -# if GROUP == "All" || GROUP == "NeuralPDE" -# @time @safetestset "Test against NeuralPDE.jl" begin include("neuralpde_test.jl") end -# end + # if GROUP == "All" || GROUP == "NeuralPDE" + # @time @safetestset "Test against NeuralPDE.jl" begin include("neuralpde_test.jl") end + # end +end diff --git a/test/test_groups.toml b/test/test_groups.toml new file mode 100644 index 0000000..1fe84cd --- /dev/null +++ b/test/test_groups.toml @@ -0,0 +1,5 @@ +[Core] +versions = ["lts", "1", "pre"] + +[QA] +versions = ["lts", "1"] From 6f6395db0acbc024c3b20338a3c59dcd1308ccaf Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 9 Jun 2026 18:27:08 -0400 Subject: [PATCH 2/4] Add Pkg to test deps for Core group test/runtests.jl does `using Pkg` for the QA group's Pkg.activate, but Pkg was not declared in the Core test environment (project='.'), so the Core job died with `ArgumentError: Package Pkg not found in current path`. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 88b1ade..ed3714e 100644 --- a/Project.toml +++ b/Project.toml @@ -34,8 +34,9 @@ Lux = "b2108857-7c20-44ae-9111-449ecde12c47" MethodOfLines = "94925ecb-adb7-4558-8ed8-f975c56a0bf4" NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" OptimizationOptimJL = "36348300-93cb-4f02-beb5-3c3902f8871e" +Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Test", "MethodOfLines", "Lux", "NonlinearSolve", "OptimizationOptimJL", "SafeTestsets"] +test = ["Test", "MethodOfLines", "Lux", "NonlinearSolve", "OptimizationOptimJL", "SafeTestsets", "Pkg"] From 40120dc90d9ad3e96e87ee860fe725295bbff9ef Mon Sep 17 00:00:00 2001 From: "Chris Rackauckas (Claude)" Date: Tue, 9 Jun 2026 20:48:02 -0400 Subject: [PATCH 3/4] Hoist using SafeTestsets to top level to fix Core-group macro error Move `using SafeTestsets` out of the in-block GROUP branch to top level so the @safetestset macro is defined before the if-block (which uses it inline) is macro-expanded as a single unit. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/runtests.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index b2cd811..7eeeeba 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,4 +1,6 @@ # The test is simply that all of the examples build! +using SafeTestsets + const GROUP = get(ENV, "GROUP", "All") if GROUP == "QA" @@ -8,8 +10,6 @@ if GROUP == "QA" Pkg.instantiate() include("qa.jl") else - using SafeTestsets - if GROUP == "All" || GROUP == "Core" @time @safetestset "Test against MethodOfLines.jl" begin include("mol_test.jl") From 9786244becd39cf5a2dba7ae07400fedb06d7855 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sun, 14 Jun 2026 19:51:51 -0400 Subject: [PATCH 4/4] Adopt SciMLTesting v1.2 folder-based run_tests (on top of grouped-tests conversion) Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 5 +++-- test/{ => extras}/neuralpde_test.jl | 0 test/qa.jl | 9 --------- test/qa/Project.toml | 4 ++++ test/qa/qa.jl | 5 +++++ test/runtests.jl | 26 ++------------------------ 6 files changed, 14 insertions(+), 35 deletions(-) rename test/{ => extras}/neuralpde_test.jl (100%) delete mode 100644 test/qa.jl create mode 100644 test/qa/qa.jl diff --git a/Project.toml b/Project.toml index ed3714e..61b1bdc 100644 --- a/Project.toml +++ b/Project.toml @@ -26,6 +26,7 @@ OrdinaryDiffEq = "6.80.0, 7" OrdinaryDiffEqSDIRK = "1.2.0, 2" SafeTestsets = "0.1" SciMLBase = "2.69.0, 3.1" +SciMLTesting = "1" Test = "1" julia = "1.10" @@ -34,9 +35,9 @@ Lux = "b2108857-7c20-44ae-9111-449ecde12c47" MethodOfLines = "94925ecb-adb7-4558-8ed8-f975c56a0bf4" NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" OptimizationOptimJL = "36348300-93cb-4f02-beb5-3c3902f8871e" -Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Test", "MethodOfLines", "Lux", "NonlinearSolve", "OptimizationOptimJL", "SafeTestsets", "Pkg"] +test = ["Test", "MethodOfLines", "Lux", "NonlinearSolve", "OptimizationOptimJL", "SafeTestsets", "SciMLTesting"] diff --git a/test/neuralpde_test.jl b/test/extras/neuralpde_test.jl similarity index 100% rename from test/neuralpde_test.jl rename to test/extras/neuralpde_test.jl diff --git a/test/qa.jl b/test/qa.jl deleted file mode 100644 index b75e15a..0000000 --- a/test/qa.jl +++ /dev/null @@ -1,9 +0,0 @@ -using PDESystemLibrary, Aqua, JET, Test - -@testset "Aqua" begin - Aqua.test_all(PDESystemLibrary) -end - -@testset "JET" begin - JET.test_package(PDESystemLibrary; target_defined_modules = true) -end diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 623bb0d..8d42226 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -2,10 +2,14 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" PDESystemLibrary = "d14f9848-fe58-4297-bd22-c1aba6f3000d" +SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] PDESystemLibrary = {path = "../.."} [compat] +SafeTestsets = "0.1, 1" +SciMLTesting = "1" julia = "1.10" diff --git a/test/qa/qa.jl b/test/qa/qa.jl new file mode 100644 index 0000000..d77c55b --- /dev/null +++ b/test/qa/qa.jl @@ -0,0 +1,5 @@ +using PDESystemLibrary, Aqua, JET +using SciMLTesting + +run_qa(PDESystemLibrary; Aqua = Aqua, JET = JET, jet = true, + jet_kwargs = (; target_defined_modules = true)) diff --git a/test/runtests.jl b/test/runtests.jl index 7eeeeba..a18a7cc 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,24 +1,2 @@ -# The test is simply that all of the examples build! -using SafeTestsets - -const GROUP = get(ENV, "GROUP", "All") - -if GROUP == "QA" - using Pkg - Pkg.activate(joinpath(@__DIR__, "qa")) - Pkg.develop(path = joinpath(@__DIR__, "..")) - Pkg.instantiate() - include("qa.jl") -else - if GROUP == "All" || GROUP == "Core" - @time @safetestset "Test against MethodOfLines.jl" begin - include("mol_test.jl") - end - end - - # TODO: fix this when NeuralPDE.jl can be added to the test environment. (compat with Symbolics.jl 5) - - # if GROUP == "All" || GROUP == "NeuralPDE" - # @time @safetestset "Test against NeuralPDE.jl" begin include("neuralpde_test.jl") end - # end -end +using SciMLTesting +run_tests()