pulse-zax/apps/desktop/forge.config.ts

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;