Skip to content

tests.yml: install i386 runtime libs before setup-julia for 32-bit legs#114

Merged
ChrisRackauckas merged 2 commits into
SciML:masterfrom
ChrisRackauckas-Claude:tests-yml-32bit-libs
Jul 12, 2026
Merged

tests.yml: install i386 runtime libs before setup-julia for 32-bit legs#114
ChrisRackauckas merged 2 commits into
SciML:masterfrom
ChrisRackauckas-Claude:tests-yml-32bit-libs

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member

Second half of enabling 32-bit test lanes (first half — the arch axis + group alias — shipped in #113 / v1.24.0).

Problem

A 32-bit leg (a test_groups.toml group with arch = "x86", forwarded as julia-arch: x86) fails at the Setup Julia step on the 64-bit Linux runners:

spawn /home/runner/_work/_tool/julia/1.12.6/x86/bin/julia ENOENT

The i686 Julia binary downloads fine, but it can't exec without the i386 dynamic loader / C++ runtime, which ubuntu-latest lacks. setup-julia invokes julia during its own step, so an apt step later in the job is too late.

Fix

Add a step before setup-julia, gated on a 32-bit julia-arch on Linux, that installs the i386 runtime:

- name: "Install 32-bit runtime libraries (i386)"
  if: "${{ (inputs.julia-arch == 'x86' || inputs.julia-arch == 'i686') && runner.os == 'Linux' }}"
  run: |
    sudo dpkg --add-architecture i386
    sudo apt-get update
    sudo apt-get install -y --no-install-recommends \
      libc6:i386 libstdc++6:i386 libgcc-s1:i386 libatomic1:i386

Non-32-bit legs are untouched (the if is false — no extra time).

Verification

In a clean ubuntu:24.04 container (matching ubuntu-latest):

  • Before the libs: julia-1.12.6/bin/julia: cannot execute: required file not found (the ENOENT).
  • After apt install libc6:i386 …: WORD_SIZE=32 ARCH=i686 VERSION=1.12.6 — runs.

Added a runtests.jl testset asserting the step is present, gated on 32-bit + Linux, and ordered before setup-julia. Full suite passes; Runic-clean.

Companion changes

  • SciMLTesting: folder discovery must skip matrix-only alias sections so GROUP=All / bare Pkg.test don't demand a test/<name>/ folder for the 32-bit lane (separate PR).
  • Consumer: SciML/FindFirstFunctions.jl re-adds its Core 32-bit lane once this + the SciMLTesting change are released.

Please ignore until reviewed by @ChrisRackauckas.

🤖 Generated with Claude Code

A 32-bit (x86/i686) Julia leg — e.g. a test_groups.toml group with
`arch = "x86"` — cannot exec on the 64-bit Linux runners: the i686 binary
needs the i386 dynamic loader and C/C++ runtime, which are absent by default.
setup-julia invokes julia during its own step, so without those libs the run
dies at "Setup Julia" with `spawn .../x86/bin/julia ENOENT`.

Add a step, gated on a 32-bit `julia-arch` on Linux, that runs before
setup-julia and installs `libc6:i386 libstdc++6:i386 libgcc-s1:i386
libatomic1:i386` (dpkg --add-architecture i386 first). Verified in a clean
ubuntu:24.04 container: the i686 Julia 1.12.6 binary fails with "cannot
execute: required file not found" before, and runs (WORD_SIZE=32, i686) after.

Non-32-bit legs are unaffected (the step's `if` is false).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcQkauMQ4KSytnTpJpXUZu
A 32-bit (x86/i686) Julia leg — e.g. a test_groups.toml group with
`arch = "x86"` — cannot exec on the 64-bit Linux runners: the i686 binary
needs the i386 dynamic loader and C/C++ runtime, which are absent by default.
setup-julia invokes julia during its own step, so without those libs the run
dies at "Setup Julia" with `spawn .../x86/bin/julia ENOENT`.

Add a step, gated on a 32-bit `julia-arch` on Linux, that runs before
setup-julia and installs `libc6:i386 libstdc++6:i386 libgcc-s1:i386
libatomic1:i386` (dpkg --add-architecture i386 first). Verified in a clean
ubuntu:24.04 container: the i686 Julia 1.12.6 binary fails with "cannot
execute: required file not found" before, and runs (WORD_SIZE=32, i686) after.

Non-32-bit legs are unaffected (the step's `if` is false). Adds a runtests.jl
assertion that the step exists, is gated correctly, and precedes setup-julia.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcQkauMQ4KSytnTpJpXUZu
@ChrisRackauckas
ChrisRackauckas marked this pull request as ready for review July 12, 2026 11:24
@ChrisRackauckas
ChrisRackauckas merged commit 04688bb into SciML:master Jul 12, 2026
3 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