electron-builder.config.test.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { expect, test } from "bun:test"
  2. import type { Configuration } from "electron-builder"
  3. const legacyDesktopEntry = "resources/linux/opencode-desktop.desktop"
  4. const channels = [
  5. { channel: "dev", appId: "ai.opencode.desktop.dev" },
  6. { channel: "beta", appId: "ai.opencode.desktop.beta" },
  7. { channel: "prod", appId: "ai.opencode.desktop" },
  8. ] as const
  9. for (const channel of channels) {
  10. test(`uses one Linux desktop identity for ${channel.channel}`, async () => {
  11. const previous = process.env.OPENCODE_CHANNEL
  12. process.env.OPENCODE_CHANNEL = channel.channel
  13. const module = await import(`./electron-builder.config.ts?channel=${channel.channel}`)
  14. const config = module.default as Configuration
  15. if (previous === undefined) delete process.env.OPENCODE_CHANNEL
  16. else process.env.OPENCODE_CHANNEL = previous
  17. expect(config.appId).toBe(channel.appId)
  18. expect(config.extraMetadata?.desktopName).toBe(`${channel.appId}.desktop`)
  19. expect(config.linux?.executableName).toBe(channel.appId)
  20. expect(config.linux?.desktop?.entry?.StartupWMClass).toBe(channel.appId)
  21. })
  22. }
  23. test("keeps a hidden prod launcher for old Linux pins", async () => {
  24. const previous = process.env.OPENCODE_CHANNEL
  25. process.env.OPENCODE_CHANNEL = "prod"
  26. const module = await import("./electron-builder.config.ts?compat=prod")
  27. const config = module.default as Configuration
  28. if (previous === undefined) delete process.env.OPENCODE_CHANNEL
  29. else process.env.OPENCODE_CHANNEL = previous
  30. expect(config.deb?.fpm?.[0]).toEndWith(`${legacyDesktopEntry}=/usr/share/applications/opencode-desktop.desktop`)
  31. expect(config.rpm?.fpm?.[0]).toEndWith(`${legacyDesktopEntry}=/usr/share/applications/opencode-desktop.desktop`)
  32. const desktop = await Bun.file(legacyDesktopEntry).text()
  33. expect(desktop).toContain("Exec=/opt/OpenCode/ai.opencode.desktop %U")
  34. expect(desktop).toContain("Icon=ai.opencode.desktop")
  35. expect(desktop).toContain("StartupWMClass=ai.opencode.desktop")
  36. expect(desktop).toContain("NoDisplay=true")
  37. })