From d6f9ed00230e17e60b57fc9886eb98f3480703c2 Mon Sep 17 00:00:00 2001 From: Florian PAUL Date: Wed, 24 Apr 2024 16:22:49 +0200 Subject: [PATCH] test: use timestamp in the version used for verdaccio --- .github/workflows/it-tests.yml | 7 ---- package.json | 2 +- packages/@ama-sdk/create/src/index.it.spec.ts | 4 +-- packages/@o3r/create/src/index.it.spec.ts | 6 ++-- .../@o3r/test-helpers/src/prepare-test-env.ts | 33 +++++++------------ .../create-test-environment-otter-project.ts | 2 +- 6 files changed, 19 insertions(+), 35 deletions(-) diff --git a/.github/workflows/it-tests.yml b/.github/workflows/it-tests.yml index fd8677824b..b2c4e9df09 100644 --- a/.github/workflows/it-tests.yml +++ b/.github/workflows/it-tests.yml @@ -84,13 +84,6 @@ jobs: !.cache/test-app/cache/@ama-terasu* !.cache/test-app/cache/@o3r* key: ${{ runner.os }}-test-app-${{ matrix.packageManager }}-${{ env.currentMonth }} - - name: Make sure that internal packages are not cached for whatever reason - yarn - run: npx --yes rimraf -g ".cache/test-app/cache/@{o3r,ama-sdk,ama-terasu}-*" - - name: Make sure that internal packages are not cached for whatever reason - npm - run: | - npm cache --cache=.cache/test-app/npm-cache ls | grep 127.0.0.1:4873 | xargs -d'\n' -r -n 1 npm cache --cache=.cache/test-app/npm-cache clean || true - npx --yes -p replace-in-files-cli replace-in-files --regex=".*127.0.0.1:4873.*" --replacement="" ".cache/test-app/npm-cache/_cacache/index-v5/**/*" - shell: bash - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 name: Download verdaccio storage prepared in the previous job with: diff --git a/package.json b/package.json index a6998e7181..bbf73c94c5 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "verdaccio:start-persistent": "docker run -d -it --rm --name verdaccio -p 4873:4873 -v \"$(yarn get:current-dir)/.verdaccio/conf\":/verdaccio/conf -v \"$(yarn get:current-dir)/.verdaccio/storage\":/verdaccio/storage:z verdaccio/verdaccio", "verdaccio:clean": "rimraf -g \".verdaccio/storage/@{o3r,ama-sdk,ama-terasu}\"", "verdaccio:login": "yarn cpy --cwd=./.verdaccio/conf .npmrc . --rename=.npmrc-logged && npx --yes npm-cli-login -u verdaccio -p verdaccio -e test@test.com -r http://127.0.0.1:4873 --config-path \".verdaccio/conf/.npmrc-logged\"", - "verdaccio:publish": "yarn verdaccio:clean && yarn set:version 999.0.0 --include \"!**/!(dist)/package.json\" --include !package.json && yarn verdaccio:login && yarn run publish --userconfig \".verdaccio/conf/.npmrc-logged\" --tag=latest --@o3r:registry=http://127.0.0.1:4873 --@ama-sdk:registry=http://127.0.0.1:4873 --@ama-terasu:registry=http://127.0.0.1:4873", + "verdaccio:publish": "yarn verdaccio:clean && yarn set:version 999.0.$(node -e 'process.stdout.write(String(Date.now()))') --include \"!**/!(dist)/package.json\" --include !package.json && yarn verdaccio:login && yarn run publish --userconfig \".verdaccio/conf/.npmrc-logged\" --tag=latest --@o3r:registry=http://127.0.0.1:4873 --@ama-sdk:registry=http://127.0.0.1:4873 --@ama-terasu:registry=http://127.0.0.1:4873", "verdaccio:stop": "docker container stop $(docker ps -a -q --filter=\"name=verdaccio\")", "verdaccio:all": "yarn verdaccio:stop && yarn verdaccio:start && yarn verdaccio:publish", "watch:vscode-extension": "yarn nx run vscode-extension:compile:watch", diff --git a/packages/@ama-sdk/create/src/index.it.spec.ts b/packages/@ama-sdk/create/src/index.it.spec.ts index ddde67547a..eee4006b32 100644 --- a/packages/@ama-sdk/create/src/index.it.spec.ts +++ b/packages/@ama-sdk/create/src/index.it.spec.ts @@ -114,7 +114,7 @@ describe('Create new sdk command', () => { test('should use pinned versions when --exact-o3r-version is used', () => { expect(() => packageManagerCreate({ - script: `@ama-sdk@${o3rEnvironment.testEnvironment.o3rVersion}`, + script: `@ama-sdk@${o3rEnvironment.testEnvironment.o3rExactVersion}`, args: ['typescript', sdkPackageName, '--exact-o3r-version', '--package-manager', packageManager, '--spec-path', path.join(sdkFolderPath, 'swagger-spec.yml')] }, execAppOptions) ).not.toThrow(); @@ -125,7 +125,7 @@ describe('Create new sdk command', () => { [ ...Object.entries(packageJson.dependencies), ...Object.entries(packageJson.devDependencies), ...Object.entries(resolutions) ].filter(([dep]) => dep.startsWith('@o3r/') || dep.startsWith('@ama-sdk/')).forEach(([,version]) => { - expect(version).toBe(o3rEnvironment.testEnvironment.o3rVersion); + expect(version).toBe(o3rEnvironment.testEnvironment.o3rExactVersion); }); }); }); diff --git a/packages/@o3r/create/src/index.it.spec.ts b/packages/@o3r/create/src/index.it.spec.ts index bde9e52255..cbb7ab5b2a 100644 --- a/packages/@o3r/create/src/index.it.spec.ts +++ b/packages/@o3r/create/src/index.it.spec.ts @@ -45,7 +45,7 @@ describe('Create new otter project command', () => { }); test('should generate a project with an application with --exact-o3r-version', async () => { - const { workspacePath, packageManagerConfig, o3rVersion } = o3rEnvironment.testEnvironment; + const { workspacePath, packageManagerConfig, o3rExactVersion } = o3rEnvironment.testEnvironment; const inAppPath = path.join(workspacePath, workspaceProjectName); const execWorkspaceOptions = {...defaultExecOptions, cwd: workspacePath }; const execInAppOptions = {...defaultExecOptions, cwd: inAppPath }; @@ -57,7 +57,7 @@ describe('Create new otter project command', () => { await fs.mkdir(inAppPath, { recursive: true }); setPackagerManagerConfig(packageManagerConfig, execInAppOptions); - expect(() => packageManagerCreate({ script: `@o3r@${o3rVersion}`, args: [workspaceProjectName, ...createOptions] }, execWorkspaceOptions, 'npm')).not.toThrow(); + expect(() => packageManagerCreate({ script: `@o3r@${o3rExactVersion}`, args: [workspaceProjectName, ...createOptions] }, execWorkspaceOptions, 'npm')).not.toThrow(); expect(existsSync(path.join(inAppPath, 'angular.json'))).toBe(true); expect(existsSync(path.join(inAppPath, 'package.json'))).toBe(true); expect(() => packageManagerInstall(execInAppOptions)).not.toThrow(); @@ -75,7 +75,7 @@ describe('Create new otter project command', () => { ...Object.entries(rootPackageJson.dependencies), ...Object.entries(rootPackageJson.devDependencies), ...Object.entries(resolutions), ...Object.entries(appPackageJson.dependencies), ...Object.entries(appPackageJson.devDependencies) ].filter(([dep]) => dep.startsWith('@o3r/') || dep.startsWith('@ama-sdk/')).forEach(([,version]) => { - expect(version).toBe(o3rVersion); + expect(version).toBe(o3rExactVersion); }); }); }); diff --git a/packages/@o3r/test-helpers/src/prepare-test-env.ts b/packages/@o3r/test-helpers/src/prepare-test-env.ts index afeb31a167..3ae36af772 100644 --- a/packages/@o3r/test-helpers/src/prepare-test-env.ts +++ b/packages/@o3r/test-helpers/src/prepare-test-env.ts @@ -1,5 +1,5 @@ -import { execSync, ExecSyncOptions } from 'node:child_process'; -import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync } from 'node:fs'; +import { execFileSync, ExecSyncOptions } from 'node:child_process'; +import { cpSync, existsSync, mkdirSync, readFileSync, rmSync } from 'node:fs'; import * as path from 'node:path'; import type { PackageJson } from 'type-fest'; import { createTestEnvironmentBlank } from './test-environments/create-test-environment-blank'; @@ -46,8 +46,7 @@ export async function prepareTestEnv(folderName: string, options?: PrepareTestEn const itTestsFolderPath = path.resolve(rootFolderPath, '..', 'it-tests'); const workspacePath = path.resolve(itTestsFolderPath, folderName); const globalFolderPath = path.resolve(rootFolderPath, '.cache', 'test-app'); - const cacheFolderPath = path.resolve(globalFolderPath, 'cache'); - const o3rVersion = '999.0.0'; + const o3rVersion = '~999'; JSON.parse(readFileSync(path.join(rootFolderPath, 'packages', '@o3r', 'core', 'package.json')).toString()); const yarnVersion: string = yarnVersionParam || getYarnVersionFromRoot(rootFolderPath); @@ -58,22 +57,6 @@ export async function prepareTestEnv(folderName: string, options?: PrepareTestEn env: {...process.env, NODE_OPTIONS: '', CI: 'true'} }; - // Remove all cache entries relative to local workspaces (@o3r, @ama-sdk, @ama-terasu) - if (!!process.env.CI && existsSync(cacheFolderPath)) { - const workspacesList = execSync('yarn workspaces:list', { stdio: 'pipe' }).toString().split(path.delimiter) - .map((workspace) => workspace.replace('packages/', '').replace(/\//, '-')) - .filter((workspace) => !!workspace); - readdirSync(cacheFolderPath).forEach((fileName) => { - if (workspacesList.some((workspace) => fileName.startsWith(workspace))) { - const cacheFile = path.join(cacheFolderPath, fileName); - // Not ideal solution but the tests are running in parallel, so we cannot always clean the cache - if (Date.now() - statSync(cacheFile).birthtime.getTime() > (60 * 60 * 1000)) { - rmSync(cacheFile); - } - } - }); - } - const packageManagerConfig = { yarnVersion, globalFolderPath, @@ -89,6 +72,13 @@ export async function prepareTestEnv(folderName: string, options?: PrepareTestEn return Promise.resolve(); }, {lockFilePath: `${itTestsFolderPath}.lock`, cwd: path.join(rootFolderPath, '..'), appDirectory: 'it-tests'}); } + const o3rExactVersion = execFileSync('npm', ['info', '@o3r/create', 'version'], { + ...execAppOptions, + cwd: itTestsFolderPath, + stdio: 'pipe', + encoding: 'utf8', + shell: true + }).replace(/\s/g, ''); // Remove existing app if (existsSync(workspacePath)) { @@ -158,6 +148,7 @@ export async function prepareTestEnv(folderName: string, options?: PrepareTestEn untouchedProject, untouchedProjectPath, packageManagerConfig, - o3rVersion + o3rVersion, + o3rExactVersion }; } diff --git a/packages/@o3r/test-helpers/src/test-environments/create-test-environment-otter-project.ts b/packages/@o3r/test-helpers/src/test-environments/create-test-environment-otter-project.ts index 47fe03b3f0..2173c400d8 100644 --- a/packages/@o3r/test-helpers/src/test-environments/create-test-environment-otter-project.ts +++ b/packages/@o3r/test-helpers/src/test-environments/create-test-environment-otter-project.ts @@ -34,7 +34,7 @@ export interface CreateTestEnvironmentOtterProjectWithAppOptions extends CreateW logger?: Logger; } -const o3rVersion = '999.0.0'; +const o3rVersion = '~999'; /** * Generate a base angular app with minimal necessary dependencies