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

  1. Verify the platform is published on the target GitHub release's Assets list
  2. Update to a version whose release naming matches the suffix generator
  3. Manually download and replace the binary if auto-update can't find the asset
  4. 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

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


AI-assisted analysis of henrygd/beszel@b38fb7dafa (2026-08-31). Data as JSON: /api/errors/724fa8a9e020a90d. Report an issue: GitHub.