-
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathforge.config.ts
More file actions
142 lines (138 loc) · 4.66 KB
/
forge.config.ts
File metadata and controls
142 lines (138 loc) · 4.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import { MakerDeb } from '@electron-forge/maker-deb';
import { MakerDMG } from '@electron-forge/maker-dmg';
import { MakerSquirrel } from '@electron-forge/maker-squirrel';
import { MakerZIP } from '@electron-forge/maker-zip';
import { FusesPlugin } from '@electron-forge/plugin-fuses';
import { VitePlugin } from '@electron-forge/plugin-vite';
import type { ForgeConfig } from '@electron-forge/shared-types';
import { FuseV1Options, FuseVersion } from '@electron/fuses';
// Simple check: only sign if we have Apple ID credentials and not explicitly skipping
const shouldSign = !!(
process.env.APPLE_ID &&
process.env.APPLE_ID_PASSWORD &&
process.env.SKIP_CODESIGN !== 'true'
);
const shouldNotarize = shouldSign;
const shortDescription = 'A robust color management tool for the modern age.';
const longDescription = `Swach is a powerful color management tool designed for modern workflows.
Features include color palette management, contrast checking, and an eyedropper
tool for precise color picking from any part of your screen.`;
const config: ForgeConfig = {
packagerConfig: {
asar: false,
darwinDarkModeSupport: true,
icon: 'electron-app/resources/icon',
name: 'Swach',
// Only include codesigning configuration if certificates are available
...(shouldSign && {
osxSign: {
optionsForFile: () => {
return {
entitlements: 'electron-app/src/entitlements.plist',
hardenedRuntime: true,
identity:
'Developer ID Application: Ship Shape Consulting LLC (779MXKT6B5)',
};
},
},
}),
// Only include notarization if both certificates and credentials are available
...(shouldNotarize && {
osxNotarize: {
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_ID_PASSWORD,
teamId: '779MXKT6B5',
},
}),
protocols: [
{
name: 'swach',
schemes: ['swach'],
},
],
// Include all resources in the packaged app
extraResource: [
'electron-app/resources',
// hue-hunter renderer files and sampler binary must be extracted
// because Vite bundles node_modules, so asarUnpack doesn't work
'node_modules/hue-hunter/.vite',
...(process.platform === 'win32'
? [
'node_modules/hue-hunter/rust-sampler/target/release/hue-hunter-sampler.exe',
]
: [
'node_modules/hue-hunter/rust-sampler/target/release/hue-hunter-sampler',
]),
],
},
makers: [
new MakerDeb(
{
options: {
bin: 'Swach',
name: 'Swach',
productName: 'Swach',
description: shortDescription,
productDescription: longDescription,
maintainer: 'Ship Shape Consulting LLC',
homepage: 'https://swach.io',
icon: 'electron-app/resources/icon.png',
desktopTemplate: 'electron-app/resources/swach.desktop',
},
},
['linux']
),
new MakerDMG(() => {
return {
name: 'Swach',
background: 'electron-app/resources/installBackground.png',
icon: 'electron-app/resources/dmg.icns',
};
}, ['darwin']),
// Build unsigned executable - will be signed later with eSigner
new MakerSquirrel(
{
name: 'Swach',
setupExe: 'Swach-${version}.Setup.exe',
},
['win32']
),
new MakerZIP({}, ['darwin']),
],
plugins: [
new VitePlugin({
// `build` can specify multiple entry builds, which can be Main process, Preload scripts, Worker process, etc.
// If you are familiar with Vite configuration, it will look really familiar.
build: [
{
// `entry` is just an alias for `build.lib.entry` in the corresponding file of `config`.
entry: 'electron-app/main.ts',
config: 'vite.main.config.ts',
target: 'main',
},
{
entry: 'electron-app/src/preload.ts',
config: 'vite.preload.config.ts',
},
],
renderer: [
{
name: 'main_window',
config: 'vite.renderer.config.ts',
},
],
}),
// Fuses are used to enable/disable various Electron functionality
// at package time, before code signing the application
new FusesPlugin({
version: FuseVersion.V1,
[FuseV1Options.RunAsNode]: false,
[FuseV1Options.EnableCookieEncryption]: true,
[FuseV1Options.EnableNodeOptionsEnvironmentVariable]: false,
[FuseV1Options.EnableNodeCliInspectArguments]: false,
[FuseV1Options.EnableEmbeddedAsarIntegrityValidation]: false,
[FuseV1Options.OnlyLoadAppFromAsar]: false,
}),
],
};
export default config;