From 62abcf5a173f4370dc3cafdce774e9ffc9559465 Mon Sep 17 00:00:00 2001 From: Mark Lee Date: Wed, 4 Mar 2020 14:42:33 -0800 Subject: [PATCH 1/4] fix(core): overrideTargets inherit the named maker config in the Forge config --- packages/api/core/src/api/make.ts | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/api/core/src/api/make.ts b/packages/api/core/src/api/make.ts index 88edabde66..b6855c69a1 100644 --- a/packages/api/core/src/api/make.ts +++ b/packages/api/core/src/api/make.ts @@ -26,6 +26,23 @@ class MakerImpl extends MakerBase { defaultPlatforms = []; } +type MakeTarget = IForgeResolvableMaker | MakerBase; + +function generateTargets(forgeConfig: ForgeConfig, overrideTargets?: MakeTarget[]) { + if (overrideTargets) { + return overrideTargets.map((target) => { + if (typeof target === 'string') { + return forgeConfig.makers.find( + (maker) => (maker as IForgeResolvableMaker).name === target, + ) || { name: target }; + } + + return target; + }); + } + return forgeConfig.makers; +} + export interface MakeOptions { /** * The path to the app from which distrubutables are generated @@ -42,7 +59,7 @@ export interface MakeOptions { /** * An array of make targets to override your forge config */ - overrideTargets?: (IForgeResolvableMaker | MakerBase)[]; + overrideTargets?: MakeTarget[]; /** * The target architecture */ @@ -90,12 +107,8 @@ export default async ({ const makers: { [key: number]: MakerBase; } = {}; - let targets = (overrideTargets || forgeConfig.makers).map((target) => { - if (typeof target === 'string') { - return { name: target }; - } - return target; - }); + + let targets = generateTargets(forgeConfig, overrideTargets); let targetId = 0; for (const target of targets) { From ebef6aaa984601ee2466665eac8f6d1d192eef35 Mon Sep 17 00:00:00 2001 From: Mark Lee Date: Fri, 6 Mar 2020 16:14:17 -0800 Subject: [PATCH 2/4] Add test --- packages/api/core/src/api/make.ts | 2 +- packages/api/core/test/fast/make_spec.ts | 31 +++++++++++++++++++ .../out/test-linux-x64/.gitkeep | 0 .../app-with-custom-maker-config/package.json | 21 +++++++++++++ .../api/core/test/fixture/custom-maker.ts | 20 ++++++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 packages/api/core/test/fast/make_spec.ts create mode 100644 packages/api/core/test/fixture/app-with-custom-maker-config/out/test-linux-x64/.gitkeep create mode 100644 packages/api/core/test/fixture/app-with-custom-maker-config/package.json create mode 100644 packages/api/core/test/fixture/custom-maker.ts diff --git a/packages/api/core/src/api/make.ts b/packages/api/core/src/api/make.ts index b6855c69a1..d70b322507 100644 --- a/packages/api/core/src/api/make.ts +++ b/packages/api/core/src/api/make.ts @@ -26,7 +26,7 @@ class MakerImpl extends MakerBase { defaultPlatforms = []; } -type MakeTarget = IForgeResolvableMaker | MakerBase; +type MakeTarget = IForgeResolvableMaker | MakerBase | string; function generateTargets(forgeConfig: ForgeConfig, overrideTargets?: MakeTarget[]) { if (overrideTargets) { diff --git a/packages/api/core/test/fast/make_spec.ts b/packages/api/core/test/fast/make_spec.ts new file mode 100644 index 0000000000..914c87bbea --- /dev/null +++ b/packages/api/core/test/fast/make_spec.ts @@ -0,0 +1,31 @@ +import { expect } from 'chai'; +import * as path from 'path'; +import proxyquire from 'proxyquire'; + +import { MakeOptions } from '../../src/api'; + +describe('make', () => { + let make: (opts: MakeOptions) => Promise; + beforeEach(() => { + const electronPath = path.resolve(__dirname, 'node_modules/electron'); + make = proxyquire.noCallThru().load('../../src/api/make', { + '../util/electron-version': { + getElectronModulePath: () => Promise.resolve(electronPath), + getElectronVersion: () => Promise.resolve('1.0.0'), + }, + }).default; + }); + describe('overrideTargets inherits from forge config', () => { + it('passes config properly', async () => { + const results = await make({ + arch: 'x64', + dir: path.resolve(__dirname, '..', 'fixture', 'app-with-custom-maker-config'), + overrideTargets: ['../custom-maker'], + platform: 'linux', + skipPackage: true, + }); + + expect(results[0].artifacts).to.deep.equal(['from config']); + }); + }); +}); diff --git a/packages/api/core/test/fixture/app-with-custom-maker-config/out/test-linux-x64/.gitkeep b/packages/api/core/test/fixture/app-with-custom-maker-config/out/test-linux-x64/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/api/core/test/fixture/app-with-custom-maker-config/package.json b/packages/api/core/test/fixture/app-with-custom-maker-config/package.json new file mode 100644 index 0000000000..39ee36f191 --- /dev/null +++ b/packages/api/core/test/fixture/app-with-custom-maker-config/package.json @@ -0,0 +1,21 @@ +{ + "name": "test", + "config": { + "forge": { + "makers": [ + { + "name": "../custom-maker", + "config": { + "artifactPath": "from config" + } + }, + { + "name": "@electron-forge/non-existent-forge-maker" + } + ] + } + }, + "devDependencies": { + "electron": "^1.0.0" + } +} diff --git a/packages/api/core/test/fixture/custom-maker.ts b/packages/api/core/test/fixture/custom-maker.ts new file mode 100644 index 0000000000..41dc52d495 --- /dev/null +++ b/packages/api/core/test/fixture/custom-maker.ts @@ -0,0 +1,20 @@ +import { ForgePlatform } from '@electron-forge/shared-types'; +import MakerBase from '@electron-forge/maker-base'; + +interface Config { + artifactPath: string; +} + +export default class Maker extends MakerBase { + name = 'custom-maker'; + + defaultPlatforms = [process.platform] as ForgePlatform[]; + + isSupportedOnCurrentPlatform() { + return true; + } + + async make() { + return Promise.resolve([this.config.artifactPath || 'default']); + } +} From c3ae7c61585fa19fbb553373327d85e55d2cc340 Mon Sep 17 00:00:00 2001 From: Mark Lee Date: Fri, 6 Mar 2020 17:54:40 -0800 Subject: [PATCH 3/4] Fix platform --- packages/api/core/test/fixture/custom-maker.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/api/core/test/fixture/custom-maker.ts b/packages/api/core/test/fixture/custom-maker.ts index 41dc52d495..7375adb6d0 100644 --- a/packages/api/core/test/fixture/custom-maker.ts +++ b/packages/api/core/test/fixture/custom-maker.ts @@ -1,4 +1,3 @@ -import { ForgePlatform } from '@electron-forge/shared-types'; import MakerBase from '@electron-forge/maker-base'; interface Config { @@ -8,7 +7,7 @@ interface Config { export default class Maker extends MakerBase { name = 'custom-maker'; - defaultPlatforms = [process.platform] as ForgePlatform[]; + defaultPlatforms = ['linux']; isSupportedOnCurrentPlatform() { return true; From e9bc6adeccfd67d541cfacd7c82f50f38c98e0a2 Mon Sep 17 00:00:00 2001 From: Mark Lee Date: Fri, 6 Mar 2020 18:08:57 -0800 Subject: [PATCH 4/4] Correct typecasting --- packages/api/core/test/fixture/custom-maker.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/api/core/test/fixture/custom-maker.ts b/packages/api/core/test/fixture/custom-maker.ts index 7375adb6d0..beaf3ceb97 100644 --- a/packages/api/core/test/fixture/custom-maker.ts +++ b/packages/api/core/test/fixture/custom-maker.ts @@ -1,3 +1,4 @@ +import { ForgePlatform } from '@electron-forge/shared-types'; import MakerBase from '@electron-forge/maker-base'; interface Config { @@ -7,7 +8,7 @@ interface Config { export default class Maker extends MakerBase { name = 'custom-maker'; - defaultPlatforms = ['linux']; + defaultPlatforms = ['linux'] as ForgePlatform[]; isSupportedOnCurrentPlatform() { return true;