setup-beam: "Requested loose Erlang/OTP version (25) not found in version list" on ubuntu-26.04
ubuntu-latest is moving from Ubuntu 24.04 to 26.04 between October 19 and November 19, 2026 (what else changes). erlef/setup-beam downloads Erlang/OTP from builds.hex.pm, from a separate list for each Ubuntu version. The list for ubuntu-26.04 starts at OTP 26.0. A matrix entry that asks for OTP 24 or 25 therefore stops in the setup step on 26.04, while the same entry still installs on 24.04 (setup-beam #498).
The two messages
With setup-beam v1.24.1 (the current @v1) and OTP 25:
Requested loose Erlang/OTP version (25) not found in version list, at /builds/otp/amd64/ubuntu-26.04/builds.txt, with mirrors https://builds.hex.pm. Should you be using option 'version-type': 'strict'?
The question at the end is added to every loose miss; for OTP 24 and 25 on 26.04, version-type: strict finds nothing either, because no 24.x or 25.x build exists there.
With setup-beam v1.24.0 or older (a pin such as @v1.20.4, or a commit SHA from before June 28, 2026), every OTP version fails, because only v1.24.1 knows the 26.04 image:
Tried to map a target OS from env. variable 'ImageOS' (got ubuntu26), but failed. If you're using a self-hosted runner, you should set 'env': 'ImageOS': ... to one of the following: [...]
That one is fixed by moving the pin to v1.24.1 or later. The message's advice about ImageOS is meant for self-hosted runners; on a GitHub-hosted runner, setting ImageOS: ubuntu24 would make it download the 24.04 build onto 26.04, which can need libraries 26.04 no longer has.
What builds.hex.pm has for ubuntu-26.04
We read both lists on November 4, 2026 (amd64; arm64 starts at the same versions):
- ubuntu-26.04: OTP 26.0 to 26.2.5.21, 27.x up to 27.3.4.19, 28.x up to 28.5.0.8, 29.x up to 29.1.2, and the release candidates and
maintbuilds from 27 on. - ubuntu-24.04: the same, plus OTP 24.3.4 to 24.3.4.17 and 25.x up to 25.3.2.21.
Nothing older than 26.0 is built for 26.04, so this will not be fixed by waiting.
Fix 1: raise the entry to OTP 26 or later
- uses: erlef/setup-beam@v1
with:
otp-version: '26'
elixir-version: '1.16'
Raise Elixir with it. Elixir's compatibility table lists OTP 26 from Elixir 1.14.5, and 1.13 and older stop at OTP 25 (Compatibility and deprecations).
Fix 2: keep OTP 24 and 25 on 24.04
If you still test old OTP releases, give those entries the old image:
strategy:
matrix:
include:
- otp: '25'
elixir: '1.14'
os: ubuntu-24.04
- otp: '27'
elixir: '1.18'
os: ubuntu-latest
runs-on: ${{ matrix.os }}
It holds until GitHub retires the 24.04 image. The same pattern works for Python and Ruby versions that 26.04 does not have: setup-python's "was not found" and setup-ruby's "Unavailable version".
Telling it apart
- The path in the message names the list:
/ubuntu-26.04/builds.txtmeans the job ran on 26.04. - Look at "Set up job": the Runner Image group says
ubuntu-26.04orubuntu-24.04. Until November 19 a re-run can land on 24.04 and pass, so a green re-run proves nothing. - If OTP installs and a NIF or port program then fails to load with "cannot open shared object file", a cache or a binary from 24.04 is the likelier cause: "cannot open shared object file" on Ubuntu 26.04.
Other 26.04 failures
- "disk quota exceeded" in /tmp on Ubuntu 26.04: the first 26.04 images had
/tmpas a tmpfs of about 7.9G with a per-user quota, so large builds in/tmpfailed; setTMPDIRto$RUNNER_TEMP. - C and C++ builds that fail with GCC 15 on Ubuntu 26.04: the default gcc goes from 13 to 15, so C is compiled as C23, six old warnings are errors, and C++ headers no longer pull in
<cstdint>for you. - setup-ruby's "Unavailable version" on Ubuntu 26.04: only some patch releases of each Ruby series are built for 26.04, so a pinned 3.4.2 in
.ruby-versionstops at the Ruby step. - "cannot open shared object file" on Ubuntu 26.04: libxml2 is
libxml2.so.16and ICU is 78, so a cache saved on 24.04, or a binary built for it, cannot findlibxml2.so.2orlibicudata.so.74. - apt on Ubuntu 26.04: renamed and removed packages.
- "coreutils: unknown program": most core tools are uutils.
See failed jobs from IntelliJ IDEA
Pipeline Inbox for GitHub Actions Workflows, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, lists the runs of all your repositories in an IDE tool window, with their jobs and steps, and your current branch's runs are in the status bar. Reading is free; re-running failed jobs, cancelling, running workflows and reviewing deployments are Pro (US$1.50 a month, with a 30-day trial).
Get it on JetBrains Marketplace
GitHub and GitHub Actions are trademarks of GitHub, Inc.; Ubuntu is a trademark of Canonical Ltd.; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with, sponsored or endorsed by GitHub, Inc., Canonical, the Erlang Ecosystem Foundation, Hex, the Elixir project or JetBrains.
More: "The ubuntu-latest label will migrate to Ubuntu 26" · setup-ruby's "Unavailable version" on Ubuntu 26.04 · setup-python's "was not found" error · GitHub Actions plugins for IntelliJ IDEA compared · 日本語