Skip to content

Auto-populate downgrade skip (stdlibs + in-repo sublibs); default Julia 1.10#73

Merged
ChrisRackauckas merged 2 commits into
SciML:masterfrom
ChrisRackauckas-Claude:smart-downgrade-skip
Jun 8, 2026
Merged

Auto-populate downgrade skip (stdlibs + in-repo sublibs); default Julia 1.10#73
ChrisRackauckas merged 2 commits into
SciML:masterfrom
ChrisRackauckas-Claude:smart-downgrade-skip

Conversation

@ChrisRackauckas-Claude
Copy link
Copy Markdown

Ignore until reviewed by @ChrisRackauckas.

What

Makes the reusable downgrade workflows auto-populate the skip list so callers
no longer have to hand-maintain a long list of Julia standard libraries (and,
for the sublibrary workflow, every in-repo lib/* package).

sublibrary-downgrade.yml

Before the julia-actions/julia-downgrade-compat step (per sublibrary matrix
entry) it now computes an effective skip:

effective skip = (all Julia standard libraries)
               ∪ (in-repo sublibrary NAMES discovered under lib/*)
               ∪ (the caller's `skip` input, now treated as EXTRA skips)
  • Stdlibs are enumerated robustly from Pkg in a small Julia step. Note the
    Pkg.Types.stdlibs() dict is keyed by UUID, so the package name is
    taken from each value (the value is a (name, version) tuple on recent
    Julia and a plain String on older Julia — both are handled).
  • In-repo sublibrary names come from basename lib/*/ (only directories with a
    Project.toml), reusing the same discovery convention as the discover job.
    These matter because in-repo path-[sources] sublibs must not be
    downgrade-pinned.

downgrade.yml (single-package)

Same idea, minus sublibs:

effective skip = (all Julia standard libraries) ∪ (the caller's `skip` input)

Other changes

  • The skip input is re-documented as ADDITIONAL deps to skip beyond the
    auto-included Julia stdlibs (and in-repo sublibraries), and its default is now
    "".
  • The julia-version default changes from "lts" to "1.10": downgrade tests
    the minimum-supported Julia floor, which is 1.10 across SciML.

Why

Callers were copy-pasting long skip: lists of stdlibs/sublibs that drifted
over time and were easy to get wrong. With auto-population, callers can now
drop their hand-listed skip entirely
and only pass genuinely-extra deps (if
any) via skip.

Backward compatibility

Fully backward-compatible. Callers that still pass a long hand-listed skip
keep working: their list is simply unioned into the effective skip. Redundant
stdlib/sublib entries are harmless because julia-downgrade-compat treats
skip as a membership filter (it splits on commas, strips whitespace, and
drops empties — verified against the action's downgrade.jl).

Validation

  • actionlint (v1.7.7, with shellcheck enabled) on both files: exit 0.
  • Locally simulated the effective-skip shell logic: confirmed the list contains
    the stdlibs (Pkg, TOML, LinearAlgebra, …), the lib/* sublib names
    (and excludes a lib/ dir without a Project.toml), and the caller's extra
    skips — with no leading/trailing comma in the empty-skip default case.
  • Fed the resulting list through the action's own skip-parsing line
    (filter(!isempty, map(strip, split(ARGS[1], ",")))) to confirm it parses
    cleanly, including the redundant-duplicate (backward-compat) case.
  • Stdlib enumeration verified on Julia 1.10 / 1.11 / 1.12.

Unchanged: the lib/* discovery job, group-env, allow_reresolve: false,
and the projects/exclude inputs.

Note: this does not retag v1. Retagging is a manual step after review.

🤖 Generated with Claude Code

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

…ia 1.10

The reusable downgrade workflows previously required callers to hand-list
every Julia standard library (and, for the sublibrary workflow, every in-repo
lib/* package) in the `skip` input so they would not be downgrade-pinned.
This was verbose, easy to get wrong, and drifted as stdlibs/sublibs changed.

Now the effective skip list is computed automatically:

  sublibrary-downgrade.yml:
    effective skip = Julia stdlibs ∪ in-repo lib/* sublibrary names ∪ caller `skip`
  downgrade.yml:
    effective skip = Julia stdlibs ∪ caller `skip`

Standard libraries are enumerated robustly from Pkg (the dict is keyed by
UUID, so the name is taken from each value, handling both the (name, version)
tuple shape on recent Julia and the plain-String shape on older Julia). The
in-repo sublibrary names come from `basename lib/*/` (only dirs with a
Project.toml), matching the existing discovery logic. The `skip` input is now
documented as ADDITIONAL deps beyond the auto-included set, with default "".

The `julia-version` default changes from "lts" to "1.10": downgrade tests the
minimum-supported Julia floor, which is 1.10 across SciML.

Backward compatible: callers that still pass a long hand-listed skip keep
working, since their list is simply unioned in (any redundant stdlib/sublib
entries are harmless, as the action treats skip as a membership filter).
Callers can now drop their hand-listed skip entirely.

Unchanged: lib/* discovery, group-env, allow_reresolve:false, projects/exclude.
Validated with actionlint (exit 0, shellcheck enabled).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ChrisRackauckas-Claude pushed a commit to ChrisRackauckas-Claude/.github that referenced this pull request Jun 8, 2026
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>
…d 1.10

Use the moving "lts" alias for the downgrade julia-version input default
(in both downgrade.yml and sublibrary-downgrade.yml) so the downgrade floor
tracks the LTS as it advances. It is currently 1.10, but the alias keeps it
future-proof. Descriptions updated accordingly.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisRackauckas ChrisRackauckas marked this pull request as ready for review June 8, 2026 08:23
@ChrisRackauckas ChrisRackauckas merged commit 7cbfbc3 into SciML:master Jun 8, 2026
2 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