From 2df1f35aeed3616a072cbfae16143ce9794020af Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Wed, 2 Jan 2019 16:15:07 -0800 Subject: [PATCH] feat: avoid hardcoded HOME for spawn-wrap working dir By default, spawn-wrap writes temporary files to HOME. It used to be /tmp, but it changed that to HOME to support environments that have 'noexec' flags set on their tmpfs mount. Ref https://github.com/tapjs/spawn-wrap/issues/3. The problem with this is that nyc now no longer works in environments without a (writable) home directory (e.g. the 'nobody' user on Linux). While it is fine to fallback to HOME, it should write elsewhere if that is unavailable, and ideally in a way that doesn't require every sysadmin or end-user to hardcode some environment variable in their package.json specifically for nyc or spawn-wrap. A common way to communicate this intent is with the XDG_CACHE_HOME environment variable. Fixes #951. --- bin/nyc.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bin/nyc.js b/bin/nyc.js index d7c070a81..6ae1dca1f 100755 --- a/bin/nyc.js +++ b/bin/nyc.js @@ -45,7 +45,10 @@ if ([ NYC_CONFIG: JSON.stringify(argv), NYC_CWD: process.cwd(), NYC_ROOT_ID: nyc.rootId, - NYC_INSTRUMENTER: argv.instrumenter + NYC_INSTRUMENTER: argv.instrumenter, + // Support running nyc as a user without HOME (e.g. linux 'nobody'), + // https://github.com/istanbuljs/nyc/issues/951 + SPAWN_WRAP_SHIM_ROOT: process.env.XDG_CACHE_HOME || require('os').homedir() } if (argv['babel-cache'] === false) {