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/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 new file mode 100644 index 000000000..e16c3770c --- /dev/null +++ b/tools/packaging/electron-package-identity.test.mjs @@ -0,0 +1,24 @@ +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( + join(currentDir, '..', '..', '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' + ); +}); 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"] +}