henrygd/beszel · error
missing asset containing ${suffix}
Error message
missing asset containing ${suffix} What it means
findAssetBySuffix scans a GitHub release's asset list for one whose filename ends with the given suffix (e.g. a GOOS/GOARCH triple like '_linux_amd64.tar.gz'). If no asset matches, it returns this error, meaning the release has no build for the requested platform.
Source
Thrown at internal/ghupdate/release.go:36
Tag string `json:"tag_name"`
Published string `json:"published_at"`
Url string `json:"html_url"`
Body string `json:"body"`
Assets []*releaseAsset `json:"assets"`
Id int `json:"id"`
}
// findAssetBySuffix returns the first available asset containing the specified suffix.
func (r *release) findAssetBySuffix(suffix string) (*releaseAsset, error) {
if suffix != "" {
for _, asset := range r.Assets {
if strings.HasSuffix(asset.Name, suffix) {
return asset, nil
}
}
}
return nil, errors.New("missing asset containing " + suffix)
}
View on GitHub (pinned to b38fb7dafa)
Solutions
- Verify the platform is published on the target GitHub release's Assets list
- Update to a version whose release naming matches the suffix generator
- Manually download and replace the binary if auto-update can't find the asset
- If using a fork/mirror, ensure it publishes assets with the same naming scheme
Example fix
// before: checking update on unsupported arch
_, err := updater.Update(ctx) // findAssetBySuffix fails
// after: verify the asset exists first
release, _ := ghupdate.GetLatestRelease(ctx, "henrygd", "beszel")
for _, a := range release.Assets { log.Println(a.Name) } // confirm suffix exists Defensive patterns
Strategy: try-catch
Validate before calling
// confirm the asset exists before updating
release, _ := ghupdate.GetLatestRelease(ctx, owner, repo)
wanted := "beszel-agent_" + runtime.GOOS + "_" + runtime.GOARCH
for _, a := range release.Assets {
if strings.Contains(a.Name, wanted) { return } // ok
}
log.Fatalf("no published asset for %s", wanted) Try / catch
asset, err := findAssetBySuffix(release.Assets, suffix)
if err != nil {
return fmt.Errorf("auto-update unsupported for this platform: %w", err)
} Prevention
- Check the release assets page for your GOOS/GOARCH before enabling self-update
- Pin manual installs for platforms upstream doesn't publish
- Watch release notes for asset naming changes
- Test updates on mirrors/forks to ensure assets are mirrored
When it happens
Trigger: update() looks up the release asset matching the current OS/arch but the release JSON contains no asset name with that suffix — e.g. suffix computed as 'beszel-agent_linux_arm64.tar.gz' but the release only publishes different naming.
Common situations: Self-updating on a niche platform (riscv64, freebsd/arm) that upstream doesn't publish; a renamed asset scheme in a newer release version; querying a forked or mirror release with partial assets; network/proxy serving a truncated asset list.
Related errors
- invalid release digest %q
- systemd manager unavailable
- nvml not supported on this platform
- unsupported release digest algorithm %q
- release checksum mismatch: expected %s, got %s
AI-assisted analysis of henrygd/beszel@b38fb7dafa (2026-08-31).
Data as JSON: /api/errors/724fa8a9e020a90d.
Report an issue: GitHub.