From c5f40d1cff29f57d66a9e608723ecc3a384e5fbe Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 9 Jun 2026 17:57:18 -0400 Subject: [PATCH 1/4] Canonical CI: grouped-tests.yml + root test/test_groups.toml Convert the root test workflow (CI.yml) to the canonical thin caller that delegates to SciML/.github grouped-tests.yml@v1, with the group x version matrix declared once in test/test_groups.toml. Category B refactor: Aqua previously ran inline inside the Core group via test/qa.jl. It is now wired as its own QA group, gated on GROUP=="QA" and isolated in test/qa/Project.toml (Aqua + Test + EasyModelAnalysis via a path source). runtests.jl activates that env, develops the package, and instantiates before including qa.jl. Functional tests remain under Core (and All); Datafit is preserved as its own group. Matrix match: the prior Core@1 / Datafit@1 (ubuntu-latest, Linux-only) functional matrix is reproduced exactly; QA@1 is newly wired. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/CI.yml | 14 +------------- test/qa/Project.toml | 11 +++++++++++ test/runtests.jl | 11 ++++++++++- test/test_groups.toml | 8 ++++++++ 4 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 test/qa/Project.toml create mode 100644 test/test_groups.toml diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 1312ab6..b1e6c11 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -15,17 +15,5 @@ concurrency: cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} jobs: tests: - name: "Tests" - strategy: - fail-fast: false - matrix: - group: - - Core - - Datafit - version: - - '1' - uses: "SciML/.github/.github/workflows/tests.yml@v1" - with: - julia-version: "${{ matrix.version }}" - group: "${{ matrix.group }}" + uses: "SciML/.github/.github/workflows/grouped-tests.yml@v1" secrets: "inherit" diff --git a/test/qa/Project.toml b/test/qa/Project.toml new file mode 100644 index 0000000..0fc31bb --- /dev/null +++ b/test/qa/Project.toml @@ -0,0 +1,11 @@ +[deps] +Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" +EasyModelAnalysis = "ef4b24a4-a090-4686-a932-e7e56a5a83bd" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[sources] +EasyModelAnalysis = {path = "../.."} + +[compat] +Aqua = "0.8" +julia = "1.10" diff --git a/test/runtests.jl b/test/runtests.jl index 503c4f5..f54a84d 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -5,7 +5,6 @@ const GROUP = get(ENV, "GROUP", "All") @time begin if GROUP == "All" || GROUP == "Core" @testset "Core" begin - @time @safetestset "Quality Assurance" include("qa.jl") @time @safetestset "Basic Tests" include("basics.jl") @time @safetestset "Sensitivity Tests" include("sensitivity.jl") @time @safetestset "Ensemble Tests" include("ensemble.jl") @@ -17,4 +16,14 @@ const GROUP = get(ENV, "GROUP", "All") if GROUP == "All" || GROUP == "Datafit" @time @safetestset "Datafit Tests" include("datafit.jl") end + + if GROUP == "QA" + using Pkg + Pkg.activate(joinpath(@__DIR__, "qa")) + Pkg.develop(path = joinpath(@__DIR__, "..")) + Pkg.instantiate() + @time @safetestset "Quality Assurance" include("qa.jl") + elseif GROUP == "All" + @time @safetestset "Quality Assurance" include("qa.jl") + end end diff --git a/test/test_groups.toml b/test/test_groups.toml new file mode 100644 index 0000000..97e6b3f --- /dev/null +++ b/test/test_groups.toml @@ -0,0 +1,8 @@ +[Core] +versions = ["1"] + +[Datafit] +versions = ["1"] + +[QA] +versions = ["1"] From 16cdc8eb7abb8eb46a1b5964352066b20d37af49 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 9 Jun 2026 18:28:51 -0400 Subject: [PATCH 2/4] Add Pkg to test deps for grouped-tests Core group The Core test group runs with project='.', and test/runtests.jl does `using Pkg` to activate the QA sub-environment. Pkg was not a declared test dependency in the root test env, so 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 1744564..07dc107 100644 --- a/Project.toml +++ b/Project.toml @@ -41,8 +41,9 @@ julia = "1.10" [extras] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" +Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Aqua", "SafeTestsets", "Test"] +test = ["Aqua", "Pkg", "SafeTestsets", "Test"] From f2eca22791f900b4521a3a128944d4636bcb710c Mon Sep 17 00:00:00 2001 From: "Chris Rackauckas (Claude)" Date: Sat, 13 Jun 2026 06:49:45 -0400 Subject: [PATCH 3/4] QA: normalize versions to [lts, 1] (drop pre) The root test/test_groups.toml [QA] group ran Aqua/JET on only ["1"]. Normalize to the canonical QA set ["lts", "1"] so static analysis also runs on the LTS Julia. Core/Datafit groups are untouched. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/test_groups.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_groups.toml b/test/test_groups.toml index 97e6b3f..7d44ab8 100644 --- a/test/test_groups.toml +++ b/test/test_groups.toml @@ -5,4 +5,4 @@ versions = ["1"] versions = ["1"] [QA] -versions = ["1"] +versions = ["lts", "1"] From 1c00e527a5d4507b566a66c6185fc93637e68737 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sun, 14 Jun 2026 19:54:43 -0400 Subject: [PATCH 4/4] Adopt SciMLTesting v1.2 folder-based run_tests (on top of grouped-tests conversion) Core stays as the top-level test/*.jl files; the Datafit group moves to test/Datafit/datafit.jl and QA moves to test/qa/qa.jl so the Core glob does not pick them up. runtests.jl becomes `using SciMLTesting; run_tests()` (folder-discovery). SciMLTesting added to test deps and the qa @safetestset sub-env; the old Pkg-based QA activation harness is dropped (SciMLTesting handles activate/develop/instantiate). Datafit runs in the main test env (its deps are already in the test target), so it needs no sub-env Project. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 5 +++-- test/{ => Datafit}/datafit.jl | 0 test/qa/Project.toml | 4 ++++ test/{ => qa}/qa.jl | 0 test/runtests.jl | 30 ++---------------------------- 5 files changed, 9 insertions(+), 30 deletions(-) rename test/{ => Datafit}/datafit.jl (100%) rename test/{ => qa}/qa.jl (100%) diff --git a/Project.toml b/Project.toml index 07dc107..d643861 100644 --- a/Project.toml +++ b/Project.toml @@ -35,15 +35,16 @@ Reexport = "1" SafeTestsets = "0.1" SciMLBase = "2.54, 3.1" SciMLExpectations = "2" +SciMLTesting = "1" Test = "1" Turing = "0.33, 0.34, 0.35, 0.36, 0.45" julia = "1.10" [extras] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" -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 = ["Aqua", "Pkg", "SafeTestsets", "Test"] +test = ["Aqua", "SafeTestsets", "SciMLTesting", "Test"] diff --git a/test/datafit.jl b/test/Datafit/datafit.jl similarity index 100% rename from test/datafit.jl rename to test/Datafit/datafit.jl diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 0fc31bb..03e281b 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -1,6 +1,8 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" EasyModelAnalysis = "ef4b24a4-a090-4686-a932-e7e56a5a83bd" +SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -8,4 +10,6 @@ EasyModelAnalysis = {path = "../.."} [compat] Aqua = "0.8" +SafeTestsets = "1, 0.1" +SciMLTesting = "1" julia = "1.10" diff --git a/test/qa.jl b/test/qa/qa.jl similarity index 100% rename from test/qa.jl rename to test/qa/qa.jl diff --git a/test/runtests.jl b/test/runtests.jl index f54a84d..80ba099 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,29 +1,3 @@ -using SafeTestsets, Test +using SciMLTesting -const GROUP = get(ENV, "GROUP", "All") - -@time begin - if GROUP == "All" || GROUP == "Core" - @testset "Core" begin - @time @safetestset "Basic Tests" include("basics.jl") - @time @safetestset "Sensitivity Tests" include("sensitivity.jl") - @time @safetestset "Ensemble Tests" include("ensemble.jl") - @time @safetestset "Threshold Tests" include("threshold.jl") - @time @safetestset "Example Tests" include("examples.jl") - end - end - - if GROUP == "All" || GROUP == "Datafit" - @time @safetestset "Datafit Tests" include("datafit.jl") - end - - if GROUP == "QA" - using Pkg - Pkg.activate(joinpath(@__DIR__, "qa")) - Pkg.develop(path = joinpath(@__DIR__, "..")) - Pkg.instantiate() - @time @safetestset "Quality Assurance" include("qa.jl") - elseif GROUP == "All" - @time @safetestset "Quality Assurance" include("qa.jl") - end -end +run_tests()