From f94ef3b58b79d1fd1964dfbf2cde4e00e2b6581c Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 9 Jun 2026 18:11:40 -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 thin caller using SciML/.github grouped-tests.yml@v1, with the test matrix declared in test/test_groups.toml at the repo root. - Tests.yml: replace the hand-maintained group matrix job with the thin grouped-tests.yml@v1 caller; on:/concurrency: preserved verbatim. - test/test_groups.toml: Core on [lts, 1, pre], QA on [lts, 1]. - runtests.jl: add GROUP dispatch (existing suites under Core; QA group activates the isolated test/qa env and runs Aqua/JET). - test/qa: new isolated env (Aqua + JET + Test + package via [sources]) and qa.jl running Aqua.test_all and JET.test_package(target_defined_modules). - Project.toml: add [compat] entries for the test-only extras missing them (Distributions, LinearAlgebra, SafeTestsets, Test); julia compat already at the 1.10 LTS floor. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Tests.yml | 13 ++----------- Project.toml | 4 ++++ test/qa/Project.toml | 14 ++++++++++++++ test/qa/qa.jl | 12 ++++++++++++ test/runtests.jl | 27 +++++++++++++++++++-------- test/test_groups.toml | 5 +++++ 6 files changed, 56 insertions(+), 19 deletions(-) create mode 100644 test/qa/Project.toml create mode 100644 test/qa/qa.jl create mode 100644 test/test_groups.toml diff --git a/.github/workflows/Tests.yml b/.github/workflows/Tests.yml index c533c05..d5daf11 100644 --- a/.github/workflows/Tests.yml +++ b/.github/workflows/Tests.yml @@ -18,15 +18,6 @@ concurrency: jobs: tests: - name: "Tests" - strategy: - fail-fast: false - matrix: - group: - - Core - uses: "SciML/.github/.github/workflows/tests.yml@v1" - with: - group: ${{ matrix.group }} - julia-version: '1' + uses: "SciML/.github/.github/workflows/grouped-tests.yml@v1" secrets: "inherit" - + diff --git a/Project.toml b/Project.toml index 25cb60c..5461486 100644 --- a/Project.toml +++ b/Project.toml @@ -14,12 +14,16 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [compat] Catalyst = "15" DiffEqBase = "6, 7" +Distributions = "0.25" +LinearAlgebra = "1" MacroTools = "^0.5.5" OrdinaryDiffEq = "6, 7" Reexport = "1" RuntimeGeneratedFunctions = "0.5" +SafeTestsets = "0.1" SteadyStateDiffEq = "1, 2" Sundials = "4, 5, 6" +Test = "1" julia = "1.10" [extras] diff --git a/test/qa/Project.toml b/test/qa/Project.toml new file mode 100644 index 0000000..8e4fde4 --- /dev/null +++ b/test/qa/Project.toml @@ -0,0 +1,14 @@ +[deps] +Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" +FiniteStateProjection = "069e79ea-d681-44e8-b935-95bdaf9e8f28" +JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[sources] +FiniteStateProjection = { path = "../.." } + +[compat] +Aqua = "0.8" +JET = "0.9,0.10,0.11" +Test = "1" +julia = "1.10" diff --git a/test/qa/qa.jl b/test/qa/qa.jl new file mode 100644 index 0000000..9a31475 --- /dev/null +++ b/test/qa/qa.jl @@ -0,0 +1,12 @@ +using FiniteStateProjection +using Aqua +using JET +using Test + +@testset "Aqua" begin + Aqua.test_all(FiniteStateProjection) +end + +@testset "JET" begin + JET.test_package(FiniteStateProjection; target_defined_modules = true) +end diff --git a/test/runtests.jl b/test/runtests.jl index 2d2be8b..3d8e02a 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,13 +1,24 @@ -using SafeTestsets +using SafeTestsets, Pkg + +const GROUP = get(ENV, "GROUP", "All") @time begin - @safetestset "Telegraph" begin - include("telegraph.jl") - end - @safetestset "FeedbackLoop" begin - include("feedbackloop.jl") + if GROUP == "All" || GROUP == "Core" + @safetestset "Telegraph" begin + include("telegraph.jl") + end + @safetestset "FeedbackLoop" begin + include("feedbackloop.jl") + end + @safetestset "BirthDeath2D" begin + include("birthdeath2D.jl") + end end - @safetestset "BirthDeath2D" begin - include("birthdeath2D.jl") + + if GROUP == "QA" + Pkg.activate(joinpath(@__DIR__, "qa")) + Pkg.develop(PackageSpec(path = dirname(@__DIR__))) + Pkg.instantiate() + include("qa/qa.jl") 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 1765aa86b08c046df074e6bcf2e75bfff2ae266d Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 9 Jun 2026 18:26:14 -0400 Subject: [PATCH 2/4] Add Pkg as test dependency for Core group The grouped runtests.jl uses `using Pkg` for the QA group's Pkg.activate, but Pkg was not a declared test dependency. Under project='.' the Core job failed 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 5461486..619e666 100644 --- a/Project.toml +++ b/Project.toml @@ -30,10 +30,11 @@ julia = "1.10" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" +Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" SteadyStateDiffEq = "9672c7b4-1e72-59bd-8a11-6ac3964bc41f" Sundials = "c3572dad-4567-51f8-b174-8c6c989267f4" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Distributions", "LinearAlgebra", "OrdinaryDiffEq", "SafeTestsets", "SteadyStateDiffEq", "Sundials", "Test"] +test = ["Distributions", "LinearAlgebra", "OrdinaryDiffEq", "Pkg", "SafeTestsets", "SteadyStateDiffEq", "Sundials", "Test"] From f9e1be9071b555bf6c23aca93f880c1ec7d6b2c0 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 9 Jun 2026 20:15:10 -0400 Subject: [PATCH 3/4] Add Pkg to QA sub-environment for grouped tests The grouped-tests QA group activates test/qa as its own project, so the QA sub-env must carry Pkg (used by the activation/instantiate path). Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/qa/Project.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 8e4fde4..ca470b9 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" FiniteStateProjection = "069e79ea-d681-44e8-b935-95bdaf9e8f28" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" +Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] From 51af5bdf3dda27015a83b445f7c6e7e9fd4ba183 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sun, 14 Jun 2026 19:52:38 -0400 Subject: [PATCH 4/4] Adopt SciMLTesting v1.2 folder-based run_tests (on top of grouped-tests conversion) Core = top-level test/*.jl (telegraph, feedbackloop, birthdeath2D); QA = test/qa/. runtests.jl becomes `using SciMLTesting; run_tests()` (folder-discovery). Adds SciMLTesting + SafeTestsets to the test deps and the qa sub-env; drops Pkg (only the old hand-rolled harness used it). Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 7 ++++--- test/qa/Project.toml | 5 ++++- test/runtests.jl | 25 ++----------------------- 3 files changed, 10 insertions(+), 27 deletions(-) diff --git a/Project.toml b/Project.toml index 619e666..06b8119 100644 --- a/Project.toml +++ b/Project.toml @@ -20,7 +20,8 @@ MacroTools = "^0.5.5" OrdinaryDiffEq = "6, 7" Reexport = "1" RuntimeGeneratedFunctions = "0.5" -SafeTestsets = "0.1" +SafeTestsets = "0.1, 1" +SciMLTesting = "1" SteadyStateDiffEq = "1, 2" Sundials = "4, 5, 6" Test = "1" @@ -30,11 +31,11 @@ julia = "1.10" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" -Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" SteadyStateDiffEq = "9672c7b4-1e72-59bd-8a11-6ac3964bc41f" Sundials = "c3572dad-4567-51f8-b174-8c6c989267f4" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Distributions", "LinearAlgebra", "OrdinaryDiffEq", "Pkg", "SafeTestsets", "SteadyStateDiffEq", "Sundials", "Test"] +test = ["Distributions", "LinearAlgebra", "OrdinaryDiffEq", "SafeTestsets", "SciMLTesting", "SteadyStateDiffEq", "Sundials", "Test"] diff --git a/test/qa/Project.toml b/test/qa/Project.toml index ca470b9..8a8cf05 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -2,7 +2,8 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" FiniteStateProjection = "069e79ea-d681-44e8-b935-95bdaf9e8f28" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" -Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -11,5 +12,7 @@ FiniteStateProjection = { path = "../.." } [compat] Aqua = "0.8" JET = "0.9,0.10,0.11" +SafeTestsets = "0.1, 1" +SciMLTesting = "1" Test = "1" julia = "1.10" diff --git a/test/runtests.jl b/test/runtests.jl index 3d8e02a..80ba099 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,24 +1,3 @@ -using SafeTestsets, Pkg +using SciMLTesting -const GROUP = get(ENV, "GROUP", "All") - -@time begin - if GROUP == "All" || GROUP == "Core" - @safetestset "Telegraph" begin - include("telegraph.jl") - end - @safetestset "FeedbackLoop" begin - include("feedbackloop.jl") - end - @safetestset "BirthDeath2D" begin - include("birthdeath2D.jl") - end - end - - if GROUP == "QA" - Pkg.activate(joinpath(@__DIR__, "qa")) - Pkg.develop(PackageSpec(path = dirname(@__DIR__))) - Pkg.instantiate() - include("qa/qa.jl") - end -end +run_tests()