{"record":{"id":"9d9ee79ba260a17d","repo":"xpipe-io/xpipe","slug":"unable-to-find-download-url-for-repository","errorCode":null,"errorMessage":"Unable to find download url for ${repository}","messagePattern":"Unable to find download url for (.+?)","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/xpipe/app/util/GithubReleaseDownloader.java","lineNumber":66,"sourceCode":"        var request = HttpRequest.newBuilder()\n                .GET()\n                .uri(URI.create(\"https://api.github.com/repos/\" + repository + \"/releases\"))\n                .build();\n        var r = HttpHelper.client().send(request, HttpResponse.BodyHandlers.ofString());\n        HttpHelper.checkOrThrow(r);\n\n        var json = JacksonMapper.getDefault().readTree(r.body());\n        var latest = json.get(0);\n        var assets = latest.required(\"assets\");\n        for (var asset : assets) {\n            var name = asset.required(\"name\").asString();\n            if (filter.test(name)) {\n                var url = asset.required(\"browser_download_url\").asString();\n                return url;\n            }\n        }\n\n        throw new IllegalStateException(\"Unable to find download url for \" + repository);\n    }\n}\n","sourceCodeStart":48,"sourceCodeEnd":69,"githubUrl":"https://github.com/xpipe-io/xpipe/blob/d85ca821baa46092a320ebb13546d7240adb74f8/app/src/main/java/io/xpipe/app/util/GithubReleaseDownloader.java#L48-L69","documentation":"GithubReleaseDownloader.getDownloadUrl() iterates the assets of the requested GitHub release and throws IllegalStateException(\"Unable to find download url for <repository>\") when no asset name matches the filter and no browser_download_url can be returned. Called via request(), it means the release exists but has no matching downloadable asset.","triggerScenarios":"request(repo, ...) for a release whose JSON asset list contains no asset name passing `filter` — wrong asset name/extension expected, the release has no assets at all, or the release is a source-only tag.","commonSituations":"Version pinned to a release published without binaries; asset naming changed between releases (upstream rename); typos in expected asset pattern (OS/arch mismatch, e.g. requesting 'x86_64' when asset says 'amd64'); repository moved and cached release JSON is stale.","solutions":["Check the release on GitHub and confirm an asset matching the expected name/extension exists","Update the expected asset-name filter/pattern to match the current asset naming (OS/arch strings)","Pin to a different release version that ships the required asset","Retry after upstream publishes assets, or fall back to building from source"],"exampleFix":"// before\nReleaseInstaller.getLatestRelease(repo).getAssetUrl(name -> name.contains(\"macos\"));\n// after (upstream renamed assets)\n...getAssetUrl(name -> name.contains(\"darwin\")); // or match 'mac' / correct arch","handlingStrategy":"fallback","validationCode":"// check the release has assets before requesting a download url\nif (release.getAssets().isEmpty()) { /* choose another release or source */ }","typeGuard":null,"tryCatchPattern":"try {\n    url = GithubReleaseDownloader.request(repo, version, filter);\n} catch (IllegalStateException e) {\n    // fall back to latest release or a different asset pattern\n}","preventionTips":["Keep asset-name filters in sync with upstream release naming","Verify the pinned release actually publishes binaries","Prefer resolving 'latest' over hardcoded tags"],"tags":["github","release","download","asset-not-found"],"backgroundTag":"resource-not-found","analyzedSha":"d85ca821baa46092a320ebb13546d7240adb74f8","analyzedAt":"2026-09-06T14:30:08.251Z","contentChangedAt":"2026-09-06T14:30:08.251Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}