Skip to content

ci: route CI through SciML/.github reusable workflows (@v1) - #495

Merged
ChrisRackauckas merged 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:claude/centralize-ci
Jun 4, 2026
Merged

ci: route CI through SciML/.github reusable workflows (@v1)#495
ChrisRackauckas merged 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:claude/centralize-ci

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member

Centralize CI via SciML/.github reusable workflows (@v1)

This routes BoundaryValueDiffEq.jl's bespoke GitHub Actions workflows through the shared reusable workflows in SciML/.github, preserving the repo's existing matrices, triggers (master, paths/paths-ignore), concurrency, downstream package list, downgrade skip list, and the disabled state of the sublibrary downgrade job.

Converted workflows

File Was Now (SciML/.github/.github/workflows/...@v1)
SublibraryCI.yml (new) 6 per-sublibrary CI_BoundaryValueDiffEq*.yml (Core, Ascher, FIRK, MIRK, MIRKN, Shooting) sublibrary-tests.yml@v1 — auto-discovers lib/*, replaces all six
DowngradeSublibraries.yml bespoke per-lib downgrade matrix (disabled if: false, #417) sublibrary-downgrade.yml@v1 (kept disabled; julia-version: 1.11, skip: Pkg,TOML, allow-reresolve: false)
Downgrade.yml bespoke main-package downgrade downgrade.yml@v1 (julia-version: 1.11, skip: Pkg,TOML, allow-reresolve: false)
Downstream.yml bespoke IntegrationTest (ModelingToolkit.jl) downstream.yml@v1 (owner: SciML, repo: ModelingToolkit.jl, group: All, julia-version: 1.11)
Documentation.yml bespoke docs build documentation.yml@v1 (secrets: inherit)
FormatCheck.yml bespoke Runic via fredrikekre/runic-action runic.yml@v1
SpellCheck.yml bespoke crate-ci/typos spellcheck.yml@v1
BenchmarkPR.yml bespoke AirspeedVelocity benchpkg flow benchmark.yml@v1 (julia-version: 1.11)

Consolidation of per-sublibrary CI

The six CI_BoundaryValueDiffEq*.yml files each dev-ed lib/BoundaryValueDiffEqCore (and ran the sublibrary's own test project) on 1.11 + lts. These are replaced by one SublibraryCI.yml calling sublibrary-tests.yml@v1, which auto-discovers every lib/<name>/Project.toml, computes the affected-sublibrary set from the internal dependency graph, and develops local path-source deps for Julia < 1.11.

Note: sublibrary-tests.yml@v1 reads per-sublibrary group/version config from lib/<name>/test/test_groups.toml (defaulting to Core/QA groups if absent). This repo does not yet have those files, so each sublibrary will run with the default group matrix. Adding test_groups.toml to each lib/<name>/test/ is a follow-up the maintainer can do to restore custom per-lib groups (e.g. FIRK's EXPANDED/NESTED).

Intentionally left bespoke

  • CI_BoundaryValueDiffEq.yml (main-package tests) — runs on 1.11 and lts (Julia 1.10) and explicitly Pkg.develops all six lib/* path-sources before Pkg.test(). [sources] auto-development is a Julia ≥ 1.11 feature, so on the lts matrix entry the sublibs must be dev-ed manually. The reusable tests.yml@v1 has no hook to develop path-source deps, so converting it would break the lts job. Left as-is to avoid dropping coverage.
  • QA.yml — runs test/qa/runtests.jl against a dedicated test/qa project (JET/Aqua-style QA harness). No reusable expresses this.
  • TagBot.yml — TagBot automation (main package + per-subpackage subdir); not CI, left local per convention.

⚠️ Required-status-check NAMES change

The reusable workflows emit different job names than the old bespoke jobs, so branch protection required-status-check names must be updated after merge. Notable changes:

  • The six CI (BoundaryValueDiffEq<Sub>) checks are replaced by the sublibrary-tests.yml dynamic-matrix jobs under Sublibrary CI.
  • Downgrade / IntegrationTest / Documentation / format-check / Spell Check / benchmark job names now come from the reusable workflows (e.g. "Downgrade Tests", "Downstream Tests - All", "Build and Deploy Documentation", "Runic Format Check", "Spell Check with Typos", "Benchmarks").

Please update branch protection to match the new check names once this is reviewed.


Please ignore until reviewed by @ChrisRackauckas.

Convert bespoke GitHub Actions workflows into thin callers of the SciML/.github
reusable workflows, preserving the repo's matrices, triggers, and config.

- Consolidate the six per-sublibrary CI_BoundaryValueDiffEq*.yml workflows into a
  single SublibraryCI.yml calling sublibrary-tests.yml@v1 (auto-discovers lib/*).
- DowngradeSublibraries.yml -> sublibrary-downgrade.yml@v1 (kept disabled per SciML#417).
- Downgrade.yml -> downgrade.yml@v1, Downstream.yml -> downstream.yml@v1,
  Documentation.yml -> documentation.yml@v1, FormatCheck.yml -> runic.yml@v1,
  SpellCheck.yml -> spellcheck.yml@v1, BenchmarkPR.yml -> benchmark.yml@v1.
- Left bespoke: CI_BoundaryValueDiffEq.yml (main-package tests need an explicit
  Pkg.develop of lib/* path-sources on the lts/1.10 matrix entry, which the
  reusable tests.yml cannot express since [sources] is Julia >= 1.11 only),
  QA.yml (JET/QA harness with no reusable), TagBot.yml.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas
ChrisRackauckas marked this pull request as ready for review June 4, 2026 15:24
@ChrisRackauckas
ChrisRackauckas merged commit f9d7134 into SciML:master Jun 4, 2026
4 of 8 checks passed
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member Author

Follow-up fix for a coverage drop introduced by this PR: #496. The consolidated SublibraryCI.yml (sublibrary-tests.yml@v1) made BoundaryValueDiffEqFIRK run ZERO test items, because its runtests.jl dispatches on GROUP == EXPANDED|NESTED while the reusable sends GROUP=<pkg> / <pkg>_QA (no test_groups.toml present to remap). #496 restores the six bespoke per-sublibrary CI_*.yml (and DowngradeSublibraries.yml) verbatim, restores the julia-version: '1.10' pin on the Documentation caller, and keeps the faithful main-package reusable conversions. Please ignore until reviewed by @ChrisRackauckas.

@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Click to check benchmark results
master 174f745... master / 174f745...
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK2() 0.638 ± 0.033 s 0.601 ± 0.011 s 1.06 ± 0.058
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK3() 12.5 ± 1 ms 11.8 ± 1.2 ms 1.06 ± 0.14
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK4() 2.65 ± 0.52 ms 2.52 ± 0.62 ms 1.05 ± 0.33
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK5() 3.1 ± 0.67 ms 3.05 ± 0.66 ms 1.02 ± 0.31
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK6() 1.47 ± 0.39 ms 1.47 ± 0.35 ms 1 ± 0.36
Simple Pendulum/IIP/MultipleShooting(10, Tsit5; grid_coarsening = false) 1.98 ± 0.71 ms 1.46 ± 0.64 ms 1.36 ± 0.77
Simple Pendulum/IIP/MultipleShooting(10, Tsit5; grid_coarsening = true) 2.95 ± 1.2 ms 2.88 ± 1.1 ms 1.02 ± 0.58
Simple Pendulum/IIP/MultipleShooting(100, Tsit5; grid_coarsening = false) 0.0386 ± 0.011 s 0.0387 ± 0.0049 s 0.997 ± 0.32
Simple Pendulum/IIP/MultipleShooting(100, Tsit5; grid_coarsening = true) 0.0601 ± 0.0085 s 0.061 ± 0.0053 s 0.987 ± 0.16
Simple Pendulum/IIP/Shooting(Tsit5()) 0.232 ± 0.09 ms 0.223 ± 0.089 ms 1.04 ± 0.58
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK2() 0.801 ± 0.057 s 0.712 ± 0.0096 s 1.13 ± 0.082
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK3() 15.4 ± 5.2 ms 14.6 ± 4.5 ms 1.05 ± 0.48
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK4() 3.1 ± 0.28 ms 3.04 ± 0.18 ms 1.02 ± 0.11
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK5() 3.75 ± 0.31 ms 3.72 ± 0.3 ms 1.01 ± 0.11
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK6() 1.77 ± 0.27 ms 1.74 ± 0.18 ms 1.02 ± 0.19
Simple Pendulum/OOP/MultipleShooting(10, Tsit5; grid_coarsening = false) 3.3 ± 3.5 ms 3.29 ± 3.3 ms 1 ± 1.5
Simple Pendulum/OOP/MultipleShooting(10, Tsit5; grid_coarsening = true) 6.31 ± 6.5 ms 6.21 ± 6.4 ms 1.02 ± 1.5
Simple Pendulum/OOP/MultipleShooting(100, Tsit5; grid_coarsening = false) 0.0876 ± 0.0056 s 0.0825 ± 0.0034 s 1.06 ± 0.081
Simple Pendulum/OOP/MultipleShooting(100, Tsit5; grid_coarsening = true) 0.141 ± 0.04 s 0.129 ± 0.0041 s 1.09 ± 0.31
Simple Pendulum/OOP/Shooting(Tsit5()) 0.572 ± 0.12 ms 0.575 ± 0.03 ms 0.994 ± 0.21
time_to_load 6.77 ± 0.076 s 6.67 ± 0.6 s 1.01 ± 0.092
### Benchmark Plots A plot of the benchmark results has been uploaded as an artifact to the workflow run for this PR. Go to "Actions"->"Benchmark a pull request"->[the most recent run]->"Artifacts" (at the bottom).

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