question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

npm run dist -> fails in CI environment, works locally (EEXIST error during cleanup).

See original GitHub issue
  • electron-builder: tried with 22.2.0, 21.2.0, 20.0.0
  • electron-updater: 4.0.0 (not relevant)
  • node: 8 or 10 (tried both, same effect)
  • target: MacOS (on MacOS agent)

Hi, first of all thanks everybody working on this great library. I’ve been using it over 2 years without issues in our CI environment (using electron-builder@19.56.0). I’m building the MacOS variant on a physical Mac agent.

Due to the notarizing and other fixes I updated to the latest electron builder. Locally everything works fine. However, when I run this build via the CI system (TeamCity) it always fails with EEXIST after building (during cleanup). When I move to the mac agent and run “npm run dist” from terminal (from that same working directory the build just failed in) it works fine, so it only fails when triggered by the CI environment. I’ve also swapped the physical agent for another one without luck, so I’m sure nothing is/was lingering on the agent.

If anyone could point me in any direction as to why this is happening? This doesn’t seem to happen on our window variant (which is built by the same system but on a windows agent). I also have a Jenkins instance available where I’ll be testing this on tomorrow, but I’m afraid the results will remain the same.

This is the error in question, it seems to copy a file that already exists.

Error: EEXIST: file already exists, link ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/debug/LICENSE’ -> ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/dist/mac/Electron.app/Contents/Resources/app/node_modules/debug/LICENSE’

I noticed this is about the “debug” package, this package is not added to the package.json by myself, but rather trough other packages dependecies. I did confirm that some packages rely on 2.6.8 and others rely on 4.0.0 of that same package. Maybe this has something to do with the failure to copy?

I’ve ran the build with DEBUG=electron-builder which gave me this output: Note that I omitted the package.json, if that is needed I’ll follow up this post with it.

