downgrade: auto-skip [sources] path deps (fix Unsatisfiable on monorepo/path-dep downgrade)#87
Merged
ChrisRackauckas merged 1 commit intoJun 13, 2026
Conversation
A dep declared in a Project.toml `[sources]` table is satisfied in-tree by a path/url checkout, not the registry. julia-downgrade-compat rewrites its `[compat]` to `=<floor>`, which the in-tree version cannot satisfy -> "Unsatisfiable requirements ... no versions left" before any test runs. downgrade.yml: in the "Compute effective downgrade skip list" step, for each dir in `projects` (comma-separated), parse `<dir>/Project.toml`'s `[sources]` keys via `using TOML; get(parsefile, "sources", Dict()) |> keys` and union them into EFFECTIVE_SKIP. Missing files/sections are guarded; the found names are echoed. sublibrary-downgrade.yml: the existing skip step already unions stdlibs and lib/* basenames; additionally parse the downgraded sublibrary's own `[sources]` keys (catches url/aliased sources that the basename skip misses) and union them in. README: note that `[sources]` path/url deps are auto-skipped for both workflows. 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.
Problem
When a
Project.tomldeclares a[sources]table (path/url deps — common inmonorepos and
lib/*workspaces), that dep is satisfied in-tree by thecheckout, not from the registry.
julia-actions/julia-downgrade-compatrewritesevery dep's
[compat]to=<floor>, but the in-tree path version is whateverthe checkout is — so the pin can't be satisfied and resolution dies with:
before any test runs. This is the org-wide
[sources]+[extras]+[compat]downgrade breakage.
Fix
Treat every
[sources]dep the same way stdlibs are already treated: neverdowngrade-pin them, by unioning their names into the effective skip list.
downgrade.ymlIn the existing "Compute effective downgrade skip list" step, for each dir
in
projects(comma-separated, default.), parse<dir>/Project.toml's[sources]keys and union them intoEFFECTIVE_SKIP:Missing
Project.toml/ missing[sources]section are guarded; the foundsource names are echoed.
EFFECTIVE_SKIPis nowstdlibs ∪ [sources] ∪ inputs.skip.sublibrary-downgrade.ymlIts skip step already unions stdlibs + in-repo
lib/*directory basenames.Added: parse the downgraded sublibrary's own
[sources]keys(
matrix.project/Project.toml) and union them in. The basename skip onlymatches deps whose source name equals a
lib/dir name; parsing the actual[sources]keys also catches url-/aliased sources.README.mdDocuments that
[sources]path/url deps are auto-skipped for both workflows.Local verification
actionlintclean on both workflows.Project.tomlfixtures (with[sources], without[sources], a missing dir, and a sublibrary's own[sources]). Extracted-step-body output:NOTE
v1must be retagged after merge for callers (which pin@v1) to pick thisup.
Ignore until reviewed by @ChrisRackauckas.