From 1274408b89498d7a366362ff7e610573ff740d88 Mon Sep 17 00:00:00 2001 From: Andrei Dziahel Date: Tue, 28 Jul 2026 02:24:20 +0200 Subject: [PATCH] fix(desktop): install AppStream metainfo in Linux packages (#36872) Co-authored-by: adityachaudhary99 --- packages/desktop/electron-builder.config.test.ts | 6 ++++-- packages/desktop/electron-builder.config.ts | 13 +++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/desktop/electron-builder.config.test.ts b/packages/desktop/electron-builder.config.test.ts index eee2b825cb5..ab3a3bdf384 100644 --- a/packages/desktop/electron-builder.config.test.ts +++ b/packages/desktop/electron-builder.config.test.ts @@ -24,6 +24,8 @@ for (const channel of channels) { expect(config.extraMetadata?.desktopName).toBe(`${channel.appId}.desktop`) expect(config.linux?.executableName).toBe(channel.appId) expect(config.linux?.desktop?.entry?.StartupWMClass).toBe(channel.appId) + expect(config.deb?.fpm).toContainEqual(expect.stringContaining(`/usr/share/metainfo/${channel.appId}.metainfo.xml`)) + expect(config.rpm?.fpm).toContainEqual(expect.stringContaining(`/usr/share/metainfo/${channel.appId}.metainfo.xml`)) }) } @@ -37,8 +39,8 @@ test("keeps a hidden prod launcher for old Linux pins", async () => { if (previous === undefined) delete process.env.OPENCODE_CHANNEL else process.env.OPENCODE_CHANNEL = previous - expect(config.deb?.fpm?.[0]).toEndWith(`${legacyDesktopEntry}=/usr/share/applications/opencode-desktop.desktop`) - expect(config.rpm?.fpm?.[0]).toEndWith(`${legacyDesktopEntry}=/usr/share/applications/opencode-desktop.desktop`) + expect(config.deb?.fpm?.some((entry) => entry.endsWith("opencode-desktop.desktop=/usr/share/applications/opencode-desktop.desktop"))).toBe(true) + expect(config.rpm?.fpm?.some((entry) => entry.endsWith("opencode-desktop.desktop=/usr/share/applications/opencode-desktop.desktop"))).toBe(true) const desktop = await Bun.file(legacyDesktopEntry).text() expect(desktop).toContain("Exec=/opt/OpenCode/ai.opencode.desktop %U") diff --git a/packages/desktop/electron-builder.config.ts b/packages/desktop/electron-builder.config.ts index 23afe811c2b..a10a757dbb8 100644 --- a/packages/desktop/electron-builder.config.ts +++ b/packages/desktop/electron-builder.config.ts @@ -15,6 +15,9 @@ const signScript = path.join(rootDir, "script", "sign-windows.ps1") const legacyDesktopEntry = path.join(packageDir, "resources", "linux", "opencode-desktop.desktop") const legacyDesktopEntryFpm = `${legacyDesktopEntry}=/usr/share/applications/opencode-desktop.desktop` +const metainfoFpm = (appId: string) => + `${path.join(packageDir, "resources", `${appId}.metainfo.xml`)}=/usr/share/metainfo/${appId}.metainfo.xml` + async function signWindows(configuration: { path: string }) { if (process.platform !== "win32") return if (process.env.GITHUB_ACTIONS !== "true") return @@ -116,7 +119,8 @@ function getConfig() { ...base, appId, productName: "OpenCode Dev", - rpm: { packageName: "opencode-dev" }, + deb: { fpm: [metainfoFpm(appId)] }, + rpm: { packageName: "opencode-dev", fpm: [metainfoFpm(appId)] }, } } case "beta": { @@ -126,7 +130,8 @@ function getConfig() { productName: "OpenCode Beta", protocols: { name: "OpenCode Beta", schemes: ["opencode"] }, publish: { provider: "github", owner: "anomalyco", repo: "opencode-beta", channel: "latest" }, - rpm: { packageName: "opencode-beta" }, + deb: { fpm: [metainfoFpm(appId)] }, + rpm: { packageName: "opencode-beta", fpm: [metainfoFpm(appId)] }, } } case "prod": { @@ -136,8 +141,8 @@ function getConfig() { productName: "OpenCode", protocols: { name: "OpenCode", schemes: ["opencode"] }, publish: { provider: "github", owner: "anomalyco", repo: "opencode", channel: "latest" }, - deb: { fpm: [legacyDesktopEntryFpm] }, - rpm: { packageName: "opencode", fpm: [legacyDesktopEntryFpm] }, + deb: { fpm: [metainfoFpm(appId), legacyDesktopEntryFpm] }, + rpm: { packageName: "opencode", fpm: [metainfoFpm(appId), legacyDesktopEntryFpm] }, } } }