Skip to content

Commit 9c11a85

Browse files
ChrisRackauckas-ClaudeChrisRackauckasclaude
authored
Fix downgrade CI: split the AD test group out of the downgrade lane (#59)
* Raise FunctionWrappers compat floor to 1.1.3 to fix downgrade CI The Downgrade (Core) job was failing with an Unsatisfiable resolution on Julia lts (1.10). When julia-downgrade-compat pins every dep to its lowest allowed version, FunctionWrappers was pinned to 1.0.0 (floor of "1"), but Mooncake (a tested weakdep/extension target) requires FunctionWrappers >= 1.1.3. That made the merged test environment unsatisfiable. Raising the FunctionWrappers compat floor from "1" to "1.1.3" matches the version actually exercised by the test extras and makes the minimum-version resolution satisfiable. Verified locally on Julia 1.10: the merged test project now resolves at minimum versions, the package loads, and basictests pass with FunctionWrappers 1.1.3. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Fix downgrade CI: run downgrade leg on Julia 1.11 + raise PrecompileTools/TruncatedStacktraces floors The Downgrade (Core) job was red on lts (Julia 1.10). Three distinct, genuine problems, fixed at their causes: 1. Unsatisfiable resolution. The resolver (julia-downgrade-compat -> Resolver.jl) minimizes Julia to the floor of its --julia range; on lts that range (1.10) admits 1.10.0. But every Mooncake 0.5.x test extra requires julia >= 1.10.8, so Mooncake can never be placed -> Unsatisfiable. Even at 1.10.8 the Enzyme 0.13 + EnzymeCore 0.8 + Mooncake 0.5 minimum-version set has no solution on the 1.10 LTS stdlib line; it resolves only once Julia reaches 1.11.6 (Mooncake 0.5's 1.11 floor). Resolver.jl ignores the project's [compat] julia for the Julia version itself, so no Project.toml change can force julia >= 1.10.8 -- the caller must request it. Fix: pin the Downgrade caller to julia-version "1.11" (resolver picks 1.11.6). Core 1.10 support is still exercised by the regular Tests workflow. 2. PrecompileTools floor too low. With resolution fixed, the minimum PrecompileTools 1.0.0 fails to precompile GPUCompiler (pulled transitively by Enzyme) on Julia 1.11: "UndefVarError: PrecompileTools not defined in GPUCompiler". GPUCompiler's compat says PrecompileTools "1", but 1.0.0 does not actually provide the API GPUCompiler uses; 1.1.0 does. Raise the floor to "1.1". 3. TruncatedStacktraces floor too low. src uses TruncatedStacktraces.@truncate_stacktrace, which does not exist before v1.1.0 ("UndefVarError: @truncate_stacktrace not defined in TruncatedStacktraces" at the v1.0.0 floor). Raise the floor to "1.1". Also reverts the earlier misdiagnosed FunctionWrappers floor raise (1 -> 1.1.3): no registered test dep constrains FunctionWrappers and the source only uses the FunctionWrapper{R,A} constructor available since 1.0.0. Version bumped to 1.9.2 for the compat-floor changes. Local verification on Julia 1.11 (the new downgrade leg): the actual julia-downgrade-compat downgrade.jl resolves the merged test project (exit 0, "Successfully resolved minimal versions"); the downgraded manifest (Enzyme 0.13.0 / GPUCompiler 0.27.5 / PrecompileTools 1.1.0 / TruncatedStacktraces 1.1.0 / Mooncake 0.5.0) precompiles cleanly; and Pkg.test GROUP=Core passes (FunctionWrappersWrappers.jl 48/48, BigFloat + UnionAll 7/7). Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Split AD test group out of the downgrade lane The Downgrade (Core) red was caused by the AD test extras (Enzyme, EnzymeCore, Mooncake) being part of the root test target. The downgrade resolver (julia-downgrade-compat -> Resolver.jl) minimizes Julia to the floor of its --julia range, but every Mooncake 0.5.x requires julia >= 1.10.8 and the Enzyme 0.13 + EnzymeCore 0.8 + Mooncake 0.5 floor set has no minimum-version solution on the 1.10 LTS line, so the merged test env was Unsatisfiable (the Resolver.jl <-> Mooncake wall, StefanKarpinski/Resolver.jl#24). The AD deps shouldn't gate the downgrade lane. Fix: move the AD test deps into their own per-group sub-environments (test/Enzyme/Project.toml, test/Mooncake/Project.toml) and drop them from the root [extras]/[targets].test. SciMLTesting's run_tests already supports per-group sub-envs (the `env = ...` group form, as the nopre group uses); the Enzyme/Mooncake groups now declare their own env. The downgrade job runs GROUP=Core, which resolves only the root test target -- now AD-free -- so it is satisfiable on lts (Julia 1.10) again. The AD groups are added to test/test_groups.toml so they run as their own jobs in normal CI (lts, 1); previously they were declared in runtests.jl but had no matrix entry and so never ran. Reverts the #59 accommodations that masked the AD-resolution problem: - .github/workflows/Downgrade.yml: julia-version back to "lts" (no longer needs to be pinned to 1.11 to dodge the AD floor set). - PrecompileTools compat floor back to "1": the 1.0.0 GPUCompiler precompile failure only arose because Enzyme pulled GPUCompiler into the downgrade env; with AD out of that env it no longer applies. Kept, because they are genuine minimum-version bugs independent of AD (both verified locally on Julia 1.10): - TruncatedStacktraces = "1.1": src uses @truncate_stacktrace, which does not exist before v1.1.0 (1.0.0 is a 25-line stub). - FunctionWrappers = "1.1.2": 1.0.0 / 1.1.0 / 1.1.1 fail to build the FunctionWrapper cfunction ("Module IR does not contain specified entry function") on Julia 1.10; 1.1.2 is the lowest that builds and runs. This is exercised by the package's own PrecompileTools @compile_workload, so it is a real floor regardless of the AD split. Local verification (Julia 1.10/lts, the actual downgrade leg): - julia-downgrade-compat downgrade.jl: exit 0, "Successfully resolved minimal versions for . (with extras)"; downgraded manifest contains no Enzyme/Mooncake/GPUCompiler (FunctionWrappers 1.1.2, PrecompileTools 1.0.0, TruncatedStacktraces 1.1.0, SafeTestsets 0.1.0, SciMLTesting 1.0.0). - Pkg.test GROUP=Core with allow_reresolve=false, force_latest_compatible_version=false (the julia-runtest CI settings): precompiles cleanly and passes (FunctionWrappersWrappers.jl 48/48, BigFloat + UnionAll 7/7). - The AD groups still run via their sub-envs: GROUP=Enzyme 65/65, GROUP=Mooncake 13/13 (Julia 1.11), with the Enzyme/Mooncake extensions precompiling in-group. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent afd0fe9 commit 9c11a85

5 files changed

Lines changed: 46 additions & 9 deletions

File tree

Project.toml

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "FunctionWrappersWrappers"
22
uuid = "77dc65aa-8811-40c2-897b-53d922fa7daf"
33
authors = ["Chris Elrod <elrodc@gmail.com> and contributors"]
4-
version = "1.9.1"
4+
version = "1.9.2"
55

66
[deps]
77
FunctionWrappers = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e"
@@ -20,21 +20,18 @@ FunctionWrappersWrappersMooncakeExt = "Mooncake"
2020
[compat]
2121
Enzyme = "0.13"
2222
EnzymeCore = "0.8"
23-
FunctionWrappers = "1"
23+
FunctionWrappers = "1.1.2"
2424
Mooncake = "0.5"
2525
PrecompileTools = "1"
2626
SafeTestsets = "0.1, 1"
2727
SciMLTesting = "1"
28-
TruncatedStacktraces = "1"
28+
TruncatedStacktraces = "1.1"
2929
julia = "1.10"
3030

3131
[extras]
32-
Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
33-
EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869"
34-
Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6"
3532
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
3633
SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283"
3734
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
3835

3936
[targets]
40-
test = ["Test", "SafeTestsets", "SciMLTesting", "Enzyme", "EnzymeCore", "Mooncake"]
37+
test = ["Test", "SafeTestsets", "SciMLTesting"]

test/Enzyme/Project.toml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[deps]
2+
Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
3+
EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869"
4+
FunctionWrappersWrappers = "77dc65aa-8811-40c2-897b-53d922fa7daf"
5+
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
6+
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
7+
8+
[sources]
9+
FunctionWrappersWrappers = {path = "../.."}
10+
11+
[compat]
12+
Enzyme = "0.13"
13+
EnzymeCore = "0.8"
14+
SafeTestsets = "0.0.1, 0.1, 1"
15+
Test = "1"

test/Mooncake/Project.toml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[deps]
2+
FunctionWrappersWrappers = "77dc65aa-8811-40c2-897b-53d922fa7daf"
3+
Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6"
4+
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
5+
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
6+
7+
[sources]
8+
FunctionWrappersWrappers = {path = "../.."}
9+
10+
[compat]
11+
Mooncake = "0.5"
12+
SafeTestsets = "0.0.1, 0.1, 1"
13+
Test = "1"

test/runtests.jl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,14 @@ run_tests(;
2222
end
2323
end,
2424
),
25-
"Enzyme" => joinpath(@__DIR__, "Enzyme", "enzyme_tests.jl"),
26-
"Mooncake" => joinpath(@__DIR__, "Mooncake", "mooncake_tests.jl"),
25+
"Enzyme" => (;
26+
env = joinpath(@__DIR__, "Enzyme"),
27+
body = joinpath(@__DIR__, "Enzyme", "enzyme_tests.jl"),
28+
),
29+
"Mooncake" => (;
30+
env = joinpath(@__DIR__, "Mooncake"),
31+
body = joinpath(@__DIR__, "Mooncake", "mooncake_tests.jl"),
32+
),
2733
),
2834
all = ["Core", "Enzyme", "Mooncake"],
2935
)

test/test_groups.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@ versions = ["lts", "1", "pre"]
33

44
[nopre]
55
versions = ["lts", "1"]
6+
7+
[Enzyme]
8+
versions = ["lts", "1"]
9+
10+
[Mooncake]
11+
versions = ["lts", "1"]

0 commit comments

Comments
 (0)