docs: add canonical monorepo structure spec (Monorepo.md)#74
Merged
ChrisRackauckas merged 3 commits intoJun 8, 2026
Merged
Conversation
Document the standard SciML monorepo layout for new repos and contributors: umbrella root + lib/<Name> full packages, the [sources] dependency graph, the one-group-one-folder test structure with dependency-driven per-group Project.tomls, group naming and the shared <REPO>_TEST_GROUP env var, test_groups.toml conventions, the thin @v1 caller workflow set, the standard repo files, and the Runic formatting default (Catalyst/JumpProcesses JuliaFormatter exception). Every concrete value and snippet is taken from the live @v1 reusable workflows here and from the reference SciML/OrdinaryDiffEq.jl master. Link it from README.md under a new "Monorepo structure" section. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The BDFL has set these as the target standards going forward; ODE and the @v1 reusable workflows are being migrated to them. Rewrite the affected sections of Monorepo.md (and the README monorepo section) to document the targets, with a Status/rollout note flagging the in-flight migration. - Add a "Status / rollout" note near the top referencing the in-flight PRs (SciML/.github SciML#73 = auto-skip + downgrade-1.10; the monorepo version- matrix update; the fleet TagBot thin-caller conversion). - Version matrix (test_groups.toml + root CI): base/Core = ["lts","1","pre"], QA = ["lts","1"], GPU = ["1"]; drop the pinned "1.11" middle version. - Downgrade callers use julia-version "1.10" (the minimum-supported floor) for both downgrade.yml and sublibrary-downgrade.yml. - Downgrade skip is auto-populated centrally (Julia stdlibs + in-repo lib/* names + caller extras); callers no longer hand-list them. allow_reresolve stays hardcoded false centrally with no input. - TagBot.yml is a thin caller of tagbot.yml@v1: root tagbot job (+ on: triggers) and, for monorepos, a tagbot-subpackages matrix over each registered lib/<Name> with subdir; single-package repos have only the root job. Replaces the old inlined JuliaRegistries/TagBot@v1 form. - Standardize the catch-all sentinel to Title-case "All" in prose and the runtests.jl snippet; note it is a local-only default CI never sets. - Expand the .gitignore block to the full canonical set, framed as typical entries. - Fix a pre-existing typos hit ("mis-format") so spellcheck stays clean. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
In Monorepo.md and README.md, the downgrade julia-version (for downgrade.yml and sublibrary-downgrade.yml) is now documented as "lts": the LTS alias (currently 1.10), tracking the LTS as it advances. Project.toml [compat] julia = "1.10" floors and other workflows' version specs are unchanged. 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.
Adds
Monorepo.md, a comprehensive reference for the canonical SciML monorepo standard — the layout future monorepos and contributors should follow — and links it fromREADME.mdunder a new Monorepo structure section.The reference implementation throughout is SciML/OrdinaryDiffEq.jl. Every concrete value, file shape, and code snippet was verified against the live
@v1reusable workflows in this repo and OrdinaryDiffEq.jlmasterbefore being written down.What it documents
lib/<Name>/full packages (name/uuid/version/authors/[deps]/[sources]/[compat]/[extras]/[targets],src/,test/,LICENSE.md, component-templateREADME.md).[sources]graph — sublibs list in-repo deps by relative path; root lists tested sublibs as{path = "lib/<Name>"}; true dependency direction; never a[sources]entry without a matching[deps]; howcompute_affected_sublibraries.jlbuilds the affected + reverse-dep matrix from[deps].test/<Group>/folder; dependency-driven per-groupProject.toml(no extra deps → no Project.toml, runs in main env, part ofAll; adds deps → isolated env viaPkg.activate, excluded fromAll); QA intest/qa; light main[extras]/[targets].test; no top-leveltest/Project.toml.All, neverlowercase(get(ENV, ...)); shared<REPO>_TEST_GROUPthreaded bygroup-env-name; rootruntests.jl_detect_sublibrary_groupdispatcher.test_groups.toml— requiredversions, optionalrunner/timeout/num_threads/local_only; version convention Core["lts","1.11","1","pre"], QA["1"], GPU["1"]; GPU is a dep-adding group on a self-hosted runner — no bespokeGPU.yml.@v1callers withsecrets: "inherit"(SublibraryCI,DowngradeSublibraries,CI,Downgrade,Documentation,Downstream,FormatCheck/RunicSuggestions,SpellCheck,TagBotroot +TagBot-Subpackagesmatrix,DependabotAutoMerge,DocPreviewCleanup,benchmark); downgrade is strict fleet-wide (allow_reresolve: falsehardcoded centrally, no input)..codecov.yml(comment: false),.typos.toml,.gitignore, per-packageLICENSE.md.Notes for review
@v1(which equalsorigin/master/v1.6.0):sublibrary-downgrade.yml/downgrade.ymlhardcodeallow_reresolve: falsewith noallow-reresolveinput, anddocumentation.ymlhas arunnerinput for GPU-queue docs. The README's oldersublibrary-downgrade.ymltable still lists anallow-reresolveinput; the new doc reflects the current strict-no-input behavior (flagging the discrepancy here for a possible README follow-up).["lts","1.11","1","pre"]/["1"](per ODE'stest_groups.tomland the detection script defaults), andDowngrade*callers run on Julia1.11in ODE today; theskipinput defaults toPkg,TOMLand the caller lists stdlibs + in-repo sublibs (it is not auto-populated centrally).typosis clean on the new file.🤖 Generated with Claude Code