Skip to content

Install the General registry unpacked, so Julia 1.7 can read it - #78

Merged
davidanthoff merged 4 commits into
mainfrom
unpack-registry-for-julia17
Aug 21, 2026
Merged

Install the General registry unpacked, so Julia 1.7 can read it#78
davidanthoff merged 4 commits into
mainfrom
unpack-registry-for-julia17

Conversation

@davidanthoff

Copy link
Copy Markdown
Member

test_julia_versions.jl:Julia 1.7 platform fails on the rc and beta legs on Linux and macOS, while passing on 1.12 everywhere and on Windows for every channel. Only 1.7 is affected — 1.0, 1.3 and 1.6 do not use tarball registries, and 1.8 and up bundle a 7z that reads zstd.

The cause is not our code. Julia 1.7's bundled 7z cannot decompress zstd (7z only learned that in v17.6), and it shares the depot with the Julia driving the run. From 1.13 on, Pkg asks the package server for a zstd compressed registry — except on Windows, where it skips zstd for exactly this reason and quotes the same 7z version in Pkg/src/PlatformEngines.jl. That carve-out keys off the platform rather than off what else lives in the depot, so on Linux and macOS a General.tar.zst lands in the shared depot and every 1.7 test process dies on:

julia-1.7.3/libexec/7z x ~/.julia/registries/General.tar.zst -so → ProcessExited(2)

An unpacked registry is a plain folder every version reads, and it stays unpacked across later Pkg.Registry.update()s. The job prep script already installs the Julia versions this suite runs against, so it is also the right place to leave the registry in a shape all of them can read.

Verified locally: converting a packed depot leaves Pkg reporting unpacked registry, and Julia 1.7 then resolves and installs a package against it. The rc legs on this PR are the real check.

Found while auditing the stack for Julia 1.13 readiness.

🤖 Generated with Claude Code

davidanthoff and others added 4 commits August 20, 2026 23:42
`test_julia_versions.jl:Julia 1.7 platform` fails on the rc and beta legs on
Linux and macOS, and passes there on 1.12 and on Windows. The cause is not our
code: Julia 1.7's bundled 7z cannot decompress zstd — 7z only learned that in
v17.6 — and it shares this depot with the Julia that drives the run.

From 1.13 on, Pkg asks the package server for a zstd compressed registry. It
already skips zstd for registries on Windows for exactly this reason, quoting
the same 7z version in `Pkg/src/PlatformEngines.jl`, but that carve-out keys off
the platform rather than off what else lives in the depot. So on Linux and macOS
a `General.tar.zst` lands in the shared depot, and every 1.7 test process then
dies on `julia-1.7.3/libexec/7z x ~/.julia/registries/General.tar.zst -so`.

An unpacked registry is a plain folder that every version reads, and it survives
later `Pkg.Registry.update()`s. The job prep script already installs the Julia
versions this suite runs against, so it is also the place to leave the registry
in a shape all of them can read.

Verified locally: converting a packed depot leaves Pkg reporting an unpacked
registry, and Julia 1.7 resolves and installs a package against it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Converting the registry that `julia-buildpkg` installed is not enough on its
own: on the first run of this the 1.7 leg still died on a `General.tar.zst`,
which means something later in the job put a packed registry back — the run
itself, or a test process resolving an environment against the shared depot.

Export `JULIA_PKG_UNPACK_REGISTRY` into `GITHUB_ENV` as well, so every later
step in the job installs and refreshes the registry unpacked rather than only
the copy this script converted.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Unpacking on Windows made things worse rather than better: Pkg's
replace-on-write dance there leaves `$XXXX.pid.deleted` entries in `registries`,
and the concurrent test processes trip over them with

    IOError: stat("...\.julia\registries\$M3WH.pid.deleted"): permission denied

21 test items failed on the `windows-latest, rc~x64` leg because of it, on a leg
that was green before.

Windows never had the problem being fixed: Pkg already refuses zstd for
registries there, for the same 7z reason. Restrict the whole thing to the
platforms where a `General.tar.zst` can actually appear.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Restricting the conversion to Linux and macOS was not enough to make the Windows
legs green again, because the damage is cached: `julia-actions/cache` saves the
depot, so the unpacked registry an earlier run of this script created comes back
on every later Windows run. Pkg then replaces it on the next registry operation,
and its replace-on-write leaves `$XXXX.pid.deleted` entries that the concurrent
test processes trip over with `stat: permission denied` — 17 items failed that
way on `windows-latest, rc~x64` even with the conversion switched off.

Put a packed registry back on Windows and sweep up the leftovers, so one run
repairs the cached depot instead of every run rediscovering it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@davidanthoff
davidanthoff merged commit 751fa37 into main Aug 21, 2026
15 of 17 checks passed
@davidanthoff
davidanthoff deleted the unpack-registry-for-julia17 branch August 21, 2026 17:47
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.

1 participant