Repository navigation
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the
Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
ApprovabilityVerdict: Needs Human Approval Macroscope's review found this PR requires human approval — The change preserves existing AppImage launch paths with a symlink when updates adopt versionless filenames. It also adds a file-level static-analysis suppression, which requires human review under the configured approval rules. You can add or adjust custom eligibility rules. Learn more. |
|
Note Written by Verified in a real dev environmentverified head
these were locally packaged appimages using the supported administrator https update feed, not shell fixtures or a mocked updater. package versions command transcript with before/after launcher results and artifact hashes Not verifiedpublic github release delivery, release rollout ordering, arm64, desktop-menu clicks, and failure recovery were not exercised. macos, windows, ios, and android were not exercised; this change runs in the linux appimage installer. this does not repair already-broken launchers or protect an update initiated by an older build without the fix. a versioned bridge release still needs to ship first. |
50a4cab to
487e519
Compare
Dismissed: unsolicited automated review from a blocked account.
487e519 to
9863c3b
Compare
Drop cases that only re-test electron-updater's own behaviour, run the transition case through the relaunch path so it fails without the fix, and skip registering the listener when APPIMAGE is unset. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

The versioned → versionless AppImage update in #25756 still deletes the path used by existing launchers (#8944). A launcher symlink then fails with
ENOENT, even though the new executable is installed.Preserve that removed path as a relative symlink, using electron-updater 6.8.9's synchronous
appimage-filename-updated(destination)event after the move and before relaunch. Only bridge to versionless destination names: later updates replace that file in place, so aliases cannot accumulate across versioned nightly releases. The listener exists only during explicit installation and is removed on failure. A symlink failure warns without aborting installation or overwriting an existing path. Release names, AUR packaging and desktop entries are unchanged.Release ordering matters: this protects an update initiated by a versioned release that already contains this code. Ship it in a versioned bridge release before switching artifact names. It cannot protect the initial unpatched → first-patched update, repair already-broken launchers, or preserve versioned → versioned updates. Landing this together with versionless artifacts does not retroactively protect ordinary existing installs; the bridge needs to run first.
This is a companion transition fix for #25756, submitted under CONTRIBUTING.md's small, focused obvious-bug exception. The native reproduction establishes the missing launch path; no upstream maintainer approval is claimed.
Verification on Linux ARM64 with executable shell fixtures (not packaged AppImages):
AppImageUpdater.doInstallwith native filesystem/shell fixtures and an existing launcher symlink. Before the fix, the transition fixture failed withENOENT; all six final cases pass. The transition now has one representative filename case because architecture and channel do not change the path behavior. They cover executable permissions, forced relaunch ordering, a custom renamed versioned install transitioning and updating in place afterward, custom versionless names, synchronous relaunch failure with re-download/retry, refusal to overwrite a recreated path, and declining versioned → versioned aliases. The new alias-chain guard regression failed before narrowing the handler.vp run check:changed: passed format, lint, both Knip passes, affected desktop/scripts typechecks, and all six regression cases.Limits: fixtures call the real synchronous installer but replace Electron's deferred quit and detached launch with synchronous shell execution. No packaged Electron/FUSE or desktop-menu click was tested on either architecture. The shell fixtures run natively on ARM64; x64/ARM64 artifact names are exercised as path behavior. Install-on-quit remains disabled. Move failure before the event retains the dependency's destructive behavior (covered separately by #21621/#21622). The retry fixture re-populates the moved download and bypasses BaseUpdater's error dispatch; it does not prove automatic recovery or asynchronous relaunch handling. No rendered UI changed.
Reviewed with review-loop: 2 rounds with Claude Opus 5.5 on high. Reviewer verdict: approved
Created with GPT-6.1 Sol in the Codex harness.