Lesstep
GitHub Actions · Ubuntu 26.04 · Checked November 4, 2026

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):

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

Other 26.04 failures

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 · 日本語