chore(build): update Electron Forge configuration with support for Snap and Flatpak packaging, update .gitignore for new build artifacts, and modify package scripts for local execution

This commit is contained in:
Ivan
2026-04-22 10:52:20 -05:00
parent cfc36c30c9
commit af44499501
4 changed files with 166 additions and 5 deletions
+9
View File
@@ -27,6 +27,15 @@ env.bak/
venv.bak/
.venv/
# Legacy Electron Forge in-repo temp (see scripts/electron-forge-local-tmp.js)
.forge-tmp/
# flatpak-builder / snapcraft working trees (large; may contain root-owned cache)
.flatpak-builder/
parts/
prime/
stage/
# Build files
/build/
/dist/
+52
View File
@@ -1,5 +1,21 @@
const { FusesPlugin } = require("@electron-forge/plugin-fuses");
const { FuseV1Options, FuseVersion } = require("@electron/fuses");
const which = require("which");
function hasExecutable(name) {
return which.sync(name, { nothrow: true }) !== null;
}
const forgeSnapExplicit =
process.env.FORGE_MAKE_SNAP === "1" || process.env.FORGE_MAKE_SNAP === "true";
const forgeFlatpakExplicit =
process.env.FORGE_MAKE_FLATPAK === "1" ||
process.env.FORGE_MAKE_FLATPAK === "true";
const forgeSnapEnabled = hasExecutable("snapcraft") || forgeSnapExplicit;
const forgeFlatpakEnabled =
(hasExecutable("flatpak-builder") && hasExecutable("eu-strip")) ||
forgeFlatpakExplicit;
const platform = process.env.PLATFORM || process.platform;
const arch = process.env.ARCH || process.arch;
@@ -13,6 +29,13 @@ if (platform === "win32" || platform === "win") {
module.exports = {
packagerConfig: {
asar: true,
ignore: [
/^\/\.flatpak-builder(\/|$)/,
/^\/\.snapcraft(\/|$)/,
/^\/parts(\/|$)/,
/^\/prime(\/|$)/,
/^\/stage(\/|$)/,
],
extraResource: [extraResourceDir],
executableName: "reticulum-meshchatx",
name: "Reticulum MeshChatX",
@@ -46,8 +69,24 @@ module.exports = {
name: "@electron-forge/maker-rpm",
config: {},
},
{
name: "@electron-forge/maker-snap",
enabled: forgeSnapEnabled,
config: {
summary: "Mesh networking chat client",
description:
"A simple mesh network communications app powered by the Reticulum Network Stack",
confinement: "strict",
grade: "devel",
features: {
audio: true,
webgl: true,
},
},
},
{
name: "@electron-forge/maker-flatpak",
enabled: forgeFlatpakEnabled,
config: {
options: {
categories: ["Network"],
@@ -56,6 +95,19 @@ module.exports = {
sdk: "org.freedesktop.Sdk",
base: "org.electronjs.Electron2.BaseApp",
baseVersion: "24.08",
finishArgs: [
"--share=ipc",
"--share=network",
"--socket=x11",
"--socket=wayland",
"--device=dri",
"--allow=bluetooth",
"--filesystem=home",
"--talk-name=org.freedesktop.Notifications",
"--env=TMPDIR=/var/tmp",
"--socket=pulseaudio",
],
extraFlatpakBuilderArgs: ["--verbose"],
},
},
},
+8 -4
View File
@@ -39,15 +39,17 @@
"dist:windows": "pnpm run electron-postinstall && cross-env PLATFORM=win32 pnpm run build && electron-builder --win portable nsis --publish=never",
"dist:win-x64": "pnpm run electron-postinstall && cross-env PLATFORM=win32 ARCH=x64 pnpm run build && electron-builder --win portable nsis --x64 --publish=never",
"dist:win-arm64": "pnpm run electron-postinstall && cross-env PLATFORM=win32 ARCH=arm64 pnpm run build && electron-builder --win portable nsis --arm64 --publish=never",
"dist:zip": "pnpm run electron-postinstall && pnpm run build && electron-forge make --targets @electron-forge/maker-zip",
"dist:zip": "pnpm run electron-postinstall && pnpm run build && node scripts/electron-forge-local-tmp.js make --targets @electron-forge/maker-zip",
"dist-prebuilt": "pnpm run electron-postinstall && pnpm run build-backend && electron-builder --publish=never",
"dist:windows-prebuilt": "pnpm run electron-postinstall && cross-env PLATFORM=win32 pnpm run version:sync && cross-env PLATFORM=win32 pnpm run build-backend && electron-builder --win portable nsis --publish=never",
"dist:linux-prebuilt": "pnpm run electron-postinstall && cross-env PLATFORM=linux pnpm run version:sync && cross-env PLATFORM=linux pnpm run build-backend && electron-builder --linux AppImage deb --publish=never",
"dist:mac-arm64": "pnpm run electron-postinstall && pnpm run build && electron-builder --mac --arm64 --publish=never",
"dist:mac-universal": "bash scripts/build-macos-universal.sh",
"start": "pnpm run build && electron-forge start",
"package": "pnpm run build && electron-forge package",
"make": "pnpm run build && electron-forge make"
"start": "pnpm run build && node scripts/electron-forge-local-tmp.js start",
"package": "pnpm run build && node scripts/electron-forge-local-tmp.js package",
"make": "pnpm run build && node scripts/electron-forge-local-tmp.js make",
"make:snap": "pnpm run electron-postinstall && pnpm run build && cross-env FORGE_MAKE_SNAP=1 node scripts/electron-forge-local-tmp.js make --targets @electron-forge/maker-snap",
"make:flatpak": "pnpm run electron-postinstall && pnpm run build && cross-env DEBUG=@malept/flatpak-bundler*,electron-installer-flatpak* FORGE_MAKE_FLATPAK=1 node scripts/electron-forge-local-tmp.js make --targets @electron-forge/maker-flatpak"
},
"license": "0BSD AND MIT",
"engines": {
@@ -59,6 +61,7 @@
"@electron-forge/maker-deb": "^7.11.1",
"@electron-forge/maker-flatpak": "^7.11.1",
"@electron-forge/maker-rpm": "^7.11.1",
"@electron-forge/maker-snap": "^7.11.1",
"@electron-forge/maker-squirrel": "^7.11.1",
"@electron-forge/maker-zip": "^7.11.1",
"@electron-forge/plugin-auto-unpack-natives": "^7.11.1",
@@ -106,6 +109,7 @@
"tmp": ">=0.2.4",
"tar": ">=7.5.7",
"minimatch": ">=10.2.1",
"@electron/asar>minimatch": "3.1.2",
"serialize-javascript": ">=7.0.3",
"flatted": ">=3.4.2"
}
+97 -1
View File
@@ -12,6 +12,7 @@ overrides:
tmp: '>=0.2.4'
tar: '>=7.5.7'
minimatch: '>=10.2.1'
'@electron/asar>minimatch': 3.1.2
serialize-javascript: '>=7.0.3'
flatted: '>=3.4.2'
@@ -95,6 +96,9 @@ importers:
'@electron-forge/maker-rpm':
specifier: ^7.11.1
version: 7.11.1
'@electron-forge/maker-snap':
specifier: ^7.11.1
version: 7.11.1
'@electron-forge/maker-squirrel':
specifier: ^7.11.1
version: 7.11.1
@@ -314,6 +318,10 @@ packages:
resolution: {integrity: sha512-iEfJPRQQyaTqk2EbUfZgulChNWvxGXeYUH0xBX/r5cj1pL4vcJXt3jLMQBVn3mk/0Ytv9UWRs8R/XuNWX6sf2w==}
engines: {node: '>= 16.4.0'}
'@electron-forge/maker-snap@7.11.1':
resolution: {integrity: sha512-VNWSLH+eT8OctTWL3Q7VMSlu0mIiaa2aSJFFXBJZWgpBgYjQdeT6i1RWRD/FsuYkk1naix68LeRzb9V4TlShKA==}
engines: {node: '>= 16.4.0'}
'@electron-forge/maker-squirrel@7.11.1':
resolution: {integrity: sha512-oSg7fgad6l+X0DjtRkSpMzB0AjzyDO4mb2gzM4kTodkP1ADeiMi08bxy0ZeCESqLm5+fG72cAPmEr3BAPvI1yw==}
engines: {node: '>= 16.4.0'}
@@ -1160,6 +1168,9 @@ packages:
arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -1203,6 +1214,9 @@ packages:
peerDependencies:
postcss: ^8.1.0
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
balanced-match@4.0.4:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines: {node: 18 || 20 || >=22}
@@ -1238,6 +1252,9 @@ packages:
resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==}
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
brace-expansion@1.1.14:
resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==}
brace-expansion@5.0.5:
resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
engines: {node: 18 || 20 || >=22}
@@ -1437,6 +1454,9 @@ packages:
compressorjs@1.3.0:
resolution: {integrity: sha512-TsvzkRgDm/6mIRUdxJbrTH7kfSW3oJzOw8b1xU60fziQSosTML5TczpO6Z4H1LGF0yRmTotk6r5UNhuRxEwA1A==}
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
config-chain@1.1.13:
resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
@@ -1621,6 +1641,11 @@ packages:
os: [darwin, linux]
hasBin: true
electron-installer-snap@5.2.0:
resolution: {integrity: sha512-SRm7pCpNHMXV545JjScV8fLC9NhFli5r8L8Ju4EHdXwRh76+mwrJoUEDLItixBudZ5Mcgz1SJcDPJfWpEQWX7Q==}
engines: {node: '>= 10.0'}
hasBin: true
electron-prompt@1.7.0:
resolution: {integrity: sha512-IfqJYEgcRO6NuyPROo8AtdkAiZ6N9I1lQEf4dJAkPuhV5YgOHdmLqZJf6OXumZJfzrjpzCM5jHeYOrhGdgbnEA==}
@@ -1781,6 +1806,11 @@ packages:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
esquery@1.7.0:
resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
engines: {node: '>=0.10'}
@@ -2300,6 +2330,10 @@ packages:
js-tokens@10.0.0:
resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==}
js-yaml@3.14.2:
resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
hasBin: true
js-yaml@4.1.1:
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
@@ -2595,6 +2629,9 @@ packages:
resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
engines: {node: 18 || 20 || >=22}
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
@@ -3330,6 +3367,9 @@ packages:
spdx-license-ids@3.0.23:
resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==}
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
sprintf-js@1.1.3:
resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
@@ -4153,6 +4193,16 @@ snapshots:
- bluebird
- supports-color
'@electron-forge/maker-snap@7.11.1':
dependencies:
'@electron-forge/maker-base': 7.11.1
'@electron-forge/shared-types': 7.11.1
optionalDependencies:
electron-installer-snap: 5.2.0
transitivePeerDependencies:
- bluebird
- supports-color
'@electron-forge/maker-squirrel@7.11.1':
dependencies:
'@electron-forge/maker-base': 7.11.1
@@ -4279,7 +4329,7 @@ snapshots:
dependencies:
commander: 5.1.0
glob: 7.2.3
minimatch: 10.2.5
minimatch: 3.1.2
'@electron/fuses@1.8.0':
dependencies:
@@ -5292,6 +5342,11 @@ snapshots:
arg@5.0.2: {}
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
optional: true
argparse@2.0.1: {}
assert-plus@1.0.0:
@@ -5327,6 +5382,8 @@ snapshots:
postcss: 8.5.10
postcss-value-parser: 4.2.0
balanced-match@1.0.2: {}
balanced-match@4.0.4: {}
base64-js@1.5.1: {}
@@ -5354,6 +5411,11 @@ snapshots:
boolean@3.2.0:
optional: true
brace-expansion@1.1.14:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
brace-expansion@5.0.5:
dependencies:
balanced-match: 4.0.4
@@ -5588,6 +5650,8 @@ snapshots:
blueimp-canvas-to-blob: 3.29.0
is-blob: 2.1.0
concat-map@0.0.1: {}
config-chain@1.1.13:
dependencies:
ini: 1.3.8
@@ -5825,6 +5889,22 @@ snapshots:
- supports-color
optional: true
electron-installer-snap@5.2.0:
dependencies:
'@malept/cross-spawn-promise': 1.1.1
debug: 4.4.3
electron-installer-common: 0.10.4
fs-extra: 9.1.0
js-yaml: 3.14.2
lodash: 4.18.1
semver: 7.7.4
tmp-promise: 3.0.3
which: 2.0.2
yargs: 16.2.0
transitivePeerDependencies:
- supports-color
optional: true
electron-prompt@1.7.0: {}
electron-publish@26.8.1:
@@ -6012,6 +6092,9 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.16.0)
eslint-visitor-keys: 4.2.1
esprima@4.0.1:
optional: true
esquery@1.7.0:
dependencies:
estraverse: 5.3.0
@@ -6562,6 +6645,12 @@ snapshots:
js-tokens@10.0.0: {}
js-yaml@3.14.2:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
optional: true
js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
@@ -6853,6 +6942,10 @@ snapshots:
dependencies:
brace-expansion: 5.0.5
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.14
minimist@1.2.8: {}
minipass-collect@1.0.2:
@@ -7544,6 +7637,9 @@ snapshots:
spdx-license-ids@3.0.23: {}
sprintf-js@1.0.3:
optional: true
sprintf-js@1.1.3:
optional: true