forge icon indicating copy to clipboard operation
forge copied to clipboard

maker-dmg fails when run in parallel

Open macdja38 opened this issue 1 year ago • 6 comments

Pre-flight checklist

  • [X] I have read the contribution documentation for this project.
  • [X] I agree to follow the code of conduct that this project uses.
  • [X] I have searched the issue tracker for a bug that matches the one I want to file, without success.

Electron Forge version

7.3.0

Electron version

N/A

Operating system

macOS 14.3

Last known working Electron Forge version

It broke in 7.0.0

Expected behavior

Expect electron-forge make -- --arch=x64,arm64 to build both x64 and arm64 versions of the app.

Actual behavior

Both x64 and arm64 make steps fail. with the error Target already exists node_modules/appdmg/lib/appdmg.js:81:53

Steps to reproduce

electron-forge make -- --arch=x64,arm64

{
	name: "@electron-forge/maker-dmg",
	config: {
		debug: true,
		overwrite: true,
	},
	platforms: ["darwin"],
}

Additional information

For context it'll be helpful to read through this PR that changed how makers are run. https://github.com/electron/forge/pull/3363

I dug into this a bit. the specific target error comes from appdmg.js:81:53

On a run through with just one target that succeeded:

console.log("Target step started", global.target); at the start of that shows

[REDACTED]/desktop/out/make/OurAppName.dmg for both of the builds that are happening simultaneously

I took a look at the electron code that calls into that @electron-forge/maker-dmg/src/MakerDMG.ts output on line 21 is the one used as the target. forgeDefaultOutPath is fine though. For example: [REDACTED]/desktop/out/make/OurAppName-1.2.3-arm64.dmg

dmgConfig is

overwrite = true
name = "OurAppName"
debug = true
icon = "assets/resources/icon.icns"
background = "assets/resources/installBackground.png"
appPath = "[REDACTED]/desktop/out/OurAppName-darwin-arm64/OurAppName.app"
out = "[REDACTED]/desktop/out/make"

Execution goes into the conditional (if !this.config.name)

I think this could probably be fixed by adding the targetArch to the outPath.

I plan on submitting a PR to fix this soon.

macdja38 avatar Feb 29 '24 08:02 macdja38

I have the same issue when building to arm and x64 using electron-forge make --arch=x64,arm64

kevincerro avatar Feb 29 '24 15:02 kevincerro

Also in MakerSquirrel MakerAppImage

with

   new MakerSquirrel((arch) => ({
      name: `Follow-${arch}`,
      setupIcon: "resources/icon.ico",
    })),
    new MakerAppImage((arch) => ({
      options: {
        name: `Follow-${arch}`,
        icon: "resources/icon.png",
        mimeType: ["x-scheme-handler/follow"],
      },
    })),

Innei avatar Aug 13 '24 07:08 Innei

I have the same issue when building to arm and x64 using electron-forge make --arch=x64,arm64

Yeah me too. Is there any solution about that?

didix16 avatar Sep 06 '24 13:09 didix16

same here, any suggestion?

lockiechen avatar Oct 21 '24 02:10 lockiechen

I use the code in this PR via this npm package:

"devDependencies": {
    "@electron-forge/maker-dmg": "https://registry.npmjs.org/@fellow/maker-dmg/-/maker-dmg-7.4.0.tgz",
}

macdja38 avatar Oct 22 '24 03:10 macdja38

This is my workaround: I just use a different name for the dmg maker on different archs:

new MakerDMG((arch) => ({
  name: `<app_name> Installer (${arch})`,
})),

tanishqkancharla avatar Nov 17 '24 00:11 tanishqkancharla