{"record":{"id":"4f7642975c59bd3e","repo":"siyuan-note/siyuan","slug":"no-release-is-available-for-the-update-channel","errorCode":null,"errorMessage":"no release is available for the update channel","messagePattern":"no release is available for the update channel","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"kernel/model/updater_release.go","lineNumber":168,"sourceCode":"func getStablePackageURLs(version, pkgName string) []string {\n\tb3logURL := \"https://release.b3log.org/siyuan/\" + pkgName\n\tliuyunURL := \"https://release.liuyun.io/siyuan/\" + pkgName\n\tgithubURL := \"https://github.com/siyuan-note/siyuan/releases/download/v\" + strings.TrimPrefix(version, \"v\") + \"/\" + pkgName\n\tghproxyURL := \"https://ghfast.top/\" + githubURL\n\tif util.IsChinaCloud() {\n\t\treturn []string{b3logURL, liuyunURL, ghproxyURL, githubURL}\n\t}\n\treturn []string{b3logURL, liuyunURL, githubURL, ghproxyURL}\n}\n\nfunc getGitHubUpdateRelease(channel string, force bool) (*updateRelease, error) {\n\treleases, err := getGitHubReleases(context.TODO(), force)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tselected := selectGitHubRelease(releases, channel)\n\tif nil == selected {\n\t\treturn nil, errors.New(\"no release is available for the update channel\")\n\t}\n\n\tversion := strings.TrimPrefix(normalizeReleaseVersion(selected.TagName), \"v\")\n\trelease := &updateRelease{\n\t\tVersion:    version,\n\t\tReleaseURL: selected.HTMLURL,\n\t\tPackages:   map[string]*updatePackage{},\n\t}\n\tif \"\" == release.ReleaseURL {\n\t\trelease.ReleaseURL = githubReleaseURLPrefix + version\n\t}\n\n\tpkgName := currentInstallPackageName(version)\n\tif \"\" == pkgName {\n\t\treturn release, nil\n\t}\n\tasset := findGitHubReleaseAsset(selected, pkgName)\n\tif nil == asset || \"uploaded\" != asset.State || \"\" == asset.BrowserDownloadURL {","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/251596fc0de2f9528c00c224252fd073a99973f4/kernel/model/updater_release.go#L150-L186","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"// Check whether any release matches the channel before committing to it.\nreleases, _ := getGitHubReleases(context.TODO(), false)\nif selectGitHubRelease(releases, desiredChannel) == nil {\n    // no prerelease of this type exists; stay on stable\n    desiredChannel = conf.UpdateChannelStable\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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'."],"tags":["update","channel","github","prerelease","filtering"],"backgroundTag":null,"analyzedSha":"251596fc0de2f9528c00c224252fd073a99973f4","analyzedAt":"2026-08-12T21:18:37.123Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}