[17:21:27][npm run dist] • two package.json structure is used devPackageFile=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/package.json appPackageFile=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/package.json [17:21:28][npm run dist] • no native production dependencies [17:21:28][npm run dist] • packaging platform=darwin arch=x64 electron=6.1.7 appOutDir=dist/mac [17:21:28][npm run dist] • spawning command=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-bin/mac/app-builder unpack-electron --configuration [{“platform”:“darwin”,“arch”:“x64”,“version”:“6.1.7”}] --output /Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/dist/mac --distMacOsAppName Electron.app [17:21:28][npm run dist] • map async taskCount=2 [17:21:28][npm run dist] • map async taskCount=1 [17:21:28][npm run dist] • map async taskCount=334 [17:21:29][npm run dist] • exited command=app-builder code=0 pid=49637 [17:21:29][npm run dist] • asar using is disabled — it is strongly not recommended solution=enable asar and use asarUnpack to unpack files that must be externally available [17:21:29][npm run dist] • spawning command=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-bin/mac/app-builder node-dep-tree --dir /Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=wrappy, once [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules round=0 unresolved=@types/semver, builder-util-runtime, fs-extra, js-yaml, lazy-val, lodash.isequal, pako [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules round=0 unresolved=sax [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=graceful-fs [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=graceful-fs [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules round=0 unresolved=deep-equal, mkdirp [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules round=0 unresolved=graceful-fs [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=1 unresolved=graceful-fs [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules round=0 unresolved=graceful-fs [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=1 unresolved=graceful-fs [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=angular [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=native-promise-only [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules round=0 unresolved=if-async, stream-slicer, through2 [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=inherits [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=lodash [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=angular-translate [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=angular-translate [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules round=0 unresolved=electron-localshortcut [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=cookie, debug [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=debug, encodeurl, escape-html, on-finished, parseurl, statuses [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=depd, qs, content-type, debug, on-finished, type-is [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules round=0 unresolved=depd, setprototypeof, statuses [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=1 unresolved=depd, setprototypeof, statuses [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=unpipe, bytes, http-errors, iconv-lite [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=ms, on-finished, range-parser, debug, depd, escape-html, etag, fresh, statuses, encodeurl, http-errors [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=parseurl, send, encodeurl, escape-html [17:21:29][npm run dist] • unresolved deps nodeModuleDir=/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules round=0 unresolved=mime-types [17:21:29][npm run dist] • exited command=app-builder code=0 pid=49638 out=[{“dir”:“/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules”,“deps”:[“debug”,“graceful-fs”,“iconv-lite”,“inherits”,“lodash”,“mime-db”,“mime-types”,“ms”,“once”,“qs”,“safer-buffer”,“wrappy”]},{“dir”:“/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules”,“deps”:[“7zip”,“@types/semver”,“accepts”,“accessibility-developer-tools”,“angular”,“angular-translate”,“angular-translate-loader-static-files”,“angular-translate-loader-url”,“argparse”,“array-flatten”,“async”,“balanced-match”,“body-parser”,“bootstrap”,“brace-expansion”,“builder-util-runtime”,“bytes”,“charenc”,“concat-map”,“connected-domain”,“content-disposition”,“content-type”,“cookie”,“cookie-signature”,“core-util-is”,“cross-unzip”,“crypt”,“debug”,“deep-equal”,“depd”,“destroy”,“devtron”,“each-async”,“ee-first”,“electron-debug”,“electron-devtools-installer”,“electron-is-accelerator”,“electron-is-dev”,“electron-localshortcut”,“electron-log”,“electron-updater”,“electron-window-state”,“encodeurl”,“escape-html”,“esprima”,“etag”,“express”,“finalhandler”,“forwarded”,“fresh”,“fs-extra”,“fs.realpath”,“glob”,“graceful-fs”,“highlight.js”,“http-errors”,“humanize-plus”,“iconv-lite”,“if-async”,“inflight”,“inherits”,“ipaddr.js”,“is-buffer”,“isarray”,“jquery”,“js-yaml”,“jsonfile”,“keyboardevent-from-electron-accelerator”,“keyboardevents-areequal”,“lazy-val”,“lodash”,“lodash.isequal”,“md5”,“media-typer”,“merge-descriptors”,“methods”,“mime”,“mime-db”,“mime-types”,“minimatch”,“minimist”,“mkdirp”,“moment”,“ms”,“native-promise-only”,“negotiator”,“netstats”,“on-finished”,“once”,“onetime”,“pako”,“parseurl”,“path-is-absolute”,“path-to-regexp”,“proxy-addr”,“ps-node”,“qs”,“range-parser”,“raven”,“raw-body”,“readable-stream”,“regedit”,“rimraf”,“safe-buffer”,“safer-buffer”,“sax”,“selective-whitespace”,“semver”,“send”,“serve-static”,“set-immediate-shim”,“setprototypeof”,“sprintf-js”,“stack-trace”,“statuses”,“stream-slicer”,“string_decoder”,“table-parser”,“through2”,“timed-out”,“tokenize-whitespace”,“type-is”,“universalify”,“unpipe”,“utils-merge”,“uuid”,“vary”,“wrappy”,“xtend”]},{“dir”:“/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/builder-util-runtime/node_modules”,“deps”:[“debug”,“ms”]},{“dir”:“/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/electron-debug/node_modules”,“deps”:[“electron-is-dev”]},{“dir”:“/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/electron-updater/node_modules”,“deps”:[“semver”]},{“dir”:“/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/electron-window-state/node_modules”,“deps”:[“jsonfile”]},{“dir”:“/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/http-errors/node_modules”,“deps”:[“inherits”]},{“dir”:“/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/regedit/node_modules”,“deps”:[“debug”,“ms”]}] [17:21:31][npm run dist] • async task error error=EEXIST: file already exists, link ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/debug/LICENSE’ -> ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/dist/mac/Electron.app/Contents/Resources/app/node_modules/debug/LICENSE’ [17:21:31][npm run dist] • async task error error=EEXIST: file already exists, link ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/debug/LICENSE’ -> ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/dist/mac/Electron.app/Contents/Resources/app/node_modules/debug/LICENSE’ [17:21:31][npm run dist] • async task error error=EEXIST: file already exists, link ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/debug/src/browser.js’ -> ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/dist/mac/Electron.app/Contents/Resources/app/node_modules/debug/src/browser.js’ [17:21:31][npm run dist] • async task error error=EEXIST: file already exists, link ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/debug/src/index.js’ -> ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/dist/mac/Electron.app/Contents/Resources/app/node_modules/debug/src/index.js’ [17:21:31][npm run dist] Error: EEXIST: file already exists, link ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/app/node_modules/debug/LICENSE’ -> ‘/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/dist/mac/Electron.app/Contents/Resources/app/node_modules/debug/LICENSE’ [17:21:31][npm run dist] at copyOrLinkFile (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/builder-util/src/fs.ts:189:12) [17:21:31][npm run dist] at /Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/builder-util/src/fs.ts:264:11 [17:21:31][npm run dist] at Generator.next (<anonymous>) [17:21:31][npm run dist] From previous event: [17:21:31][npm run dist] at FileCopier.copy (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/builder-util/src/fs.ts:242:64) [17:21:31][npm run dist] at /Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/util/appFileCopier.ts:74:36 [17:21:31][npm run dist] at Generator.next (<anonymous>) [17:21:31][npm run dist] at xfs.stat (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/fs-extra-p/node_modules/fs-extra/lib/mkdirs/mkdirs.js:56:16) [17:21:31][npm run dist] at callback (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/graceful-fs/polyfills.js:295:20) [17:21:31][npm run dist] at FSReqWrap.oncomplete (fs.js:154:5) [17:21:31][npm run dist] From previous event: [17:21:31][npm run dist] at copyAppFiles (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/out/util/appFileCopier.js:160:24) [17:21:31][npm run dist] at taskManager.addTask._bluebirdLst.default.each.it (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/platformPackager.ts:310:86) [17:21:31][npm run dist] From previous event: [17:21:31][npm run dist] at MacPackager.copyAppFiles (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/platformPackager.ts:310:43) [17:21:31][npm run dist] at /Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/platformPackager.ts:214:10 [17:21:31][npm run dist] at Generator.next (<anonymous>) [17:21:31][npm run dist] at runCallback (timers.js:705:18) [17:21:31][npm run dist] at tryOnImmediate (timers.js:676:5) [17:21:31][npm run dist] at processImmediate (timers.js:658:5) [17:21:31][npm run dist] From previous event: [17:21:31][npm run dist] at MacPackager.doPack (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/platformPackager.ts:167:165) [17:21:31][npm run dist] at /Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/macPackager.ts:90:63 [17:21:31][npm run dist] at Generator.next (<anonymous>) [17:21:31][npm run dist] From previous event: [17:21:31][npm run dist] at MacPackager.pack (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/macPackager.ts:82:95) [17:21:31][npm run dist] at /Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/packager.ts:430:24 [17:21:31][npm run dist] at Generator.next (<anonymous>) [17:21:31][npm run dist] at xfs.mkdir.er (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/fs-extra-p/node_modules/fs-extra/lib/mkdirs/mkdirs.js:37:14) [17:21:31][npm run dist] at FSReqWrap.args [as oncomplete] (fs.js:140:20) [17:21:31][npm run dist] From previous event: [17:21:31][npm run dist] at Packager.doBuild (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/packager.ts:396:24) [17:21:31][npm run dist] at /Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/packager.ts:366:57 [17:21:31][npm run dist] From previous event: [17:21:31][npm run dist] at Packager._build (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/packager.ts:335:133) [17:21:31][npm run dist] at /Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/packager.ts:331:23 [17:21:31][npm run dist] at Generator.next (<anonymous>) [17:21:31][npm run dist] at runCallback (timers.js:705:18) [17:21:31][npm run dist] at tryOnImmediate (timers.js:676:5) [17:21:31][npm run dist] at processImmediate (timers.js:658:5) [17:21:31][npm run dist] From previous event: [17:21:31][npm run dist] at Packager.build (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/packager.ts:288:14) [17:21:31][npm run dist] at build (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/app-builder-lib/src/index.ts:59:28) [17:21:31][npm run dist] at build (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/electron-builder/src/builder.ts:228:10) [17:21:31][npm run dist] at then (/Users/rend/Documents/buildAgent/work/97a47f0f7948b943/src/node_modules/electron-builder/src/cli/cli.ts:49:19) [17:21:31][npm run dist] npm ERR! code ELIFECYCLE [17:21:31][npm run dist] npm ERR! errno 1 [17:21:31][npm run dist] npm ERR! niko_smart_config_tool@2.7.21510 dist: electron-builder --x64 --ia32 [17:21:31][npm run dist] npm ERR! Exit status 1 [17:21:31][npm run dist] npm ERR! [17:21:31][npm run dist] npm ERR! Failed at the niko_smart_config_tool@2.7.21510 dist script. [17:21:31][npm run dist] npm ERR! This is probably not a problem with npm. There is likely additional logging output above. [17:21:31][npm run dist] [17:21:31][npm run dist] npm ERR! A complete log of this run can be found in: [17:21:31][npm run dist] npm ERR! /Users/rend/.npm/_logs/2020-01-14T16_21_31_648Z-debug.log

Thanks!

Issue Analytics

  • State:closed
  • Created 4 years ago
  • Comments:6

github_iconTop GitHub Comments

3reactions
mmaiettacommented, May 29, 2021

Thanks for the test cases. If I may ask, what is USE_HARD_LINKS doing? The inline if-statement seems a bit…extravagant, curious as to why it’s only an env var instead of in the config?

1reaction
The-SLXcommented, Jan 15, 2020

I’ve managed to track down a solution for the issue here.

This line seems to be causing me trouble. I’m not sure why I’m having this issue as I would believe this code to work fine.

Found in packages/builder-util/src/fs.ts line 140 (at time of writing) const _isUseHardLink = process.platform !== "win32" && process.env.USE_HARD_LINKS !== "false" && (require("is-ci") || process.env.USE_HARD_LINKS === "true")

I have 3 cases (tested local and on agent)

Initial situation, no USE_HARD_LINKS variable (described in original post) -> succes local, fails in ci

add USE_HARD_LINKS=true -> fails local, fails ci

add USE_HARD_LINKS=false -> success local, success on ci

Based on the code, _isUseHardLink is true when running from CI or setting the environment variable (except for win32 builds). It seems I can only run my CI build with the hard links disabled, but from the code it looks that it’s supposed to be on. Am I missing something here?

On the positive, my issue seems to be resolved by adding the USE_HARD_LINKS=false explicitly on the build configuration. I’m just wondering if this is OK (as I didn’t need to do this before updating electron-builder).

Read more comments on GitHub >

github_iconTop Results From Across the Web

npm ERR! Refusing to delete / code EEXIST - node.js
Steps. Delete the node_modules directory completely. Run npm install again. This should help.
Read more >
npm packages in the Package Registry - GitLab Docs
Due to a bug in npm 6.9.0, deleting distribution tags fails. Make sure your npm version is 6.9.1 or later. Supported CLI commands....
Read more >
npm-audit
The audit command submits a description of the dependencies configured in your project to your default registry and asks for a report of...
Read more >
npm fails to install - Google Groups
Getting a rather long error when trying to run sudo npm install -g appium. The log file generated is as follows: 0 info...
Read more >
Build Cache - Gradle User Manual
When using a shared build cache for task output caching this even works ... and all continuous integration builds populate the build cache...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found