{"record":{"id":"bcf8850660f7f366","repo":"glanceapp/glance","slug":"no-releases-found-for-repository-s","errorCode":null,"errorMessage":"no releases found for repository %s","messagePattern":"no releases found for repository (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"internal/glance/widget-releases.go","lineNumber":245,"sourceCode":"\tif request.token != nil {\n\t\thttpRequest.Header.Add(\"Authorization\", \"Bearer \"+(*request.token))\n\t}\n\n\tvar response githubReleaseResponseJson\n\n\tif !request.IncludePreleases {\n\t\tresponse, err = decodeJsonFromRequest[githubReleaseResponseJson](defaultHTTPClient, httpRequest)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t} else {\n\t\tresponses, err := decodeJsonFromRequest[[]githubReleaseResponseJson](defaultHTTPClient, httpRequest)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif len(responses) == 0 {\n\t\t\treturn nil, fmt.Errorf(\"no releases found for repository %s\", request.Repository)\n\t\t}\n\n\t\tresponse = responses[0]\n\t}\n\n\treturn &appRelease{\n\t\tSource:       releaseSourceGithub,\n\t\tName:         request.Repository,\n\t\tVersion:      normalizeVersionFormat(response.TagName),\n\t\tNotesUrl:     response.HtmlUrl,\n\t\tTimeReleased: parseRFC3339Time(response.PublishedAt),\n\t\tDownvotes:    response.Reactions.Downvotes,\n\t}, nil\n}\n\ntype dockerHubRepositoryTagsResponse struct {\n\tResults []dockerHubRepositoryTagResponse `json:\"results\"`\n}","sourceCodeStart":227,"sourceCodeEnd":263,"githubUrl":"https://github.com/glanceapp/glance/blob/91324e8de762702e97b0ac5c8e36271d644d8642/internal/glance/widget-releases.go#L227-L263","documentation":"Returned by fetchLatestGithubRelease (internal/glance/widget-releases.go:245) when GitHub's /repos/{repo}/releases endpoint returns an empty array. This path is only taken when IncludePreleases is true (show-pre-releases option): the code fetches the full release list and errors if it has zero entries. Note the /releases/latest variant (no pre-releases) surfaces as a decode/404 error instead, and GitHub's releases API never returns tag-only releases — they must be published as GitHub Releases.","triggerScenarios":"GET https://api.github.com/repos/{owner}/{repo}/releases returns [] — the repository publishes tags but no GitHub Releases, all releases are drafts (invisible to the API), the repo is a private repo and the token lacks access (404 path can also decode to empty), or the repo genuinely has never cut a release.","commonSituations":"Tracking a project that uses plain git tags without GitHub Releases; all releases still marked draft; expecting pre-release listing for a repo whose only release is a draft/prerelease filtered by permissions; misspelled repo name on a fork without releases.","solutions":["Confirm the repository actually has published (non-draft) GitHub Releases at github.com/{owner}/{repo}/releases","If the project only tags, there is no release to show — remove it from the widget or ask upstream to publish releases","For private repos, provide a token with repo read access via the token: option","Double-check owner/name spelling — a wrong name usually 404s earlier, but a same-named empty repo hits this"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Pre-check that a repo has published releases (unauthenticated)\nresp, _ := http.Get(\"https://api.github.com/repos/\" + repo + \"/releases\")\n// empty array => will hit \"no releases found\"","typeGuard":null,"tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"no releases found for repository\") {\n    // repo publishes tags only; drop it or accept the gap\n}","preventionTips":["Only track repos with published GitHub Releases","Remember drafts are invisible to the API","Use a token for private repos"],"tags":["releases","github","empty-result"],"backgroundTag":null,"analyzedSha":"91324e8de762702e97b0ac5c8e36271d644d8642","analyzedAt":"2026-08-15T14:12:54.279Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}