denoland/deno · error

No Debian architecture mapping for arch '{other}'; supported

Error message

No Debian architecture mapping for arch '{other}'; supported: x86_64, aarch64

What it means

Debian (.deb) packaging needs the Debian architecture name, which differs from the target triple's arch component (x86_64 -> amd64, aarch64 -> arm64). Only those two mappings exist; any other leading triple component — or an unusual host arch when --target is omitted — bails.

Source

Thrown at cli/tools/desktop.rs:3918

      "deno.json `version` \"{version}\" cannot be used as a Debian/RPM package version: the character '{c}' is not allowed (only alphanumerics, '.', '+', '-' and '~')"
    );
  }
  Ok(version.replace('-', "~"))
}

/// Map a target triple (or the host arch when `target` is None) to a Debian
/// architecture name. Debian arch names differ from the triple's leading
/// component (`x86_64` → `amd64`, `aarch64` → `arm64`).
fn debian_arch_for_target(
  target: Option<&str>,
) -> Result<&'static str, AnyError> {
  let arch = target
    .and_then(|t| t.split('-').next())
    .unwrap_or(std::env::consts::ARCH);
  match arch {
    "x86_64" => Ok("amd64"),
    "aarch64" => Ok("arm64"),
    other => bail!(
      "No Debian architecture mapping for arch '{other}'; supported: x86_64, aarch64"
    ),
  }
}

/// Map a target triple (or the host arch) to an RPM architecture name. RPM
/// keeps the triple's arch names (`x86_64`, `aarch64`).
fn rpm_arch_for_target(target: Option<&str>) -> Result<&'static str, AnyError> {
  let arch = target
    .and_then(|t| t.split('-').next())
    .unwrap_or(std::env::consts::ARCH);
  match arch {
    "x86_64" => Ok("x86_64"),
    "aarch64" => Ok("aarch64"),
    other => bail!(
      "No RPM architecture mapping for arch '{other}'; supported: x86_64, aarch64"
    ),
  }

View on GitHub (pinned to f7822238ca)

Solutions

  1. Target a supported triple: x86_64-unknown-linux-gnu (-> amd64) or aarch64-unknown-linux-gnu (-> arm64).
  2. Always pass --target explicitly in CI so packaging doesn't depend on the runner's arch.
  3. For unsupported arches, skip the deb format and ship a tarball.

Example fix

# before
deno desktop --target i686-unknown-linux-gnu --deb

# after
deno desktop --target x86_64-unknown-linux-gnu --deb
Defensive patterns

Strategy: validation

Validate before calling

case "${TARGET%%-*}" in
  x86_64|aarch64) ;;
  *) echo "deb packaging supports x86_64 (amd64) and aarch64 (arm64) only"; exit 1 ;;
esac

Type guard

function isSupportedDebArch(target: string): boolean {
  const a = target.split("-")[0];
  return a === "x86_64" || a === "aarch64";
}

Prevention

When it happens

Trigger: `deno desktop` building a .deb with --target whose arch component isn't x86_64 or aarch64 (e.g. armv7-*, i686-*), or no --target on a host of another arch.

Common situations: Cross-packaging for ARM SBCs or 32-bit systems from CI; building on niche-arch hosts without an explicit target.

Related errors


AI-assisted analysis of denoland/deno@f7822238ca (2026-08-20). Data as JSON: /api/errors/b480cc919621fd50. Report an issue: GitHub.