From 13e0d6b873831512f49818a6ab6bfae252020e3b Mon Sep 17 00:00:00 2001 From: Clemens Horn Date: Fri, 15 Mar 2024 19:44:54 +0100 Subject: [PATCH] fix(verdaccio): e2e pipeline, nx-cmake still needs fixing --- .commitlintrc.js | 4 ++-- e2e/e2e-create-nx-cmake/project.json | 12 ++++------ .../tests/create-nx-cmake.spec.ts | 2 +- e2e/e2e-nx-cmake/project.json | 12 ++++------ e2e/e2e-nx-cmake/tests/nx-cmake.spec.ts | 2 +- package.json | 1 + packages/verdaccio/config.yml | 4 +++- packages/verdaccio/project.json | 7 ++++++ packages/verdaccio/src/bin/publish.ts | 24 +++++++------------ packages/verdaccio/src/bin/single-e2e.ts | 3 +++ .../verdaccio/src/bin/start-local-registry.ts | 6 ++++- .../verdaccio/src/bin/stop-local-registry.ts | 4 ++++ packages/verdaccio/src/config/hostname.ts | 1 - packages/verdaccio/src/config/port.ts | 1 - packages/verdaccio/src/config/project.ts | 1 - packages/verdaccio/src/config/registry.ts | 4 ---- packages/verdaccio/src/config/storage.ts | 1 - packages/verdaccio/src/index.ts | 1 + .../verdaccio/src/lib/localRegistryTarget.ts | 1 - .../verdaccio/src/lib/setLocalRegistry.ts | 9 +++---- packages/verdaccio/src/lib/single-e2e.ts | 24 +++++++++++++++++++ .../verdaccio/src/lib/startLocalRegistry.ts | 11 +++------ .../verdaccio/src/lib/stopLocalRegistry.ts | 3 +-- .../verdaccio/src/lib/unsetLocalRegistry.ts | 4 +--- plugins/create-nx-cmake/bin/index.ts | 6 ++--- plugins/create-nx-cmake/package.json | 10 ++++---- plugins/nx-cmake/package.json | 1 - plugins/nx-cmake/project.json | 1 + pnpm-lock.yaml | 7 ++++++ 29 files changed, 91 insertions(+), 76 deletions(-) create mode 100644 packages/verdaccio/src/bin/single-e2e.ts delete mode 100644 packages/verdaccio/src/config/hostname.ts delete mode 100644 packages/verdaccio/src/config/port.ts delete mode 100644 packages/verdaccio/src/config/project.ts delete mode 100644 packages/verdaccio/src/config/registry.ts delete mode 100644 packages/verdaccio/src/config/storage.ts delete mode 100644 packages/verdaccio/src/lib/localRegistryTarget.ts create mode 100644 packages/verdaccio/src/lib/single-e2e.ts diff --git a/.commitlintrc.js b/.commitlintrc.js index d80dd529..ea562469 100644 --- a/.commitlintrc.js +++ b/.commitlintrc.js @@ -10,10 +10,10 @@ module.exports = { 2, 'always', [ - ...(await getProjects( + ...getProjects( ctx, ({ name }) => !name.includes('e2e') && !name.includes('sb'), - )), + ), ], ], }, diff --git a/e2e/e2e-create-nx-cmake/project.json b/e2e/e2e-create-nx-cmake/project.json index 9af80ea1..a87033b5 100644 --- a/e2e/e2e-create-nx-cmake/project.json +++ b/e2e/e2e-create-nx-cmake/project.json @@ -5,7 +5,7 @@ "sourceRoot": "e2e/e2e-create-nx-cmake/tests", "targets": { "run-e2e": { - "dependsOn": ["^start-local-registry", "^publish"], + "dependsOn": ["^publish"], "executor": "@nx/jest:jest", "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { @@ -13,13 +13,9 @@ "runInBand": true } }, - "finish-e2e": { - "dependsOn": ["run-e2e"], - "command": "nx stop-local-registry verdaccio" - }, "e2e": { - "dependsOn": ["finish-e2e"], - "executor": "nx:noop" + "dependsOn": ["^e2e"], + "command": "nx single-e2e verdaccio --e2e={projectName}" }, "lint": { "executor": "@nx/eslint:lint", @@ -34,5 +30,5 @@ } } }, - "implicitDependencies": ["verdaccio", "create-nx-cmake"] + "implicitDependencies": ["verdaccio", "create-nx-cmake", "e2e-nx-cmake"] } diff --git a/e2e/e2e-create-nx-cmake/tests/create-nx-cmake.spec.ts b/e2e/e2e-create-nx-cmake/tests/create-nx-cmake.spec.ts index fd9094d8..d6e0909f 100644 --- a/e2e/e2e-create-nx-cmake/tests/create-nx-cmake.spec.ts +++ b/e2e/e2e-create-nx-cmake/tests/create-nx-cmake.spec.ts @@ -43,7 +43,7 @@ function createTestProject(extraArgs = '') { recursive: true, }); - execSync(`npx --yes create-nx-cmake@e2e ${projectName} ${extraArgs}`, { + execSync(`npx create-nx-cmake@e2e ${projectName} ${extraArgs}`, { cwd: dirname(projectDirectory), stdio: 'inherit', env: process.env, diff --git a/e2e/e2e-nx-cmake/project.json b/e2e/e2e-nx-cmake/project.json index b9e3158d..fb73e496 100644 --- a/e2e/e2e-nx-cmake/project.json +++ b/e2e/e2e-nx-cmake/project.json @@ -5,7 +5,7 @@ "sourceRoot": "e2e/e2e-nx-cmake/tests", "targets": { "run-e2e": { - "dependsOn": ["^start-local-registry", "^publish"], + "dependsOn": ["^publish"], "executor": "@nx/jest:jest", "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { @@ -13,13 +13,9 @@ "runInBand": true } }, - "finish-e2e": { - "dependsOn": ["run-e2e"], - "command": "nx stop-local-registry verdaccio" - }, "e2e": { - "dependsOn": ["finish-e2e"], - "executor": "nx:noop" + "dependsOn": ["^e2e"], + "command": "nx single-e2e verdaccio --e2e={projectName}" }, "lint": { "executor": "@nx/eslint:lint", @@ -34,5 +30,5 @@ } } }, - "implicitDependencies": ["verdaccio", "nx-cmake"] + "implicitDependencies": ["nx-cmake"] } diff --git a/e2e/e2e-nx-cmake/tests/nx-cmake.spec.ts b/e2e/e2e-nx-cmake/tests/nx-cmake.spec.ts index c8002197..ea8fa686 100644 --- a/e2e/e2e-nx-cmake/tests/nx-cmake.spec.ts +++ b/e2e/e2e-nx-cmake/tests/nx-cmake.spec.ts @@ -367,7 +367,7 @@ function createTestProject() { }); execSync( - `npx --yes create-nx-workspace@latest ${projectName} --preset=${plugin} --nxCloud=skip --no-interactive`, + `npx create-nx-workspace@latest ${projectName} --preset=${plugin} --ci=skip --interactive=false --verbose`, { cwd: dirname(projectDirectory), stdio: 'inherit', diff --git a/package.json b/package.json index b6df82c8..2e509f91 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@types/node": "20.11.25", "@typescript-eslint/eslint-plugin": "7.1.1", "@typescript-eslint/parser": "7.1.1", + "@verdaccio/types": "^10.8.0", "commitizen": "^4.3.0", "commitlint": "^19.0.3", "cz-git": "^1.9.0", diff --git a/packages/verdaccio/config.yml b/packages/verdaccio/config.yml index c5e29185..1d4a7302 100644 --- a/packages/verdaccio/config.yml +++ b/packages/verdaccio/config.yml @@ -1,5 +1,5 @@ # path to a directory with all packages -storage: ../tmp/local-registry/storage +storage: ../../tmp/local-registry/storage # a list of other known repositories we can talk to uplinks: @@ -34,3 +34,5 @@ server: listen: - 0.0.0.0:4873 + +_debug: true diff --git a/packages/verdaccio/project.json b/packages/verdaccio/project.json index 76ad0116..ee6e6341 100644 --- a/packages/verdaccio/project.json +++ b/packages/verdaccio/project.json @@ -52,6 +52,13 @@ "command": "ts-node {projectRoot}/src/bin/publish.ts {args.name} {args.ver} {args.tag}" } }, + "single-e2e": { + "executor": "nx:run-commands", + "options": { + "color": true, + "command": "ts-node {projectRoot}/src/bin/single-e2e.ts {args.e2e}" + } + }, "run-many-e2e": { "executor": "nx:run-commands", "options": { diff --git a/packages/verdaccio/src/bin/publish.ts b/packages/verdaccio/src/bin/publish.ts index 527f82ff..011df330 100644 --- a/packages/verdaccio/src/bin/publish.ts +++ b/packages/verdaccio/src/bin/publish.ts @@ -9,6 +9,8 @@ function invariant(condition: boolean, message: string) { } } +const registry = 'http://localhost:4873'; + // Executing publish script: node path/to/publish.mjs {name} --version {version} --tag {tag} // Default "tag" to "next" so we won't publish the "latest" tag by accident. const [, , name, version, tag = 'next'] = process.argv; @@ -36,7 +38,6 @@ invariant( process.chdir(outputPath); -// Updating the version in "package.json" before publishing try { const json = JSON.parse(readFileSync(`package.json`).toString()); json.version = version; @@ -45,21 +46,14 @@ try { console.error(`Error reading package.json file from library build output.`); } -const host = 'localhost'; -const port = 4873; -const registry = `http://${host}:${port}`; - -execSync( - `npm config set //${host}:${port}/:_authToken "secretVerdaccioToken"`, - { - encoding: 'utf-8', - stdio: 'inherit', - env: { - ...process.env, - npm_config_registry: registry, - }, +execSync(`npm config set //localhost:4873/:_authToken "secretVerdaccioToken"`, { + encoding: 'utf-8', + stdio: 'inherit', + env: { + ...process.env, + npm_config_registry: registry, }, -); +}); // Execute "npm publish" to publish execSync(`npm publish --access public --tag ${tag} --registry ${registry}`, { diff --git a/packages/verdaccio/src/bin/single-e2e.ts b/packages/verdaccio/src/bin/single-e2e.ts new file mode 100644 index 00000000..aad4acc2 --- /dev/null +++ b/packages/verdaccio/src/bin/single-e2e.ts @@ -0,0 +1,3 @@ +import { e2eSingle } from '../lib/single-e2e'; +const [, , target] = process.argv; +e2eSingle(target); diff --git a/packages/verdaccio/src/bin/start-local-registry.ts b/packages/verdaccio/src/bin/start-local-registry.ts index adb7a4ed..97b2d4a9 100644 --- a/packages/verdaccio/src/bin/start-local-registry.ts +++ b/packages/verdaccio/src/bin/start-local-registry.ts @@ -1,3 +1,7 @@ import { startLocalRegistry } from '../lib/startLocalRegistry'; -startLocalRegistry(); +const registryProcess = startLocalRegistry(); +if (registryProcess) { + console.log('Local registry started on port 4873'); + registryProcess.unref(); +} diff --git a/packages/verdaccio/src/bin/stop-local-registry.ts b/packages/verdaccio/src/bin/stop-local-registry.ts index d07adf1f..8dbb6bc0 100644 --- a/packages/verdaccio/src/bin/stop-local-registry.ts +++ b/packages/verdaccio/src/bin/stop-local-registry.ts @@ -1,3 +1,7 @@ +import { exit } from 'node:process'; import { stopLocalRegistry } from '../lib/stopLocalRegistry'; stopLocalRegistry(null); +if (!process.env['SKIP']) { + exit(0); +} diff --git a/packages/verdaccio/src/config/hostname.ts b/packages/verdaccio/src/config/hostname.ts deleted file mode 100644 index 8f42a0da..00000000 --- a/packages/verdaccio/src/config/hostname.ts +++ /dev/null @@ -1 +0,0 @@ -export const hostname = 'localhost'; diff --git a/packages/verdaccio/src/config/port.ts b/packages/verdaccio/src/config/port.ts deleted file mode 100644 index e8454e78..00000000 --- a/packages/verdaccio/src/config/port.ts +++ /dev/null @@ -1 +0,0 @@ -export const port = 4873; diff --git a/packages/verdaccio/src/config/project.ts b/packages/verdaccio/src/config/project.ts deleted file mode 100644 index a74d980e..00000000 --- a/packages/verdaccio/src/config/project.ts +++ /dev/null @@ -1 +0,0 @@ -export const project = 'verdaccio'; diff --git a/packages/verdaccio/src/config/registry.ts b/packages/verdaccio/src/config/registry.ts deleted file mode 100644 index 48c64787..00000000 --- a/packages/verdaccio/src/config/registry.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { hostname } from './hostname'; -import { port } from './port'; - -export const registry = `http://${hostname}:${port}`; diff --git a/packages/verdaccio/src/config/storage.ts b/packages/verdaccio/src/config/storage.ts deleted file mode 100644 index 39d57ca2..00000000 --- a/packages/verdaccio/src/config/storage.ts +++ /dev/null @@ -1 +0,0 @@ -export const storage = './tmp/local-registry/storage'; diff --git a/packages/verdaccio/src/index.ts b/packages/verdaccio/src/index.ts index d2ad0d5a..7b46d7b4 100644 --- a/packages/verdaccio/src/index.ts +++ b/packages/verdaccio/src/index.ts @@ -1 +1,2 @@ export { e2e } from './lib/e2e'; +export { e2eSingle } from './lib/single-e2e'; diff --git a/packages/verdaccio/src/lib/localRegistryTarget.ts b/packages/verdaccio/src/lib/localRegistryTarget.ts deleted file mode 100644 index 85379c6b..00000000 --- a/packages/verdaccio/src/lib/localRegistryTarget.ts +++ /dev/null @@ -1 +0,0 @@ -export const localRegistryTarget = 'local-registry'; diff --git a/packages/verdaccio/src/lib/setLocalRegistry.ts b/packages/verdaccio/src/lib/setLocalRegistry.ts index 30ad913d..ce0fed74 100644 --- a/packages/verdaccio/src/lib/setLocalRegistry.ts +++ b/packages/verdaccio/src/lib/setLocalRegistry.ts @@ -1,11 +1,8 @@ import { execSync } from 'child_process'; -import { port } from '../config/port'; -import { registry } from '../config/registry'; -import { hostname } from '../config/hostname'; export const setLocalRegistry = () => { - process.env['npm_config_registry'] = registry; - const cmd = `npm config set //${hostname}:${port}/:_authToken "secretVerdaccioToken"`; + process.env['npm_config_registry'] = 'http://localhost:4873'; + const cmd = `npm config set //localhost:4873/:_authToken "secretVerdaccioToken"`; execSync(cmd); - console.log('Set npm config registry to ' + registry); + console.log('Set npm config registry to ' + 'http://localhost:4873'); }; diff --git a/packages/verdaccio/src/lib/single-e2e.ts b/packages/verdaccio/src/lib/single-e2e.ts new file mode 100644 index 00000000..1aee8c7f --- /dev/null +++ b/packages/verdaccio/src/lib/single-e2e.ts @@ -0,0 +1,24 @@ +import { execSync } from 'node:child_process'; +import { exit } from 'node:process'; +import { startLocalRegistry } from './startLocalRegistry'; +import { stopLocalRegistry } from './stopLocalRegistry'; + +export const e2eSingle = (target: string) => { + const registryProcess = startLocalRegistry(); + const head = process.env['NX_HEAD'] + ? `--head=${process.env['NX_HEAD']}` + : ''; + const base = process.env['NX_BASE'] + ? `--base=${process.env['NX_BASE']}` + : ''; + const cmd = `nx run-e2e ${target} --nx-bail --output-style=stream --configuration=ci ${base} ${head}`; + execSync(cmd, { + stdio: 'inherit', + env: { + ...process.env, + SKIP: 'true', + }, + }); + stopLocalRegistry(registryProcess); + exit(0); +}; diff --git a/packages/verdaccio/src/lib/startLocalRegistry.ts b/packages/verdaccio/src/lib/startLocalRegistry.ts index 8ee0b05c..18f70937 100644 --- a/packages/verdaccio/src/lib/startLocalRegistry.ts +++ b/packages/verdaccio/src/lib/startLocalRegistry.ts @@ -1,7 +1,4 @@ import { ChildProcess, spawn } from 'child_process'; -import { localRegistryTarget } from './localRegistryTarget'; -import { port } from '../config/port'; -import { project } from '../config/project'; import { setLocalRegistry } from './setLocalRegistry'; export const startLocalRegistry = (): ChildProcess | null => { @@ -9,15 +6,13 @@ export const startLocalRegistry = (): ChildProcess | null => { console.log('Skipping start'); return null; } - const childProcess = spawn('nx', [localRegistryTarget, project], { - stdio: 'inherit', + setLocalRegistry(); + const childProcess = spawn('nx', ['local-registry', 'verdaccio'], { + stdio: 'pipe', detached: true, env: { ...process.env, }, }); - childProcess.unref(); - console.log('Local registry started on port ' + port); - setLocalRegistry(); return childProcess; }; diff --git a/packages/verdaccio/src/lib/stopLocalRegistry.ts b/packages/verdaccio/src/lib/stopLocalRegistry.ts index b7187315..7bafe7c0 100644 --- a/packages/verdaccio/src/lib/stopLocalRegistry.ts +++ b/packages/verdaccio/src/lib/stopLocalRegistry.ts @@ -1,5 +1,4 @@ import { ChildProcess, execSync } from 'child_process'; -import { port } from '../config/port'; import { unsetLocalRegistry } from './unsetLocalRegistry'; export const stopLocalRegistry = (childProcess: ChildProcess | null) => { @@ -12,7 +11,7 @@ export const stopLocalRegistry = (childProcess: ChildProcess | null) => { childProcess.kill(); return; } - execSync(`npx kill-port ${port}`, { + execSync(`npx kill-port 4873`, { env: { ...process.env, npm_config_registry: 'https://registry.npmjs.org', diff --git a/packages/verdaccio/src/lib/unsetLocalRegistry.ts b/packages/verdaccio/src/lib/unsetLocalRegistry.ts index 41c85f70..9963e141 100644 --- a/packages/verdaccio/src/lib/unsetLocalRegistry.ts +++ b/packages/verdaccio/src/lib/unsetLocalRegistry.ts @@ -1,7 +1,5 @@ import { execSync } from 'child_process'; -import { port } from '../config/port'; -import { hostname } from '../config/hostname'; export const unsetLocalRegistry = () => { - execSync(`npm config delete //${hostname}:${port}/:_authToken`); + execSync(`npm config delete //localhost:4873/:_authToken`); }; diff --git a/plugins/create-nx-cmake/bin/index.ts b/plugins/create-nx-cmake/bin/index.ts index d2a4e5c2..b46fcc72 100644 --- a/plugins/create-nx-cmake/bin/index.ts +++ b/plugins/create-nx-cmake/bin/index.ts @@ -10,13 +10,11 @@ async function main() { console.log(`Creating the workspace: ${name}`); - // This assumes "nx-cmake" and "create-nx-cmake" are at the same version - const { version } = await import('../package.json'); - // TODO: update below to customize the workspace - const { directory } = await createWorkspace(`nx-cmake@${version}`, { + const { directory } = await createWorkspace(`nx-cmake`, { name, nxCloud: 'skip', + interactive: false, packageManager: 'npm', }); diff --git a/plugins/create-nx-cmake/package.json b/plugins/create-nx-cmake/package.json index 66191f09..e215fa80 100644 --- a/plugins/create-nx-cmake/package.json +++ b/plugins/create-nx-cmake/package.json @@ -1,13 +1,14 @@ { "name": "create-nx-cmake", "version": "0.6.0", + "bin": { + "create-nx-cmake": "./bin/index.js" + }, + "typings": "./bin/index.d.ts", "dependencies": { "create-nx-workspace": "18.0.8", "tslib": "^2.6.2" }, - "type": "commonjs", - "main": "./src/index.js", - "typings": "./src/index.d.ts", "author": { "email": "me@clemenshorn.com", "name": "Clemens Horn", @@ -31,8 +32,5 @@ "bugs": { "url": "https://github.com/clemenscodes/nx-plugins/issues/new", "email": "me@clemenshorn.com" - }, - "bin": { - "create-nx-cmake": "./bin/index.js" } } diff --git a/plugins/nx-cmake/package.json b/plugins/nx-cmake/package.json index 266fdaaf..5357c922 100644 --- a/plugins/nx-cmake/package.json +++ b/plugins/nx-cmake/package.json @@ -3,7 +3,6 @@ "description": "An Nx plugin to add CMake, C and C++ support for Nx workspaces", "version": "0.6.0", "license": "MIT", - "type": "commonjs", "main": "./src/index.js", "typings": "./src/index.d.ts", "generators": "./generators.json", diff --git a/plugins/nx-cmake/project.json b/plugins/nx-cmake/project.json index 2173a045..c55b37a2 100644 --- a/plugins/nx-cmake/project.json +++ b/plugins/nx-cmake/project.json @@ -77,5 +77,6 @@ "command": "nx upload verdaccio --name={projectName} --ver=1.0.0 --tag=e2e" } }, + "implicitDependencies": ["verdaccio"], "tags": [] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 42766d4d..5a367613 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,9 @@ importers: '@typescript-eslint/parser': specifier: 7.1.1 version: 7.1.1(eslint@8.57.0)(typescript@5.4.2) + '@verdaccio/types': + specifier: ^10.8.0 + version: 10.8.0 commitizen: specifier: ^4.3.0 version: 4.3.0(@types/node@20.11.25)(typescript@5.4.2) @@ -3440,6 +3443,10 @@ packages: - supports-color dev: true + /@verdaccio/types@10.8.0: + resolution: {integrity: sha512-FuJyCRFPdy+gqCi0v29dE1xKn99Ztq6fuY9fb7ezeP1SRbUL/hgDaNkpjYvSIMCyb+dLFKOFBeZPyIUBLOSdlA==} + dev: true + /@verdaccio/ui-theme@7.0.0-next-7.10: resolution: {integrity: sha512-I1War/XBg3WzzAojXDtEDjZw/1qPKW0d8EIsJD3h6Xi5Atzvz/xBTbHjgbwApjmISyDWQ8Vevp8zOtGO33zLSw==} dev: true