Skip to content

Commit e1c93b2

Browse files
alan-agius4clydin
authored andcommitted
test: remove reliance on built tarballs in E2E tests
Remove reliance on tarballs during E2E. Instead we always download the package from the private NPM server. (cherry picked from commit 8112d7b)
1 parent 17feb7a commit e1c93b2

File tree

6 files changed

+32
-30
lines changed

6 files changed

+32
-30
lines changed

tests/legacy-cli/e2e/tests/misc/cli-exit-interop.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { createProjectFromAsset } from '../../utils/assets';
22
import { moveFile, replaceInFile } from '../../utils/fs';
3-
import { setRegistry } from '../../utils/packages';
43
import { noSilentNg } from '../../utils/process';
54
import { useCIChrome, useCIDefaults } from '../../utils/project';
65
import { expectToFail } from '../../utils/utils';
@@ -12,11 +11,12 @@ import { expectToFail } from '../../utils/utils';
1211
*/
1312

1413
export default async function () {
14+
let restoreRegistry: (() => Promise<void>) | undefined;
15+
1516
try {
1617
// We need to use the public registry because in the local NPM server we don't have
1718
// older versions @angular/cli packages which would cause `npm install` during `ng update` to fail.
18-
await setRegistry(false);
19-
await createProjectFromAsset('13.0-project', true);
19+
restoreRegistry = await createProjectFromAsset('13.0-project', true);
2020

2121
// A missing stylesheet error will trigger the stuck process issue with v13 when building
2222
await moveFile('src/styles.css', 'src/styles.scss');
@@ -30,6 +30,6 @@ export default async function () {
3030
await useCIDefaults('thirteen-project');
3131
await noSilentNg('test', '--watch=false');
3232
} finally {
33-
await setRegistry(true);
33+
await restoreRegistry?.();
3434
}
3535
}

tests/legacy-cli/e2e/tests/packages/webpack/test-app.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import { execWithEnv } from '../../../utils/process';
55

66
export default async function () {
77
const webpackCLIBin = normalize('node_modules/.bin/webpack-cli');
8-
9-
await createProjectFromAsset('webpack/test-app');
8+
const restoreRegistry = await createProjectFromAsset('webpack/test-app');
109

1110
// DISABLE_V8_COMPILE_CACHE=1 is required to disable the `v8-compile-cache` package.
1211
// It currently does not support dynamic import expressions which are now required by the
@@ -30,4 +29,5 @@ export default async function () {
3029
'DISABLE_V8_COMPILE_CACHE': '1',
3130
});
3231
await expectFileToMatch('dist/app.main.js', 'AppModule');
32+
await restoreRegistry();
3333
}

tests/legacy-cli/e2e/tests/update/update-multiple-versions.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import { createProjectFromAsset } from '../../utils/assets';
2-
import { installWorkspacePackages, setRegistry } from '../../utils/packages';
2+
import { setRegistry } from '../../utils/packages';
33
import { ng } from '../../utils/process';
44
import { isPrereleaseCli } from '../../utils/project';
55
import { expectToFail } from '../../utils/utils';
66

77
export default async function () {
8+
let restoreRegistry: (() => Promise<void>) | undefined;
89
try {
9-
await createProjectFromAsset('12.0-project', true, true);
10-
await setRegistry(false);
11-
await installWorkspacePackages();
10+
restoreRegistry = await createProjectFromAsset('12.0-project', true);
1211
await setRegistry(true);
1312

1413
const extraArgs = ['--force'];
@@ -38,6 +37,6 @@ export default async function () {
3837
);
3938
}
4039
} finally {
41-
await setRegistry(true);
40+
await restoreRegistry?.();
4241
}
4342
}

