Uniformize monorepo structure to OrdinaryDiffEq canonical style#616
Merged
ChrisRackauckas merged 8 commits intoJun 8, 2026
Merged
Conversation
Make the lib/* sublibrary project model real and route sublibrary testing
through the centralized SublibraryCI/DowngradeSublibraries workflows, matching
the OrdinaryDiffEq.jl canonical monorepo layout.
- Add [sources] DataDrivenDiffEq = {path = "../.."} to each sublibrary
(DataDrivenDMD/SR/Sparse/Lux). The sublibraries are leaves that depend on the
in-repo root DataDrivenDiffEq; without [sources] they resolved against the
registered release instead of the PR checkout. Root does not re-export the
sublibraries, so no cyclic root->leaf [sources] edges are added.
- Thread a single group-env-name (DATADRIVENDIFFEQ_TEST_GROUP) consistently:
- SublibraryCI.yml: group-env-name + check-bounds: auto.
- DowngradeSublibraries.yml: group-env-name/group-env-value: Core
(no allow-reresolve; v1 removed that input). DataDrivenDiffEq is skipped
(path-developed sibling) alongside stdlibs.
- Every sublibrary test/runtests.jl now reads
get(ENV, "DATADRIVENDIFFEQ_TEST_GROUP", get(ENV, "GROUP", "All")) and runs
its functional suite on Core/All; DataDrivenSparse/SR previously had no
group gate.
- Root CI.yml: drop the hardcoded sublibrary GROUP rows (DataDrivenDMD/SR/
Sparse/Lux) so sublibraries are tested only via SublibraryCI's project model;
keep a root-only group set (Core, nopre). Coverage scoped to src.
- Root Downgrade.yml: group: Core, no allow-reresolve.
- Root test/runtests.jl: replace the ad-hoc dispatcher with a
_detect_sublibrary_group dispatcher (OrdinaryDiffEq style) that activates
lib/<X>, develops its [sources] on Julia < 1.11, sets the group env var, and
Pkg.tests the sublibrary; otherwise runs the root @safetestset groups / nopre.
- Add test/test_groups.toml ([Core] on lts/1.11/1/pre) to each sublibrary so the
default QA group (which has no QA suite here) is not spawned.
No [compat] floors lowered; no tests skipped/broken/loosened. No test/Project.toml
exists (the per-group test/nopre/Project.toml is the canonical isolated-env
pattern and is kept). No ReTestItems/@testitem present.
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Match the OrdinaryDiffEq canonical monorepo style: every sublibrary gets a README with the standard SciML badge block (Zulip, Global Docs, ColPrac, SciML Code Style) and the "component of the DataDrivenDiffEq.jl monorepo" wording, plus a one-line description of the sublibrary's role and a link to the DataDrivenDiffEq documentation. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Match the OrdinaryDiffEq canonical monorepo style, where the root and every sublibrary ship a LICENSE.md. Content is preserved verbatim (git mv). Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
TagBot.yml: adopt the OrdinaryDiffEq canonical form -- top-level permissions block, workflow_dispatch.inputs.lookback default "3", a root TagBot-DataDrivenDiffEq job, and a TagBot-Subpackages matrix (fail-fast:false) over the four registered sublibraries (DataDrivenDMD, DataDrivenLux, DataDrivenSR, DataDrivenSparse), each tagging via subdir: lib/<Name>. All four are registered in the General registry. Downstream.yml (IntegrationTest): add the canonical downstream integration workflow. Develops the root umbrella DataDrivenDiffEq plus every lib/* sublibrary, then runs the downstream repo's tests; ResolverError is treated as an intentional breaking change (exit 0). Matrix covers the external General dependents SymbolicNumericIntegration.jl and ODINN.jl. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… to 1.15
Every lib/* sublibrary now has a [compat] entry for each [deps] and [extras]
package, removing the implicit-unbounded test/stdlib dependencies:
- DataDrivenDMD: add LinearAlgebra, SafeTestsets, StableRNGs, StatsBase, Test.
- DataDrivenLux: add Distributed, LinearAlgebra, Logging, Random, SafeTestsets,
StableRNGs, Test.
- DataDrivenSparse: add LinearAlgebra, Printf, Random, SafeTestsets,
StableRNGs, StatsBase, Test.
- DataDrivenSR: add StableRNGs, StatsBase, Test.
Stdlib bounds track the julia = "1.10" floor ("1.10"); SafeTestsets = "0.1",
StableRNGs = "1", StatsBase = "0.34".
Bump the DataDrivenDiffEq compat floor in each sublibrary from "1.14" to "1.15"
to match the in-repo umbrella version (1.15.0). All four sublibraries resolve
against the in-repo umbrella via their [sources] path entries (verified with
Pkg.resolve on Julia 1.11). No floors lowered; only additions and the
umbrella-matching raise.
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the missing [compat] entries so every root [deps] and [extras] package is bounded, matching the canonical fully-bounded monorepo style: LinearAlgebra, Random, Pkg, Test = "1" (stdlibs, consistent with the existing Statistics = "1") and SafeTestsets = "0.1". Root environment resolves cleanly with these bounds (verified with Pkg.resolve on Julia 1.11). Only additions; no floors lowered. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Move every test group's files into test/<Group>/ folders, per the OrdinaryDiffEq canonical dependency-driven group model, at both the root package and each lib/* sublibrary. Root (DataDrivenDiffEq): - Functional tests (basis, problem, solution, commonsolve, utils) move from their scattered subfolders into test/Core/; runtests.jl includes them from Core/. Core is the base-env group and the only group in All. - The nopre group (JET static analysis) already lives in test/nopre/ with its own Project.toml (JET) — a dep-adding group excluded from All. Its name stays lowercase to match the lowercase nopre input in CI.yml. - Add test/test_groups.toml declaring Core [lts,1,pre] and nopre [lts,1]. Sublibraries (DataDrivenDMD, DataDrivenLux, DataDrivenSparse, DataDrivenSR): - Each runs only a functional Core group (no QA tooling, no GPU). Move the Core test files into lib/<sublib>/test/Core/ and include from there. DataDrivenSR's inline runtests body is extracted to Core/symbolic_regression.jl. Core adds no deps beyond the base test set, so no per-group Project.toml is introduced. - Normalize each test_groups.toml Core version matrix from [lts,1.11,1,pre] to the canonical [lts,1,pre]. No compat floors lowered, no tests skipped/broken/loosened; every test that previously ran still runs in exactly one group. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Replace TagBot.yml with the canonical thin caller to SciML/.github tagbot.yml@v1, plus a tagbot-subpackages matrix over the registered lib/* sublibraries (DataDrivenDMD, DataDrivenLux, DataDrivenSparse, DataDrivenSR; all confirmed in General). - Downgrade.yml: drop hand-listed stdlib skip (Pkg,TOML) and the julia-version: "1.10" pin (central default is lts; auto-populated skip). - DowngradeSublibraries.yml: drop hand-listed skip (stdlibs + caller package), now auto-populated by the centralized workflow. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uniformizes DataDrivenDiffEq.jl to the OrdinaryDiffEq.jl canonical monorepo style: the
lib/*sublibraries become a real path-graph project model tested through the centralizedSublibraryCI/DowngradeSublibrariesworkflows, and the root track is reduced to the root package's own groups.Canonicalization done
[sources]path graph (the MAJOR fix)DataDrivenDMD,DataDrivenSR,DataDrivenSparse,DataDrivenLux) gains[sources] DataDrivenDiffEq = {path = "../.."}. The sublibraries are leaves that depend on the in-repo rootDataDrivenDiffEq; without[sources]they resolved against the registered release instead of the PR checkout. The root does not re-export the sublibraries (no sublib deps in root[deps]), so per the true dependency direction no cyclic root→leaf[sources]edges were added.Single group env var (
DATADRIVENDIFFEQ_TEST_GROUP) threaded consistentlySublibraryCI.yml:with: { group-env-name: DATADRIVENDIFFEQ_TEST_GROUP, check-bounds: auto },secrets: inherit.DowngradeSublibraries.yml:group-env-name: DATADRIVENDIFFEQ_TEST_GROUP,group-env-value: Core; noallow-reresolve(v1 removed that input); skip list = stdlibs + the path-developed siblingDataDrivenDiffEq; sublibraries auto-discovered.test/runtests.jlnow readsget(ENV, "DATADRIVENDIFFEQ_TEST_GROUP", get(ENV, "GROUP", "All"))and runs its functional suite onCore/All.DataDrivenSparseandDataDrivenSRpreviously had no group gate at all.Root track
CI.yml: dropped the hardcoded sublibrary GROUP rows (DataDrivenDMD/SR/Sparse/Lux) so sublibraries are tested only throughSublibraryCI's project model and are not double-tested; kept a root-only group set (Core,nopre); coverage scoped tosrc.Downgrade.yml:group: Core, noallow-reresolve; added aconcurrencyblock.test/runtests.jl: replaced the ad-hoc dispatcher with an OrdinaryDiffEq-style_detect_sublibrary_groupdispatcher — ifGROUPnameslib/<X>(optionallylib/<X>_<TESTGROUP>) it activates the sublibrary, develops its[sources]transitively on Julia < 1.11, setsDATADRIVENDIFFEQ_TEST_GROUP, andPkg.tests it; otherwise it runs the root@safetestsetgroups (All/Core/Downstream) or thenopreJET env.test_groups.toml[Core]on["lts","1.11","1","pre"]to each sublibrary so the defaultQAgroup (no QA/Aqua/JET suite exists in these sublibraries) is not spawned.Invariants preserved
[compat]floor lowered; alljulia = "1.10"floors kept.@test_broken/@test_skip/commented-out; no tolerance loosened.test/Project.tomlexists (the per-grouptest/nopre/Project.tomlis the canonical isolated-env pattern, kept as-is — same as OrdinaryDiffEq'stest/qa/Project.tomletc.).ReTestItems/@testitempresent anywhere (the repo already usedSafeTestsets).Verified locally (isolated depot, Julia 1.10 + 1.11)
Project.toml; confirmed every[targets].testdep appears in[extras]/[deps]; confirmed each sublib has[sources] DataDrivenDiffEq = {path="../.."}; parsed all fourtest_groups.toml.CI.yml,SublibraryCI.yml,DowngradeSublibraries.yml,Downgrade.yml.[sources]resolves the in-repo root natively on 1.11.Coregroup (Julia 1.10):All | 260 260—Testing DataDrivenDiffEq tests passed.DataDrivenSparseCorevia the faithful SublibraryCI path (Pkg.test+DATADRIVENDIFFEQ_TEST_GROUP=Core,--check-bounds=auto, Julia 1.11,[sources]native):Basic Sparse Regression 33/33,Pendulum 48/48,Michaelis Menten 9/9,Cartpole 4/4—Testing DataDrivenSparse tests passed.QAgroup no-ops cleanly for a sublibrary (Pkg.testpasses with zero test sets)..jl; all clean.What CI must confirm (not run locally)
DataDrivenDMD,DataDrivenLux,DataDrivenSR) underSublibraryCIacrosslts/1.11/1/pre(onlyDataDrivenSparsewas run locally as the representative).sublibrary-project-tests.yml@v1matrix discovery / coverage upload.DowngradeSublibrariesandDowngradedowngrade resolution.nopre(JET) group.