diff --git a/packages/api/core/spec/fast/util/upgrade-forge-config.spec.ts b/packages/api/core/spec/fast/util/upgrade-forge-config.spec.ts deleted file mode 100644 index 12891d03ae..0000000000 --- a/packages/api/core/spec/fast/util/upgrade-forge-config.spec.ts +++ /dev/null @@ -1,194 +0,0 @@ -import assert from 'node:assert'; - -import { - ForgeConfig, - IForgeResolvableMaker, - IForgeResolvablePublisher, -} from '@electron-forge/shared-types'; -import { merge } from 'lodash'; -import { describe, expect, it } from 'vitest'; - -import upgradeForgeConfig, { - updateUpgradedForgeDevDeps, -} from '../../../src/util/upgrade-forge-config'; - -describe('upgradeForgeConfig', () => { - it('converts Electron Packager config', () => { - const oldConfig = { - electronPackagerConfig: { - asar: true, - packageManager: 'npm', - }, - }; - const expected = { asar: true }; - - const newConfig = upgradeForgeConfig(oldConfig); - expect(newConfig.packagerConfig).toEqual(expected); - }); - - it('converts @electron/rebuild config', () => { - const rebuildConfig = { types: ['prod'] }; - const oldConfig = { electronRebuildConfig: { ...rebuildConfig } }; - - const newConfig = upgradeForgeConfig(oldConfig); - expect(newConfig.rebuildConfig).toEqual(rebuildConfig); - }); - - it('converts maker config', () => { - const oldConfig = { - make_targets: { - linux: ['deb'], - }, - electronInstallerDebian: { - depends: ['liboath0'], - }, - }; - const expected = [ - { - name: '@electron-forge/maker-deb', - config: { - depends: ['liboath0'], - }, - platforms: ['linux'], - }, - ] as IForgeResolvableMaker[]; - - const newConfig = upgradeForgeConfig(oldConfig); - expect(newConfig.makers).toEqual(expected); - }); - - it('adds the zip maker when specified in make_targets', () => { - const oldConfig = { - make_targets: { - darwin: ['zip'], - linux: ['zip'], - }, - }; - const expected = [ - { - name: '@electron-forge/maker-zip', - platforms: ['darwin', 'linux'], - }, - ] as IForgeResolvableMaker[]; - - const newConfig = upgradeForgeConfig(oldConfig); - expect(newConfig.makers).toEqual(expected); - }); - - it('converts publisher config', () => { - const oldConfig = { - snapStore: { - release: 'beta', - }, - }; - const expected = [ - { - name: '@electron-forge/publisher-snapcraft', - config: { - release: 'beta', - }, - platforms: null, - }, - ] as IForgeResolvablePublisher[]; - - const newConfig = upgradeForgeConfig(oldConfig); - expect(newConfig.publishers).toEqual(expected); - }); - - it('converts GitHub publisher config', () => { - const octokitOptions = { - timeout: 0, - }; - const repo = { - name: 'myapp', - owner: 'user', - }; - const oldConfig = { - github_repository: { - options: octokitOptions, - draft: true, - ...repo, - }, - }; - const newConfig = upgradeForgeConfig(oldConfig); - expect(newConfig.publishers).toHaveLength(1); - assert(newConfig.publishers); - const publisherConfig = ( - newConfig.publishers[0] as IForgeResolvablePublisher - ).config; - expect(publisherConfig.repository).toEqual(repo); - expect(publisherConfig.octokitOptions).toEqual(octokitOptions); - expect(publisherConfig.draft).toEqual(true); - }); -}); - -describe('updateUpgradedForgeDevDeps', () => { - const skeletonPackageJSON = { - config: { - forge: { - packagerConfig: {}, - rebuildConfig: {}, - makers: [], - publishers: [], - plugins: [], - pluginInterface: { - overrideStartLogic: () => Promise.resolve(false), - triggerHook: () => Promise.resolve(), - triggerMutatingHook: () => Promise.resolve(), - }, - } as ForgeConfig, - }, - devDependencies: {}, - }; - - it('removes unused makers from devDependencies', () => { - const packageJSON = merge({}, skeletonPackageJSON); - const devDeps = updateUpgradedForgeDevDeps(packageJSON, [ - '@electron-forge/maker-squirrel', - ]); - expect(devDeps).toEqual([]); - }); - - it('adds makers to devDependencies', () => { - const packageJSON = merge({}, skeletonPackageJSON); - packageJSON.config.forge.makers = [ - { - name: '@electron-forge/maker-zip', - platforms: ['darwin', 'linux'], - }, - { - name: '@electron-forge/maker-squirrel', - config: {}, - platforms: ['win32'], - }, - ] as IForgeResolvableMaker[]; - - const actual = updateUpgradedForgeDevDeps(packageJSON, []); - expect(actual).toHaveLength(2); - expect( - actual.find((dep) => dep.startsWith('@electron-forge/maker-zip')), - ).not.toEqual(undefined); - expect( - actual.find((dep) => dep.startsWith('@electron-forge/maker-squirrel')), - ).not.toEqual(undefined); - }); - - it('adds publishers to devDependencies', () => { - const packageJSON = merge({}, skeletonPackageJSON); - packageJSON.config.forge.publishers = [ - { name: '@electron-forge/publisher-github' }, - { name: '@electron-forge/publisher-snapcraft' }, - ]; - - const actual = updateUpgradedForgeDevDeps(packageJSON, []); - expect(actual).toHaveLength(2); - expect( - actual.find((dep) => dep.startsWith('@electron-forge/publisher-github')), - ).not.toEqual(undefined); - expect( - actual.find((dep) => - dep.startsWith('@electron-forge/publisher-snapcraft'), - ), - ).not.toEqual(undefined); - }); -}); diff --git a/packages/api/core/src/api/import.ts b/packages/api/core/src/api/import.ts index 997db79f13..8367131bb3 100644 --- a/packages/api/core/src/api/import.ts +++ b/packages/api/core/src/api/import.ts @@ -23,9 +23,6 @@ import { installDependencies, } from '../util/install-dependencies'; import { readRawPackageJson } from '../util/read-package-json'; -import upgradeForgeConfig, { - updateUpgradedForgeDevDeps, -} from '../util/upgrade-forge-config'; import { initGit } from './init-scripts/init-git'; import { deps, devDeps, exactDevDeps } from './init-scripts/init-npm'; @@ -169,15 +166,6 @@ export default autoTrace( task.output = chalk.yellow( "We can't tell if the Electron Forge config is compatible because it's in an external JavaScript file, not trying to convert it and continuing anyway", ); - } else { - d('Upgrading an Electron Forge < 6 project'); - packageJSON.config.forge = upgradeForgeConfig( - packageJSON.config.forge, - ); - importDevDeps = updateUpgradedForgeDevDeps( - packageJSON, - importDevDeps, - ); } } diff --git a/packages/api/core/src/util/upgrade-forge-config.ts b/packages/api/core/src/util/upgrade-forge-config.ts deleted file mode 100644 index 5b1385aa18..0000000000 --- a/packages/api/core/src/util/upgrade-forge-config.ts +++ /dev/null @@ -1,197 +0,0 @@ -import path from 'node:path'; - -import { - ForgeConfig, - ForgePlatform, - IForgeResolvableMaker, - IForgeResolvablePublisher, -} from '@electron-forge/shared-types'; - -import { siblingDep } from '../api/init-scripts/init-npm'; - -type MakeTargets = { string: string[] }; - -type GitHub5Config = Record & { - name: string; - owner: string; - options: Record; -}; - -type Forge5Config = { - make_targets?: Record; - electronPackagerConfig?: Record; - electronRebuildConfig?: Record; - electronWinstallerConfig?: Record; - electronInstallerDMG?: Record; - electronInstallerFlatpak?: Record; - electronInstallerDebian?: Record; - electronInstallerRedhat?: Record; - electronInstallerSnap?: Record; - electronWixMSIConfig?: Record; - windowsStoreConfig?: Record; - - github_repository?: GitHub5Config; - s3?: Record; - 'electron-release-server'?: Record; - snapStore?: Record; -}; - -type Forge5ConfigKey = keyof Forge5Config; - -type ForgePackageJSON = Record & { - config: { - forge: ForgeConfig; - }; - devDependencies: Record; -}; - -function mapMakeTargets( - forge5Config: Forge5Config, -): Map { - const makeTargets = new Map(); - if (forge5Config.make_targets) { - for (const [platform, targets] of Object.entries( - forge5Config.make_targets as MakeTargets, - )) { - for (const target of targets) { - let platforms = makeTargets.get(target); - if (platforms === undefined) { - platforms = []; - makeTargets.set(target, platforms); - } - platforms.push(platform as ForgePlatform); - } - } - } - - return makeTargets; -} - -const forge5MakerMappings = new Map([ - ['electronInstallerDebian', 'deb'], - ['electronInstallerDMG', 'dmg'], - ['electronInstallerFlatpak', 'flatpak'], - ['electronInstallerRedhat', 'rpm'], - ['electronInstallerSnap', 'snap'], - ['electronWinstallerConfig', 'squirrel'], - ['electronWixMSIConfig', 'wix'], - ['windowsStoreConfig', 'appx'], -]); - -/** - * Converts Forge v5 maker config to v6. - */ -function generateForgeMakerConfig( - forge5Config: Forge5Config, -): IForgeResolvableMaker[] { - const makeTargets = mapMakeTargets(forge5Config); - const makers: IForgeResolvableMaker[] = []; - - for (const [forge5Key, makerType] of forge5MakerMappings) { - const config = forge5Config[forge5Key]; - if (config) { - makers.push({ - name: `@electron-forge/maker-${makerType}`, - config: forge5Config[forge5Key], - platforms: makeTargets.get(makerType) || [], - } as IForgeResolvableMaker); - } - } - - const zipPlatforms = makeTargets.get('zip'); - if (zipPlatforms) { - makers.push({ - name: '@electron-forge/maker-zip', - platforms: zipPlatforms, - } as IForgeResolvableMaker); - } - - return makers; -} - -const forge5PublisherMappings = new Map([ - ['github_repository', 'github'], - ['s3', 's3'], - ['electron-release-server', 'electron-release-server'], - ['snapStore', 'snapcraft'], -]); - -/** - * Transforms v5 GitHub publisher config to v6 syntax. - */ -function transformGitHubPublisherConfig(config: GitHub5Config) { - const { name, owner, options, ...gitHubConfig } = config; - gitHubConfig.repository = { name, owner }; - if (options) { - gitHubConfig.octokitOptions = options; - } - - return gitHubConfig; -} - -/** - * Converts Forge v5 publisher config to v6. - */ -function generateForgePublisherConfig( - forge5Config: Forge5Config, -): IForgeResolvablePublisher[] { - const publishers: IForgeResolvablePublisher[] = []; - - for (const [forge5Key, publisherType] of forge5PublisherMappings) { - let config = forge5Config[forge5Key]; - if (config) { - if (publisherType === 'github') { - config = transformGitHubPublisherConfig(config as GitHub5Config); - } - publishers.push({ - config, - name: `@electron-forge/publisher-${publisherType}`, - platforms: null, - } as IForgeResolvableMaker); - } - } - - return publishers; -} - -/** - * Upgrades Forge v5 config to v6. - */ -export default function upgradeForgeConfig( - forge5Config: Forge5Config, -): ForgeConfig { - const forgeConfig: ForgeConfig = {} as ForgeConfig; - - if (forge5Config.electronPackagerConfig) { - delete forge5Config.electronPackagerConfig.packageManager; - forgeConfig.packagerConfig = forge5Config.electronPackagerConfig; - } - if (forge5Config.electronRebuildConfig) { - forgeConfig.rebuildConfig = forge5Config.electronRebuildConfig; - } - forgeConfig.makers = generateForgeMakerConfig(forge5Config); - forgeConfig.publishers = generateForgePublisherConfig(forge5Config); - - return forgeConfig; -} - -export function updateUpgradedForgeDevDeps( - packageJSON: ForgePackageJSON, - devDeps: string[], -): string[] { - const forgeConfig = packageJSON.config.forge; - devDeps = devDeps.filter((dep) => !dep.startsWith('@electron-forge/maker-')); - devDeps = devDeps.concat( - (forgeConfig.makers as IForgeResolvableMaker[]).map( - (maker: IForgeResolvableMaker) => siblingDep(path.basename(maker.name)), - ), - ); - devDeps = devDeps.concat( - (forgeConfig.publishers as IForgeResolvablePublisher[]).map( - (publisher: IForgeResolvablePublisher) => - siblingDep(path.basename(publisher.name)), - ), - ); - - return devDeps; -}