Skip to content

Canonical CI: grouped-tests.yml + root test/test_groups.toml#154

Merged
ChrisRackauckas merged 4 commits into
SciML:masterfrom
ChrisRackauckas-Claude:grouped-tests-ci
Jun 15, 2026
Merged

Canonical CI: grouped-tests.yml + root test/test_groups.toml#154
ChrisRackauckas merged 4 commits into
SciML:masterfrom
ChrisRackauckas-Claude:grouped-tests-ci

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

Summary

Converts the root test workflow to the canonical SciML thin-caller pattern: CI.yml now calls SciML/.github/.github/workflows/grouped-tests.yml@v1, and the group × version matrix is declared once in a root test/test_groups.toml.

This is a structural conversion. Tests / Aqua / JET were not run locally; they run in CI.

Changes

  • .github/workflows/CI.yml — replaced the hand-maintained group × version matrix job with the reusable grouped-tests.yml@v1 caller. on:/branch triggers preserved verbatim; secrets: inherit. with: coverage: false (this package never collected coverage). Linux-only, so no os axis. Other workflows left untouched.
  • test/test_groups.toml (new, repo root) — [Core] on ["lts","1","pre"] (reproduces the old matrix exactly) plus a newly-wired [QA] on ["lts","1"].
  • test/runtests.jl — added GROUP dispatch (default "All" runs the existing suite as Core; GROUP=="QA" runs the isolated QA environment).
  • test/qa/Project.toml + test/qa/qa.jl (new) — isolated Aqua + JET environment running Aqua.test_all(FEniCS) and JET.test_package(FEniCS; target_defined_modules=true), with FEniCS via [sources] path.
  • Project.toml — benign metadata fixes: raised [compat] julia from 1.6 to 1.10 (LTS floor); added Test = "1" compat for the Test test-only extra (every [extras] dep now has a [compat] entry).

Matrix match

compute_affected_sublibraries.jl … --root-matrix emits:

group versions runner
Core lts, 1, pre ubuntu-latest
QA lts, 1 ubuntu-latest

The Core rows reproduce the previous CI.yml matrix (group: [Core] × version: [lts, 1, pre], ubuntu-latest) exactly. QA is newly added.

Notes

  • QA group newly wired; Aqua/JET run in CI — any failures will be triaged in follow-up. No exclusions were pre-added to qa.jl.
  • The previous CI.yml ran the Core suite inside container: cmhyett/julia-fenics:latest (providing the FEniCS Python install via PyCall). The reusable tests.yml has no container: input, so the canonical caller cannot reproduce that container; only apt-packages is available and no apt package matches the pinned image. The Core runtime FEniCS provisioning therefore needs a follow-up decision (custom runner image / apt-packages / build step) — flagged here for review. This does not affect the QA group (Aqua/JET are static and don't require FEniCS Python).

Ignore until reviewed by @ChrisRackauckas.

🤖 Generated with Claude Code

Convert the root test workflow (CI.yml) to the canonical thin caller of
SciML/.github/.github/workflows/grouped-tests.yml@v1, declaring its
group x version matrix once in test/test_groups.toml.

- CI.yml: replace the hand-maintained group x version matrix job with the
  reusable grouped-tests.yml caller (coverage:false; on:/triggers preserved
  verbatim). Linux-only (no os axis).
- test/test_groups.toml: [Core] on [lts,1,pre] (reproduces the old matrix
  exactly) + newly-wired [QA] on [lts,1].
- runtests.jl: add GROUP dispatch (existing suite is Core/All; GROUP==QA runs
  the isolated QA env).
- test/qa/{Project.toml,qa.jl}: isolated Aqua + JET environment running
  Aqua.test_all(FEniCS) and JET.test_package(FEniCS; target_defined_modules=true).
- Project.toml: raise [compat] julia 1.6 -> 1.10 (LTS floor); add Test = "1"
  compat for the test-only extra (benign metadata fixes).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ts caller

The grouped-tests conversion dropped the Docker container the pre-conversion
CI ran in, so every Core job failed with the FEniCS Python stack missing.
Pass it through the new container input of grouped-tests.yml.

Depends on SciML/.github#86 merging and a v1 retag.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor Author

Pushed 5ec5475 restoring the Docker container the pre-conversion CI ran in: the conversion dropped container: cmhyett/julia-fenics:latest (the FEniCS Python stack), which is why all Core jobs failed. The caller now passes container: "cmhyett/julia-fenics:latest" through grouped-tests.yml.

Dependency / merge ordering: this relies on the new container input added in SciML/.github#86. That PR must merge and v1 must be retagged before CI here can go green — and this PR must not merge before that happens (until the retag, the @v1 workflows don't know the container input and the workflow call will fail validation).

🤖 Generated with Claude Code

ChrisRackauckas and others added 2 commits June 13, 2026 06:36
…input

The grouped-tests caller passes container: cmhyett/julia-fenics:latest, which
was unsupported by SciML/.github grouped-tests.yml@v1 at the time of the last
run (startup_failure on 2026-06-10). v1 now resolves to v1.13.0, which adds the
container input, so re-run CI to validate.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ts conversion)

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor Author

