forge.config.ts 2.82 KB
Newer Older
Eva Ho's avatar
Eva Ho committed
1
import type { ForgeConfig } from '@electron-forge/shared-types'
Jeffrey Morgan's avatar
Jeffrey Morgan committed
2
3
import { MakerSquirrel } from '@electron-forge/maker-squirrel'
import { MakerZIP } from '@electron-forge/maker-zip'
4
import { PublisherGithub } from '@electron-forge/publisher-github'
Jeffrey Morgan's avatar
Jeffrey Morgan committed
5
6
import { AutoUnpackNativesPlugin } from '@electron-forge/plugin-auto-unpack-natives'
import { WebpackPlugin } from '@electron-forge/plugin-webpack'
Jeffrey Morgan's avatar
Jeffrey Morgan committed
7
8
import * as path from 'path'
import * as fs from 'fs'
Jeffrey Morgan's avatar
Jeffrey Morgan committed
9
10
11
12

import { mainConfig } from './webpack.main.config'
import { rendererConfig } from './webpack.renderer.config'

Jeffrey Morgan's avatar
Jeffrey Morgan committed
13
14
const packageJson = JSON.parse(fs.readFileSync(path.resolve(__dirname, './package.json'), 'utf8'))

Jeffrey Morgan's avatar
Jeffrey Morgan committed
15
16
const config: ForgeConfig = {
  packagerConfig: {
Jeffrey Morgan's avatar
Jeffrey Morgan committed
17
    appVersion: process.env.VERSION || packageJson.version,
Jeffrey Morgan's avatar
Jeffrey Morgan committed
18
    asar: true,
Eva Ho's avatar
Eva Ho committed
19
    icon: './assets/icon.icns',
Eva Ho's avatar
Eva Ho committed
20
    extraResource: [
21
      '../dist/ollama',
22
23
24
25
      path.join(__dirname, './assets/iconTemplate.png'),
      path.join(__dirname, './assets/iconTemplate@2x.png'),
      path.join(__dirname, './assets/iconUpdateTemplate.png'),
      path.join(__dirname, './assets/iconUpdateTemplate@2x.png'),
26
27
28
29
      path.join(__dirname, './assets/iconDarkTemplate.png'),
      path.join(__dirname, './assets/iconDarkTemplate@2x.png'),
      path.join(__dirname, './assets/iconDarkUpdateTemplate.png'),
      path.join(__dirname, './assets/iconDarkUpdateTemplate@2x.png'),
30
      ...(process.platform === 'darwin' ? ['../llm/ggml-metal.metal'] : []),
Eva Ho's avatar
Eva Ho committed
31
    ],
32
33
34
35
36
37
38
39
40
41
42
43
44
    ...(process.env.SIGN
      ? {
          osxSign: {
            identity: process.env.APPLE_IDENTITY,
          },
          osxNotarize: {
            tool: 'notarytool',
            appleId: process.env.APPLE_ID || '',
            appleIdPassword: process.env.APPLE_PASSWORD || '',
            teamId: process.env.APPLE_TEAM_ID || '',
          },
        }
      : {}),
45
46
47
    osxUniversal: {
      x64ArchFiles: '**/ollama',
    },
Jeffrey Morgan's avatar
Jeffrey Morgan committed
48
49
  },
  rebuildConfig: {},
Eva Ho's avatar
Eva Ho committed
50
  makers: [new MakerSquirrel({}), new MakerZIP({}, ['darwin'])],
51
52
53
54
55
56
57
58
59
60
  publishers: [
    new PublisherGithub({
      repository: {
        name: 'ollama',
        owner: 'jmorganca',
      },
      draft: false,
      prerelease: true,
    }),
  ],
Jeffrey Morgan's avatar
Jeffrey Morgan committed
61
62
63
64
65
  hooks: {
    readPackageJson: async (_, packageJson) => {
      return { ...packageJson, version: process.env.VERSION || packageJson.version }
    },
  },
Jeffrey Morgan's avatar
Jeffrey Morgan committed
66
67
68
69
  plugins: [
    new AutoUnpackNativesPlugin({}),
    new WebpackPlugin({
      mainConfig,
70
      devContentSecurityPolicy: `default-src * 'unsafe-eval' 'unsafe-inline'; img-src data: 'self'`,
Jeffrey Morgan's avatar
Jeffrey Morgan committed
71
72
      renderer: {
        config: rendererConfig,
Jeffrey Morgan's avatar
Jeffrey Morgan committed
73
        nodeIntegration: true,
Jeffrey Morgan's avatar
Jeffrey Morgan committed
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
        entryPoints: [
          {
            html: './src/index.html',
            js: './src/renderer.tsx',
            name: 'main_window',
            preload: {
              js: './src/preload.ts',
            },
          },
        ],
      },
    }),
  ],
}

export default config