dbt-labs/dbt-core · error · anyhow

no brew-supported targets found in {source_desc} (need at le

Error message

no brew-supported targets found in {source_desc} (need at least one of: aarch64-apple-darwin, x86_64-apple-darwin, aarch64-unknown-linux-gnu, x86_64-unknown-linux-gnu)

What it means

After collecting tarballs, render.rs resolves which platforms they cover and requires at least one of the four brew-supported targets (aarch64-apple-darwin, x86_64-apple-darwin, aarch64-unknown-linux-gnu, x86_64-unknown-linux-gnu). If resolve_platforms() matches none of the found tarballs against the URL template and version, run() bails. A Homebrew formula cannot be generated without at least one supported platform artifact.

Source

Thrown at crates/dbt-ci/src/homebrew/render.rs:75

        (None, Some(file)) => (
            collect_tarballs_from_sha256sums(file, &args.tarball_prefix, &args.version)?,
            format!("manifest {}", file.display()),
        ),
        (None, None) | (Some(_), Some(_)) => {
            unreachable!("clap should reject neither/both --tarballs-dir/--sha256sums")
        }
    };
    if tarballs.is_empty() {
        bail!(
            "no `{prefix}{version}-*.tar.gz` tarballs found in {source_desc}",
            prefix = args.tarball_prefix,
            version = args.version,
        );
    }

    let platforms = resolve_platforms(&tarballs, &args.url_template, &args.version);
    if platforms.is_empty() {
        bail!(
            "no brew-supported targets found in {source_desc} (need at least one of: \
             aarch64-apple-darwin, x86_64-apple-darwin, aarch64-unknown-linux-gnu, x86_64-unknown-linux-gnu)",
        );
    }

    // `install_as` defaults to the formula name — preserves the historic
    // behavior where `bin.install "X"` is renamed to match the formula's
    // filename when binary-name and formula-name differ.
    let install_as = args
        .install_as
        .clone()
        .unwrap_or_else(|| formula_name.clone());

    let ctx = FormulaCtx {
        class_name: pascal_case(&formula_name),
        binary_name: args.binary_name.clone(),
        install_as,
        version: args.version.clone(),

View on GitHub (pinned to 0267ce9170)

Solutions

  1. Build and include release artifacts for at least one supported target: aarch64-apple-darwin, x86_64-apple-darwin, aarch64-unknown-linux-gnu, or x86_64-unknown-linux-gnu.
  2. Ensure artifact filenames contain the exact target triple so resolve_platforms can map them.
  3. If using a custom --url-template, confirm it preserves the target-triple segment the resolver parses.
  4. Check the release build matrix in CI actually produces gnu/darwin targets and not only musl/windows.

Example fix

// before (build matrix only produces musl)
matrix: { target: [x86_64-unknown-linux-musl] }

// after
matrix:
  target: [aarch64-apple-darwin, x86_64-apple-darwin, x86_64-unknown-linux-gnu]
Defensive patterns

Strategy: validation

Validate before calling

const SUPPORTED: [&str; 4] = [
    "aarch64-apple-darwin",
    "x86_64-apple-darwin",
    "aarch64-unknown-linux-gnu",
    "x86_64-unknown-linux-gnu",
];
let has_supported = tarballs.iter().any(|t| {
    SUPPORTED.iter().any(|tgt| t.to_string_lossy().contains(tgt))
});
if !has_supported {
    return Err("release artifacts contain none of the four brew-supported target triples".into());
}

Try / catch

match render() {
    Err(e) if e.to_string().contains("brew-supported targets") => {
        eprintln!("no darwin/gnu artifacts in release; fix build matrix to include at least one supported target");
    }
    Err(e) => return Err(e),
    Ok(v) => v,
}

Prevention

When it happens

Trigger: All tarballs found in the source correspond to targets outside the supported list (e.g. aarch64-unknown-linux-musl, windows targets, *-freebsd), or resolve_platforms fails to match the URL template/filename convention so no platform is extracted from otherwise valid artifacts.

Common situations: Release built only for musl static targets which Homebrew formulae don't reference; artifacts renamed to a convention resolve_platforms no longer recognizes (e.g. target triple missing from filename); publishing a formula for a Windows-only release; custom --url-template that no longer embeds the target triple the parser expects.

Understand the failure class

Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.

Related errors


AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07). Data as JSON: /api/errors/f7aeb1b0ccec5343. Report an issue: GitHub.