siyuan-note/siyuan · warning
package checksum is unavailable
Error message
package checksum is unavailable
What it means
Returned by getGitHubManifestChecksum from the cache branch (line 379): the SHA256SUMS.txt manifest was previously downloaded and cached in githubManifestCache under manifestCacheKey, but parseChecksumManifest(cached, pkgName) returned an empty string — meaning no line in the cached manifest names the requested package. The cache holds a manifest that doesn't cover this pkgName.
Source
Thrown at kernel/model/updater_release.go:379
}
func getGitHubManifestChecksum(ctx context.Context, release *githubRelease, pkgName string) (string, error) {
manifestAsset := findGitHubReleaseAsset(release, "SHA256SUMS.txt")
if nil == manifestAsset || "uploaded" != manifestAsset.State || "" == manifestAsset.BrowserDownloadURL {
return "", errors.New("checksum manifest is unavailable")
}
manifestDigest := normalizeSHA256(manifestAsset.Digest)
manifestCacheKey := ""
if "" != manifestDigest {
manifestCacheKey = manifestAsset.BrowserDownloadURL + "#" + manifestDigest
}
if "" != manifestCacheKey {
cached, ok := githubManifestCache.Load(manifestCacheKey)
if ok {
if checksum := parseChecksumManifest(cached.(string), pkgName); "" != checksum {
return checksum, nil
}
return "", errors.New("package checksum is unavailable")
}
}
response, err := httpclient.NewCloudRequest30s().SetContext(ctx).Get(manifestAsset.BrowserDownloadURL)
if err != nil {
return "", err
}
if nil == response || nil == response.Response {
return "", errors.New("checksum manifest response is empty")
}
defer response.Body.Close()
if 200 != response.StatusCode {
return "", fmt.Errorf("get checksum manifest failed: %d", response.StatusCode)
}
data, err := io.ReadAll(io.LimitReader(response.Body, maxChecksumManifestSize+1))
if err != nil {
return "", err
}View on GitHub (pinned to 251596fc0d)
Solutions
- Check the release's SHA256SUMS.txt on GitHub to confirm whether your pkgName is listed.
- Switch to the stable channel if your platform is covered by the cloud JSON checksums.
- If the omission is a release bug, report it; otherwise update manually from the GitHub release page.
Defensive patterns
Strategy: fallback
Try / catch
// If the cached manifest doesn't list the package, bypass cache and refetch.
checksum, err := getGitHubManifestChecksum(ctx, release, pkgName)
if err != nil && strings.Contains(err.Error(), "package checksum is unavailable") {
githubManifestCache.Delete(manifestCacheKey) // invalidate stale cache
checksum, err = getGitHubManifestChecksum(ctx, release, pkgName)
} Prevention
- Invalidate the manifest cache entry when it doesn't cover the package, so a corrected manifest can be fetched.
- Fall back to the stable channel checksums if the GitHub manifest omits your platform.
- Confirm the pkgName matches the manifest's filename convention.
When it happens
Trigger: A release ships a SHA256SUMS.txt that lists only some platforms (e.g. omits win-arm64). The cached manifest is for a release where the pkgName was absent. pkgName was computed for a platform/arch the manifest author didn't include.
Common situations: Running an arm64 build when the manifest only lists amd64 assets. A release that omitted a particular platform's entry. Manifest generated by a release script with a platform gap.
Related errors
- update package is unavailable: [%s] checksum is unavailable
- checksum manifest is unavailable
- checksum manifest response is empty
- get checksum manifest failed: %d
- checksum manifest is too large
AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12).
Data as JSON: /api/errors/3ded80cd89b93152.
Report an issue: GitHub.