From 6cdd02f010293631d7ce625d956aaf53ad2ffc8f Mon Sep 17 00:00:00 2001 From: 4gray Date: Sat, 9 May 2026 16:22:37 +0200 Subject: [PATCH 1/2] fix(linux): align packaged app identity Entire-Checkpoint: f957cd9849e0 --- electron-builder.json | 8 ++++++ .../electron-package-identity.test.mjs | 26 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 tools/packaging/electron-package-identity.test.mjs diff --git a/electron-builder.json b/electron-builder.json index 3cfaefd57..22af70f51 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -24,6 +24,8 @@ "**/*.dylib" ], "extraMetadata": { + "name": "iptvnator", + "productName": "IPTVnator", "main": "electron-backend/main.js" }, "extraResources": ["dist/apps/electron-backend/workers"], @@ -43,6 +45,12 @@ }, "linux": { "category": "Video", + "executableName": "iptvnator", + "desktop": { + "entry": { + "StartupWMClass": "iptvnator" + } + }, "target": [ { "target": "AppImage", diff --git a/tools/packaging/electron-package-identity.test.mjs b/tools/packaging/electron-package-identity.test.mjs new file mode 100644 index 000000000..2cc22b5df --- /dev/null +++ b/tools/packaging/electron-package-identity.test.mjs @@ -0,0 +1,26 @@ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import test from 'node:test'; + +const electronBuilderConfig = JSON.parse( + fs.readFileSync('electron-builder.json', 'utf8') +); + +test('Linux package identity does not expose the internal Electron backend project name', () => { + assert.equal(electronBuilderConfig.productName, 'IPTVnator'); + assert.equal(electronBuilderConfig.extraMetadata?.name, 'iptvnator'); + assert.equal(electronBuilderConfig.extraMetadata?.productName, 'IPTVnator'); + assert.equal(electronBuilderConfig.linux?.executableName, 'iptvnator'); + assert.equal( + electronBuilderConfig.linux?.desktop?.entry?.StartupWMClass, + 'iptvnator' + ); + assert.notEqual( + electronBuilderConfig.extraMetadata?.name, + 'electron-backend' + ); + assert.notEqual( + electronBuilderConfig.linux?.executableName, + 'electron-backend' + ); +}); From 48463953db3280d3b064e69ce8dd427bf5936c89 Mon Sep 17 00:00:00 2001 From: 4gray Date: Sat, 9 May 2026 19:28:35 +0200 Subject: [PATCH 2/2] test(packaging): harden package identity regression Entire-Checkpoint: f957cd9849e0 --- package.json | 2 +- .../electron-package-identity.test.mjs | 16 +++++++--------- tools/packaging/project.json | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 tools/packaging/project.json diff --git a/package.json b/package.json index a797f174a..f27d70d7c 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "test:frontend": "nx test web", "test:backend": "nx test electron-backend", "test:unit:all": "nx run-many --target=test --all --parallel=3", - "test:unit:ci": "nx run-many --target=test --projects=electron-backend,web,services,m3u-state,portal-stalker-data-access,portal-shared-util,playlist-shared-ui,portal-xtream-data-access,portal-xtream-feature,workspace-dashboard-data-access,components,@iptvnator/pipes --parallel=3 --output-style=static", + "test:unit:ci": "nx run-many --target=test --projects=electron-backend,web,services,m3u-state,portal-stalker-data-access,portal-shared-util,playlist-shared-ui,portal-xtream-data-access,portal-xtream-feature,workspace-dashboard-data-access,components,@iptvnator/pipes,packaging --parallel=3 --output-style=static", "typecheck:web": "tsc -p apps/web/tsconfig.app.json --noEmit", "typecheck:backend": "tsc -p apps/electron-backend/tsconfig.app.json --noEmit", "typecheck:ci": "pnpm run typecheck:web && pnpm run typecheck:backend", diff --git a/tools/packaging/electron-package-identity.test.mjs b/tools/packaging/electron-package-identity.test.mjs index 2cc22b5df..e16c3770c 100644 --- a/tools/packaging/electron-package-identity.test.mjs +++ b/tools/packaging/electron-package-identity.test.mjs @@ -1,9 +1,15 @@ import assert from 'node:assert/strict'; import fs from 'node:fs'; +import { dirname, join } from 'node:path'; import test from 'node:test'; +import { fileURLToPath } from 'node:url'; +const currentDir = dirname(fileURLToPath(import.meta.url)); const electronBuilderConfig = JSON.parse( - fs.readFileSync('electron-builder.json', 'utf8') + fs.readFileSync( + join(currentDir, '..', '..', 'electron-builder.json'), + 'utf8' + ) ); test('Linux package identity does not expose the internal Electron backend project name', () => { @@ -15,12 +21,4 @@ test('Linux package identity does not expose the internal Electron backend proje electronBuilderConfig.linux?.desktop?.entry?.StartupWMClass, 'iptvnator' ); - assert.notEqual( - electronBuilderConfig.extraMetadata?.name, - 'electron-backend' - ); - assert.notEqual( - electronBuilderConfig.linux?.executableName, - 'electron-backend' - ); }); diff --git a/tools/packaging/project.json b/tools/packaging/project.json new file mode 100644 index 000000000..b833acebb --- /dev/null +++ b/tools/packaging/project.json @@ -0,0 +1,18 @@ +{ + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "name": "packaging", + "projectType": "library", + "sourceRoot": "tools/packaging", + "targets": { + "test": { + "executor": "nx:run-commands", + "cache": true, + "inputs": ["default", "{workspaceRoot}/electron-builder.json"], + "options": { + "command": "node --test tools/packaging/electron-package-identity.test.mjs", + "cwd": "{workspaceRoot}" + } + } + }, + "tags": ["scope:tools", "type:tool"] +}