From f8194a6de2e8f62efb38d95900028fa5b055bea0 Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Fri, 3 Jul 2026 20:34:07 -0400 Subject: [PATCH] Ensure AppImage artifacts are executable --- electron/package.json | 7 +++-- electron/scripts/chmod-linux-appimages.mjs | 35 ++++++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 electron/scripts/chmod-linux-appimages.mjs diff --git a/electron/package.json b/electron/package.json index b535920ad..7824af0f4 100644 --- a/electron/package.json +++ b/electron/package.json @@ -30,11 +30,12 @@ "electron:pack": "npm run build && electron-builder build --dir -c ./electron-builder.config.json", "electron:make": "npm run build && electron-builder build -c ./electron-builder.config.json -p always", "electron:make-local": "npm run build && electron-builder build -c ./electron-builder.config.json --publish=never", - "electron:make-lin": "npm run build && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l", + "chmod:linux:appimages": "node ./scripts/chmod-linux-appimages.mjs", + "electron:make-lin": "npm run build && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l && npm run chmod:linux:appimages", "electron:make-mac": "npm run build && electron-builder build -c ./electron-builder.config.mac.json --publish=never --mac dmg && electron-builder build -c ./electron-builder.config.mac.json --publish=never --mac pkg && electron-builder build -c ./electron-builder.config.mac.json --publish=never --mac zip", "electron:make-win": "npm run build && electron-builder build -c ./electron-builder.config.win.json --publish=never -w", - "electron:make-arm": "npm run build && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64", - "electron:make-all": "npm run build && electron-builder build -c ./electron-builder.config.win.json --publish=never -w && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64" + "electron:make-arm": "npm run build && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64 && npm run chmod:linux:appimages", + "electron:make-all": "npm run build && electron-builder build -c ./electron-builder.config.win.json --publish=never -w && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64 && npm run chmod:linux:appimages" }, "dependencies": { "@capacitor-community/electron": "^5.0.0", diff --git a/electron/scripts/chmod-linux-appimages.mjs b/electron/scripts/chmod-linux-appimages.mjs new file mode 100644 index 000000000..ceabd0760 --- /dev/null +++ b/electron/scripts/chmod-linux-appimages.mjs @@ -0,0 +1,35 @@ +#!/usr/bin/env node + +import { chmod, readdir, stat } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const electronDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const distPath = path.join(electronDir, 'dist'); + +function formatMode(mode) { + return (mode & 0o777).toString(8).padStart(3, '0'); +} + +async function main() { + const entries = await readdir(distPath, { withFileTypes: true }); + const appImages = entries + .filter((entry) => entry.isFile() && entry.name.endsWith('.AppImage')) + .map((entry) => path.join(distPath, entry.name)) + .sort(); + + if (appImages.length === 0) { + throw new Error(`No AppImage artifacts found in ${path.relative(electronDir, distPath)}.`); + } + + for (const appImagePath of appImages) { + await chmod(appImagePath, 0o755); + const fileStat = await stat(appImagePath); + console.log(`Set executable mode ${formatMode(fileStat.mode)} on ${path.relative(electronDir, appImagePath)}`); + } +} + +main().catch((error) => { + console.error(error.message); + process.exit(1); +});