fix(desktop updates): Linux package installs update via their package manager
CI / Build & Quality Checks (pull_request) Failing after 1m40s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Playwright smoke (e2e) (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 6s
CI / Build & Quality Checks (pull_request) Failing after 1m40s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Playwright smoke (e2e) (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 6s
Reported on CachyOS: "Check for Updates → The update downloaded but couldn't be installed … Permission denied (os error 13) at path /usr/bin/tauri_current_app…". The app was installed from the Arch package; Tauri's Linux updater can only replace an AppImage. With cinny-desktop's new update_install_kind command: - pacman / deb installs: the toast says the update is available and opens Settings → General → App Updates, which shows the package-manager command (`sudo pacman -U …pkg.tar.zst`, or the .deb + `sudo apt install`) with Copy command and Download package — no Install & Restart that can't work. "Copied" only when the clipboard write actually succeeded. - other distros: a link to the downloads page. - Windows, AppImage, and desktop builds without the command: unchanged in-app update. - a native "package-managed" refusal shows the same help. Tests: unit (kinds, commands, refusal detection); in the real client with a simulated desktop bridge: pacman → toast + Settings command/buttons, install never attempted; older desktop → in-app flow as before. Unit 1321, Playwright 26 passed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
747400ea25
commit
27d659118f
@@ -47,3 +47,39 @@ export const describeUpdateError = (phase: UpdatePhase, message: string): string
|
||||
}
|
||||
return 'The update downloaded but couldn’t be installed. Download the installer yourself and run it; your chats and settings are kept.';
|
||||
};
|
||||
|
||||
/**
|
||||
* How this desktop install gets updated (cinny-desktop `update_install_kind`).
|
||||
* Linux package installs can't be replaced in place by the in-app updater
|
||||
* (it tried to write into /usr/bin: "Permission denied (os error 13)"), so
|
||||
* they get their package manager's command instead of an Install button.
|
||||
*/
|
||||
export type InstallKind = 'in-app' | 'pacman' | 'deb' | 'manual';
|
||||
|
||||
const RELEASE_DOWNLOAD =
|
||||
'https://code.lotusguild.org/LotusGuild/cinny-desktop/releases/download/latest';
|
||||
|
||||
export const toInstallKind = (value: unknown): InstallKind =>
|
||||
value === 'pacman' || value === 'deb' || value === 'manual' ? value : 'in-app';
|
||||
|
||||
export type PackageUpdateHelp = { command?: string; url: string; download: string };
|
||||
|
||||
export const packageUpdateHelp = (kind: InstallKind): PackageUpdateHelp | undefined => {
|
||||
if (kind === 'pacman') {
|
||||
const url = `${RELEASE_DOWNLOAD}/LotusChat-x86_64.pkg.tar.zst`;
|
||||
return { command: `sudo pacman -U ${url}`, url, download: 'Download package' };
|
||||
}
|
||||
if (kind === 'deb') {
|
||||
const url = `${RELEASE_DOWNLOAD}/LotusChat-x86_64.deb`;
|
||||
return {
|
||||
command: `curl -LO ${url} && sudo apt install ./LotusChat-x86_64.deb`,
|
||||
url,
|
||||
download: 'Download package',
|
||||
};
|
||||
}
|
||||
if (kind === 'manual') return { url: MANUAL_DOWNLOAD_URL.other, download: 'Open downloads' };
|
||||
return undefined;
|
||||
};
|
||||
|
||||
/** The native side refuses an in-app install on a package install. */
|
||||
export const isPackageManagedError = (message: string): boolean => /package-managed/.test(message);
|
||||
|
||||
Reference in New Issue
Block a user