Repository navigation
Description
Summary
The latest-linux.yml published for desktop 2.0.18 carries the AppImage's sha512 in its rpm entry, so every RPM checksum verification fails — manual verification and the in-app auto-update alike (electron-updater validates sha512 before installing). Affects both x86_64 and arm64.
Environment
- opencode version: CLI
v2.0.18; Desktopopencode-2.0.15-1.x86_64(2.0.18 offered as update) - OS: Fedora Linux 44, kernel
7.2.7-200.fc44.x86_64, x86_64 - Terminal:
TERM=xterm-256color - Shell:
/bin/bash - Install/channel: release channel, RPM from the opencode.ai CDN; updater is
provider: generic,url: https://opencode.ai/update/api/latest/desktop/opencode/,channel: latest - Active plugins:
/home/steeve/ponytail-v2
Reproduction
curl -sSL https://opencode.ai/update/api/latest/desktop/opencode/latest-linux.ymlcurl -sSL https://opencode.ai/files/bin/2.0.18/opencode-desktop-linux-x86_64.rpm -o rpmsha512sum rpm- Compare with the
sha512:value of theopencode-desktop-linux-x86_64.rpmentry in the yml.
Expected Behavior
Each files[] entry's sha512 matches the artifact it points to, so manual verification and the RPM auto-update both succeed.
Actual Behavior
The rpm entry's sha512 is byte-identical to the AppImage entry's sha512 — the RPM's own hash is published nowhere.
latest-linux.yml — version: 2.0.18, releaseDate: 2026-09-25T23:30:42.704Z (x86_64):
| entry | published sha512 (base64) | actual sha512 of downloaded file | verdict |
|---|---|---|---|
…-x86_64.AppImage |
TRG+6PxwN5JvGOsydL6l4epmChjanWeZftElEoE8WAlFnCApXtaZPv+oxMLHir9f2sbgAfThsnbYf3tc20iE9Q== |
TRG+6PxwN5JvGOsydL6l4epmChjanWeZftElEoE8WAlFnCApXtaZPv+oxMLHir9f2sbgAfThsnbYf3tc20iE9Q== |
ok |
…-linux-amd64.deb |
xkJIsvMNAz2EaxllLd+QiAQVzRisQo4F0HbcHfqicEvLx6b/na8Jh9zX0OT6wRyOJnFE8XR0kj9/dG4xGBmAew== |
xkJIsvMNAz2EaxllLd+QiAQVzRisQo4F0HbcHfqicEvLx6b/na8Jh9zX0OT6wRyOJnFE8XR0kj9/dG4xGBmAew== |
ok |
…-x86_64.rpm |
TRG+6PxwN5JvGOsydL6l4epmChjanWeZftElEoE8WAlFnCApXtaZPv+oxMLHir9f2sbgAfThsnbYf3tc20iE9Q== |
ygBXgdlPAd3TMtBhRtsQw70VCGq0f11vd7X9oShwvj4PU/3UWxsLAkkq2A/x/5m2Fi+n5qJPmUhUBBAgYXyFKQ== |
mismatch |
Actual RPM sha512 (2.0.18, x86_64, 166613049 bytes — matches the published size, and rpm -qp reports opencode 2.0.18-1):
hex : ca005781d94f01ddd332d06146db10c3bd15086ab47f5d6f77b5fda12870be3e0f53fdd45b1b0b02492ad80ff1ff99b6162fa7e6a24f994854041020617c8529
base64 : ygBXgdlPAd3TMtBhRtsQw70VCGq0f11vd7X9oShwvj4PU/3UWxsLAkkq2A/x/5m2Fi+n5qJPmUhUBBAgYXyFKQ==
The arm64 feed has the same defect: in latest-linux-arm64.yml (2.0.18), the opencode-desktop-linux-aarch64.rpm sha512 equals the arm64 AppImage's sha512 (L9feZG1C…).
Additional Context
- Published
sizevalues are correct for all three artifacts; only the RPMsha512is wrong, i.e. the hash was copied from the AppImage entry while the size was computed per file. - The 1.x line is healthy, so this looks like a regression in the 2.x publish path:
releases/download/v1.18.33/latest-linux.yml→ rpm sha512y5AkwOeo…matches the actualopencode-desktop-linux-x86_64.rpm(106 478 045 bytes).- Same check passes for 1.18.32 (sha512
bQyJxts…, size 106 460 189) against a locally cached updater artifact.
packages/desktop/scripts/finalize-latest-yml.tsonly re-serializeselectron-builder's ownlatest-linux.yml, so the bad value is either produced by electron-builder (targets are["AppImage", "deb", "rpm"]inpackages/desktop/electron-builder.config.ts) or introduced between build and upload.- There is no GitHub release for tag
v2.0.18(GET /releases/tags/v2.0.18→ 404); the 2.0.x feed only exists on the CDN, which makes the bad value harder to catch. - No
SHA512SUMS/*.sha512sidecars are published (404on/files/bin/2.0.18/SHA512SUMSand friends) and the RPM is unsigned (Signature: (none)), so users currently have no independent way to verify an RPM download. - Suggested fix: recompute each
files[]sha512 from the artifact before uploading the feed and fail the release on any mismatch; ideally also publishSHA512SUMSalongside/files/bin/<version>/.
Workaround
Users can install manually once the file is fetched over HTTPS and its size matches the feed, but there is currently no published value to verify it against — the values above are measured locally and should be re-checked by the release pipeline.
Activity
steevej-2077 commentedon Oct 9, 2026
Verified: fixed since 2.0.24, confirmed live on 2.0.26.
Root cause / fix: #53309 —
parse()inpackages/desktop/scripts/publish.tsassigned everysha512:line to the last file seen, so electron-builder's legacy top-levelpath:/sha512:fields (which repeat the first file) overwrote the last entry of each manifest (the rpm on Linux, the dmg on macOS).Since which version:
938baed).packages/desktop/scripts/publish.tscontains the fix from tagv2.0.24(2026-10-06) onward;v2.0.23(2026-10-05 05:24 UTC) predates the merge and is the last broken release — consistent with the bad 2.0.23 manifests cited in the PR.Live verification against
latest-linux.yml/latest-linux-arm64.yml(version: 2.0.26, releaseDate 2026-10-08), hashes measured from the downloaded artifacts:opencode-desktop-linux-x86_64.rpmadejch5D8JzT7ovePIMj+qcuzwE89X8bnF25yJ8OO8Flu/z3pRnRnCd3M5gSbaASls/AdUotjfoUOzrF3wvC/Q==opencode-desktop-linux-aarch64.rpmxZ78DXL53k8FnCOodSB8t4ASaHPt04WWGGd7f5GpQEjx/iisSTQpRpP8HV1V7EUKgOyNv8QDJg+fmZ9Lu5+fig==The AppImage and deb entries still carry their own distinct hashes, and
latest-mac.ymlnow lists distinct zip/dmg hashes as well — the legacy-field overwrite is gone everywhere.Still open from the original report (optional, not a blocker): no
SHA512SUMSsidecars and the RPM remains unsigned, so there is still no independent way to verify a download. Happy to keep that as a separate follow-up issue.Closing as fixed in 2.0.24+, verified on 2.0.26.