siyuan-note/siyuan · warning
no release is available for the update channel
Error message
no release is available for the update channel
What it means
Returned by getGitHubUpdateRelease(channel, force) when selectGitHubRelease(releases, channel) returns nil. The GitHub releases list was fetched successfully, but after filtering out drafts and releases whose tag is not allowed for the channel (isReleaseAllowed), none remain. For beta this means no beta/rc prerelease exists; for alpha no alpha/beta/rc; for stable no final release.
Source
Thrown at kernel/model/updater_release.go:168
func getStablePackageURLs(version, pkgName string) []string {
b3logURL := "https://release.b3log.org/siyuan/" + pkgName
liuyunURL := "https://release.liuyun.io/siyuan/" + pkgName
githubURL := "https://github.com/siyuan-note/siyuan/releases/download/v" + strings.TrimPrefix(version, "v") + "/" + pkgName
ghproxyURL := "https://ghfast.top/" + githubURL
if util.IsChinaCloud() {
return []string{b3logURL, liuyunURL, ghproxyURL, githubURL}
}
return []string{b3logURL, liuyunURL, githubURL, ghproxyURL}
}
func getGitHubUpdateRelease(channel string, force bool) (*updateRelease, error) {
releases, err := getGitHubReleases(context.TODO(), force)
if err != nil {
return nil, err
}
selected := selectGitHubRelease(releases, channel)
if nil == selected {
return nil, errors.New("no release is available for the update channel")
}
version := strings.TrimPrefix(normalizeReleaseVersion(selected.TagName), "v")
release := &updateRelease{
Version: version,
ReleaseURL: selected.HTMLURL,
Packages: map[string]*updatePackage{},
}
if "" == release.ReleaseURL {
release.ReleaseURL = githubReleaseURLPrefix + version
}
pkgName := currentInstallPackageName(version)
if "" == pkgName {
return release, nil
}
asset := findGitHubReleaseAsset(selected, pkgName)
if nil == asset || "uploaded" != asset.State || "" == asset.BrowserDownloadURL {View on GitHub (pinned to 251596fc0d)
Solutions
- Switch to a channel that matches the available prerelease type, or to stable if no prereleases exist.
- Verify the desired release is not marked as Draft on GitHub — drafts are always skipped.
- Retry after force-refresh; a freshly published prerelease may not yet be in the cached list.
Defensive patterns
Strategy: fallback
Validate before calling
// Check whether any release matches the channel before committing to it.
releases, _ := getGitHubReleases(context.TODO(), false)
if selectGitHubRelease(releases, desiredChannel) == nil {
// no prerelease of this type exists; stay on stable
desiredChannel = conf.UpdateChannelStable
} Prevention
- When switching to beta/alpha, inform the user it only works while such prereleases exist.
- Fall back to stable if the chosen channel has no matching release.
- Don't surface this as critical — it just means 'nothing newer on this channel'.
When it happens
Trigger: User switched to the beta or alpha channel but the GitHub repo currently has no prerelease matching that label (all recent releases are stable finals, or only a different prerelease type exists). selectGitHubRelease skips every release because each is either a Draft or fails isReleaseAllowed — e.g. a tag like 'v3.1.0-nightly' whose prerelease label isn't alpha/beta/rc.
Common situations: Selecting 'alpha' when only a 'beta' is published (alpha allows alpha/beta/rc, so this would actually work — but stable allows none). Selecting 'beta' when only an 'alpha' tag exists (beta excludes alpha). Repo temporarily has only stable releases and the user is on a newer custom build.
Related errors
- update channel is invalid
- update channel is invalid
- checksum manifest is unavailable
- get checksum manifest failed: %d
- marketplace package update is not allowed
AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12).
Data as JSON: /api/errors/4f7642975c59bd3e.
Report an issue: GitHub.