85 lines
2.7 KiB
TypeScript
85 lines
2.7 KiB
TypeScript
import type { ForgeConfig } from '@electron-forge/shared-types';
|
|
import { MakerZIP } from '@electron-forge/maker-zip';
|
|
import { MakerDMG } from '@electron-forge/maker-dmg';
|
|
import { MakerDeb } from '@electron-forge/maker-deb';
|
|
import { MakerRpm } from '@electron-forge/maker-rpm';
|
|
import { existsSync } from 'fs';
|
|
|
|
// macOS audio driver + helper — only include if built
|
|
const hasNativeDriver = existsSync('./native/audio-driver/build/PulseAudio.driver');
|
|
const hasAudioHelper = existsSync('./native/audio-driver/build/pulse-audio-helper');
|
|
|
|
const config: ForgeConfig = {
|
|
packagerConfig: {
|
|
asar: {
|
|
unpack: '**/*.node', // Native addons must be outside asar
|
|
},
|
|
name: 'Pulse',
|
|
executableName: 'pulse-desktop',
|
|
appBundleId: 'com.pulse.desktop',
|
|
icon: './assets/icon',
|
|
ignore: [
|
|
/^\/node_modules/,
|
|
/^\/src/,
|
|
/^\/scripts/,
|
|
/^\/tsconfig\.json/,
|
|
/^\/forge\.config\.ts/,
|
|
],
|
|
// Ship the audio driver + helper in app resources (macOS only)
|
|
...(hasNativeDriver && {
|
|
extraResource: [
|
|
'./native/audio-driver/build/PulseAudio.driver',
|
|
...(hasAudioHelper ? ['./native/audio-driver/build/pulse-audio-helper'] : []),
|
|
],
|
|
}),
|
|
extendInfo: {
|
|
NSMicrophoneUsageDescription: 'Pulse needs microphone access for voice chat.',
|
|
NSCameraUsageDescription: 'Pulse needs camera access for video calls.',
|
|
NSScreenCaptureUsageDescription: 'Pulse needs screen capture access for screen sharing.',
|
|
},
|
|
// macOS code signing (requires APPLE_IDENTITY env var)
|
|
...(process.env.APPLE_IDENTITY && {
|
|
osxSign: {
|
|
identity: process.env.APPLE_IDENTITY,
|
|
entitlements: './entitlements.plist',
|
|
'entitlements-inherit': './entitlements.plist',
|
|
'hardened-runtime': true,
|
|
},
|
|
}),
|
|
// macOS notarization (requires APPLE_ID + APPLE_PASSWORD + APPLE_TEAM_ID env vars)
|
|
...(process.env.APPLE_ID && process.env.APPLE_PASSWORD && process.env.APPLE_TEAM_ID && {
|
|
osxNotarize: {
|
|
appleId: process.env.APPLE_ID,
|
|
appleIdPassword: process.env.APPLE_PASSWORD,
|
|
teamId: process.env.APPLE_TEAM_ID,
|
|
},
|
|
}),
|
|
},
|
|
makers: [
|
|
new MakerDMG({
|
|
format: 'ULFO',
|
|
}),
|
|
new MakerZIP({}, ['darwin', 'win32']),
|
|
new MakerDeb({
|
|
options: {
|
|
name: 'pulse-desktop',
|
|
bin: 'pulse-desktop',
|
|
productName: 'Pulse',
|
|
icon: './assets/icon.png',
|
|
categories: ['Network', 'Chat'],
|
|
},
|
|
}),
|
|
new MakerRpm({
|
|
options: {
|
|
name: 'pulse-desktop',
|
|
bin: 'pulse-desktop',
|
|
productName: 'Pulse',
|
|
icon: './assets/icon.png',
|
|
categories: ['Network', 'Chat'],
|
|
},
|
|
}),
|
|
],
|
|
};
|
|
|
|
export default config;
|