diff options
| author | Adam Malczewski <[email protected]> | 2026-05-22 16:19:35 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-05-22 16:19:35 +0900 |
| commit | 45a4890031192f4e7409443f98e824dad17ba175 (patch) | |
| tree | a28e1b0618f682476b0b57ba70e8ba26a1939a49 /packages | |
| parent | 9ecaabd87c0e51b8a7408dabb0133a9344586859 (diff) | |
| download | dispatch-45a4890031192f4e7409443f98e824dad17ba175.tar.gz dispatch-45a4890031192f4e7409443f98e824dad17ba175.zip | |
feat: Arch Linux packaging with Electron frontend, systemd backend service, and Windows exe build
- Add Electron wrapper (main.cjs, preload.cjs) for desktop frontend
- Add systemd service unit, env config, and sysusers for backend API
- Add PKGBUILD and .install for Arch package (makepkg -si)
- Add desktop entry, SVG/PNG icon, and wrapper scripts
- Add bin/build-pkg, bin/install-pkg, bin/windows-pkg scripts
- Make API port configurable via PORT env var (default 3000, prod 18390)
- Add electron-builder config for Windows exe cross-compilation
- Set vite base to './' for Electron file:// loading
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/api/src/index.ts | 2 | ||||
| -rw-r--r-- | packages/frontend/electron/main.cjs | 33 | ||||
| -rw-r--r-- | packages/frontend/electron/preload.cjs | 7 | ||||
| -rw-r--r-- | packages/frontend/package.json | 23 | ||||
| -rw-r--r-- | packages/frontend/vite.config.ts | 1 |
5 files changed, 64 insertions, 2 deletions
diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index 045196b..b188e39 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -71,7 +71,7 @@ app.get( export { app }; export default { - port: 3000, + port: Number(process.env.PORT) || 3000, fetch: app.fetch, websocket, }; diff --git a/packages/frontend/electron/main.cjs b/packages/frontend/electron/main.cjs new file mode 100644 index 0000000..2d947da --- /dev/null +++ b/packages/frontend/electron/main.cjs @@ -0,0 +1,33 @@ +const { app, BrowserWindow } = require('electron'); +const path = require('path'); + +function createWindow() { + const win = new BrowserWindow({ + width: 1280, + height: 800, + title: 'Dispatch', + webPreferences: { + nodeIntegration: false, + contextIsolation: true, + preload: path.join(__dirname, 'preload.cjs'), + }, + }); + + win.loadFile(path.join(__dirname, '../dist/index.html')); +} + +app.whenReady().then(() => { + createWindow(); + + app.on('activate', () => { + if (BrowserWindow.getAllWindows().length === 0) { + createWindow(); + } + }); +}); + +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit(); + } +}); diff --git a/packages/frontend/electron/preload.cjs b/packages/frontend/electron/preload.cjs new file mode 100644 index 0000000..c254892 --- /dev/null +++ b/packages/frontend/electron/preload.cjs @@ -0,0 +1,7 @@ +const { contextBridge } = require('electron'); + +contextBridge.exposeInMainWorld('versions', { + electron: process.versions.electron, + node: process.versions.node, + chrome: process.versions.chrome, +}); diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 37b794d..5228e4a 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -3,13 +3,32 @@ "version": "0.0.1", "private": true, "type": "module", + "main": "electron/main.cjs", "scripts": { "dev": "vite", "build": "vite build", "preview": "vite preview", "test": "vitest run", "test:watch": "vitest", - "typecheck": "svelte-check --tsconfig ./tsconfig.json" + "typecheck": "svelte-check --tsconfig ./tsconfig.json", + "electron": "electron electron/main.cjs", + "electron:dev": "vite build && electron electron/main.cjs", + "dist:win": "vite build && electron-builder --win --dir" + }, + "build": { + "appId": "com.dispatch.app", + "productName": "Dispatch", + "directories": { + "output": "release" + }, + "files": [ + "dist/**/*", + "electron/**/*.cjs" + ], + "win": { + "target": "dir", + "icon": "../packaging/dispatch.png" + } }, "dependencies": { "dompurify": "^3.4.5", @@ -23,6 +42,8 @@ "@tailwindcss/vite": "^4.0.0", "@types/dompurify": "^3.2.0", "daisyui": "^5.0.0", + "electron": "^35.0.0", + "electron-builder": "^26.0.0", "svelte-check": "^4.0.0", "tailwindcss": "^4.0.0", "vite": "^6.0.0" diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts index ca947d0..1b9921b 100644 --- a/packages/frontend/vite.config.ts +++ b/packages/frontend/vite.config.ts @@ -3,6 +3,7 @@ import tailwindcss from "@tailwindcss/vite"; import { defineConfig } from "vite"; export default defineConfig({ + base: './', plugins: [tailwindcss(), svelte()], server: { port: 5173, |
