{"record":{"id":"36ad4f83fa9e9abd","repo":"glanceapp/glance","slug":"w-could-not-get-d-releases","errorCode":null,"errorMessage":"%w: could not get %d releases","messagePattern":"%w: could not get (.+?) releases","errorType":"exception","errorClass":"errPartialContent","httpStatus":null,"severity":"warning","filePath":"internal/glance/widget-releases.go","lineNumber":184,"sourceCode":"\n\tfor i := range results {\n\t\tif errs[i] != nil {\n\t\t\tfailed++\n\t\t\tslog.Error(\"Failed to fetch release\", \"source\", requests[i].source, \"repository\", requests[i].Repository, \"error\", errs[i])\n\t\t\tcontinue\n\t\t}\n\n\t\treleases = append(releases, *results[i])\n\t}\n\n\tif failed == len(requests) {\n\t\treturn nil, errNoContent\n\t}\n\n\treleases.sortByNewest()\n\n\tif failed > 0 {\n\t\treturn releases, fmt.Errorf(\"%w: could not get %d releases\", errPartialContent, failed)\n\t}\n\n\treturn releases, nil\n}\n\nfunc fetchLatestReleaseTask(request *releaseRequest) (*appRelease, error) {\n\tswitch request.source {\n\tcase releaseSourceCodeberg:\n\t\treturn fetchLatestCodebergRelease(request)\n\tcase releaseSourceGithub:\n\t\treturn fetchLatestGithubRelease(request)\n\tcase releaseSourceGitlab:\n\t\treturn fetchLatestGitLabRelease(request)\n\tcase releaseSourceDockerHub:\n\t\treturn fetchLatestDockerHubRelease(request)\n\t}\n\n\treturn nil, errors.New(\"unsupported source\")","sourceCodeStart":166,"sourceCodeEnd":202,"githubUrl":"https://github.com/glanceapp/glance/blob/91324e8de762702e97b0ac5c8e36271d644d8642/internal/glance/widget-releases.go#L166-L202","documentation":"Returned by fetchLatestReleases (internal/glance/widget-releases.go:184) when at least one but not all release requests failed (failed > 0 && failed < len(requests)). The widget fetched releases concurrently (20 workers) across GitHub/GitLab/Codeberg/Docker Hub; the surviving releases are still returned alongside this errPartialContent-wrapped error, so the widget renders partially and the error is informational.","triggerScenarios":"One or more repositories in the list failing: 404 (typo'd or deleted repo), Docker Hub image with no tags, GitHub rate limit (unauthenticated 60 req/hr), invalid token, network timeout on one source — while at least one other repository succeeds.","commonSituations":"Large release lists hitting GitHub's unauthenticated rate limit mid-refresh, a renamed/deleted repository left in the config, an expired access-token for one source while others are public, transient network failure to one provider.","solutions":["Check Glance's logs: each failed request logs 'Failed to fetch release' with source, repository and the underlying error","Fix the specific repository (correct owner/name spelling, restore deleted repo, use a valid tag)","Configure a GitHub token (environment variable or token: key) to lift the 60 req/hr anonymous limit","If the underlying error is transient (timeout/5xx), wait for the next scheduled widget update"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"releases, err := fetchLatestReleases(reqs)\nif err != nil && errors.Is(err, errPartialContent) {\n    // render `releases` anyway; log the missing count\n}","preventionTips":["Check Glance logs for the per-repository failure cause","Provide a GitHub token to avoid rate-limit failures","Keep repository lists accurate to avoid per-item 404s"],"tags":["releases","partial-content","github","dockerhub"],"backgroundTag":null,"analyzedSha":"91324e8de762702e97b0ac5c8e36271d644d8642","analyzedAt":"2026-08-15T14:12:54.279Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}