@aws-cdk-testing/cli-integ 3.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/aws.js +2 -2
- package/lib/aws.ts +1 -1
- package/lib/integ-test.js +37 -6
- package/lib/integ-test.ts +42 -5
- package/lib/shell.d.ts +5 -2
- package/lib/shell.js +16 -8
- package/lib/shell.ts +16 -9
- package/lib/with-cdk-app.js +7 -2
- package/lib/with-cdk-app.ts +6 -1
- package/lib/with-sam.js +26 -21
- package/lib/with-sam.ts +23 -21
- package/package.json +4 -4
- package/resources/cdk-apps/app/app.js +3 -3
- package/resources/cdk-apps/rollback-test-app/app.js +1 -1
- package/resources/cdk-apps/sam_cdk_integ_app/lib/test-stack.js +3 -1
- package/resources/cli-regression-patches/v1.130.0/bootstrapping.integtest.js +1 -1
- package/tests/init-go/init-go.integtest.js +7 -2
- package/tests/init-go/init-go.integtest.ts +6 -1
- package/tests/init-typescript-app/init-typescript-app.integtest.js +3 -3
- package/tests/init-typescript-app/init-typescript-app.integtest.ts +4 -3
- package/bin/query-github.ts +0 -56
- package/bin/run-suite.ts +0 -140
- package/bin/stage-distribution.ts +0 -267
- package/bin/test-root.ts +0 -3
package/lib/with-sam.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as child_process from 'child_process';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
2
|
import * as os from 'os';
|
|
4
3
|
import * as path from 'path';
|
|
5
4
|
import axios from 'axios';
|
|
@@ -139,6 +138,7 @@ export class SamIntegrationTestFixture extends TestFixture {
|
|
|
139
138
|
args.push('--port');
|
|
140
139
|
args.push(port.toString());
|
|
141
140
|
|
|
141
|
+
// "Press Ctrl+C to quit" looks to be printed by a Flask server built into SAM CLI.
|
|
142
142
|
return this.samShell(['sam', 'local', 'start-api', ...args], 'Press CTRL+C to quit', ()=>{
|
|
143
143
|
return new Promise<ActionOutput>((resolve, reject) => {
|
|
144
144
|
axios.get(`http://127.0.0.1:${port}${apiPath}`).then( resp => {
|
|
@@ -157,7 +157,10 @@ export class SamIntegrationTestFixture extends TestFixture {
|
|
|
157
157
|
// If the tests completed successfully, happily delete the fixture
|
|
158
158
|
// (otherwise leave it for humans to inspect)
|
|
159
159
|
if (success) {
|
|
160
|
-
rimraf(this.integTestDir);
|
|
160
|
+
const cleaned = rimraf(this.integTestDir);
|
|
161
|
+
if (!cleaned) {
|
|
162
|
+
console.error(`Failed to clean up ${this.integTestDir} due to permissions issues (Docker running as root?)`);
|
|
163
|
+
}
|
|
161
164
|
}
|
|
162
165
|
}
|
|
163
166
|
}
|
|
@@ -207,23 +210,24 @@ export async function shellWithAction(
|
|
|
207
210
|
let actionOutput: any;
|
|
208
211
|
let actionExecuted = false;
|
|
209
212
|
|
|
210
|
-
function
|
|
213
|
+
async function maybeExecuteAction(chunk: any) {
|
|
211
214
|
out.push(Buffer.from(chunk));
|
|
212
215
|
if (!actionExecuted && typeof filter === 'string' && Buffer.concat(out).toString('utf-8').includes(filter) && typeof action === 'function') {
|
|
213
216
|
actionExecuted = true;
|
|
214
|
-
writeToOutputs('before executing action');
|
|
215
|
-
|
|
216
|
-
|
|
217
|
+
writeToOutputs('before executing action\n');
|
|
218
|
+
try {
|
|
219
|
+
const output = await action();
|
|
220
|
+
writeToOutputs(`action output is ${JSON.stringify(output)}\n`);
|
|
217
221
|
actionOutput = output;
|
|
218
222
|
actionSucceeded = true;
|
|
219
|
-
}
|
|
220
|
-
writeToOutputs(`action error is ${error}`);
|
|
223
|
+
} catch (error: any) {
|
|
224
|
+
writeToOutputs(`action error is ${error}\n`);
|
|
221
225
|
actionSucceeded = false;
|
|
222
226
|
actionOutput = error;
|
|
223
|
-
}
|
|
224
|
-
writeToOutputs('terminate sam sub process');
|
|
227
|
+
} finally {
|
|
228
|
+
writeToOutputs('terminate sam sub process\n');
|
|
225
229
|
killSubProcess(child, command.join(' '));
|
|
226
|
-
}
|
|
230
|
+
}
|
|
227
231
|
}
|
|
228
232
|
}
|
|
229
233
|
|
|
@@ -234,6 +238,7 @@ export async function shellWithAction(
|
|
|
234
238
|
() => {
|
|
235
239
|
if (!actionExecuted) {
|
|
236
240
|
reject(new Error(`Timed out waiting for filter ${JSON.stringify(filter)} to appear in command output after ${actionTimeoutSeconds} seconds\nOutput so far:\n${Buffer.concat(out).toString('utf-8')}`));
|
|
241
|
+
killSubProcess(child, command.join(' '));
|
|
237
242
|
}
|
|
238
243
|
}, actionTimeoutSeconds * 1_000,
|
|
239
244
|
).unref();
|
|
@@ -242,7 +247,7 @@ export async function shellWithAction(
|
|
|
242
247
|
child.stdout!.on('data', chunk => {
|
|
243
248
|
writeToOutputs(chunk);
|
|
244
249
|
stdout.push(chunk);
|
|
245
|
-
|
|
250
|
+
void maybeExecuteAction(chunk);
|
|
246
251
|
});
|
|
247
252
|
|
|
248
253
|
child.stderr!.on('data', chunk => {
|
|
@@ -250,12 +255,14 @@ export async function shellWithAction(
|
|
|
250
255
|
if (options.captureStderr ?? true) {
|
|
251
256
|
stderr.push(chunk);
|
|
252
257
|
}
|
|
253
|
-
|
|
258
|
+
void maybeExecuteAction(chunk);
|
|
254
259
|
});
|
|
255
260
|
|
|
256
261
|
child.once('error', reject);
|
|
257
262
|
|
|
258
|
-
|
|
263
|
+
// Wait for 'exit' instead of close, don't care about reading the streams all the way to the end
|
|
264
|
+
child.once('exit', (code, signal) => {
|
|
265
|
+
writeToOutputs(`Subprocess has exited with code ${code}, signal ${signal}\n`);
|
|
259
266
|
const output = (Buffer.concat(stdout).toString('utf-8') + Buffer.concat(stderr).toString('utf-8')).trim();
|
|
260
267
|
if (code == null || code === 0 || options.allowErrExit) {
|
|
261
268
|
let result = new Array<string>();
|
|
@@ -270,7 +277,6 @@ export async function shellWithAction(
|
|
|
270
277
|
reject(new Error(`'${command.join(' ')}' exited with error code ${code}. Output: \n${output}`));
|
|
271
278
|
}
|
|
272
279
|
});
|
|
273
|
-
|
|
274
280
|
});
|
|
275
281
|
}
|
|
276
282
|
|
|
@@ -279,10 +285,6 @@ function killSubProcess(child: child_process.ChildProcess, command: string) {
|
|
|
279
285
|
* Check if the sub process is running in container, so child_process.spawn will
|
|
280
286
|
* create multiple processes, and to kill all of them we need to run different logic
|
|
281
287
|
*/
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
} else {
|
|
285
|
-
child.kill('SIGINT');
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
+
child.kill('SIGINT');
|
|
289
|
+
child_process.exec(`for pid in $(ps -ef | grep "${command}" | awk '{print $2}'); do kill -2 $pid; done`);
|
|
288
290
|
}
|
package/package.json
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@cdklabs/eslint-plugin": "^1.3.0",
|
|
41
|
-
"@stylistic/eslint-plugin": "^2.
|
|
41
|
+
"@stylistic/eslint-plugin": "^2.13.0",
|
|
42
42
|
"@types/fs-extra": "^9",
|
|
43
43
|
"@types/glob": "^7",
|
|
44
44
|
"@types/jest": "^29.5.14",
|
|
@@ -56,9 +56,9 @@
|
|
|
56
56
|
"eslint-plugin-jest": "^28.10.0",
|
|
57
57
|
"eslint-plugin-prettier": "^5.2.1",
|
|
58
58
|
"jest": "^29.7.0",
|
|
59
|
-
"jest-junit": "^
|
|
59
|
+
"jest-junit": "^16",
|
|
60
60
|
"prettier": "^2.8",
|
|
61
|
-
"projen": "^0.91.
|
|
61
|
+
"projen": "^0.91.6",
|
|
62
62
|
"ts-jest": "^29.2.5",
|
|
63
63
|
"typescript": "5.6"
|
|
64
64
|
},
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"publishConfig": {
|
|
108
108
|
"access": "public"
|
|
109
109
|
},
|
|
110
|
-
"version": "3.0
|
|
110
|
+
"version": "3.1.0",
|
|
111
111
|
"types": "lib/index.d.ts",
|
|
112
112
|
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
|
|
113
113
|
}
|
|
@@ -748,7 +748,7 @@ class NotificationArnsStack extends cdk.Stack {
|
|
|
748
748
|
const arnsFromEnv = process.env.INTEG_NOTIFICATION_ARNS;
|
|
749
749
|
super(parent, id, {
|
|
750
750
|
...props,
|
|
751
|
-
// comma separated list of arns.
|
|
751
|
+
// comma separated list of arns.
|
|
752
752
|
// empty string means empty list.
|
|
753
753
|
// undefined means undefined
|
|
754
754
|
notificationArns: arnsFromEnv == '' ? [] : (arnsFromEnv ? arnsFromEnv.split(',') : undefined)
|
|
@@ -793,12 +793,12 @@ class MetadataStack extends cdk.Stack {
|
|
|
793
793
|
const handle = new cdk.CfnWaitConditionHandle(this, 'WaitConditionHandle');
|
|
794
794
|
handle.addMetadata('Key', process.env.INTEG_METADATA_VALUE ?? 'default')
|
|
795
795
|
|
|
796
|
-
}
|
|
796
|
+
}
|
|
797
797
|
}
|
|
798
798
|
|
|
799
799
|
const app = new cdk.App({
|
|
800
800
|
context: {
|
|
801
|
-
'@aws-cdk/core:assetHashSalt': process.env.CODEBUILD_BUILD_ID, // Force all assets to be unique, but consistent in one build
|
|
801
|
+
'@aws-cdk/core:assetHashSalt': process.env.CODEBUILD_BUILD_ID ?? process.env.GITHUB_RUN_ID, // Force all assets to be unique, but consistent in one build
|
|
802
802
|
},
|
|
803
803
|
});
|
|
804
804
|
|
|
@@ -91,7 +91,7 @@ class RollbacktestStack extends cdk.Stack {
|
|
|
91
91
|
|
|
92
92
|
const app = new cdk.App({
|
|
93
93
|
context: {
|
|
94
|
-
'@aws-cdk/core:assetHashSalt': process.env.CODEBUILD_BUILD_ID, // Force all assets to be unique, but consistent in one build
|
|
94
|
+
'@aws-cdk/core:assetHashSalt': process.env.CODEBUILD_BUILD_ID ?? process.env.GITHUB_RUN_ID, // Force all assets to be unique, but consistent in one build
|
|
95
95
|
},
|
|
96
96
|
});
|
|
97
97
|
|
|
@@ -21,6 +21,8 @@ if (process.env.PACKAGE_LAYOUT_VERSION === '1') {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
const isRunningOnCodeBuild = !!process.env.CODEBUILD_BUILD_ID;
|
|
24
|
+
const isRunningOnGitHubActions = !!process.env.GITHUB_RUN_ID;
|
|
25
|
+
const isRunningOnCi = isRunningOnCodeBuild || isRunningOnGitHubActions;
|
|
24
26
|
|
|
25
27
|
class CDKSupportDemoRootStack extends Stack{
|
|
26
28
|
constructor(scope, id, props) {
|
|
@@ -102,7 +104,7 @@ class CDKSupportDemoRootStack extends Stack{
|
|
|
102
104
|
bundling: {
|
|
103
105
|
forcedDockerBundling: true,
|
|
104
106
|
// Only use Google proxy in the CI tests, as it is blocked on workstations
|
|
105
|
-
goProxies:
|
|
107
|
+
goProxies: isRunningOnCi ? [GoFunction.GOOGLE_GOPROXY, 'direct'] : undefined,
|
|
106
108
|
},
|
|
107
109
|
});
|
|
108
110
|
|
|
@@ -4,7 +4,7 @@ const fs = require("fs");
|
|
|
4
4
|
const path = require("path");
|
|
5
5
|
const cdk_1 = require("../helpers/cdk");
|
|
6
6
|
const test_helpers_1 = require("../helpers/test-helpers");
|
|
7
|
-
const timeout = process.env.CODEBUILD_BUILD_ID ? // if the process is running in CodeBuild
|
|
7
|
+
const timeout = (process.env.CODEBUILD_BUILD_ID ?? process.env.GITHUB_RUN_ID) ? // if the process is running in CodeBuild
|
|
8
8
|
3600000 : // 1 hour
|
|
9
9
|
600000; // 10 minutes
|
|
10
10
|
jest.setTimeout(timeout);
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const lib_1 = require("../../lib");
|
|
4
4
|
['app', 'sample-app'].forEach(template => {
|
|
5
5
|
(0, lib_1.integTest)(`init go ${template}`, (0, lib_1.withTemporaryDirectory)((0, lib_1.withPackages)(async (context) => {
|
|
6
|
+
var _a;
|
|
6
7
|
const isCanary = !!process.env.IS_CANARY;
|
|
7
8
|
context.packages.assertJsiiPackagesAvailable();
|
|
8
9
|
const shell = lib_1.ShellHelper.fromContext(context);
|
|
@@ -11,11 +12,15 @@ const lib_1 = require("../../lib");
|
|
|
11
12
|
// Canaries will use the generated go.mod as is
|
|
12
13
|
// For pipeline tests we replace the source with the locally build one
|
|
13
14
|
if (!isCanary) {
|
|
14
|
-
|
|
15
|
+
const dir = (_a = process.env.CODEBUILD_SRC_DIR) !== null && _a !== void 0 ? _a : process.env.GITHUB_WORKSPACE;
|
|
16
|
+
if (!dir) {
|
|
17
|
+
throw new Error('Cannot figure out CI system root directory');
|
|
18
|
+
}
|
|
19
|
+
await shell.shell(['go', 'mod', 'edit', '-replace', `github.com/aws/aws-cdk-go/awscdk/v2=${dir}/go/awscdk`]);
|
|
15
20
|
}
|
|
16
21
|
await shell.shell(['go', 'mod', 'tidy']);
|
|
17
22
|
await shell.shell(['go', 'test']);
|
|
18
23
|
await shell.shell(['cdk', 'synth']);
|
|
19
24
|
})));
|
|
20
25
|
});
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC1nby5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbml0LWdvLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUF5RjtBQUV6RixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7SUFDdkMsSUFBQSxlQUFTLEVBQUMsV0FBVyxRQUFRLEVBQUUsRUFBRSxJQUFBLDRCQUFzQixFQUFDLElBQUEsa0JBQVksRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7O1FBQ3JGLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUN6QyxPQUFPLENBQUMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFL0MsTUFBTSxLQUFLLEdBQUcsaUJBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFMUMsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFekQsK0NBQStDO1FBQy9DLHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLEdBQUcsR0FBRyxNQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLG1DQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDMUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUNoRSxDQUFDO1lBRUQsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLHVDQUF1QyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDL0csQ0FBQztRQUVELE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aFRlbXBvcmFyeURpcmVjdG9yeSwgU2hlbGxIZWxwZXIsIHdpdGhQYWNrYWdlcyB9IGZyb20gJy4uLy4uL2xpYic7XG5cblsnYXBwJywgJ3NhbXBsZS1hcHAnXS5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgaW50ZWdUZXN0KGBpbml0IGdvICR7dGVtcGxhdGV9YCwgd2l0aFRlbXBvcmFyeURpcmVjdG9yeSh3aXRoUGFja2FnZXMoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBpc0NhbmFyeSA9ICEhcHJvY2Vzcy5lbnYuSVNfQ0FOQVJZO1xuICAgIGNvbnRleHQucGFja2FnZXMuYXNzZXJ0SnNpaVBhY2thZ2VzQXZhaWxhYmxlKCk7XG5cbiAgICBjb25zdCBzaGVsbCA9IFNoZWxsSGVscGVyLmZyb21Db250ZXh0KGNvbnRleHQpO1xuICAgIGF3YWl0IGNvbnRleHQucGFja2FnZXMubWFrZUNsaUF2YWlsYWJsZSgpO1xuXG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWydjZGsnLCAnaW5pdCcsICctbCcsICdnbycsIHRlbXBsYXRlXSk7XG5cbiAgICAvLyBDYW5hcmllcyB3aWxsIHVzZSB0aGUgZ2VuZXJhdGVkIGdvLm1vZCBhcyBpc1xuICAgIC8vIEZvciBwaXBlbGluZSB0ZXN0cyB3ZSByZXBsYWNlIHRoZSBzb3VyY2Ugd2l0aCB0aGUgbG9jYWxseSBidWlsZCBvbmVcbiAgICBpZiAoIWlzQ2FuYXJ5KSB7XG4gICAgICBjb25zdCBkaXIgPSBwcm9jZXNzLmVudi5DT0RFQlVJTERfU1JDX0RJUiA/PyBwcm9jZXNzLmVudi5HSVRIVUJfV09SS1NQQUNFO1xuICAgICAgaWYgKCFkaXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmlndXJlIG91dCBDSSBzeXN0ZW0gcm9vdCBkaXJlY3RvcnknKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgc2hlbGwuc2hlbGwoWydnbycsICdtb2QnLCAnZWRpdCcsICctcmVwbGFjZScsIGBnaXRodWIuY29tL2F3cy9hd3MtY2RrLWdvL2F3c2Nkay92Mj0ke2Rpcn0vZ28vYXdzY2RrYF0pO1xuICAgIH1cblxuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnZ28nLCAnbW9kJywgJ3RpZHknXSk7XG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWydnbycsICd0ZXN0J10pO1xuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnY2RrJywgJ3N5bnRoJ10pO1xuICB9KSkpO1xufSk7XG4iXX0=
|
|
@@ -13,7 +13,12 @@ import { integTest, withTemporaryDirectory, ShellHelper, withPackages } from '..
|
|
|
13
13
|
// Canaries will use the generated go.mod as is
|
|
14
14
|
// For pipeline tests we replace the source with the locally build one
|
|
15
15
|
if (!isCanary) {
|
|
16
|
-
|
|
16
|
+
const dir = process.env.CODEBUILD_SRC_DIR ?? process.env.GITHUB_WORKSPACE;
|
|
17
|
+
if (!dir) {
|
|
18
|
+
throw new Error('Cannot figure out CI system root directory');
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
await shell.shell(['go', 'mod', 'edit', '-replace', `github.com/aws/aws-cdk-go/awscdk/v2=${dir}/go/awscdk`]);
|
|
17
22
|
}
|
|
18
23
|
|
|
19
24
|
await shell.shell(['go', 'mod', 'tidy']);
|
|
@@ -19,8 +19,6 @@ const npm_1 = require("../../lib/npm");
|
|
|
19
19
|
// Same as https://github.com/DefinitelyTyped/DefinitelyTyped?tab=readme-ov-file#support-window
|
|
20
20
|
const TYPESCRIPT_VERSION_AGE_DAYS = 2 * 365;
|
|
21
21
|
const TYPESCRIPT_VERSIONS = (0, npm_1.typescriptVersionsYoungerThanDaysSync)(TYPESCRIPT_VERSION_AGE_DAYS, (0, npm_1.typescriptVersionsSync)());
|
|
22
|
-
// eslint-disable-next-line no-console
|
|
23
|
-
console.log(TYPESCRIPT_VERSIONS);
|
|
24
22
|
/**
|
|
25
23
|
* Test our generated code with various versions of TypeScript
|
|
26
24
|
*/
|
|
@@ -35,6 +33,8 @@ TYPESCRIPT_VERSIONS.forEach(tsVersion => {
|
|
|
35
33
|
// still want to test with older versions as well.
|
|
36
34
|
await removeDevDependencies(context);
|
|
37
35
|
await shell.shell(['npm', 'install', '--save-dev', `typescript@${tsVersion}`]);
|
|
36
|
+
// After we've removed devDependencies we need to re-install ts-node because it's necessary for `cdk synth`
|
|
37
|
+
await shell.shell(['npm', 'install', '--save-dev', `ts-node@^10`]);
|
|
38
38
|
await shell.shell(['npm', 'install']); // Older versions of npm require this to be a separate step from the one above
|
|
39
39
|
await shell.shell(['npx', 'tsc', '--version']);
|
|
40
40
|
await shell.shell(['npm', 'prune']);
|
|
@@ -51,4 +51,4 @@ async function removeDevDependencies(context) {
|
|
|
51
51
|
delete pj.devDependencies;
|
|
52
52
|
await fs_1.promises.writeFile(filename, JSON.stringify(pj, undefined, 2), { encoding: 'utf-8' });
|
|
53
53
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC10eXBlc2NyaXB0LWFwcC5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbml0LXR5cGVzY3JpcHQtYXBwLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJCQUFvQztBQUNwQyw2QkFBNkI7QUFDN0IsbUNBQW9IO0FBQ3BILHVDQUE4RjtBQUU5RixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7SUFDdkMsSUFBQSxlQUFTLEVBQUMsbUJBQW1CLFFBQVEsRUFBRSxFQUFFLElBQUEsNEJBQXNCLEVBQUMsSUFBQSxrQkFBWSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUM3RixNQUFNLEtBQUssR0FBRyxpQkFBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUUxQyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUVqRSxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9EQUFvRDtRQUN0RixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTFDLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxP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MUIsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN4RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoVGVtcG9yYXJ5RGlyZWN0b3J5LCBTaGVsbEhlbHBlciwgd2l0aFBhY2thZ2VzLCBUZW1wb3JhcnlEaXJlY3RvcnlDb250ZXh0IH0gZnJvbSAnLi4vLi4vbGliJztcbmltcG9ydCB7IHR5cGVzY3JpcHRWZXJzaW9uc1N5bmMsIHR5cGVzY3JpcHRWZXJzaW9uc1lvdW5nZXJUaGFuRGF5c1N5bmMgfSBmcm9tICcuLi8uLi9saWIvbnBtJztcblxuWydhcHAnLCAnc2FtcGxlLWFwcCddLmZvckVhY2godGVtcGxhdGUgPT4ge1xuICBpbnRlZ1Rlc3QoYHR5cGVzY3JpcHQgaW5pdCAke3RlbXBsYXRlfWAsIHdpdGhUZW1wb3JhcnlEaXJlY3Rvcnkod2l0aFBhY2thZ2VzKGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgY29uc3Qgc2hlbGwgPSBTaGVsbEhlbHBlci5mcm9tQ29udGV4dChjb250ZXh0KTtcbiAgICBhd2FpdCBjb250ZXh0LnBhY2thZ2VzLm1ha2VDbGlBdmFpbGFibGUoKTtcblxuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnY2RrJywgJ2luaXQnLCAnLWwnLCAndHlwZXNjcmlwdCcsIHRlbXBsYXRlXSk7XG5cbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ25wbScsICdwcnVuZSddKTtcbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ25wbScsICdscyddKTsgLy8gdGhpcyB3aWxsIGZhaWwgaWYgd2UgaGF2ZSB1bm1ldCBwZWVyIGRlcGVuZGVuY2llc1xuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnBtJywgJ3J1bicsICdidWlsZCddKTtcbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ25wbScsICdydW4nLCAndGVzdCddKTtcblxuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnY2RrJywgJ3N5bnRoJ10pO1xuICB9KSkpO1xufSk7XG5cbi8vIFNhbWUgYXMgaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQ/dGFiPXJlYWRtZS1vdi1maWxlI3N1cHBvcnQtd2luZG93XG5jb25zdCBUWVBFU0NSSVBUX1ZFUlNJT05fQUdFX0RBWVMgPSAyICogMzY1O1xuXG5jb25zdCBUWVBFU0NSSVBUX1ZFUlNJT05TID0gdHlwZXNjcmlwdFZlcnNpb25zWW91bmdlclRoYW5EYXlzU3luYyhUWVBFU0NSSVBUX1ZFUlNJT05fQUdFX0RBWVMsIHR5cGVzY3JpcHRWZXJzaW9uc1N5bmMoKSk7XG5cbi8qKlxuICogVGVzdCBvdXIgZ2VuZXJhdGVkIGNvZGUgd2l0aCB2YXJpb3VzIHZlcnNpb25zIG9mIFR5cGVTY3JpcHRcbiAqL1xuVFlQRVNDUklQVF9WRVJTSU9OUy5mb3JFYWNoKHRzVmVyc2lvbiA9PiB7XG4gIGludGVnVGVzdChgdHlwZXNjcmlwdCAke3RzVmVyc2lvbn0gaW5pdCBhcHBgLCB3aXRoVGVtcG9yYXJ5RGlyZWN0b3J5KHdpdGhQYWNrYWdlcyhhc3luYyAoY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHNoZWxsID0gU2hlbGxIZWxwZXIuZnJvbUNvbnRleHQoY29udGV4dCk7XG4gICAgYXdhaXQgY29udGV4dC5wYWNrYWdlcy5tYWtlQ2xpQXZhaWxhYmxlKCk7XG5cbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ25vZGUnLCAnLS12ZXJzaW9uJ10pO1xuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnBtJywgJy0tdmVyc2lvbiddKTtcblxuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnY2RrJywgJ2luaXQnLCAnLWwnLCAndHlwZXNjcmlwdCcsICdhcHAnLCAnLS1nZW5lcmF0ZS1vbmx5J10pO1xuXG4gICAgLy8gTmVjZXNzYXJ5IGJlY2F1c2UgcmVjZW50IHZlcnNpb25zIG9mIHRzLWplc3QgcmVxdWlyZSBUeXBlU2NyaXB0Pj00LjMgYnV0IHdlXG4gICAgLy8gc3RpbGwgd2FudCB0byB0ZXN0IHdpdGggb2xkZXIgdmVyc2lvbnMgYXMgd2VsbC5cbiAgICBhd2FpdCByZW1vdmVEZXZEZXBlbmRlbmNpZXMoY29udGV4dCk7XG5cbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ25wbScsICdpbnN0YWxsJywgJy0tc2F2ZS1kZXYnLCBgdHlwZXNjcmlwdEAke3RzVmVyc2lvbn1gXSk7XG5cbiAgICAvLyBBZnRlciB3ZSd2ZSByZW1vdmVkIGRldkRlcGVuZGVuY2llcyB3ZSBuZWVkIHRvIHJlLWluc3RhbGwgdHMtbm9kZSBiZWNhdXNlIGl0J3MgbmVjZXNzYXJ5IGZvciBgY2RrIHN5bnRoYFxuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnBtJywgJ2luc3RhbGwnLCAnLS1zYXZlLWRldicsIGB0cy1ub2RlQF4xMGBdKTtcblxuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnBtJywgJ2luc3RhbGwnXSk7IC8vIE9sZGVyIHZlcnNpb25zIG9mIG5wbSByZXF1aXJlIHRoaXMgdG8gYmUgYSBzZXBhcmF0ZSBzdGVwIGZyb20gdGhlIG9uZSBhYm92ZVxuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnB4JywgJ3RzYycsICctLXZlcnNpb24nXSk7XG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWyducG0nLCAncHJ1bmUnXSk7XG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWyducG0nLCAnbHMnXSk7IC8vIHRoaXMgd2lsbCBmYWlsIGlmIHdlIGhhdmUgdW5tZXQgcGVlciBkZXBlbmRlbmNpZXNcblxuICAgIC8vIFdlIGp1c3QgcmVtb3ZlZCB0aGUgJ2plc3QnIGRlcGVuZGVuY3kgc28gcmVtb3ZlIHRoZSB0ZXN0cyBhcyB3ZWxsIGJlY2F1c2UgdGhleSB3b24ndCBjb21waWxlXG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWydybScsICctcmYnLCAndGVzdC8nXSk7XG5cbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ25wbScsICdydW4nLCAnYnVpbGQnXSk7XG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWydjZGsnLCAnc3ludGgnXSk7XG4gIH0pKSk7XG59KTtcblxuYXN5bmMgZnVuY3Rpb24gcmVtb3ZlRGV2RGVwZW5kZW5jaWVzKGNvbnRleHQ6IFRlbXBvcmFyeURpcmVjdG9yeUNvbnRleHQpIHtcbiAgY29uc3QgZmlsZW5hbWUgPSBwYXRoLmpvaW4oY29udGV4dC5pbnRlZ1Rlc3REaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgY29uc3QgcGogPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVuYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKTtcbiAgZGVsZXRlIHBqLmRldkRlcGVuZGVuY2llcztcbiAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVuYW1lLCBKU09OLnN0cmluZ2lmeShwaiwgdW5kZWZpbmVkLCAyKSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbn1cbiJdfQ==
|
|
@@ -24,9 +24,6 @@ const TYPESCRIPT_VERSION_AGE_DAYS = 2 * 365;
|
|
|
24
24
|
|
|
25
25
|
const TYPESCRIPT_VERSIONS = typescriptVersionsYoungerThanDaysSync(TYPESCRIPT_VERSION_AGE_DAYS, typescriptVersionsSync());
|
|
26
26
|
|
|
27
|
-
// eslint-disable-next-line no-console
|
|
28
|
-
console.log(TYPESCRIPT_VERSIONS);
|
|
29
|
-
|
|
30
27
|
/**
|
|
31
28
|
* Test our generated code with various versions of TypeScript
|
|
32
29
|
*/
|
|
@@ -45,6 +42,10 @@ TYPESCRIPT_VERSIONS.forEach(tsVersion => {
|
|
|
45
42
|
await removeDevDependencies(context);
|
|
46
43
|
|
|
47
44
|
await shell.shell(['npm', 'install', '--save-dev', `typescript@${tsVersion}`]);
|
|
45
|
+
|
|
46
|
+
// After we've removed devDependencies we need to re-install ts-node because it's necessary for `cdk synth`
|
|
47
|
+
await shell.shell(['npm', 'install', '--save-dev', `ts-node@^10`]);
|
|
48
|
+
|
|
48
49
|
await shell.shell(['npm', 'install']); // Older versions of npm require this to be a separate step from the one above
|
|
49
50
|
await shell.shell(['npx', 'tsc', '--version']);
|
|
50
51
|
await shell.shell(['npm', 'prune']);
|
package/bin/query-github.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import * as yargs from 'yargs';
|
|
2
|
-
import { fetchPreviousVersion } from '../lib/github';
|
|
3
|
-
|
|
4
|
-
async function main() {
|
|
5
|
-
const args = await yargs
|
|
6
|
-
.option('token', {
|
|
7
|
-
descripton: 'GitHub token (default: from environment GITHUB_TOKEN)',
|
|
8
|
-
alias: 't',
|
|
9
|
-
type: 'string',
|
|
10
|
-
requiresArg: true,
|
|
11
|
-
})
|
|
12
|
-
.command('last-release', 'Query the last release', cmd => cmd
|
|
13
|
-
.option('prior-to', {
|
|
14
|
-
description: 'Return the most recent release before the given version',
|
|
15
|
-
alias: 'p',
|
|
16
|
-
type: 'string',
|
|
17
|
-
requiresArg: true,
|
|
18
|
-
})
|
|
19
|
-
.option('major', {
|
|
20
|
-
description: 'Return the most recent release that matches',
|
|
21
|
-
alias: 'm',
|
|
22
|
-
type: 'string',
|
|
23
|
-
requiresArg: true,
|
|
24
|
-
}))
|
|
25
|
-
.demandCommand()
|
|
26
|
-
.help()
|
|
27
|
-
.showHelpOnFail(false)
|
|
28
|
-
.argv;
|
|
29
|
-
|
|
30
|
-
const command = args._[0];
|
|
31
|
-
|
|
32
|
-
const token = args.token ?? process.env.GITHUB_TOKEN;
|
|
33
|
-
if (!token) {
|
|
34
|
-
throw new Error('Either pass --token or set GITHUB_TOKEN.');
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
switch (command) {
|
|
38
|
-
case 'last-release':
|
|
39
|
-
if (args['prior-to'] && args.major) {
|
|
40
|
-
throw new Error('Cannot pass both `--prior-to and --major at the same time');
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// eslint-disable-next-line no-console
|
|
44
|
-
console.log(await fetchPreviousVersion(token, {
|
|
45
|
-
priorTo: args['prior-to'],
|
|
46
|
-
majorVersion: args.major,
|
|
47
|
-
}));
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
main().catch(e => {
|
|
53
|
-
// eslint-disable-next-line no-console
|
|
54
|
-
console.error(e);
|
|
55
|
-
process.exitCode = 1;
|
|
56
|
-
});
|
package/bin/run-suite.ts
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as jest from 'jest';
|
|
4
|
-
import * as yargs from 'yargs';
|
|
5
|
-
import { ReleasePackageSourceSetup } from '../lib/package-sources/release-source';
|
|
6
|
-
import { RepoPackageSourceSetup, autoFindRoot } from '../lib/package-sources/repo-source';
|
|
7
|
-
import { IPackageSourceSetup } from '../lib/package-sources/source';
|
|
8
|
-
import { serializeForSubprocess } from '../lib/package-sources/subprocess';
|
|
9
|
-
|
|
10
|
-
async function main() {
|
|
11
|
-
const args = await yargs
|
|
12
|
-
.usage('$0 <SUITENAME>')
|
|
13
|
-
.positional('SUITENAME', {
|
|
14
|
-
descripton: 'Name of the test suite to run',
|
|
15
|
-
type: 'string',
|
|
16
|
-
demandOption: true,
|
|
17
|
-
})
|
|
18
|
-
.option('test', {
|
|
19
|
-
descripton: 'Test pattern to selectively run tests',
|
|
20
|
-
alias: 't',
|
|
21
|
-
type: 'string',
|
|
22
|
-
requiresArg: true,
|
|
23
|
-
})
|
|
24
|
-
.option('test-file', {
|
|
25
|
-
description: 'The specific test file to run',
|
|
26
|
-
type: 'string',
|
|
27
|
-
requiresArg: true,
|
|
28
|
-
})
|
|
29
|
-
.option('use-source', {
|
|
30
|
-
descripton: 'Use TypeScript packages from the given source repository (or "auto")',
|
|
31
|
-
alias: 's',
|
|
32
|
-
type: 'string',
|
|
33
|
-
requiresArg: true,
|
|
34
|
-
})
|
|
35
|
-
.option('use-cli-release', {
|
|
36
|
-
descripton: 'Run the current tests against the CLI at the given version',
|
|
37
|
-
alias: 'u',
|
|
38
|
-
type: 'string',
|
|
39
|
-
requiresArg: true,
|
|
40
|
-
})
|
|
41
|
-
.option('auto-source', {
|
|
42
|
-
alias: 'a',
|
|
43
|
-
description: 'Automatically find the source tree from the current working directory',
|
|
44
|
-
type: 'boolean',
|
|
45
|
-
requiresArg: false,
|
|
46
|
-
})
|
|
47
|
-
.option('runInBand', {
|
|
48
|
-
descripton: 'Run all tests in one Node process',
|
|
49
|
-
alias: 'i',
|
|
50
|
-
type: 'boolean',
|
|
51
|
-
})
|
|
52
|
-
.options('framework-version', {
|
|
53
|
-
description: 'Framework version to use, if different than the CLI version (not all suites respect this)',
|
|
54
|
-
alias: 'f',
|
|
55
|
-
type: 'string',
|
|
56
|
-
})
|
|
57
|
-
.options('verbose', {
|
|
58
|
-
alias: 'v',
|
|
59
|
-
description: 'Run in verbose mode',
|
|
60
|
-
type: 'boolean',
|
|
61
|
-
requiresArg: false,
|
|
62
|
-
})
|
|
63
|
-
.options('passWithNoTests', {
|
|
64
|
-
description: 'Allow passing if the test suite is not found (default true when IS_CANARY mode, false otherwise)',
|
|
65
|
-
type: 'boolean',
|
|
66
|
-
requiresArg: false,
|
|
67
|
-
})
|
|
68
|
-
.help()
|
|
69
|
-
.showHelpOnFail(false)
|
|
70
|
-
.argv;
|
|
71
|
-
|
|
72
|
-
const suiteName = args._[0] as string;
|
|
73
|
-
if (!suiteName) {
|
|
74
|
-
throw new Error('Usage: run-suite <SUITENAME>');
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
let packageSource: undefined | IPackageSourceSetup;
|
|
78
|
-
function usePackageSource(s: IPackageSourceSetup) {
|
|
79
|
-
if (packageSource) {
|
|
80
|
-
throw new Error('Cannot specify two package sources');
|
|
81
|
-
}
|
|
82
|
-
packageSource = s;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (args['use-source'] || args['auto-source']) {
|
|
86
|
-
if (args['framework-version']) {
|
|
87
|
-
throw new Error('Cannot use --framework-version with --use-source');
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const root = args['use-source'] && args['use-source'] !== 'auto'
|
|
91
|
-
? args['use-source']
|
|
92
|
-
: await autoFindRoot();
|
|
93
|
-
|
|
94
|
-
usePackageSource(new RepoPackageSourceSetup(root));
|
|
95
|
-
} else if (args['use-cli-release']) {
|
|
96
|
-
usePackageSource(new ReleasePackageSourceSetup(args['use-cli-release'], args['framework-version']));
|
|
97
|
-
}
|
|
98
|
-
if (!packageSource) {
|
|
99
|
-
throw new Error('Specify either --use-source or --use-cli-release');
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
console.log(`Package source: ${packageSource.description}`);
|
|
103
|
-
console.log(`Test suite: ${suiteName}`);
|
|
104
|
-
|
|
105
|
-
await packageSource.prepare();
|
|
106
|
-
serializeForSubprocess(packageSource);
|
|
107
|
-
|
|
108
|
-
if (args.verbose) {
|
|
109
|
-
process.env.VERBOSE = '1';
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Motivation behind this behavior: when adding a new test suite to the pipeline, because of the way our
|
|
113
|
-
// Pipeline package works, the suite would be added to the pipeline AND as a canary immediately. The canary
|
|
114
|
-
// would fail until the package was actually released, so for canaries we make an exception so that the initial
|
|
115
|
-
// canary would succeed even if the suite wasn't yet available. The fact that the suite is not optional in
|
|
116
|
-
// the pipeline protects us from typos.
|
|
117
|
-
const passWithNoTests = args.passWithNoTests ?? !!process.env.IS_CANARY;
|
|
118
|
-
|
|
119
|
-
// Communicate with the config file (integ.jest.config.js)
|
|
120
|
-
process.env.TEST_SUITE_NAME = suiteName;
|
|
121
|
-
|
|
122
|
-
try {
|
|
123
|
-
await jest.run([
|
|
124
|
-
...args.runInBand ? ['-i'] : [],
|
|
125
|
-
...args.test ? ['-t', args.test] : [],
|
|
126
|
-
...args.verbose ? ['--verbose'] : [],
|
|
127
|
-
...passWithNoTests ? ['--passWithNoTests'] : [],
|
|
128
|
-
...args['test-file'] ? [args['test-file']] : [],
|
|
129
|
-
], path.resolve(__dirname, '..', 'resources', 'integ.jest.config.js'));
|
|
130
|
-
|
|
131
|
-
} finally {
|
|
132
|
-
await packageSource.cleanup();
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
main().catch(e => {
|
|
137
|
-
// eslint-disable-next-line no-console
|
|
138
|
-
console.error(e);
|
|
139
|
-
process.exitCode = 1;
|
|
140
|
-
});
|