electron-builder.config.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import type { Configuration } from "electron-builder"
  2. const channel = (() => {
  3. const raw = process.env.OPENCODE_CHANNEL
  4. if (raw === "dev" || raw === "beta" || raw === "prod") return raw
  5. return "dev"
  6. })()
  7. const getBase = (): Configuration => ({
  8. artifactName: "opencode-electron-${os}-${arch}.${ext}",
  9. directories: {
  10. output: "dist",
  11. buildResources: "resources",
  12. },
  13. files: ["out/**/*", "resources/**/*"],
  14. extraResources: [
  15. {
  16. from: "resources/",
  17. to: "",
  18. filter: ["opencode-cli*"],
  19. },
  20. {
  21. from: "native/",
  22. to: "native/",
  23. filter: ["index.js", "index.d.ts", "build/Release/mac_window.node", "swift-build/**"],
  24. },
  25. ],
  26. mac: {
  27. category: "public.app-category.developer-tools",
  28. icon: `resources/icons/icon.icns`,
  29. hardenedRuntime: true,
  30. gatekeeperAssess: false,
  31. entitlements: "resources/entitlements.plist",
  32. entitlementsInherit: "resources/entitlements.plist",
  33. notarize: true,
  34. target: ["dmg", "zip"],
  35. },
  36. dmg: {
  37. sign: true,
  38. },
  39. protocols: {
  40. name: "OpenCode",
  41. schemes: ["opencode"],
  42. },
  43. win: {
  44. icon: `resources/icons/icon.ico`,
  45. target: ["nsis"],
  46. },
  47. nsis: {
  48. oneClick: false,
  49. allowToChangeInstallationDirectory: true,
  50. installerIcon: `resources/icons/icon.ico`,
  51. installerHeaderIcon: `resources/icons/icon.ico`,
  52. },
  53. linux: {
  54. icon: `resources/icons`,
  55. category: "Development",
  56. target: ["AppImage", "deb", "rpm"],
  57. },
  58. })
  59. function getConfig() {
  60. const base = getBase()
  61. switch (channel) {
  62. case "dev": {
  63. return {
  64. ...base,
  65. appId: "ai.opencode.desktop.dev",
  66. productName: "OpenCode Dev",
  67. rpm: { packageName: "opencode-dev" },
  68. }
  69. }
  70. case "beta": {
  71. return {
  72. ...base,
  73. appId: "ai.opencode.desktop.beta",
  74. productName: "OpenCode Beta",
  75. protocols: { name: "OpenCode Beta", schemes: ["opencode"] },
  76. publish: { provider: "github", owner: "anomalyco", repo: "opencode-beta", channel: "latest" },
  77. rpm: { packageName: "opencode-beta" },
  78. }
  79. }
  80. case "prod": {
  81. return {
  82. ...base,
  83. appId: "ai.opencode.desktop",
  84. productName: "OpenCode",
  85. protocols: { name: "OpenCode", schemes: ["opencode"] },
  86. publish: { provider: "github", owner: "anomalyco", repo: "opencode", channel: "latest" },
  87. rpm: { packageName: "opencode" },
  88. }
  89. }
  90. }
  91. }
  92. export default getConfig()