diff --git a/.changeset/mean-baboons-report.md b/.changeset/mean-baboons-report.md new file mode 100644 index 00000000000..4dde0e1f2c7 --- /dev/null +++ b/.changeset/mean-baboons-report.md @@ -0,0 +1,5 @@ +--- +"app-builder-lib": minor +--- + +fix: support executableName in main config diff --git a/packages/app-builder-lib/src/appInfo.ts b/packages/app-builder-lib/src/appInfo.ts index 310f0fcacc0..6c48c373ab3 100644 --- a/packages/app-builder-lib/src/appInfo.ts +++ b/packages/app-builder-lib/src/appInfo.ts @@ -64,7 +64,9 @@ export class AppInfo { this.productName = info.config.productName || info.metadata.productName || info.metadata.name! this.sanitizedProductName = sanitizeFileName(this.productName) - this.productFilename = platformSpecificOptions?.executableName != null ? sanitizeFileName(platformSpecificOptions.executableName) : this.sanitizedProductName + + const executableName = platformSpecificOptions?.executableName ?? info.config.executableName + this.productFilename = executableName != null ? sanitizeFileName(executableName) : this.sanitizedProductName } get channel(): string | null { diff --git a/packages/app-builder-lib/src/linuxPackager.ts b/packages/app-builder-lib/src/linuxPackager.ts index 57b2f5b5f82..a3c6fb862f0 100644 --- a/packages/app-builder-lib/src/linuxPackager.ts +++ b/packages/app-builder-lib/src/linuxPackager.ts @@ -17,7 +17,7 @@ export class LinuxPackager extends PlatformPackager { constructor(info: Packager) { super(info, Platform.LINUX) - const executableName = this.platformSpecificBuildOptions.executableName + const executableName = this.platformSpecificBuildOptions.executableName ?? info.config.executableName this.executableName = executableName == null ? this.appInfo.sanitizedName.toLowerCase() : sanitizeFileName(executableName) } diff --git a/test/snapshots/linux/debTest.js.snap b/test/snapshots/linux/debTest.js.snap index e4294b0dfc8..3efaa02c0d2 100644 --- a/test/snapshots/linux/debTest.js.snap +++ b/test/snapshots/linux/debTest.js.snap @@ -655,3 +655,91 @@ Object { `; exports[`no quotes for safe exec name 5`] = `"Test Application (test quite “ #378)"`; + +exports[`top-level exec name 1`] = ` +Object { + "linux": Array [ + Object { + "arch": "x64", + "file": "TestApp_1.1.0_amd64.deb", + }, + ], +} +`; + +exports[`top-level exec name 2`] = ` +Array [ + "/", + "/opt/", + "/usr/", + "/opt/foo/", + "/opt/foo/Boo", + "/opt/foo/chrome-sandbox", + "/opt/foo/chrome_100_percent.pak", + "/opt/foo/chrome_200_percent.pak", + "/opt/foo/chrome_crashpad_handler", + "/opt/foo/icudtl.dat", + "/opt/foo/libEGL.so", + "/opt/foo/libffmpeg.so", + "/opt/foo/libGLESv2.so", + "/opt/foo/libvk_swiftshader.so", + "/opt/foo/libvulkan.so.1", + "/opt/foo/LICENSE.electron.txt", + "/opt/foo/LICENSES.chromium.html", + "/opt/foo/resources.pak", + "/opt/foo/snapshot_blob.bin", + "/opt/foo/v8_context_snapshot.bin", + "/opt/foo/vk_swiftshader_icd.json", + "/usr/share/", + "/opt/foo/resources/", + "/opt/foo/resources/app.asar", + "/opt/foo/swiftshader/", + "/opt/foo/swiftshader/libEGL.so", + "/opt/foo/swiftshader/libGLESv2.so", + "/usr/share/applications/", + "/usr/share/applications/Boo.desktop", + "/usr/share/doc/", + "/usr/share/icons/", + "/usr/share/doc/testapp/", + "/usr/share/doc/testapp/changelog.gz", + "/usr/share/icons/hicolor/", + "/usr/share/icons/hicolor/128x128/", + "/usr/share/icons/hicolor/16x16/", + "/usr/share/icons/hicolor/256x256/", + "/usr/share/icons/hicolor/32x32/", + "/usr/share/icons/hicolor/48x48/", + "/usr/share/icons/hicolor/512x512/", + "/usr/share/icons/hicolor/64x64/", + "/usr/share/icons/hicolor/128x128/apps/", + "/usr/share/icons/hicolor/128x128/apps/Boo.png", + "/usr/share/icons/hicolor/16x16/apps/", + "/usr/share/icons/hicolor/16x16/apps/Boo.png", + "/usr/share/icons/hicolor/256x256/apps/", + "/usr/share/icons/hicolor/256x256/apps/Boo.png", + "/usr/share/icons/hicolor/32x32/apps/", + "/usr/share/icons/hicolor/32x32/apps/Boo.png", + "/usr/share/icons/hicolor/48x48/apps/", + "/usr/share/icons/hicolor/48x48/apps/Boo.png", + "/usr/share/icons/hicolor/512x512/apps/", + "/usr/share/icons/hicolor/512x512/apps/Boo.png", + "/usr/share/icons/hicolor/64x64/apps/", + "/usr/share/icons/hicolor/64x64/apps/Boo.png", +] +`; + +exports[`top-level exec name 3`] = ` +Object { + "Architecture": "amd64", + "Depends": "libgtk-3-0, libnotify4, libnss3, libxss1, libxtst6, xdg-utils, libatspi2.0-0, libuuid1, libsecret-1-0", + "Homepage": "http://foo.example.com", + "License": "MIT", + "Maintainer": "Foo Bar ", + "Package": "testapp", + "Priority": "optional", + "Recommends": "libappindicator3-1", + "Section": "devel", + "Vendor": "Foo Bar ", +} +`; + +exports[`top-level exec name 4`] = `"Test Application (test quite “ #378)"`; diff --git a/test/snapshots/windows/oneClickInstallerTest.js.snap b/test/snapshots/windows/oneClickInstallerTest.js.snap index d0ebed506d1..cd106c64902 100644 --- a/test/snapshots/windows/oneClickInstallerTest.js.snap +++ b/test/snapshots/windows/oneClickInstallerTest.js.snap @@ -392,3 +392,45 @@ Object { ], } `; + +exports[`top-level custom exec name 1`] = ` +Object { + "APP_32_NAME": undefined, + "APP_64_NAME": "TestApp-1.1.0-x64.nsis.7z", + "APP_ARM64_NAME": undefined, + "APP_FILENAME": "TestApp", + "APP_ID": "org.electron-builder.testApp", + "APP_PACKAGE_NAME": "TestApp", + "APP_PRODUCT_FILENAME": "Boo", + "COMPANY_NAME": "Foo Bar", + "ONE_CLICK": null, + "PRODUCT_FILENAME": "Boo", + "PRODUCT_NAME": "foo", + "SHORTCUT_NAME": "foo", + "UNINSTALL_DISPLAY_NAME": "foo 1.1.0", +} +`; + +exports[`top-level custom exec name 2`] = ` +Object { + "win": Array [ + Object { + "arch": "x64", + "file": "foo Setup 1.1.0.exe", + "safeArtifactName": "foo-Setup-1.1.0.exe", + "updateInfo": Object { + "sha512": "@sha512", + "size": "@size", + }, + }, + Object { + "file": "foo Setup 1.1.0.exe.blockmap", + "safeArtifactName": "foo-Setup-1.1.0.exe.blockmap", + "updateInfo": Object { + "sha512": "@sha512", + "size": "@size", + }, + }, + ], +} +`; diff --git a/test/src/linux/debTest.ts b/test/src/linux/debTest.ts index 198012da6cf..09fd05701a6 100644 --- a/test/src/linux/debTest.ts +++ b/test/src/linux/debTest.ts @@ -26,6 +26,17 @@ test.ifNotWindows( }) ) +test.ifNotWindows( + "top-level exec name", + app({ + targets: Platform.LINUX.createTarget("deb"), + config: { + productName: "foo", + executableName: "Boo", + }, + }) +) + test.ifNotWindows( "no quotes for safe exec name", app({ diff --git a/test/src/windows/oneClickInstallerTest.ts b/test/src/windows/oneClickInstallerTest.ts index 82286ab077e..c55ca3b49c6 100644 --- a/test/src/windows/oneClickInstallerTest.ts +++ b/test/src/windows/oneClickInstallerTest.ts @@ -339,3 +339,19 @@ test.skip.ifWindows( }, }) ) + +test.skip.ifWindows( + "top-level custom exec name", + app({ + targets: nsisTarget, + config: { + publish: null, + productName: "foo", + executableName: "Boo", + }, + effectiveOptionComputed: async it => { + expect(pickSnapshotDefines(it[0])).toMatchSnapshot() + return false + }, + }) +)