router-for-me/CLIProxyAPI · error

release asset checksums.txt not found

Error message

release asset checksums.txt not found

What it means

The GitHub release contains the platform archive but no asset named exactly 'checksums.txt'. The installer requires a checksums.txt sibling asset to verify the archive before extraction, so its absence aborts the install. This is a release-publishing defect, not a client configuration issue.

Source

Thrown at internal/pluginstore/github.go:322

}

func SelectReleaseAssets(release Release, id, version, goos, goarch string) (ReleaseAsset, ReleaseAsset, error) {
	archiveName := ArchiveName(id, version, goos, goarch)
	var archiveAsset ReleaseAsset
	var checksumAsset ReleaseAsset
	for _, asset := range release.Assets {
		switch strings.TrimSpace(asset.Name) {
		case archiveName:
			archiveAsset = asset
		case "checksums.txt":
			checksumAsset = asset
		}
	}
	if strings.TrimSpace(archiveAsset.Name) == "" {
		return ReleaseAsset{}, ReleaseAsset{}, fmt.Errorf("release asset %s not found", archiveName)
	}
	if strings.TrimSpace(checksumAsset.Name) == "" {
		return ReleaseAsset{}, ReleaseAsset{}, fmt.Errorf("release asset checksums.txt not found")
	}
	return archiveAsset, checksumAsset, nil
}

func ArchiveName(id, version, goos, goarch string) string {
	return fmt.Sprintf(
		"%s_%s_%s_%s.zip",
		strings.TrimSpace(id),
		strings.TrimSpace(version),
		strings.TrimSpace(goos),
		strings.TrimSpace(goarch),
	)
}

View on GitHub (pinned to 78f0c4079e)

Solutions

  1. Check the release page and confirm an asset named exactly 'checksums.txt' exists
  2. If it is named differently, fix the plugin's release workflow to upload checksums.txt
  3. Wait for the release publish to complete before installing
  4. As a last resort for trusted internal use, publish your own fork/release including checksums.txt
Defensive patterns

Strategy: validation

Validate before calling

hasChecksum := false
for _, a := range release.Assets {
    if strings.TrimSpace(a.Name) == "checksums.txt" { hasChecksum = true; break }
}
if !hasChecksum { return errors.New("release missing checksums.txt; refuse install") }

Try / catch

if err != nil && strings.Contains(err.Error(), "checksums.txt not found") {
    // report upstream publishing defect; do not bypass verification
}

Prevention

When it happens

Trigger: SelectReleaseAssets / installRelease runs on a release where the checksums.txt asset was not uploaded, renamed (e.g. 'checksum.txt', 'SHA256SUMS'), or is still uploading (draft release in progress).

Common situations: Plugin maintainer's release workflow changed or forgot to attach checksums.txt; asset named differently in a forked plugin; installing from an in-progress/draft release.

Related errors


AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15). Data as JSON: /api/errors/dea503d77574cac9. Report an issue: GitHub.