tests/legacy-cli/e2e/tests/update/update.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@ import { appendFile } from 'fs/promises';
22
import { SemVer } from 'semver';
33
import { createProjectFromAsset } from '../../utils/assets';
44
import { expectFileMatchToExist, readFile } from '../../utils/fs';
5-
import { getActivePackageManager, setRegistry } from '../../utils/packages';
5+
import { getActivePackageManager } from '../../utils/packages';
66
import { ng, noSilentNg } from '../../utils/process';
77
import { isPrereleaseCli, useCIChrome, useCIDefaults, NgCLIVersion } from '../../utils/project';
88

99
export default async function () {
10+
let restoreRegistry: (() => Promise<void>) | undefined;
11+
1012
try {
1113
// We need to use the public registry because in the local NPM server we don't have
1214
// older versions @angular/cli packages which would cause `npm install` during `ng update` to fail.
13-
await setRegistry(false);
14-
await createProjectFromAsset('12.0-project', true);
15+
restoreRegistry = await createProjectFromAsset('12.0-project', true);
1516

1617
// If using npm, enable legacy peer deps mode to avoid defects in npm 7+'s peer dependency resolution
1718
// Example error where 11.2.14 satisfies the SemVer range ^11.0.0 but still fails:
@@ -49,7 +50,7 @@ export default async function () {
4950
}
5051
}
5152
} finally {
52-
await setRegistry(true);
53+
await restoreRegistry?.();
5354
}
5455

5556
// Update Angular current build

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

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import { join } from 'path';
22
import { chmod } from 'fs/promises';
33
import glob from 'glob';
44
import { getGlobalVariable } from './env';
5-
import { relative, resolve } from 'path';
6-
import { copyFile, writeFile } from './fs';
7-
import { installWorkspacePackages } from './packages';
8-
import { useBuiltPackages } from './project';
5+
import { resolve } from 'path';
6+
import { copyFile } from './fs';
7+
import { installWorkspacePackages, setRegistry } from './packages';
8+
import { useBuiltPackagesVersions } from './project';
99

1010
export function assetDir(assetName: string) {
1111
return join(__dirname, '../assets', assetName);
@@ -42,24 +42,26 @@ export function copyAssets(assetName: string, to?: string) {
4242
.then(() => tempRoot);
4343
}
4444

45+
/**
46+
* @returns a method that once called will restore the environment
47+
* to use the local NPM registry.
48+
* */
4549
export async function createProjectFromAsset(
4650
assetName: string,
4751
useNpmPackages = false,
4852
skipInstall = false,
49-
) {
53+
): Promise<() => Promise<void>> {
5054
const dir = await copyAssets(assetName);
5155
process.chdir(dir);
56+
57+
await setRegistry(!useNpmPackages /** useTestRegistry */);
58+
5259
if (!useNpmPackages) {
53-
await useBuiltPackages();
54-
if (!getGlobalVariable('ci')) {
55-
const testRegistry = getGlobalVariable('package-registry');
56-
await writeFile('.npmrc', `registry=${testRegistry}`);
57-
}
60+
await useBuiltPackagesVersions();
5861
}
59-
6062
if (!skipInstall) {
6163
await installWorkspacePackages();
6264
}
6365

64-
return dir;
66+
return () => setRegistry(true /** useTestRegistry */);
6567
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,16 @@ export async function prepareProjectForE2e(name: string) {
9494
await gitCommit('prepare-project-for-e2e');
9595
}
9696

97-
export function useBuiltPackages(): Promise<void> {
97+
export function useBuiltPackagesVersions(): Promise<void> {
9898
return updateJsonFile('package.json', (json) => {
9999
json['dependencies'] ??= {};
100100
json['devDependencies'] ??= {};
101101

102102
for (const packageName of Object.keys(packages)) {
103103
if (packageName in json['dependencies']) {
104-
json['dependencies'][packageName] = packages[packageName].tar;
104+
json['dependencies'][packageName] = packages[packageName].version;
105105
} else if (packageName in json['devDependencies']) {
106-
json['devDependencies'][packageName] = packages[packageName].tar;
106+
json['devDependencies'][packageName] = packages[packageName].version;
107107
}
108108
}
109109
});

0 commit comments

Comments
 (0)