From 7aacb15f7036158eb20092603a33dc1067f3cd8f Mon Sep 17 00:00:00 2001 From: Markus Olsson Date: Wed, 10 Feb 2021 18:19:45 +0100 Subject: [PATCH] fix: include swiftshader directory when creating installer for Electron 10+ (#375) Co-authored-by: Mark Lee --- spec/fixtures/app/libEGL.dll | Bin 92672 -> 0 bytes spec/fixtures/app/libGLESv2.dll | Bin 18112 -> 0 bytes spec/fixtures/app/swiftshader/libEGL.dll | 0 spec/fixtures/app/swiftshader/libGLESv2.dll | 0 spec/fixtures/app/vk_swiftshader.dll | 0 spec/fixtures/app/vk_swiftshader_icd.json | 0 spec/installer-spec.ts | 61 +++++++++++++++----- src/index.ts | 13 +++++ src/options.ts | 6 ++ template.nuspectemplate | 3 + 10 files changed, 70 insertions(+), 13 deletions(-) delete mode 100644 spec/fixtures/app/libEGL.dll delete mode 100644 spec/fixtures/app/libGLESv2.dll create mode 100644 spec/fixtures/app/swiftshader/libEGL.dll create mode 100644 spec/fixtures/app/swiftshader/libGLESv2.dll create mode 100644 spec/fixtures/app/vk_swiftshader.dll create mode 100644 spec/fixtures/app/vk_swiftshader_icd.json diff --git a/spec/fixtures/app/libEGL.dll b/spec/fixtures/app/libEGL.dll deleted file mode 100644 index b3bcb0324e3351e0e03f54c2e200d093368caf01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92672 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 diff --git a/spec/fixtures/app/libGLESv2.dll b/spec/fixtures/app/libGLESv2.dll deleted file mode 100644 index 25e81dccca39a464861611e6d631f486a7625b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18112 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
#x^%eb8mys&G%K(-SKrE? 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 H8_oX%U}V3B diff --git a/spec/fixtures/app/swiftshader/libEGL.dll b/spec/fixtures/app/swiftshader/libEGL.dll new file mode 100644 index 0000000..e69de29 diff --git a/spec/fixtures/app/swiftshader/libGLESv2.dll b/spec/fixtures/app/swiftshader/libGLESv2.dll new file mode 100644 index 0000000..e69de29 diff --git a/spec/fixtures/app/vk_swiftshader.dll b/spec/fixtures/app/vk_swiftshader.dll new file mode 100644 index 0000000..e69de29 diff --git a/spec/fixtures/app/vk_swiftshader_icd.json b/spec/fixtures/app/vk_swiftshader_icd.json new file mode 100644 index 0000000..e69de29 diff --git a/spec/installer-spec.ts b/spec/installer-spec.ts index ec93141..2879c69 100644 --- a/spec/installer-spec.ts +++ b/spec/installer-spec.ts @@ -3,33 +3,39 @@ import path from 'path'; import { createTempDir } from '../src/temp-utils'; import fs from 'fs-extra'; import { createWindowsInstaller } from '../src'; +import spawn from '../src/spawn-promise'; const log = require('debug')('electron-windows-installer:spec'); -const appDirectory = path.join(__dirname, 'fixtures/app'); +const fixtureAppDirectory = path.join(__dirname, 'fixtures/app'); -test.beforeEach(async (): Promise => { - const updateExePath = path.join(appDirectory, 'Squirrel.exe'); +function spawn7z(args: string[]): Promise { + const sevenZipPath = path.join(__dirname, '..', 'vendor', '7z.exe'); + const wineExe = process.arch === 'x64' ? 'wine64' : 'wine'; + return process.platform !== 'win32' + ? spawn(wineExe, [sevenZipPath, ...args]) + : spawn(sevenZipPath, args); +} - if (await fs.pathExists(updateExePath)) { - await fs.unlink(updateExePath); - } -}); +async function createTempAppDirectory(): Promise { + const appDirectory = await createTempDir('electron-winstaller-ad-'); + await fs.copy(fixtureAppDirectory, appDirectory); + return appDirectory; +} test('creates a nuget package and installer', async (t): Promise => { const outputDirectory = await createTempDir('ei-'); - - const options = { - appDirectory: appDirectory, - outputDirectory: outputDirectory - }; + const appDirectory = await createTempAppDirectory(); + const options = { appDirectory, outputDirectory }; await createWindowsInstaller(options); log(`Verifying assertions on ${outputDirectory}`); log(JSON.stringify(await fs.readdir(outputDirectory))); - t.true(await fs.pathExists(path.join(outputDirectory, 'myapp-1.0.0-full.nupkg'))); + const nupkgPath = path.join(outputDirectory, 'myapp-1.0.0-full.nupkg'); + + t.true(await fs.pathExists(nupkgPath)); t.true(await fs.pathExists(path.join(outputDirectory, 'MyAppSetup.exe'))); if (process.platform === 'win32') { @@ -38,4 +44,33 @@ test('creates a nuget package and installer', async (t): Promise => { log('Verifying Update.exe'); t.true(await fs.pathExists(path.join(appDirectory, 'Squirrel.exe'))); + + log('Verifying contents of .nupkg'); + + const packageContents = await spawn7z(['l', nupkgPath]); + + t.true(packageContents.includes('lib\\net45\\vk_swiftshader_icd.json')); + t.true(packageContents.includes('lib\\net45\\swiftshader\\libEGL.dll')); +}); + +test('creates an installer when swiftshader files are missing', async (t): Promise => { + const appDirectory = await createTempAppDirectory(); + const outputDirectory = await createTempDir('electron-winstaller-test-'); + const options = { appDirectory, outputDirectory }; + + // Remove swiftshader folder and swiftshader json file, simulating Electron < 10.0 + await fs.remove(path.join(appDirectory, 'swiftshader', 'libEGL.dll')); + await fs.remove(path.join(appDirectory, 'swiftshader', 'libGLESv2.dll')); + await fs.rmdir(path.join(appDirectory, 'swiftshader')); + await fs.remove(path.join(appDirectory, 'vk_swiftshader_icd.json')); + + await createWindowsInstaller(options); + + const nupkgPath = path.join(outputDirectory, 'myapp-1.0.0-full.nupkg'); + + log('Verifying contents of .nupkg'); + + const packageContents = await spawn7z(['l', nupkgPath]); + t.false(packageContents.includes('vk_swiftshader_icd.json')); + t.false(packageContents.includes('swiftshader\\')); }); diff --git a/src/index.ts b/src/index.ts index 56a59c4..64932f5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -103,10 +103,23 @@ export async function createWindowsInstaller(options: Options): Promise { metadata.version = convertVersion(metadata.version as string); metadata.copyright = metadata.copyright || `Copyright © ${new Date().getFullYear()} ${metadata.authors || metadata.owners}`; + metadata.additionalFiles = metadata.additionalFiles || []; + + if (await fs.pathExists(path.join(appDirectory, 'swiftshader'))) { + metadata.additionalFiles.push({ src: 'swiftshader\\**', target: 'lib\\net45\\swiftshader' }); + } + + if (await fs.pathExists(path.join(appDirectory, 'vk_swiftshader_icd.json'))) { + metadata.additionalFiles.push({ src: 'vk_swiftshader_icd.json', target: 'lib\\net45' }); + } let templateData = await fs.readFile(path.join(__dirname, '..', 'template.nuspectemplate'), 'utf8'); if (path.sep === '/') { templateData = templateData.replace(/\\/g, '/'); + for (const f of metadata.additionalFiles) { + f.src = f.src.replace(/\\/g, '/'); + f.target = f.target.replace(/\\/g, '/'); + } } const nuspecContent = template(templateData)(metadata); diff --git a/src/options.ts b/src/options.ts index e5e3bd3..8cde35d 100644 --- a/src/options.ts +++ b/src/options.ts @@ -133,6 +133,11 @@ export interface PersonMetadata { url?: string; } +export interface AdditionalFile { + src: string; + target: string; +} + export interface Metadata { name?: string; productName?: string; @@ -143,4 +148,5 @@ export interface Metadata { owners?: string | PersonMetadata[]; description?: string; iconUrl?: string; + additionalFiles?: AdditionalFile[]; } diff --git a/template.nuspectemplate b/template.nuspectemplate index 7cf5bbd..6817fd4 100644 --- a/template.nuspectemplate +++ b/template.nuspectemplate @@ -23,5 +23,8 @@ + <% additionalFiles.forEach(function(f) { %> + + <% }); %>