mirror of
https://github.com/wavetermdev/waveterm.git
synced 2024-12-22 16:48:23 +01:00
be3ec7e841
the permissions look scary, but the user still needs to grant them. this just allows the app to ask. this permission set now matches the entitlements in iTerm and other popular terminal programs (before we were too restrictive)
140 lines
5.5 KiB
JavaScript
140 lines
5.5 KiB
JavaScript
const { Arch } = require("electron-builder");
|
|
const pkg = require("./package.json");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const windowsShouldSign = !!process.env.SM_CODE_SIGNING_CERT_SHA1_HASH;
|
|
|
|
/**
|
|
* @type {import('electron-builder').Configuration}
|
|
* @see https://www.electron.build/configuration/configuration
|
|
*/
|
|
const config = {
|
|
appId: pkg.build.appId,
|
|
productName: pkg.productName,
|
|
executableName: pkg.productName,
|
|
artifactName: "${productName}-${platform}-${arch}-${version}.${ext}",
|
|
generateUpdatesFilesForAllChannels: true,
|
|
npmRebuild: false,
|
|
nodeGypRebuild: false,
|
|
electronCompile: false,
|
|
files: [
|
|
{
|
|
from: "./dist",
|
|
to: "./dist",
|
|
filter: ["**/*", "!bin/*", "bin/wavesrv.${arch}*", "bin/wsh*"],
|
|
},
|
|
{
|
|
from: ".",
|
|
to: ".",
|
|
filter: ["package.json"],
|
|
},
|
|
"!node_modules", // We don't need electron-builder to package in Node modules as Vite has already bundled any code that our program is using.
|
|
],
|
|
directories: {
|
|
output: "make",
|
|
},
|
|
asarUnpack: [
|
|
"dist/bin/**/*", // wavesrv and wsh binaries
|
|
"dist/docsite/**/*", // the static docsite
|
|
],
|
|
mac: {
|
|
target: [
|
|
{
|
|
target: "zip",
|
|
arch: ["universal", "arm64", "x64"],
|
|
},
|
|
{
|
|
target: "dmg",
|
|
arch: ["universal", "arm64", "x64"],
|
|
},
|
|
],
|
|
category: "public.app-category.developer-tools",
|
|
minimumSystemVersion: "10.15.0",
|
|
mergeASARs: true,
|
|
singleArchFiles: "dist/bin/wavesrv.*",
|
|
entitlements: "build/entitlements.mac.plist",
|
|
entitlementsInherit: "build/entitlements.mac.plist",
|
|
extendInfo: {
|
|
NSContactsUsageDescription: "A CLI application running in Wave wants to use your contacts.",
|
|
NSRemindersUsageDescription: "A CLI application running in Wave wants to use your reminders.",
|
|
NSLocationWhenInUseUsageDescription:
|
|
"A CLI application running in Wave wants to use your location information while active.",
|
|
NSLocationAlwaysUsageDescription:
|
|
"A CLI application running in Wave wants to use your location information, even in the background.",
|
|
NSCameraUsageDescription: "A CLI application running in Wave wants to use the camera.",
|
|
NSMicrophoneUsageDescription: "A CLI application running in Wave wants to use your microphone.",
|
|
NSCalendarsUsageDescription: "A CLI application running in Wave wants to use Calendar data.",
|
|
NSLocationUsageDescription: "A CLI application running in Wave wants to use your location information.",
|
|
NSAppleEventsUsageDescription: "A CLI application running in Wave wants to use AppleScript.",
|
|
},
|
|
},
|
|
linux: {
|
|
artifactName: "${name}-${platform}-${arch}-${version}.${ext}",
|
|
category: "TerminalEmulator",
|
|
executableName: pkg.name,
|
|
target: ["zip", "deb", "rpm", "snap", "AppImage", "pacman"],
|
|
synopsis: pkg.description,
|
|
description: null,
|
|
desktop: {
|
|
Name: pkg.productName,
|
|
Comment: pkg.description,
|
|
Keywords: "developer;terminal;emulator;",
|
|
category: "Development;Utility;",
|
|
},
|
|
executableArgs: ["--enable-features", "UseOzonePlatform", "--ozone-platform-hint", "auto"], // Hint Electron to use Ozone abstraction layer for native Wayland support
|
|
},
|
|
deb: {
|
|
afterInstall: "build/deb-postinstall.tpl",
|
|
},
|
|
win: {
|
|
target: ["nsis", "msi", "zip"],
|
|
signtoolOptions: windowsShouldSign && {
|
|
signingHashAlgorithms: ["sha256"],
|
|
publisherName: "Command Line Inc",
|
|
certificateSubjectName: "Command Line Inc",
|
|
certificateSha1: process.env.SM_CODE_SIGNING_CERT_SHA1_HASH,
|
|
},
|
|
},
|
|
appImage: {
|
|
license: "LICENSE",
|
|
},
|
|
snap: {
|
|
base: "core22",
|
|
confinement: "classic",
|
|
allowNativeWayland: true,
|
|
artifactName: "${name}_${version}_${arch}.${ext}",
|
|
},
|
|
publish: {
|
|
provider: "generic",
|
|
url: "https://dl.waveterm.dev/releases-w2",
|
|
},
|
|
beforePack: () => {
|
|
const staticSourcePath = process.env.STATIC_DOCSITE_PATH;
|
|
const staticDestPath = "dist/docsite";
|
|
if (staticSourcePath) {
|
|
console.log(`Static docsite path is specified, copying from "${staticSourcePath}" to "${staticDestPath}"`);
|
|
fs.cpSync(staticSourcePath, staticDestPath, { recursive: true });
|
|
}
|
|
},
|
|
afterPack: (context) => {
|
|
// This is a workaround to restore file permissions to the wavesrv binaries on macOS after packaging the universal binary.
|
|
if (context.electronPlatformName === "darwin" && context.arch === Arch.universal) {
|
|
const packageBinDir = path.resolve(
|
|
context.appOutDir,
|
|
`${pkg.productName}.app/Contents/Resources/app.asar.unpacked/dist/bin`
|
|
);
|
|
|
|
// Reapply file permissions to the wavesrv binaries in the final app package
|
|
fs.readdirSync(packageBinDir, {
|
|
recursive: true,
|
|
withFileTypes: true,
|
|
})
|
|
.filter((f) => f.isFile() && f.name.startsWith("wavesrv"))
|
|
.forEach((f) => fs.chmodSync(path.resolve(f.parentPath ?? f.path, f.name), 0o755)); // 0o755 corresponds to -rwxr-xr-x
|
|
}
|
|
},
|
|
};
|
|
|
|
module.exports = config;
|