multica-ai/multica · error

no matching release asset for %s/%s (tried: %s)

Error message

no matching release asset for %s/%s (tried: %s)

What it means

findReleaseAsset scanned a GitHub release's assets and none matched the expected archive names for your GOOS/GOARCH. It tries the current scheme multica-cli-<version>-<goos>-<goarch>.<ext> and the legacy multica_<goos>_<goarch>.<ext>. The message lists exactly which names were attempted.

Source

Thrown at server/internal/cli/update.go:167

	// Prefer the versioned name (current scheme); fall back to the legacy
	// `multica_{os}_{arch}` name for releases that still ship it.
	return []string{
		fmt.Sprintf("multica-cli-%s-%s-%s.%s", version, goos, goarch, ext),
		fmt.Sprintf("multica_%s_%s.%s", goos, goarch, ext),
	}
}

func findReleaseAsset(assets []GitHubReleaseAsset, targetVersion, goos, goarch string) (*GitHubReleaseAsset, error) {
	for _, candidate := range releaseAssetCandidates(targetVersion, goos, goarch) {
		for i := range assets {
			if assets[i].Name == candidate {
				return &assets[i], nil
			}
		}
	}

	candidates := strings.Join(releaseAssetCandidates(targetVersion, goos, goarch), ", ")
	return nil, fmt.Errorf("no matching release asset for %s/%s (tried: %s)", goos, goarch, candidates)
}

// findChecksumManifestAsset locates the GoReleaser-generated checksums.txt
// among a release's assets. Required for the direct-download path's SHA-256
// verification — if it is missing we refuse to replace the binary rather
// than fall back to unverified install, because the auto-update poller runs
// unattended and an unverified binary swap is a supply-chain risk.
func findChecksumManifestAsset(assets []GitHubReleaseAsset) (*GitHubReleaseAsset, error) {
	for i := range assets {
		if assets[i].Name == ChecksumManifestName {
			return &assets[i], nil
		}
	}
	return nil, fmt.Errorf("checksum manifest %q not present in release", ChecksumManifestName)
}

// parseChecksumManifest reads a GoReleaser-style "<sha256>  <filename>"
// manifest and returns the lowercase hex SHA-256 for assetName. Returns an

View on GitHub (pinned to 2c0912b6ec)

Solutions

  1. Compare the 'tried:' list in the error against the actual asset names on the release page — usually the extension or version component differs
  2. Update to the latest CLI version, whose naming matches the current release scheme
  3. If your platform is genuinely unpublished, build from source (go install / make build) for that GOOS/GOARCH
  4. If you maintain releases, add the missing platform to the GoReleaser config so the expected asset name is produced

Example fix

# .goreleaser.yaml — before: no windows-arm64 build
builds:
  - id: multica
    goos: [linux, darwin]
    goarch: [amd64, arm64]

# after
builds:
  - id: multica
    goos: [linux, darwin, windows]
    goarch: [amd64, arm64]
Defensive patterns

Strategy: validation

Validate before calling

rel, err := cli.FetchLatestRelease()
if err != nil { return err }
have := map[string]bool{}
for _, a := range rel.Assets { have[a.Name] = true }
for _, name := range []string{
	fmt.Sprintf("multica-cli-%s-%s-%s.%s", ver, runtime.GOOS, runtime.GOARCH, ext),
	fmt.Sprintf("multica_%s_%s.%s", runtime.GOOS, runtime.GOARCH, ext),
} {
	if have[name] { /* asset exists for this platform */ }
}

Type guard

func hasPlatformAsset(assets []cli.GitHubReleaseAsset, names ...string) bool {
	for _, a := range assets {
		for _, n := range names {
			if a.Name == n { return true }
		}
	}
	return false
}

Try / catch

asset, err := cli.FindReleaseAsset(assets, ver, goos, goarch) // or equivalent
if err != nil && strings.Contains(err.Error(), "no matching release asset") {
	// skip update for this platform, or fall back to building from source
}

Prevention

When it happens

Trigger: Running the self-update / install path on a platform the release pipeline does not publish (e.g. windows/arm64, freebsd), on a version whose assets were uploaded with different naming, or when the computed target version's tag normalization produces a name not present in the release.

Common situations: New architecture (arm64 windows) before CI added it; a release cut before the versioned naming scheme existed (only legacy names, or vice versa); a manually-published release missing platform archives; dev builds pointing at a draft release.

Related errors


AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15). Data as JSON: /api/errors/edc9907914318b99. Report an issue: GitHub.