jdx/mise · error

unsupported OS version: {os_ver}

Error message

unsupported OS version: {os_ver}

What it means

Bob publishes OTP only for Ubuntu 20.04, 22.04, and 24.04. After resolving the distro string (ImageOS mapping like ubuntu24→ubuntu-24.04, or os-release `ID-VERSION_ID`), anything not in that list bails — debian-12, fedora-40, linuxmint-21.3, ubuntu-18.04, ubuntu-25.10, or an unmapped ImageOS value like ubuntu26. Non-fatal unless erlang.compile=false.

Source

Thrown at src/plugins/core/erlang.rs:235

                    "ubuntu22" => "ubuntu-22.04".to_string(),
                    "ubuntu20" => "ubuntu-20.04".to_string(),
                    _ => os,
                }
            } else if let Some(os_release) = linux_os_release() {
                format!("{}-{}", os_release.id, os_release.version_id)
            } else {
                bail!("could not determine OS release");
            }
        } else {
            // Cross-platform Linux lock resolution cannot inspect the target
            // distro, so use Bob's newest supported Ubuntu build.
            "ubuntu-24.04".to_string()
        };

        // Currently, Bob only builds for Ubuntu, so we have to check that we're on Ubuntu,
        // and on a supported version.
        if !["ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.04"].contains(&os_ver.as_str()) {
            bail!("unsupported OS version: {os_ver}");
        }
        Ok(os_ver)
    }

    fn macos_asset_name(target: &PlatformTarget) -> Result<String> {
        let arch = match target.arch_name() {
            "x64" => "x86_64",
            "arm64" => "aarch64",
            other => bail!("unsupported architecture: {other}"),
        };
        Ok(format!("otp-{arch}-apple-darwin.tar.gz"))
    }

    fn windows_asset_name(version: &str, target: &PlatformTarget) -> Result<String> {
        let os = match target.arch_name() {
            "x64" => "win64",
            "x86" => "win32",
            other => bail!("unsupported architecture: {other}"),

View on GitHub (pinned to 6f52dcdf99)

Solutions

  1. Pin CI to a supported runner: `runs-on: ubuntu-24.04` (not ubuntu-latest)
  2. Rebuild the image on Ubuntu 20.04/22.04/24.04
  3. Allow source builds on unsupported distros: `mise settings set erlang.compile true`

Example fix

# before (.github/workflows/ci.yml)
runs-on: ubuntu-latest   # after 26.04 ships → unsupported OS version: ubuntu-26.04

# after
runs-on: ubuntu-24.04
Defensive patterns

Strategy: validation

Validate before calling

# verify the distro is Bob-supported before a compile=false install
OS_VER="$(. /etc/os-release; echo "${ID}-${VERSION_ID}")"
case "$OS_VER" in
  ubuntu-20.04|ubuntu-22.04|ubuntu-24.04) mise install erlang@27.1 ;;
  *) echo "unsupported distro for precompiled OTP: $OS_VER" && mise settings set erlang.compile true && mise install erlang@27.1 ;;
esac

Prevention

When it happens

Trigger: `mise install erlang` with compile=false on Debian/Fedora/Arch/Rocky/Mint; GitHub Actions where `runs-on: ubuntu-latest` starts reporting a newer ImageOS (e.g. ubuntu26) after Ubuntu 26.04 ships; an Ubuntu version outside the supported window (18.04, 25.04+).

Common situations: `ubuntu-latest` rolling past the newest Bob-supported Ubuntu and breaking erlang installs overnight; corporate Debian-based CI images; Linux Mint desktops (ID=linuxmint).

Related errors


AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22). Data as JSON: /api/errors/97b1bc61ae66a44d. Report an issue: GitHub.