Skip to content

Commit 4805a3b

Browse files
committed
test: isolate yarn global cache in test sandbox
1 parent 95d9ee6 commit 4805a3b

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed
+33-8
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,58 @@
11
import { mkdir, writeFile } from 'fs/promises';
22
import { join } from 'path';
3-
import { getGlobalVariable } from '../utils/env';
3+
import { getGlobalVariable, setGlobalVariable } from '../utils/env';
44

55
/**
66
* Configure npm to use a unique sandboxed environment.
77
*/
88
export default async function () {
99
const tempRoot: string = getGlobalVariable('tmp-root');
1010
const npmModulesPrefix = join(tempRoot, 'npm-global');
11+
const yarnModulesPrefix = join(tempRoot, 'yarn-global');
1112
const npmRegistry: string = getGlobalVariable('package-registry');
1213
const npmrc = join(tempRoot, '.npmrc');
14+
const yarnrc = join(tempRoot, '.yarnrc');
15+
const npmCacheFolder = join(tempRoot, 'npm-cache-folder');
16+
const yarnCacheFolder = join(tempRoot, 'yarn-cache-folder');
1317

14-
// Configure npm to use the sandboxed npm globals and rc file
15-
// From this point onward all npm transactions use the "global" npm cache
16-
// isolated within this e2e test invocation.
18+
// Change the npm+yarn userconfig to the sandboxed npmrc to override the default ~
1719
process.env.NPM_CONFIG_USERCONFIG = npmrc;
18-
process.env.NPM_CONFIG_PREFIX = npmModulesPrefix;
20+
21+
// The npm+yarn registry URL
1922
process.env.NPM_CONFIG_REGISTRY = npmRegistry;
2023

24+
// Configure npm+yarn to use a sandboxed bin directory
25+
// From this point onward all yarn/npm bin files/symlinks are put into the prefix directories
26+
process.env.NPM_CONFIG_PREFIX = npmModulesPrefix;
27+
process.env.YARN_CONFIG_PREFIX = yarnModulesPrefix;
28+
29+
// Package cache diretories
30+
process.env.NPM_CONFIG_CACHE = npmCacheFolder;
31+
process.env.YARN_CACHE_FOLDER = yarnCacheFolder;
32+
2133
// Snapshot builds may contain versions that are not yet released (e.g., RC phase main branch).
2234
// In this case peer dependency ranges may not resolve causing npm 7+ to fail during tests.
2335
// To support this case, legacy peer dependency mode is enabled for snapshot builds.
2436
if (getGlobalVariable('argv')['ng-snapshots']) {
2537
process.env['NPM_CONFIG_legacy_peer_deps'] = 'true';
2638
}
2739

28-
// Configure the registry and prefix used within the test sandbox
29-
await writeFile(npmrc, `registry=${npmRegistry}\nprefix=${npmModulesPrefix}`);
40+
// Configure the registry and prefix used within the test sandbox via rc files
41+
await writeFile(
42+
npmrc,
43+
`registry=${npmRegistry}\nprefix=${npmModulesPrefix}\ncache=${npmCacheFolder}`,
44+
);
45+
await writeFile(
46+
yarnrc,
47+
`registry ${npmRegistry}\nprefix ${yarnModulesPrefix}\ncache-folder ${yarnCacheFolder}`,
48+
);
3049
await mkdir(npmModulesPrefix);
50+
await mkdir(yarnModulesPrefix);
51+
await mkdir(yarnCacheFolder);
52+
53+
setGlobalVariable('npm-global', npmModulesPrefix);
54+
setGlobalVariable('yarn-global', yarnModulesPrefix);
3155

32-
console.log(` Using "${npmModulesPrefix}" as e2e test global npm cache.`);
56+
console.log(` Using "${npmModulesPrefix}" as e2e test global npm bin dir.`);
57+
console.log(` Using "${yarnModulesPrefix}" as e2e test global yarn bin dir.`);
3358
}

tests/legacy-cli/e2e/utils/process.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ interface ExecOptions {
1616
cwd?: string;
1717
}
1818

19-
const NPM_CONFIG_RE = /^npm_config_/i;
19+
const NPM_CONFIG_RE = /^(npm_config_|yarn_)/i;
2020

2121
let _processes: child_process.ChildProcess[] = [];
2222

0 commit comments

Comments
 (0)