From fc42b7b7ffccbba65e88bd3894310c9a2e7819c6 Mon Sep 17 00:00:00 2001 From: Emily Xiong Date: Fri, 9 Jun 2023 12:31:30 -0400 Subject: [PATCH] fix(testing): fix windows e2e storage ENOENT (#17506) --- CODEOWNERS | 1 + e2e/utils/global-setup.ts | 33 +++++++++++------- .../src/executors/verdaccio/verdaccio.impl.ts | 2 +- scripts/local-registry/config.yml | 34 +++++++++++++++++++ 4 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 scripts/local-registry/config.yml diff --git a/CODEOWNERS b/CODEOWNERS index e118e1e31ea1d..5fe1b90f7c0c9 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -161,6 +161,7 @@ pnpm-lock.yaml @nrwl/nx-pipelines-reviewers # Scripts /scripts/depcheck @FrozenPandaz @vsavkin @jaysoo /scripts/documentation @nrwl/nx-docs-reviewers +/scripts/local-registry @FrozenPandaz @vsavkin /scripts/angular-support-upgrades @nrwl/nx-angular-reviewers # CI diff --git a/e2e/utils/global-setup.ts b/e2e/utils/global-setup.ts index d79540e0484e9..4986306a6ba51 100644 --- a/e2e/utils/global-setup.ts +++ b/e2e/utils/global-setup.ts @@ -1,22 +1,28 @@ import { join } from 'path'; -import { ChildProcess, execSync, spawn } from 'child_process'; +import { ChildProcess, execSync, fork } from 'child_process'; +import { tmpdir } from 'tmp'; +import { existsSync } from 'fs-extra'; +import { Config } from '@jest/types'; -export default async function () { +export default async function (globalConfig: Config.ConfigGlobals) { + const isVerbose = + process.env.NX_VERBOSE_LOGGING === 'true' || globalConfig.verbose; const storageLocation = join( - process.cwd(), - 'tmp/local-registry/storage', + tmpdir, + 'local-registry/storage', process.env.NX_TASK_TARGET_PROJECT ?? '' ); global.nxLocalRegistryProcess = await new Promise( (resolve, reject) => { - const childProcess = spawn( - `nx`, - `local-registry @nx/nx-source --location none --storage ${storageLocation} --clear ${ + const childProcess = fork( + require.resolve(`nx`), + `local-registry @nx/nx-source --config scripts/local-registry/config.yml --location none --storage ${storageLocation} --clear ${ process.env.NX_E2E_SKIP_BUILD_CLEANUP !== 'true' - }`.split(' ') + }`.split(' '), + { stdio: 'pipe' } ); - childProcess.stdout.on('data', (data) => { + childProcess?.stdout?.on('data', (data) => { if (data.toString().includes('http://localhost:')) { const port = parseInt( data.toString().match(/localhost:(?\d+)/)?.groups?.port @@ -31,7 +37,7 @@ export default async function () { resolve(childProcess); } }); - childProcess.stderr.on('data', (data) => { + childProcess?.stderr?.on('data', (data) => { process.stderr.write(data); reject(data); }); @@ -46,10 +52,13 @@ export default async function () { } ); - if (process.env.NX_E2E_SKIP_BUILD_CLEANUP !== 'true') { + if ( + process.env.NX_E2E_SKIP_BUILD_CLEANUP !== 'true' || + !existsSync('./build') + ) { console.log('Publishing packages to local registry'); execSync('pnpm nx-release --local major', { - stdio: process.env.CI === 'true' ? 'ignore' : 'inherit', + stdio: isVerbose ? 'inherit' : 'ignore', }); } } diff --git a/packages/js/src/executors/verdaccio/verdaccio.impl.ts b/packages/js/src/executors/verdaccio/verdaccio.impl.ts index 63f627e96f7af..790bdadafa7b9 100644 --- a/packages/js/src/executors/verdaccio/verdaccio.impl.ts +++ b/packages/js/src/executors/verdaccio/verdaccio.impl.ts @@ -47,7 +47,7 @@ export async function verdaccioExecutor( try { const port = await detectPort(options.port); - if (port === options.port) { + if (port !== options.port) { logger.info(`Port ${options.port} was occupied. Using port ${port}.`); options.port = port; } diff --git a/scripts/local-registry/config.yml b/scripts/local-registry/config.yml new file mode 100644 index 0000000000000..9d694a3b7a6c2 --- /dev/null +++ b/scripts/local-registry/config.yml @@ -0,0 +1,34 @@ +# path to a directory with all packages +storage: ../../tmp/local-registry/storage + +listen: 127.0.0.1:4872 # change to 127.0.0.1 to avoid IPv6 issue + +# a list of other known repositories we can talk to +uplinks: + npmjs: + url: https://registry.npmjs.org/ + max_fails: 100 + maxage: 30m + fail_timeout: 10m + timeout: 600s + cache: false + +packages: + '@nrwl/*': + access: $all + publish: $all + + '**': + access: $all + publish: $all + unpublish: $all + proxy: npmjs + +# log settings +logs: + type: stdout + format: pretty + level: warn + +publish: + allow_offline: true # set offline to true to allow publish offline