/ forge.config.ts
forge.config.ts
1 import type { ForgeConfig } from '@electron-forge/shared-types'; 2 import { MakerSquirrel } from '@electron-forge/maker-squirrel'; 3 import { MakerZIP } from '@electron-forge/maker-zip'; 4 import { MakerDeb } from '@electron-forge/maker-deb'; 5 import { MakerRpm } from '@electron-forge/maker-rpm'; 6 import { MakerDMG } from '@electron-forge/maker-dmg'; 7 import { AutoUnpackNativesPlugin } from '@electron-forge/plugin-auto-unpack-natives'; 8 import { WebpackPlugin } from '@electron-forge/plugin-webpack'; 9 import { PublisherGithub } from '@electron-forge/publisher-github'; 10 import fs from 'fs'; 11 import { exec } from 'child_process'; 12 13 import { mainConfig, mainDevConfig } from './webpack.main.config'; 14 import { rendererConfig } from './webpack.renderer.config'; 15 16 const config: ForgeConfig = { 17 packagerConfig: { 18 asar: true, 19 name: 'morpheus', 20 extraResource: ['./executables/'], 21 icon: 'src/frontend/assets/images/circle-mor-logo', 22 osxSign: { 23 identity: process.env.APPLE_DEVELOPER_ID, 24 optionsForFile: () => { 25 return { 26 entitlements: './entitlements.plist', 27 }; 28 }, 29 }, 30 ...(process.env.APPLE_ID && 31 process.env.APPLE_ID_PASSWORD && 32 process.env.APPLE_TEAM_ID && { 33 osxNotarize: { 34 appleId: process.env.APPLE_ID, 35 appleIdPassword: process.env.APPLE_ID_PASSWORD, 36 teamId: process.env.APPLE_TEAM_ID, 37 }, 38 }), 39 }, 40 hooks: { 41 prePackage: async (_, platform) => { 42 const platformFile = 43 platform === 'darwin' 44 ? 'ollama-darwin' 45 : platform === 'win32' 46 ? 'ollama.exe' 47 : 'ollama-linux'; 48 49 const filePath = `src/executables/${platformFile}`; 50 51 platform !== 'win32' 52 ? exec(`chmod +x ${filePath}`) 53 : fs.chmodSync(filePath, 755); 54 55 fs.mkdirSync('executables'); 56 fs.copyFileSync(filePath, `executables/${platformFile}`); 57 }, 58 postPackage: async () => { 59 fs.rmSync('executables', { recursive: true, force: true }); 60 } 61 }, 62 rebuildConfig: {}, 63 makers: [ 64 new MakerSquirrel({ 65 setupIcon: 'src/frontend/assets/images/circle-mor-logo.ico', 66 }), 67 new MakerZIP({}, ['darwin']), 68 new MakerRpm({}), 69 new MakerDeb({ 70 options: { 71 icon: 'src/frontend/assets/images/MOR_logo_circle.iconset/icon_512x512.png', 72 maintainer: 'Morpheus', 73 homepage: 'https://www.mor.org', 74 categories: ['Utility'], 75 }, 76 }), 77 new MakerDMG({ 78 icon: 'src/frontend/assets/images/circle-mor-logo.icns', 79 format: 'ULFO', 80 background: 'src/frontend/assets/images/dmgbg.svg', 81 overwrite: true, 82 additionalDMGOptions: { 83 window: { 84 size: { 85 width: 600, 86 height: 600, 87 }, 88 }, 89 }, 90 }), 91 ], 92 publishers: [ 93 new PublisherGithub({ 94 repository: { 95 owner: 'MorpheusAIs', 96 name: 'Node', 97 }, 98 draft: true, 99 }), 100 ], 101 plugins: [ 102 new AutoUnpackNativesPlugin({}), 103 new WebpackPlugin({ 104 mainConfig: process.env.NODE_ENV === 'development' ? mainDevConfig : mainConfig, 105 devContentSecurityPolicy: 106 "connect-src 'self' unsafe-inline ws://localhost:* https://metamask-sdk-socket.metafi.codefi.network wss://metamask-sdk-socket.metafi.codefi.network data:", 107 renderer: { 108 config: rendererConfig, 109 entryPoints: [ 110 { 111 html: './src/backend/index.html', 112 js: './src/backend/renderer.ts', 113 name: 'main_window', 114 preload: { 115 js: './src/backend/preload.ts', 116 }, 117 }, 118 ], 119 }, 120 }), 121 ], 122 }; 123 124 export default config;