From 2d35e4bf20ea01cea7215aea540d513595dad069 Mon Sep 17 00:00:00 2001 From: Matthew Fishman Date: Thu, 10 Sep 2026 16:52:01 -0400 Subject: [PATCH 1/2] Fix CheckCompatBounds on Julia 1.13 Restores `CheckCompatBounds`, which errors out on every caller repo since Julia 1.13 dropped the one-argument `Pkg.Registry.registry_info(entry)` that `check_compat_bounds.jl` calls. The call now accepts whichever signature the running Julia provides, since `julia-version` is configurable and 1.10 and 1.12 have only the one-argument form. Co-Authored-By: Claude Opus 5 (1M context) --- .github/actions/check-compat-bounds/check_compat_bounds.jl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/actions/check-compat-bounds/check_compat_bounds.jl b/.github/actions/check-compat-bounds/check_compat_bounds.jl index fd14df9..516ff54 100644 --- a/.github/actions/check-compat-bounds/check_compat_bounds.jl +++ b/.github/actions/check-compat-bounds/check_compat_bounds.jl @@ -131,7 +131,12 @@ function registry_versions(uuid::Base.UUID) for reg in Pkg.Registry.reachable_registries() entry = get(reg.pkgs, uuid, nothing) entry === nothing && continue - info = Pkg.Registry.registry_info(entry) + # Julia 1.13 replaced `registry_info(entry)` with `registry_info(reg, entry)`. + info = if hasmethod(Pkg.Registry.registry_info, Tuple{typeof(reg), typeof(entry)}) + Pkg.Registry.registry_info(reg, entry) + else + Pkg.Registry.registry_info(entry) + end for (v, vinfo) in info.version_info vinfo.yanked && continue push!(versions, v) From b9e107baaf70efb7382c25616963780735c7a45a Mon Sep 17 00:00:00 2001 From: Matthew Fishman Date: Thu, 10 Sep 2026 17:17:59 -0400 Subject: [PATCH 2/2] Read the registries through RegistryInstances Every registry name the script used is a `Pkg` implementation detail, and Julia 1.13 changed the signature of `registry_info`. RegistryInstances exports the same names as public API under semver, so the check no longer tracks Julia minor versions. The action installs it into a throwaway environment. Co-Authored-By: Claude Opus 5 (1M context) --- .github/actions/check-compat-bounds/action.yml | 7 ++++++- .../check-compat-bounds/check_compat_bounds.jl | 13 ++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.github/actions/check-compat-bounds/action.yml b/.github/actions/check-compat-bounds/action.yml index 05c8a16..1d9ac78 100644 --- a/.github/actions/check-compat-bounds/action.yml +++ b/.github/actions/check-compat-bounds/action.yml @@ -44,7 +44,12 @@ runs: esac if [ "$run_check" = "true" ]; then - julia --color=yes "$SCRIPT_PATH" "$WORKSPACE_ROOT" + # The script reads the registries through RegistryInstances, so give it a + # throwaway environment of its own rather than the workspace being checked. + script_env="$(mktemp -d)" + julia --color=yes --project="$script_env" -e \ + 'using Pkg; Pkg.add(Pkg.PackageSpec(; name = "RegistryInstances", version = "0.1"))' + julia --color=yes --project="$script_env" "$SCRIPT_PATH" "$WORKSPACE_ROOT" else echo "Skipping compat-bounds check (mode=$MODE, actor=${GITHUB_ACTOR:-unset})." fi diff --git a/.github/actions/check-compat-bounds/check_compat_bounds.jl b/.github/actions/check-compat-bounds/check_compat_bounds.jl index 516ff54..479b22e 100644 --- a/.github/actions/check-compat-bounds/check_compat_bounds.jl +++ b/.github/actions/check-compat-bounds/check_compat_bounds.jl @@ -16,6 +16,10 @@ # workspace-root : defaults to pwd() using Pkg +# The registry abstraction is an implementation detail of `Pkg` whose signatures +# change between Julia minor versions. RegistryInstances exports the same names +# as public API under semver, so read the registries through it instead. +using RegistryInstances: reachable_registries, registry_info using TOML function parse_args(args) @@ -128,15 +132,10 @@ end function registry_versions(uuid::Base.UUID) versions = VersionNumber[] - for reg in Pkg.Registry.reachable_registries() + for reg in reachable_registries() entry = get(reg.pkgs, uuid, nothing) entry === nothing && continue - # Julia 1.13 replaced `registry_info(entry)` with `registry_info(reg, entry)`. - info = if hasmethod(Pkg.Registry.registry_info, Tuple{typeof(reg), typeof(entry)}) - Pkg.Registry.registry_info(reg, entry) - else - Pkg.Registry.registry_info(entry) - end + info = registry_info(entry) for (v, vinfo) in info.version_info vinfo.yanked && continue push!(versions, v)