Added the SciMLTesting v1.2 folder-based run_tests harness on top of this grouped-tests conversion; merges as one PR (grouped-tests + SciMLTesting v1.2).

@ChrisRackauckas ChrisRackauckas marked this pull request as ready for review June 15, 2026 04:57
@ChrisRackauckas ChrisRackauckas merged commit 1e13279 into SciML:master Jun 15, 2026
5 of 10 checks passed
ChrisRackauckas added a commit that referenced this pull request Jun 20, 2026
* Fix QA group dispatch: pass QA via the `qa` kwarg, not `groups`

The canonicalization conversion (#154) placed the QA group inside the
`groups` Dict, but SciMLTesting's `run_tests` routes `GROUP="QA"` through
a dedicated `elseif group == "QA"` branch that consumes the `qa` keyword
argument and short-circuits before the `groups` table is ever consulted.
With `qa` unset, that branch throws

    ArgumentError: run_tests: GROUP="QA" was requested but no `qa` body
    was provided

so the QA CI job failed on master before loading FEniCS. Moving the QA
spec to the `qa` kwarg (matching the documented SciMLTesting form) makes
`GROUP="QA"` reach the QA body, while `all = ["Core"]` keeps QA out of the
default `GROUP="All"`/local `]test` run as before.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci: re-trigger against SciML/.github v1.15.1

Verify the scoped GitHub-hosted runner routing (SciML/.github #97) now
sends this repo's apt-packages/container legs to ubuntu-24.04.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Fix FEniCS package-quality (QA) failures surfaced by the QA group

The QA group now actually runs FEniCS's own Aqua/JET checks, surfacing
six pre-existing package-quality issues. Fix the real causes:

- Type piracy + Base.write method ambiguity: `write(path, solution,
  time::Number)` extended `Base.write` with no FEniCS-owned argument
  type, which is piracy and also clashed with `Base.write(::IO, x1,
  xs...)`. Stop importing `write` from Base so `write`/`store` are
  FEniCS-owned functions (still exported); behavior unchanged.
- Undefined export: `export fenicsclass` referenced a nonexistent
  binding; the macro is `@fenicsclass`. Export the macro.
- JET no-matching-method: `Argument(V, number)` lowered to
  `Argument(::Any, ::Any, ::Nothing)` because `part::StringOrSymbol`
  cannot accept its own `nothing` default. Widen to
  `Union{StringOrSymbol, Nothing}`.
- Stale dependency: ProgressMeter was declared but unused (only a
  dead `@require ... using ProgressMeter` no-op). Drop it from deps,
  compat, and the no-op __init__ block.
- deps_compat: add a `[compat]` entry for the LinearAlgebra stdlib.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Keep write/store as Base.write extension; fix piracy+ambiguity via arg types

The prior commit removed `write` from the `Base` import to kill the type
piracy, but that made `FEniCS.write` a distinct exported binding that
clashed with the exported `Base.write` ("both FEniCS and Base export
write"), breaking the Core examples (tutorial8/9: `UndefVarError: write`).

Restore `import Base: ...write` so `write` stays a single function, and
fix the two QA findings on it through argument types instead:

- Type piracy: `write` now takes `solution::fenicsobject` (a FEniCS-owned
  type), so the method is owned by FEniCS rather than pirating Base. The
  unused, unavoidably-piratical `write(::Any, ::PyObject, ::Number)`
  overload is dropped (use `store` for raw vectors like `vector(u)`).
- Method ambiguity: type `path::PyObject` (what `XDMFFile`/`TimeSeries`
  return), which is disjoint from `Base.write(::IO, ...)` and
  `write(::AbstractString, ...)`, removing both ambiguities.

`store` is FEniCS-owned (not a Base function), so its overloads are not
piracy; `path::PyObject` is added there too for symmetry/correctness.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants