summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop-electron/electron-builder.config.ts
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2026-03-04 15:12:34 +0800
committerGitHub <[email protected]>2026-03-04 15:12:34 +0800
commit5cf235fa6cf7b4c890c68f8ff68a96fcae992abf (patch)
tree25fdfd8ce95ad048fb097822995dcf060e8d6d8b /packages/desktop-electron/electron-builder.config.ts
parente4f0825c56300286ec0aa82b1006e4006a17e1e1 (diff)
downloadopencode-5cf235fa6cf7b4c890c68f8ff68a96fcae992abf.tar.gz
opencode-5cf235fa6cf7b4c890c68f8ff68a96fcae992abf.zip
desktop: add electron version (#15663)
Diffstat (limited to 'packages/desktop-electron/electron-builder.config.ts')
-rw-r--r--packages/desktop-electron/electron-builder.config.ts97
1 files changed, 97 insertions, 0 deletions
diff --git a/packages/desktop-electron/electron-builder.config.ts b/packages/desktop-electron/electron-builder.config.ts
new file mode 100644
index 000000000..e6b4bcd2b
--- /dev/null
+++ b/packages/desktop-electron/electron-builder.config.ts
@@ -0,0 +1,97 @@
+import type { Configuration } from "electron-builder"
+
+const channel = (() => {
+ const raw = process.env.OPENCODE_CHANNEL
+ if (raw === "dev" || raw === "beta" || raw === "prod") return raw
+ return "dev"
+})()
+
+const getBase = (): Configuration => ({
+ artifactName: "opencode-electron-${os}-${arch}.${ext}",
+ directories: {
+ output: "dist",
+ buildResources: "resources",
+ },
+ files: ["out/**/*", "resources/**/*"],
+ extraResources: [
+ {
+ from: "resources/",
+ to: "",
+ filter: ["opencode-cli*"],
+ },
+ {
+ from: "native/",
+ to: "native/",
+ filter: ["index.js", "index.d.ts", "build/Release/mac_window.node", "swift-build/**"],
+ },
+ ],
+ mac: {
+ category: "public.app-category.developer-tools",
+ icon: `resources/icons/icon.icns`,
+ hardenedRuntime: true,
+ gatekeeperAssess: false,
+ entitlements: "resources/entitlements.plist",
+ entitlementsInherit: "resources/entitlements.plist",
+ notarize: true,
+ target: ["dmg", "zip"],
+ },
+ dmg: {
+ sign: true,
+ },
+ protocols: {
+ name: "OpenCode",
+ schemes: ["opencode"],
+ },
+ win: {
+ icon: `resources/icons/icon.ico`,
+ target: ["nsis"],
+ },
+ nsis: {
+ oneClick: false,
+ allowToChangeInstallationDirectory: true,
+ installerIcon: `resources/icons/icon.ico`,
+ installerHeaderIcon: `resources/icons/icon.ico`,
+ },
+ linux: {
+ icon: `resources/icons`,
+ category: "Development",
+ target: ["AppImage", "deb", "rpm"],
+ },
+})
+
+function getConfig() {
+ const base = getBase()
+
+ switch (channel) {
+ case "dev": {
+ return {
+ ...base,
+ appId: "ai.opencode.desktop.dev",
+ productName: "OpenCode Dev",
+ rpm: { packageName: "opencode-dev" },
+ }
+ }
+ case "beta": {
+ return {
+ ...base,
+ appId: "ai.opencode.desktop.beta",
+ productName: "OpenCode Beta",
+ protocols: { name: "OpenCode Beta", schemes: ["opencode"] },
+ publish: { provider: "github", owner: "anomalyco", repo: "opencode-beta", channel: "latest" },
+ rpm: { packageName: "opencode-beta" },
+ }
+ }
+ case "prod": {
+ return {
+ ...base,
+ appId: "ai.opencode.desktop",
+ productName: "OpenCode",
+ protocols: { name: "OpenCode", schemes: ["opencode"] },
+ publish: { provider: "github", owner: "anomalyco", repo: "opencode", channel: "latest" },
+ rpm: { packageName: "opencode" },
+ }
+ }
+ }
+}
+
+export default getConfig()