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 anView on GitHub (pinned to 2c0912b6ec)
Solutions
- Compare the 'tried:' list in the error against the actual asset names on the release page — usually the extension or version component differs
- Update to the latest CLI version, whose naming matches the current release scheme
- If your platform is genuinely unpublished, build from source (go install / make build) for that GOOS/GOARCH
- 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
- Publish assets for every GOOS/GOARCH your users run via GoReleaser
- Keep release asset naming stable with the current versioned scheme
- Check the release page asset list before scripting installs for new platforms
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
- checksum manifest %q not present in release
- read checksum manifest: %w
- checksum for %q not found in manifest
- Invalid desktop runtime config JSON: ${err instanceof Error
- Invalid desktop runtime config: expected a JSON object
AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15).
Data as JSON: /api/errors/edc9907914318b99.
Report an issue: GitHub.