Skip to content

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

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)#603
ChrisRackauckas merged 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:claude/centralize-ci

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

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

This routes the repo's bespoke standard GitHub Actions workflows through the shared reusable workflows in SciML/.github/.github/workflows/*.yml@v1, preserving each workflow's existing matrices, triggers, and config. Pure YAML/git rewiring — no source changes.

Converted workflows

File Now calls Preserved config
Downgrade.yml downgrade.yml@v1 group: Core, julia-version: 1.10, skip: Pkg,TOML, allow-reresolve: false; master push/PR triggers + paths-ignore: docs/**
Downstream.yml downstream.yml@v1 Full SciML downstream package/group matrix (SciMLBase, DiffEqBase x3, DiffEqSensitivity, OrdinaryDiffEq x2, DelayDiffEq, SciMLSensitivity Core1-6, LabelledArrays); julia-version: 1; IntegrationTest name + triggers
FormatCheck.yml runic.yml@v1 Runic format check; master/main/release- push + tags + PR triggers
SpellCheck.yml spellcheck.yml@v1 pull_request trigger

Intentionally left bespoke (coverage cannot be faithfully expressed by a reusable)

  • Tests.yml — sets JULIA_NUM_THREADS: "2" on the runtest step to exercise the threaded FastBroadcast / VectorOfArray{SArray} regression tests (issues Multithreading with RecursiveArrayTools.VectorOfArray is broken #564 / Multi-threading VectorOfArray of SVectors is broken on RecursiveArrayTools.jl version 4 #570) in test/interface_tests.jl. The reusable tests.yml@v1 has no thread input, so converting it would silently run those tests single-threaded and drop the regression coverage. Per the centralization spec ("never lose coverage"), this workflow is left as-is.
  • GPU.yml — targets a specific [self-hosted, Linux, X64, gpu] runner with GROUP=GPU. The reusable self-hosted input resolves to a bare self-hosted label and cannot target the GPU-labeled runner, so this is left local.
  • Documentation.yml — already a thin caller of documentation.yml@v1; untouched.
  • TagBot.yml — non-CI release automation (JuliaRegistries/TagBot); no reusable equivalent, left local.

Monorepo / sublibrary handling

The repo has 3 sublibraries under lib/ (RecursiveArrayToolsArrayPartitionAnyAll, RecursiveArrayToolsRaggedArrays, RecursiveArrayToolsShorthandConstructors), each with its own Project.toml + test/. However, there is no per-sublibrary CI (no CI_*.yml, no SublibraryCI.yml, no DowngradeSublibraries.yml). The sublibraries are tested as GROUPs of the main package's single Tests.yml (RaggedArrays, ArrayPartitionAnyAll, ShorthandConstructors), and none of them carry the test/test_groups.toml that sublibrary-tests.yml@v1 auto-discovery requires. Introducing a SublibraryCI.yml here would discover nothing and would not replace the existing GROUP-based coverage, so no sublibrary CI workflow was added (N/A). Since Tests.yml is left bespoke for the threading reason above, its sublibrary GROUP coverage is preserved unchanged.

NOTE: required-status-check names change

Converting to reusable workflows changes the job names that appear as status checks (e.g. the reusable emits Tests / Downstream Tests - ..., Downgrade, Runic, Spell Check with Typos). Branch protection required-status-check names must be updated accordingly, or required checks will report as missing.


Please ignore until reviewed by @ChrisRackauckas.

Convert bespoke standard workflows to thin callers of the reusable
workflows in SciML/.github (@v1), preserving each workflow's existing
matrices, triggers, and config:

- Downgrade.yml   -> downgrade.yml@v1   (group=Core, julia 1.10, skip=Pkg,TOML, allow-reresolve=false)
- Downstream.yml  -> downstream.yml@v1  (full SciML downstream package/group matrix preserved)
- FormatCheck.yml -> runic.yml@v1       (Runic format check)
- SpellCheck.yml  -> spellcheck.yml@v1

Left bespoke intentionally:
- Tests.yml: sets JULIA_NUM_THREADS=2 to exercise the threaded
  FastBroadcast/VectorOfArray{SArray} regression tests (issues SciML#564/SciML#570);
  tests.yml@v1 has no thread input, so converting would drop that coverage.
- GPU.yml: targets a specific [self-hosted, Linux, X64, gpu] runner with
  GROUP=GPU; the reusable self-hosted input resolves to a bare `self-hosted`
  label and cannot target the GPU runner.
- Documentation.yml: already a reusable caller (documentation.yml@v1).
- TagBot.yml: non-CI release automation, no reusable equivalent.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas ChrisRackauckas marked this pull request as ready for review June 4, 2026 15:28
@ChrisRackauckas ChrisRackauckas merged commit 709a7d6 into SciML:master Jun 4, 2026
23 of 37 checks passed
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