@aws-cdk-testing/cli-integ 0.0.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/.eslintrc.js +9 -0
- package/LICENSE +202 -0
- package/NOTICE +16 -0
- package/README.md +205 -0
- package/bin/apply-patches +22 -0
- package/bin/download-and-run-old-tests +52 -0
- package/bin/query-github +2 -0
- package/bin/query-github.d.ts +1 -0
- package/bin/query-github.js +54 -0
- package/bin/query-github.ts +56 -0
- package/bin/run-suite +2 -0
- package/bin/run-suite.d.ts +1 -0
- package/bin/run-suite.js +131 -0
- package/bin/run-suite.ts +140 -0
- package/bin/stage-distribution +2 -0
- package/bin/stage-distribution.d.ts +1 -0
- package/bin/stage-distribution.js +217 -0
- package/bin/stage-distribution.ts +267 -0
- package/bin/test-root +2 -0
- package/bin/test-root.d.ts +1 -0
- package/bin/test-root.js +6 -0
- package/bin/test-root.ts +3 -0
- package/entrypoints/test-cli-regression-against-current-code.sh +11 -0
- package/entrypoints/test-cli-regression-against-latest-release.sh +11 -0
- package/entrypoints/test-cli-regression.bash +83 -0
- package/entrypoints/test.sh +12 -0
- package/lib/aws.d.ts +51 -0
- package/lib/aws.js +206 -0
- package/lib/aws.ts +263 -0
- package/lib/corking.d.ts +12 -0
- package/lib/corking.js +35 -0
- package/lib/corking.ts +33 -0
- package/lib/eventually.d.ts +20 -0
- package/lib/eventually.js +34 -0
- package/lib/eventually.ts +42 -0
- package/lib/files.d.ts +15 -0
- package/lib/files.js +80 -0
- package/lib/files.ts +80 -0
- package/lib/github.d.ts +4 -0
- package/lib/github.js +43 -0
- package/lib/github.ts +43 -0
- package/lib/index.d.ts +13 -0
- package/lib/index.js +30 -0
- package/lib/index.ts +13 -0
- package/lib/integ-test.d.ts +10 -0
- package/lib/integ-test.js +70 -0
- package/lib/integ-test.ts +81 -0
- package/lib/lists.d.ts +1 -0
- package/lib/lists.js +11 -0
- package/lib/lists.ts +9 -0
- package/lib/memoize.d.ts +6 -0
- package/lib/memoize.js +18 -0
- package/lib/memoize.ts +14 -0
- package/lib/npm.d.ts +8 -0
- package/lib/npm.js +38 -0
- package/lib/npm.ts +41 -0
- package/lib/package-sources/release-source.d.ts +23 -0
- package/lib/package-sources/release-source.js +71 -0
- package/lib/package-sources/release-source.ts +81 -0
- package/lib/package-sources/repo-source.d.ts +30 -0
- package/lib/package-sources/repo-source.js +97 -0
- package/lib/package-sources/repo-source.ts +111 -0
- package/lib/package-sources/repo-tools/npm +2 -0
- package/lib/package-sources/repo-tools/npm.d.ts +1 -0
- package/lib/package-sources/repo-tools/npm.js +43 -0
- package/lib/package-sources/repo-tools/npm.ts +48 -0
- package/lib/package-sources/source.d.ts +28 -0
- package/lib/package-sources/source.js +3 -0
- package/lib/package-sources/source.ts +35 -0
- package/lib/package-sources/subprocess.d.ts +3 -0
- package/lib/package-sources/subprocess.js +17 -0
- package/lib/package-sources/subprocess.ts +15 -0
- package/lib/resource-pool.d.ts +50 -0
- package/lib/resource-pool.js +117 -0
- package/lib/resource-pool.ts +140 -0
- package/lib/resources.d.ts +1 -0
- package/lib/resources.js +6 -0
- package/lib/resources.ts +4 -0
- package/lib/shell.d.ts +56 -0
- package/lib/shell.js +123 -0
- package/lib/shell.ts +168 -0
- package/lib/staging/codeartifact.d.ts +44 -0
- package/lib/staging/codeartifact.js +281 -0
- package/lib/staging/codeartifact.ts +387 -0
- package/lib/staging/maven.d.ts +5 -0
- package/lib/staging/maven.js +91 -0
- package/lib/staging/maven.ts +95 -0
- package/lib/staging/npm.d.ts +4 -0
- package/lib/staging/npm.js +55 -0
- package/lib/staging/npm.ts +62 -0
- package/lib/staging/nuget.d.ts +4 -0
- package/lib/staging/nuget.js +69 -0
- package/lib/staging/nuget.ts +75 -0
- package/lib/staging/parallel-shell.d.ts +5 -0
- package/lib/staging/parallel-shell.js +45 -0
- package/lib/staging/parallel-shell.ts +51 -0
- package/lib/staging/pypi.d.ts +4 -0
- package/lib/staging/pypi.js +48 -0
- package/lib/staging/pypi.ts +50 -0
- package/lib/staging/usage-dir.d.ts +31 -0
- package/lib/staging/usage-dir.js +87 -0
- package/lib/staging/usage-dir.ts +99 -0
- package/lib/with-aws.d.ts +14 -0
- package/lib/with-aws.js +60 -0
- package/lib/with-aws.ts +67 -0
- package/lib/with-cdk-app.d.ts +210 -0
- package/lib/with-cdk-app.js +539 -0
- package/lib/with-cdk-app.ts +742 -0
- package/lib/with-cli-lib.d.ts +17 -0
- package/lib/with-cli-lib.js +123 -0
- package/lib/with-cli-lib.ts +134 -0
- package/lib/with-packages.d.ts +5 -0
- package/lib/with-packages.js +13 -0
- package/lib/with-packages.ts +15 -0
- package/lib/with-sam.d.ts +33 -0
- package/lib/with-sam.js +258 -0
- package/lib/with-sam.ts +288 -0
- package/lib/with-temporary-directory.d.ts +5 -0
- package/lib/with-temporary-directory.js +31 -0
- package/lib/with-temporary-directory.ts +35 -0
- package/lib/with-timeout.d.ts +19 -0
- package/lib/with-timeout.js +34 -0
- package/lib/with-timeout.ts +33 -0
- package/lib/xpmutex.d.ts +43 -0
- package/lib/xpmutex.js +207 -0
- package/lib/xpmutex.ts +218 -0
- package/package.json +111 -0
- package/resources/bootstrap-templates/session-tags.all-roles-deny-all.yaml +703 -0
- package/resources/bootstrap-templates/session-tags.deploy-role-deny-sqs.yaml +700 -0
- package/resources/cdk-apps/app/app.js +926 -0
- package/resources/cdk-apps/app/appsync.hotswap.graphql +3 -0
- package/resources/cdk-apps/app/cdk.json +7 -0
- package/resources/cdk-apps/app/docker/Dockerfile +2 -0
- package/resources/cdk-apps/app/docker/Dockerfile.Custom +2 -0
- package/resources/cdk-apps/app/lambda/index.js +4 -0
- package/resources/cdk-apps/app/lambda/response.json +3 -0
- package/resources/cdk-apps/app/nested-stack.js +65 -0
- package/resources/cdk-apps/cfn-include-app/cdk.json +4 -0
- package/resources/cdk-apps/cfn-include-app/cfn-include-app.js +21 -0
- package/resources/cdk-apps/cfn-include-app/example-template.json +13 -0
- package/resources/cdk-apps/rollback-test-app/app.js +110 -0
- package/resources/cdk-apps/rollback-test-app/cdk.json +7 -0
- package/resources/cdk-apps/sam_cdk_integ_app/bin/test-app.js +11 -0
- package/resources/cdk-apps/sam_cdk_integ_app/cdk.json +6 -0
- package/resources/cdk-apps/sam_cdk_integ_app/lib/nested-stack.js +19 -0
- package/resources/cdk-apps/sam_cdk_integ_app/lib/test-stack.js +134 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/.no-packagejson-validator +0 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/Dockerfile +9 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/app.js +22 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/package.json +18 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/go/GoFunctionConstruct/go.mod +5 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/go/GoFunctionConstruct/go.sum +17 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/go/GoFunctionConstruct/main.go +17 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/.no-packagejson-validator +0 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/app.ts +16 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/package-lock.json +12 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/package.json +5 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/python/Function/app.py +15 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/python/Function/requirements.txt +1 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/python/Layer/layer_version_dependency.py +5 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/python/Layer/requirements.txt +1 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/rest-api-definition.yaml +12 -0
- package/resources/cdk-apps/simple-app/app.js +26 -0
- package/resources/cdk-apps/simple-app/cdk.json +7 -0
- package/resources/cli-regression-patches/v1.119.0/NOTES.md +5 -0
- package/resources/cli-regression-patches/v1.119.0/cli.integtest.js +659 -0
- package/resources/cli-regression-patches/v1.130.0/NOTES.md +12 -0
- package/resources/cli-regression-patches/v1.130.0/app/app.js +378 -0
- package/resources/cli-regression-patches/v1.130.0/bootstrapping.integtest.js +220 -0
- package/resources/cli-regression-patches/v1.44.0/NOTES.md +18 -0
- package/resources/cli-regression-patches/v1.44.0/bootstrapping.integtest.js +126 -0
- package/resources/cli-regression-patches/v1.44.0/test.sh +26 -0
- package/resources/cli-regression-patches/v1.61.1/NOTES.md +2 -0
- package/resources/cli-regression-patches/v1.61.1/skip-tests.txt +16 -0
- package/resources/cli-regression-patches/v1.62.0/NOTES.md +2 -0
- package/resources/cli-regression-patches/v1.62.0/aws-helpers.js +245 -0
- package/resources/cli-regression-patches/v1.63.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v1.63.0/skip-tests.txt +7 -0
- package/resources/cli-regression-patches/v1.64.0/NOTES.md +3 -0
- package/resources/cli-regression-patches/v1.64.0/cdk-helpers.js +325 -0
- package/resources/cli-regression-patches/v1.64.0/cli.integtest.js +599 -0
- package/resources/cli-regression-patches/v1.64.1/NOTES.md +3 -0
- package/resources/cli-regression-patches/v1.64.1/cdk-helpers.js +324 -0
- package/resources/cli-regression-patches/v1.64.1/cli.integtest.js +599 -0
- package/resources/cli-regression-patches/v1.67.0/NOTES.md +2 -0
- package/resources/cli-regression-patches/v1.67.0/cdk-helpers.js +331 -0
- package/resources/cli-regression-patches/v2.130.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v2.130.0/node_modules/@aws-cdk-testing/cli-integ/resources/cdk-apps/sam_cdk_integ_app/lib/nested-stack.js +19 -0
- package/resources/cli-regression-patches/v2.130.0/node_modules/@aws-cdk-testing/cli-integ/resources/cdk-apps/sam_cdk_integ_app/lib/test-stack.js +134 -0
- package/resources/cli-regression-patches/v2.130.0/skip-tests.txt +5 -0
- package/resources/cli-regression-patches/v2.132.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v2.132.0/skip-tests.txt +4 -0
- package/resources/cli-regression-patches/v2.142.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v2.142.0/skip-tests.txt +4 -0
- package/resources/cli-regression-patches/v2.160.0/skip-tests.txt +2 -0
- package/resources/cli-regression-patches/v2.161.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v2.161.0/skip-tests.txt +5 -0
- package/resources/cli-regression-patches/v2.166.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v2.166.0/skip-tests.txt +2 -0
- package/resources/cloud-assemblies/0.36.0/InitStack.template.json +1 -0
- package/resources/cloud-assemblies/0.36.0/cdk.out +1 -0
- package/resources/cloud-assemblies/0.36.0/manifest.json +19 -0
- package/resources/cloud-assemblies/1.10.0-lookup-default-vpc/InitStack.template.json +2 -0
- package/resources/cloud-assemblies/1.10.0-lookup-default-vpc/cdk.out +1 -0
- package/resources/cloud-assemblies/1.10.0-lookup-default-vpc/manifest.json.js +37 -0
- package/resources/cloud-assemblies/1.10.0-request-azs/InitStack.template.json +2 -0
- package/resources/cloud-assemblies/1.10.0-request-azs/cdk.out +1 -0
- package/resources/cloud-assemblies/1.10.0-request-azs/manifest.json.js +34 -0
- package/resources/integ.jest.config.js +25 -0
- package/resources/templates/sqs-template.json +36 -0
- package/skip-tests.txt +8 -0
- package/tests/cli-integ-tests/README.md +47 -0
- package/tests/cli-integ-tests/bootstrapping.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/bootstrapping.integtest.js +412 -0
- package/tests/cli-integ-tests/bootstrapping.integtest.ts +493 -0
- package/tests/cli-integ-tests/cli-lib.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/cli-lib.integtest.js +62 -0
- package/tests/cli-integ-tests/cli-lib.integtest.ts +90 -0
- package/tests/cli-integ-tests/cli.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/cli.integtest.js +2104 -0
- package/tests/cli-integ-tests/cli.integtest.ts +2874 -0
- package/tests/cli-integ-tests/garbage-collection.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/garbage-collection.integtest.js +314 -0
- package/tests/cli-integ-tests/garbage-collection.integtest.ts +392 -0
- package/tests/init-csharp/init-csharp.integtest.d.ts +1 -0
- package/tests/init-csharp/init-csharp.integtest.js +14 -0
- package/tests/init-csharp/init-csharp.integtest.ts +15 -0
- package/tests/init-fsharp/init-fsharp.integtest.d.ts +1 -0
- package/tests/init-fsharp/init-fsharp.integtest.js +14 -0
- package/tests/init-fsharp/init-fsharp.integtest.ts +15 -0
- package/tests/init-go/init-go.integtest.d.ts +1 -0
- package/tests/init-go/init-go.integtest.js +21 -0
- package/tests/init-go/init-go.integtest.ts +23 -0
- package/tests/init-java/init-java.integtest.d.ts +1 -0
- package/tests/init-java/init-java.integtest.js +14 -0
- package/tests/init-java/init-java.integtest.ts +14 -0
- package/tests/init-javascript/init-javascript.integtest.d.ts +1 -0
- package/tests/init-javascript/init-javascript.integtest.js +53 -0
- package/tests/init-javascript/init-javascript.integtest.ts +59 -0
- package/tests/init-python/init-python.integtest.d.ts +1 -0
- package/tests/init-python/init-python.integtest.js +19 -0
- package/tests/init-python/init-python.integtest.ts +20 -0
- package/tests/init-typescript-app/init-typescript-app.integtest.d.ts +1 -0
- package/tests/init-typescript-app/init-typescript-app.integtest.js +54 -0
- package/tests/init-typescript-app/init-typescript-app.integtest.ts +66 -0
- package/tests/init-typescript-lib/init-typescript-lib.integtest.d.ts +1 -0
- package/tests/init-typescript-lib/init-typescript-lib.integtest.js +13 -0
- package/tests/init-typescript-lib/init-typescript-lib.integtest.ts +13 -0
- package/tests/tool-integrations/amplify.integtest.d.ts +1 -0
- package/tests/tool-integrations/amplify.integtest.js +39 -0
- package/tests/tool-integrations/amplify.integtest.ts +43 -0
- package/tests/tool-integrations/with-tool-context.d.ts +9 -0
- package/tests/tool-integrations/with-tool-context.js +13 -0
- package/tests/tool-integrations/with-tool-context.ts +14 -0
- package/tests/uberpackage/uberpackage.integtest.d.ts +1 -0
- package/tests/uberpackage/uberpackage.integtest.js +11 -0
- package/tests/uberpackage/uberpackage.integtest.ts +11 -0
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import { BatchGetImageCommand, ListImagesCommand, PutImageCommand } from '@aws-sdk/client-ecr';
|
|
2
|
+
import { GetObjectTaggingCommand, ListObjectsV2Command, PutObjectTaggingCommand } from '@aws-sdk/client-s3';
|
|
3
|
+
import { integTest, randomString, withoutBootstrap } from '../../lib';
|
|
4
|
+
|
|
5
|
+
const S3_ISOLATED_TAG = 'aws-cdk:isolated';
|
|
6
|
+
const ECR_ISOLATED_TAG = 'aws-cdk.isolated';
|
|
7
|
+
|
|
8
|
+
jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
|
|
9
|
+
|
|
10
|
+
integTest(
|
|
11
|
+
'Garbage Collection deletes unused s3 objects',
|
|
12
|
+
withoutBootstrap(async (fixture) => {
|
|
13
|
+
const toolkitStackName = fixture.bootstrapStackName;
|
|
14
|
+
const bootstrapBucketName = `aws-cdk-garbage-collect-integ-test-bckt-${randomString()}`;
|
|
15
|
+
fixture.rememberToDeleteBucket(bootstrapBucketName); // just in case
|
|
16
|
+
|
|
17
|
+
await fixture.cdkBootstrapModern({
|
|
18
|
+
toolkitStackName,
|
|
19
|
+
bootstrapBucketName,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
await fixture.cdkDeploy('lambda', {
|
|
23
|
+
options: [
|
|
24
|
+
'--context', `bootstrapBucket=${bootstrapBucketName}`,
|
|
25
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
26
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
27
|
+
'--force',
|
|
28
|
+
],
|
|
29
|
+
});
|
|
30
|
+
fixture.log('Setup complete!');
|
|
31
|
+
|
|
32
|
+
await fixture.cdkDestroy('lambda', {
|
|
33
|
+
options: [
|
|
34
|
+
'--context', `bootstrapBucket=${bootstrapBucketName}`,
|
|
35
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
36
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
37
|
+
'--force',
|
|
38
|
+
],
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
await fixture.cdkGarbageCollect({
|
|
42
|
+
rollbackBufferDays: 0,
|
|
43
|
+
type: 's3',
|
|
44
|
+
bootstrapStackName: toolkitStackName,
|
|
45
|
+
});
|
|
46
|
+
fixture.log('Garbage collection complete!');
|
|
47
|
+
|
|
48
|
+
// assert that the bootstrap bucket is empty
|
|
49
|
+
await fixture.aws.s3.send(new ListObjectsV2Command({ Bucket: bootstrapBucketName }))
|
|
50
|
+
.then((result) => {
|
|
51
|
+
expect(result.Contents).toBeUndefined();
|
|
52
|
+
});
|
|
53
|
+
}),
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
integTest(
|
|
57
|
+
'Garbage Collection deletes unused ecr images',
|
|
58
|
+
withoutBootstrap(async (fixture) => {
|
|
59
|
+
const toolkitStackName = fixture.bootstrapStackName;
|
|
60
|
+
|
|
61
|
+
await fixture.cdkBootstrapModern({
|
|
62
|
+
toolkitStackName,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const repoName = await fixture.bootstrapRepoName();
|
|
66
|
+
|
|
67
|
+
await fixture.cdkDeploy('docker-in-use', {
|
|
68
|
+
options: [
|
|
69
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
70
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
71
|
+
'--force',
|
|
72
|
+
],
|
|
73
|
+
});
|
|
74
|
+
fixture.log('Setup complete!');
|
|
75
|
+
|
|
76
|
+
await fixture.cdkDestroy('docker-in-use', {
|
|
77
|
+
options: [
|
|
78
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
79
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
80
|
+
'--force',
|
|
81
|
+
],
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
await fixture.cdkGarbageCollect({
|
|
85
|
+
rollbackBufferDays: 0,
|
|
86
|
+
type: 'ecr',
|
|
87
|
+
bootstrapStackName: toolkitStackName,
|
|
88
|
+
});
|
|
89
|
+
fixture.log('Garbage collection complete!');
|
|
90
|
+
|
|
91
|
+
// assert that the bootstrap repository is empty
|
|
92
|
+
await fixture.aws.ecr.send(new ListImagesCommand({ repositoryName: repoName }))
|
|
93
|
+
.then((result) => {
|
|
94
|
+
expect(result.imageIds).toEqual([]);
|
|
95
|
+
});
|
|
96
|
+
}),
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
integTest(
|
|
100
|
+
'Garbage Collection keeps in use s3 objects',
|
|
101
|
+
withoutBootstrap(async (fixture) => {
|
|
102
|
+
const toolkitStackName = fixture.bootstrapStackName;
|
|
103
|
+
const bootstrapBucketName = `aws-cdk-garbage-collect-integ-test-bckt-${randomString()}`;
|
|
104
|
+
fixture.rememberToDeleteBucket(bootstrapBucketName); // just in case
|
|
105
|
+
|
|
106
|
+
await fixture.cdkBootstrapModern({
|
|
107
|
+
toolkitStackName,
|
|
108
|
+
bootstrapBucketName,
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
await fixture.cdkDeploy('lambda', {
|
|
112
|
+
options: [
|
|
113
|
+
'--context', `bootstrapBucket=${bootstrapBucketName}`,
|
|
114
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
115
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
116
|
+
'--force',
|
|
117
|
+
],
|
|
118
|
+
});
|
|
119
|
+
fixture.log('Setup complete!');
|
|
120
|
+
|
|
121
|
+
await fixture.cdkGarbageCollect({
|
|
122
|
+
rollbackBufferDays: 0,
|
|
123
|
+
type: 's3',
|
|
124
|
+
bootstrapStackName: toolkitStackName,
|
|
125
|
+
});
|
|
126
|
+
fixture.log('Garbage collection complete!');
|
|
127
|
+
|
|
128
|
+
// assert that the bootstrap bucket has the object
|
|
129
|
+
await fixture.aws.s3.send(new ListObjectsV2Command({ Bucket: bootstrapBucketName }))
|
|
130
|
+
.then((result) => {
|
|
131
|
+
expect(result.Contents).toHaveLength(1);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
await fixture.cdkDestroy('lambda', {
|
|
135
|
+
options: [
|
|
136
|
+
'--context', `bootstrapBucket=${bootstrapBucketName}`,
|
|
137
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
138
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
139
|
+
'--force',
|
|
140
|
+
],
|
|
141
|
+
});
|
|
142
|
+
fixture.log('Teardown complete!');
|
|
143
|
+
}),
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
integTest(
|
|
147
|
+
'Garbage Collection keeps in use ecr images',
|
|
148
|
+
withoutBootstrap(async (fixture) => {
|
|
149
|
+
const toolkitStackName = fixture.bootstrapStackName;
|
|
150
|
+
|
|
151
|
+
await fixture.cdkBootstrapModern({
|
|
152
|
+
toolkitStackName,
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
const repoName = await fixture.bootstrapRepoName();
|
|
156
|
+
|
|
157
|
+
await fixture.cdkDeploy('docker-in-use', {
|
|
158
|
+
options: [
|
|
159
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
160
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
161
|
+
'--force',
|
|
162
|
+
],
|
|
163
|
+
});
|
|
164
|
+
fixture.log('Setup complete!');
|
|
165
|
+
|
|
166
|
+
await fixture.cdkGarbageCollect({
|
|
167
|
+
rollbackBufferDays: 0,
|
|
168
|
+
type: 'ecr',
|
|
169
|
+
bootstrapStackName: toolkitStackName,
|
|
170
|
+
});
|
|
171
|
+
fixture.log('Garbage collection complete!');
|
|
172
|
+
|
|
173
|
+
// assert that the bootstrap repository is empty
|
|
174
|
+
await fixture.aws.ecr.send(new ListImagesCommand({ repositoryName: repoName }))
|
|
175
|
+
.then((result) => {
|
|
176
|
+
expect(result.imageIds).toHaveLength(1);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
await fixture.cdkDestroy('docker-in-use', {
|
|
180
|
+
options: [
|
|
181
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
182
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
183
|
+
'--force',
|
|
184
|
+
],
|
|
185
|
+
});
|
|
186
|
+
}),
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
integTest(
|
|
190
|
+
'Garbage Collection tags unused s3 objects',
|
|
191
|
+
withoutBootstrap(async (fixture) => {
|
|
192
|
+
const toolkitStackName = fixture.bootstrapStackName;
|
|
193
|
+
const bootstrapBucketName = `aws-cdk-garbage-collect-integ-test-bckt-${randomString()}`;
|
|
194
|
+
fixture.rememberToDeleteBucket(bootstrapBucketName); // just in case
|
|
195
|
+
|
|
196
|
+
await fixture.cdkBootstrapModern({
|
|
197
|
+
toolkitStackName,
|
|
198
|
+
bootstrapBucketName,
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
await fixture.cdkDeploy('lambda', {
|
|
202
|
+
options: [
|
|
203
|
+
'--context', `bootstrapBucket=${bootstrapBucketName}`,
|
|
204
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
205
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
206
|
+
'--force',
|
|
207
|
+
],
|
|
208
|
+
});
|
|
209
|
+
fixture.log('Setup complete!');
|
|
210
|
+
|
|
211
|
+
await fixture.cdkDestroy('lambda', {
|
|
212
|
+
options: [
|
|
213
|
+
'--context', `bootstrapBucket=${bootstrapBucketName}`,
|
|
214
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
215
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
216
|
+
'--force',
|
|
217
|
+
],
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
await fixture.cdkGarbageCollect({
|
|
221
|
+
rollbackBufferDays: 100, // this will ensure that we do not delete assets immediately (and just tag them)
|
|
222
|
+
type: 's3',
|
|
223
|
+
bootstrapStackName: toolkitStackName,
|
|
224
|
+
});
|
|
225
|
+
fixture.log('Garbage collection complete!');
|
|
226
|
+
|
|
227
|
+
// assert that the bootstrap bucket has the object and is tagged
|
|
228
|
+
await fixture.aws.s3.send(new ListObjectsV2Command({ Bucket: bootstrapBucketName }))
|
|
229
|
+
.then(async (result) => {
|
|
230
|
+
expect(result.Contents).toHaveLength(2); // also the CFN template
|
|
231
|
+
const key = result.Contents![0].Key;
|
|
232
|
+
const tags = await fixture.aws.s3.send(new GetObjectTaggingCommand({ Bucket: bootstrapBucketName, Key: key }));
|
|
233
|
+
expect(tags.TagSet).toHaveLength(1);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
await fixture.cdkDestroy('lambda', {
|
|
237
|
+
options: [
|
|
238
|
+
'--context', `bootstrapBucket=${bootstrapBucketName}`,
|
|
239
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
240
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
241
|
+
'--force',
|
|
242
|
+
],
|
|
243
|
+
});
|
|
244
|
+
}),
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
integTest(
|
|
248
|
+
'Garbage Collection tags unused ecr images',
|
|
249
|
+
withoutBootstrap(async (fixture) => {
|
|
250
|
+
const toolkitStackName = fixture.bootstrapStackName;
|
|
251
|
+
|
|
252
|
+
await fixture.cdkBootstrapModern({
|
|
253
|
+
toolkitStackName,
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
const repoName = await fixture.bootstrapRepoName();
|
|
257
|
+
|
|
258
|
+
await fixture.cdkDeploy('docker-in-use', {
|
|
259
|
+
options: [
|
|
260
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
261
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
262
|
+
'--force',
|
|
263
|
+
],
|
|
264
|
+
});
|
|
265
|
+
fixture.log('Setup complete!');
|
|
266
|
+
|
|
267
|
+
await fixture.cdkDestroy('docker-in-use', {
|
|
268
|
+
options: [
|
|
269
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
270
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
271
|
+
'--force',
|
|
272
|
+
],
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
await fixture.cdkGarbageCollect({
|
|
276
|
+
rollbackBufferDays: 100, // this will ensure that we do not delete assets immediately (and just tag them)
|
|
277
|
+
type: 'ecr',
|
|
278
|
+
bootstrapStackName: toolkitStackName,
|
|
279
|
+
});
|
|
280
|
+
fixture.log('Garbage collection complete!');
|
|
281
|
+
|
|
282
|
+
await fixture.aws.ecr.send(new ListImagesCommand({ repositoryName: repoName }))
|
|
283
|
+
.then((result) => {
|
|
284
|
+
expect(result.imageIds).toHaveLength(2); // the second tag comes in as a second 'id'
|
|
285
|
+
});
|
|
286
|
+
}),
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
integTest(
|
|
290
|
+
'Garbage Collection untags in-use s3 objects',
|
|
291
|
+
withoutBootstrap(async (fixture) => {
|
|
292
|
+
const toolkitStackName = fixture.bootstrapStackName;
|
|
293
|
+
const bootstrapBucketName = `aws-cdk-garbage-collect-integ-test-bckt-${randomString()}`;
|
|
294
|
+
fixture.rememberToDeleteBucket(bootstrapBucketName); // just in case
|
|
295
|
+
|
|
296
|
+
await fixture.cdkBootstrapModern({
|
|
297
|
+
toolkitStackName,
|
|
298
|
+
bootstrapBucketName,
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
await fixture.cdkDeploy('lambda', {
|
|
302
|
+
options: [
|
|
303
|
+
'--context', `bootstrapBucket=${bootstrapBucketName}`,
|
|
304
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
305
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
306
|
+
'--force',
|
|
307
|
+
],
|
|
308
|
+
});
|
|
309
|
+
fixture.log('Setup complete!');
|
|
310
|
+
|
|
311
|
+
// Artificially add tagging to the asset in the bootstrap bucket
|
|
312
|
+
const result = await fixture.aws.s3.send(new ListObjectsV2Command({ Bucket: bootstrapBucketName }));
|
|
313
|
+
const key = result.Contents!.filter((c) => c.Key?.split('.')[1] == 'zip')[0].Key; // fancy footwork to make sure we have the asset key
|
|
314
|
+
await fixture.aws.s3.send(new PutObjectTaggingCommand({
|
|
315
|
+
Bucket: bootstrapBucketName,
|
|
316
|
+
Key: key,
|
|
317
|
+
Tagging: {
|
|
318
|
+
TagSet: [{
|
|
319
|
+
Key: S3_ISOLATED_TAG,
|
|
320
|
+
Value: '12345',
|
|
321
|
+
}, {
|
|
322
|
+
Key: 'bogus',
|
|
323
|
+
Value: 'val',
|
|
324
|
+
}],
|
|
325
|
+
},
|
|
326
|
+
}));
|
|
327
|
+
|
|
328
|
+
await fixture.cdkGarbageCollect({
|
|
329
|
+
rollbackBufferDays: 100, // this will ensure that we do not delete assets immediately (and just tag them)
|
|
330
|
+
type: 's3',
|
|
331
|
+
bootstrapStackName: toolkitStackName,
|
|
332
|
+
});
|
|
333
|
+
fixture.log('Garbage collection complete!');
|
|
334
|
+
|
|
335
|
+
// assert that the isolated object tag is removed while the other tag remains
|
|
336
|
+
const newTags = await fixture.aws.s3.send(new GetObjectTaggingCommand({ Bucket: bootstrapBucketName, Key: key }));
|
|
337
|
+
|
|
338
|
+
expect(newTags.TagSet).toEqual([{
|
|
339
|
+
Key: 'bogus',
|
|
340
|
+
Value: 'val',
|
|
341
|
+
}]);
|
|
342
|
+
}),
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
integTest(
|
|
346
|
+
'Garbage Collection untags in-use ecr images',
|
|
347
|
+
withoutBootstrap(async (fixture) => {
|
|
348
|
+
const toolkitStackName = fixture.bootstrapStackName;
|
|
349
|
+
|
|
350
|
+
await fixture.cdkBootstrapModern({
|
|
351
|
+
toolkitStackName,
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
const repoName = await fixture.bootstrapRepoName();
|
|
355
|
+
|
|
356
|
+
await fixture.cdkDeploy('docker-in-use', {
|
|
357
|
+
options: [
|
|
358
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
359
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
360
|
+
'--force',
|
|
361
|
+
],
|
|
362
|
+
});
|
|
363
|
+
fixture.log('Setup complete!');
|
|
364
|
+
|
|
365
|
+
// Artificially add tagging to the asset in the bootstrap bucket
|
|
366
|
+
const imageIds = await fixture.aws.ecr.send(new ListImagesCommand({ repositoryName: repoName }));
|
|
367
|
+
const digest = imageIds.imageIds![0].imageDigest;
|
|
368
|
+
const imageManifests = await fixture.aws.ecr.send(new BatchGetImageCommand({ repositoryName: repoName, imageIds: [{ imageDigest: digest }] }));
|
|
369
|
+
const manifest = imageManifests.images![0].imageManifest;
|
|
370
|
+
await fixture.aws.ecr.send(new PutImageCommand({ repositoryName: repoName, imageManifest: manifest, imageDigest: digest, imageTag: `0-${ECR_ISOLATED_TAG}-12345` }));
|
|
371
|
+
|
|
372
|
+
await fixture.cdkGarbageCollect({
|
|
373
|
+
rollbackBufferDays: 100, // this will ensure that we do not delete assets immediately (and just tag them)
|
|
374
|
+
type: 'ecr',
|
|
375
|
+
bootstrapStackName: toolkitStackName,
|
|
376
|
+
});
|
|
377
|
+
fixture.log('Garbage collection complete!');
|
|
378
|
+
|
|
379
|
+
await fixture.aws.ecr.send(new ListImagesCommand({ repositoryName: repoName }))
|
|
380
|
+
.then((result) => {
|
|
381
|
+
expect(result.imageIds).toHaveLength(1); // the second tag has been removed
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
await fixture.cdkDestroy('docker-in-use', {
|
|
385
|
+
options: [
|
|
386
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
387
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
388
|
+
'--force',
|
|
389
|
+
],
|
|
390
|
+
});
|
|
391
|
+
}),
|
|
392
|
+
);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../lib");
|
|
4
|
+
['app', 'sample-app'].forEach(template => {
|
|
5
|
+
(0, lib_1.integTest)(`init C♯ ${template}`, (0, lib_1.withTemporaryDirectory)((0, lib_1.withPackages)(async (context) => {
|
|
6
|
+
context.packages.assertJsiiPackagesAvailable();
|
|
7
|
+
const shell = lib_1.ShellHelper.fromContext(context);
|
|
8
|
+
await context.packages.makeCliAvailable();
|
|
9
|
+
await shell.shell(['cdk', 'init', '-l', 'csharp', template]);
|
|
10
|
+
await context.packages.initializeDotnetPackages(context.integTestDir);
|
|
11
|
+
await shell.shell(['cdk', 'synth']);
|
|
12
|
+
})));
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC1jc2hhcnAuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5pdC1jc2hhcnAuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQXlGO0FBRXpGLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUN2QyxJQUFBLGVBQVMsRUFBQyxXQUFXLFFBQVEsRUFBRSxFQUFFLElBQUEsNEJBQXNCLEVBQUMsSUFBQSxrQkFBWSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNyRixPQUFPLENBQUMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFL0MsTUFBTSxLQUFLLEdBQUcsaUJBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFMUMsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDN0QsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RSxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aFRlbXBvcmFyeURpcmVjdG9yeSwgU2hlbGxIZWxwZXIsIHdpdGhQYWNrYWdlcyB9IGZyb20gJy4uLy4uL2xpYic7XG5cblsnYXBwJywgJ3NhbXBsZS1hcHAnXS5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgaW50ZWdUZXN0KGBpbml0IEPima8gJHt0ZW1wbGF0ZX1gLCB3aXRoVGVtcG9yYXJ5RGlyZWN0b3J5KHdpdGhQYWNrYWdlcyhhc3luYyAoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQucGFja2FnZXMuYXNzZXJ0SnNpaVBhY2thZ2VzQXZhaWxhYmxlKCk7XG5cbiAgICBjb25zdCBzaGVsbCA9IFNoZWxsSGVscGVyLmZyb21Db250ZXh0KGNvbnRleHQpO1xuICAgIGF3YWl0IGNvbnRleHQucGFja2FnZXMubWFrZUNsaUF2YWlsYWJsZSgpO1xuXG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWydjZGsnLCAnaW5pdCcsICctbCcsICdjc2hhcnAnLCB0ZW1wbGF0ZV0pO1xuICAgIGF3YWl0IGNvbnRleHQucGFja2FnZXMuaW5pdGlhbGl6ZURvdG5ldFBhY2thZ2VzKGNvbnRleHQuaW50ZWdUZXN0RGlyKTtcbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ2NkaycsICdzeW50aCddKTtcbiAgfSkpKTtcbn0pO1xuXG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { integTest, withTemporaryDirectory, ShellHelper, withPackages } from '../../lib';
|
|
2
|
+
|
|
3
|
+
['app', 'sample-app'].forEach(template => {
|
|
4
|
+
integTest(`init C♯ ${template}`, withTemporaryDirectory(withPackages(async (context) => {
|
|
5
|
+
context.packages.assertJsiiPackagesAvailable();
|
|
6
|
+
|
|
7
|
+
const shell = ShellHelper.fromContext(context);
|
|
8
|
+
await context.packages.makeCliAvailable();
|
|
9
|
+
|
|
10
|
+
await shell.shell(['cdk', 'init', '-l', 'csharp', template]);
|
|
11
|
+
await context.packages.initializeDotnetPackages(context.integTestDir);
|
|
12
|
+
await shell.shell(['cdk', 'synth']);
|
|
13
|
+
})));
|
|
14
|
+
});
|
|
15
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../lib");
|
|
4
|
+
['app', 'sample-app'].forEach(template => {
|
|
5
|
+
(0, lib_1.integTest)(`init F♯ ${template}`, (0, lib_1.withTemporaryDirectory)((0, lib_1.withPackages)(async (context) => {
|
|
6
|
+
context.packages.assertJsiiPackagesAvailable();
|
|
7
|
+
const shell = lib_1.ShellHelper.fromContext(context);
|
|
8
|
+
await context.packages.makeCliAvailable();
|
|
9
|
+
await shell.shell(['cdk', 'init', '-l', 'fsharp', template]);
|
|
10
|
+
await context.packages.initializeDotnetPackages(context.integTestDir);
|
|
11
|
+
await shell.shell(['cdk', 'synth']);
|
|
12
|
+
})));
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC1mc2hhcnAuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5pdC1mc2hhcnAuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQXlGO0FBRXpGLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUN2QyxJQUFBLGVBQVMsRUFBQyxXQUFXLFFBQVEsRUFBRSxFQUFFLElBQUEsNEJBQXNCLEVBQUMsSUFBQSxrQkFBWSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNyRixPQUFPLENBQUMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFL0MsTUFBTSxLQUFLLEdBQUcsaUJBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFMUMsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDN0QsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RSxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aFRlbXBvcmFyeURpcmVjdG9yeSwgU2hlbGxIZWxwZXIsIHdpdGhQYWNrYWdlcyB9IGZyb20gJy4uLy4uL2xpYic7XG5cblsnYXBwJywgJ3NhbXBsZS1hcHAnXS5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgaW50ZWdUZXN0KGBpbml0IEbima8gJHt0ZW1wbGF0ZX1gLCB3aXRoVGVtcG9yYXJ5RGlyZWN0b3J5KHdpdGhQYWNrYWdlcyhhc3luYyAoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQucGFja2FnZXMuYXNzZXJ0SnNpaVBhY2thZ2VzQXZhaWxhYmxlKCk7XG5cbiAgICBjb25zdCBzaGVsbCA9IFNoZWxsSGVscGVyLmZyb21Db250ZXh0KGNvbnRleHQpO1xuICAgIGF3YWl0IGNvbnRleHQucGFja2FnZXMubWFrZUNsaUF2YWlsYWJsZSgpO1xuXG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWydjZGsnLCAnaW5pdCcsICctbCcsICdmc2hhcnAnLCB0ZW1wbGF0ZV0pO1xuICAgIGF3YWl0IGNvbnRleHQucGFja2FnZXMuaW5pdGlhbGl6ZURvdG5ldFBhY2thZ2VzKGNvbnRleHQuaW50ZWdUZXN0RGlyKTtcbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ2NkaycsICdzeW50aCddKTtcbiAgfSkpKTtcbn0pO1xuXG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { integTest, withTemporaryDirectory, ShellHelper, withPackages } from '../../lib';
|
|
2
|
+
|
|
3
|
+
['app', 'sample-app'].forEach(template => {
|
|
4
|
+
integTest(`init F♯ ${template}`, withTemporaryDirectory(withPackages(async (context) => {
|
|
5
|
+
context.packages.assertJsiiPackagesAvailable();
|
|
6
|
+
|
|
7
|
+
const shell = ShellHelper.fromContext(context);
|
|
8
|
+
await context.packages.makeCliAvailable();
|
|
9
|
+
|
|
10
|
+
await shell.shell(['cdk', 'init', '-l', 'fsharp', template]);
|
|
11
|
+
await context.packages.initializeDotnetPackages(context.integTestDir);
|
|
12
|
+
await shell.shell(['cdk', 'synth']);
|
|
13
|
+
})));
|
|
14
|
+
});
|
|
15
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../lib");
|
|
4
|
+
['app', 'sample-app'].forEach(template => {
|
|
5
|
+
(0, lib_1.integTest)(`init go ${template}`, (0, lib_1.withTemporaryDirectory)((0, lib_1.withPackages)(async (context) => {
|
|
6
|
+
const isCanary = !!process.env.IS_CANARY;
|
|
7
|
+
context.packages.assertJsiiPackagesAvailable();
|
|
8
|
+
const shell = lib_1.ShellHelper.fromContext(context);
|
|
9
|
+
await context.packages.makeCliAvailable();
|
|
10
|
+
await shell.shell(['cdk', 'init', '-l', 'go', template]);
|
|
11
|
+
// Canaries will use the generated go.mod as is
|
|
12
|
+
// For pipeline tests we replace the source with the locally build one
|
|
13
|
+
if (!isCanary) {
|
|
14
|
+
await shell.shell(['go', 'mod', 'edit', '-replace', 'github.com/aws/aws-cdk-go/awscdk/v2=$CODEBUILD_SRC_DIR/go/awscdk']);
|
|
15
|
+
}
|
|
16
|
+
await shell.shell(['go', 'mod', 'tidy']);
|
|
17
|
+
await shell.shell(['go', 'test']);
|
|
18
|
+
await shell.shell(['cdk', 'synth']);
|
|
19
|
+
})));
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC1nby5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbml0LWdvLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUF5RjtBQUV6RixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7SUFDdkMsSUFBQSxlQUFTLEVBQUMsV0FBVyxRQUFRLEVBQUUsRUFBRSxJQUFBLDRCQUFzQixFQUFDLElBQUEsa0JBQVksRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDckYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUUvQyxNQUFNLEtBQUssR0FBRyxpQkFBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUUxQyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUV6RCwrQ0FBK0M7UUFDL0Msc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxrRUFBa0UsQ0FBQyxDQUFDLENBQUM7UUFDM0gsQ0FBQztRQUVELE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aFRlbXBvcmFyeURpcmVjdG9yeSwgU2hlbGxIZWxwZXIsIHdpdGhQYWNrYWdlcyB9IGZyb20gJy4uLy4uL2xpYic7XG5cblsnYXBwJywgJ3NhbXBsZS1hcHAnXS5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgaW50ZWdUZXN0KGBpbml0IGdvICR7dGVtcGxhdGV9YCwgd2l0aFRlbXBvcmFyeURpcmVjdG9yeSh3aXRoUGFja2FnZXMoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBpc0NhbmFyeSA9ICEhcHJvY2Vzcy5lbnYuSVNfQ0FOQVJZO1xuICAgIGNvbnRleHQucGFja2FnZXMuYXNzZXJ0SnNpaVBhY2thZ2VzQXZhaWxhYmxlKCk7XG5cbiAgICBjb25zdCBzaGVsbCA9IFNoZWxsSGVscGVyLmZyb21Db250ZXh0KGNvbnRleHQpO1xuICAgIGF3YWl0IGNvbnRleHQucGFja2FnZXMubWFrZUNsaUF2YWlsYWJsZSgpO1xuXG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWydjZGsnLCAnaW5pdCcsICctbCcsICdnbycsIHRlbXBsYXRlXSk7XG5cbiAgICAvLyBDYW5hcmllcyB3aWxsIHVzZSB0aGUgZ2VuZXJhdGVkIGdvLm1vZCBhcyBpc1xuICAgIC8vIEZvciBwaXBlbGluZSB0ZXN0cyB3ZSByZXBsYWNlIHRoZSBzb3VyY2Ugd2l0aCB0aGUgbG9jYWxseSBidWlsZCBvbmVcbiAgICBpZiAoIWlzQ2FuYXJ5KSB7XG4gICAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ2dvJywgJ21vZCcsICdlZGl0JywgJy1yZXBsYWNlJywgJ2dpdGh1Yi5jb20vYXdzL2F3cy1jZGstZ28vYXdzY2RrL3YyPSRDT0RFQlVJTERfU1JDX0RJUi9nby9hd3NjZGsnXSk7XG4gICAgfVxuXG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWydnbycsICdtb2QnLCAndGlkeSddKTtcbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ2dvJywgJ3Rlc3QnXSk7XG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWydjZGsnLCAnc3ludGgnXSk7XG4gIH0pKSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { integTest, withTemporaryDirectory, ShellHelper, withPackages } from '../../lib';
|
|
2
|
+
|
|
3
|
+
['app', 'sample-app'].forEach(template => {
|
|
4
|
+
integTest(`init go ${template}`, withTemporaryDirectory(withPackages(async (context) => {
|
|
5
|
+
const isCanary = !!process.env.IS_CANARY;
|
|
6
|
+
context.packages.assertJsiiPackagesAvailable();
|
|
7
|
+
|
|
8
|
+
const shell = ShellHelper.fromContext(context);
|
|
9
|
+
await context.packages.makeCliAvailable();
|
|
10
|
+
|
|
11
|
+
await shell.shell(['cdk', 'init', '-l', 'go', template]);
|
|
12
|
+
|
|
13
|
+
// Canaries will use the generated go.mod as is
|
|
14
|
+
// For pipeline tests we replace the source with the locally build one
|
|
15
|
+
if (!isCanary) {
|
|
16
|
+
await shell.shell(['go', 'mod', 'edit', '-replace', 'github.com/aws/aws-cdk-go/awscdk/v2=$CODEBUILD_SRC_DIR/go/awscdk']);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
await shell.shell(['go', 'mod', 'tidy']);
|
|
20
|
+
await shell.shell(['go', 'test']);
|
|
21
|
+
await shell.shell(['cdk', 'synth']);
|
|
22
|
+
})));
|
|
23
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../lib");
|
|
4
|
+
['app', 'sample-app'].forEach(template => {
|
|
5
|
+
(0, lib_1.integTest)(`init java ${template}`, (0, lib_1.withTemporaryDirectory)((0, lib_1.withPackages)(async (context) => {
|
|
6
|
+
context.packages.assertJsiiPackagesAvailable();
|
|
7
|
+
const shell = lib_1.ShellHelper.fromContext(context);
|
|
8
|
+
await context.packages.makeCliAvailable();
|
|
9
|
+
await shell.shell(['cdk', 'init', '-l', 'java', template]);
|
|
10
|
+
await shell.shell(['mvn', 'package']);
|
|
11
|
+
await shell.shell(['cdk', 'synth']);
|
|
12
|
+
})));
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC1qYXZhLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImluaXQtamF2YS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FBeUY7QUFFekYsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0lBQ3ZDLElBQUEsZUFBUyxFQUFDLGFBQWEsUUFBUSxFQUFFLEVBQUUsSUFBQSw0QkFBc0IsRUFBQyxJQUFBLGtCQUFZLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3ZGLE9BQU8sQ0FBQyxRQUFRLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUUvQyxNQUFNLEtBQUssR0FBRyxpQkFBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUUxQyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aFRlbXBvcmFyeURpcmVjdG9yeSwgU2hlbGxIZWxwZXIsIHdpdGhQYWNrYWdlcyB9IGZyb20gJy4uLy4uL2xpYic7XG5cblsnYXBwJywgJ3NhbXBsZS1hcHAnXS5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgaW50ZWdUZXN0KGBpbml0IGphdmEgJHt0ZW1wbGF0ZX1gLCB3aXRoVGVtcG9yYXJ5RGlyZWN0b3J5KHdpdGhQYWNrYWdlcyhhc3luYyAoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQucGFja2FnZXMuYXNzZXJ0SnNpaVBhY2thZ2VzQXZhaWxhYmxlKCk7XG5cbiAgICBjb25zdCBzaGVsbCA9IFNoZWxsSGVscGVyLmZyb21Db250ZXh0KGNvbnRleHQpO1xuICAgIGF3YWl0IGNvbnRleHQucGFja2FnZXMubWFrZUNsaUF2YWlsYWJsZSgpO1xuXG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWydjZGsnLCAnaW5pdCcsICctbCcsICdqYXZhJywgdGVtcGxhdGVdKTtcbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ212bicsICdwYWNrYWdlJ10pO1xuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnY2RrJywgJ3N5bnRoJ10pO1xuICB9KSkpO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { integTest, withTemporaryDirectory, ShellHelper, withPackages } from '../../lib';
|
|
2
|
+
|
|
3
|
+
['app', 'sample-app'].forEach(template => {
|
|
4
|
+
integTest(`init java ${template}`, withTemporaryDirectory(withPackages(async (context) => {
|
|
5
|
+
context.packages.assertJsiiPackagesAvailable();
|
|
6
|
+
|
|
7
|
+
const shell = ShellHelper.fromContext(context);
|
|
8
|
+
await context.packages.makeCliAvailable();
|
|
9
|
+
|
|
10
|
+
await shell.shell(['cdk', 'init', '-l', 'java', template]);
|
|
11
|
+
await shell.shell(['mvn', 'package']);
|
|
12
|
+
await shell.shell(['cdk', 'synth']);
|
|
13
|
+
})));
|
|
14
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const path = require("path");
|
|
4
|
+
const fs = require("fs-extra");
|
|
5
|
+
const lib_1 = require("../../lib");
|
|
6
|
+
['app', 'sample-app'].forEach(template => {
|
|
7
|
+
(0, lib_1.integTest)(`init javascript ${template}`, (0, lib_1.withTemporaryDirectory)((0, lib_1.withPackages)(async (context) => {
|
|
8
|
+
const shell = lib_1.ShellHelper.fromContext(context);
|
|
9
|
+
await context.packages.makeCliAvailable();
|
|
10
|
+
await shell.shell(['cdk', 'init', '-l', 'javascript', template]);
|
|
11
|
+
await shell.shell(['npm', 'prune']);
|
|
12
|
+
await shell.shell(['npm', 'ls']); // this will fail if we have unmet peer dependencies
|
|
13
|
+
await shell.shell(['npm', 'run', 'test']);
|
|
14
|
+
await shell.shell(['cdk', 'synth']);
|
|
15
|
+
})));
|
|
16
|
+
});
|
|
17
|
+
(0, lib_1.integTest)('Test importing CDK from ESM', (0, lib_1.withTemporaryDirectory)((0, lib_1.withPackages)(async (context) => {
|
|
18
|
+
// Use 'cdk init -l=javascript' to get set up, but use a different file
|
|
19
|
+
const shell = lib_1.ShellHelper.fromContext(context);
|
|
20
|
+
await context.packages.makeCliAvailable();
|
|
21
|
+
await shell.shell(['cdk', 'init', '-l', 'javascript', 'app']);
|
|
22
|
+
// Rewrite some files
|
|
23
|
+
await fs.writeFile(path.join(context.integTestDir, 'new-entrypoint.mjs'), `
|
|
24
|
+
// Test multiple styles of imports
|
|
25
|
+
import { Stack, aws_sns as sns } from 'aws-cdk-lib';
|
|
26
|
+
import { SqsSubscription } from 'aws-cdk-lib/aws-sns-subscriptions';
|
|
27
|
+
import * as sqs from 'aws-cdk-lib/aws-sqs';
|
|
28
|
+
import * as cdk from 'aws-cdk-lib';
|
|
29
|
+
|
|
30
|
+
class TestjsStack extends Stack {
|
|
31
|
+
constructor(scope, id, props) {
|
|
32
|
+
super(scope, id, props);
|
|
33
|
+
|
|
34
|
+
const queue = new sqs.Queue(this, 'TestjsQueue', {
|
|
35
|
+
visibilityTimeout: cdk.Duration.seconds(300)
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const topic = new sns.Topic(this, 'TestjsTopic');
|
|
39
|
+
|
|
40
|
+
topic.addSubscription(new SqsSubscription(queue));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const app = new cdk.App();
|
|
45
|
+
new TestjsStack(app, 'TestjsStack');
|
|
46
|
+
`, { encoding: 'utf-8' });
|
|
47
|
+
// Rewrite 'cdk.json' to use new entrypoint
|
|
48
|
+
const cdkJson = await fs.readJson(path.join(context.integTestDir, 'cdk.json'));
|
|
49
|
+
cdkJson.app = 'node new-entrypoint.mjs';
|
|
50
|
+
await fs.writeJson(path.join(context.integTestDir, 'cdk.json'), cdkJson);
|
|
51
|
+
await shell.shell(['cdk', 'synth']);
|
|
52
|
+
})));
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC1qYXZhc2NyaXB0LmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImluaXQtamF2YXNjcmlwdC5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLG1DQUF5RjtBQUV6RixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7SUFDdkMsSUFBQSxlQUFTLEVBQUMsbUJBQW1CLFFBQVEsRUFBRSxFQUFFLElBQUEsNEJBQXNCLEVBQUMsSUFBQSxrQkFBWSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUM3RixNQUFNLEtBQUssR0FBRyxpQkFBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUUxQyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNqRSxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9EQUFvRDtRQUN0RixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFMUMsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFBLGVBQVMsRUFBQyw2QkFBNkIsRUFBRSxJQUFBLDRCQUFzQixFQUFDLElBQUEsa0JBQVksRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDN0YsdUVBQXVFO0lBQ3ZFLE1BQU0sS0FBSyxHQUFHLGlCQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBRTFDLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRTlELHFCQUFxQjtJQUNyQixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBdUIzRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFeEIsMkNBQTJDO0lBQzNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMvRSxPQUFPLENBQUMsR0FBRyxHQUFHLHlCQUF5QixDQUFDO0lBQ3hDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFekUsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFdEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aFRlbXBvcmFyeURpcmVjdG9yeSwgU2hlbGxIZWxwZXIsIHdpdGhQYWNrYWdlcyB9IGZyb20gJy4uLy4uL2xpYic7XG5cblsnYXBwJywgJ3NhbXBsZS1hcHAnXS5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgaW50ZWdUZXN0KGBpbml0IGphdmFzY3JpcHQgJHt0ZW1wbGF0ZX1gLCB3aXRoVGVtcG9yYXJ5RGlyZWN0b3J5KHdpdGhQYWNrYWdlcyhhc3luYyAoY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHNoZWxsID0gU2hlbGxIZWxwZXIuZnJvbUNvbnRleHQoY29udGV4dCk7XG4gICAgYXdhaXQgY29udGV4dC5wYWNrYWdlcy5tYWtlQ2xpQXZhaWxhYmxlKCk7XG5cbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ2NkaycsICdpbml0JywgJy1sJywgJ2phdmFzY3JpcHQnLCB0ZW1wbGF0ZV0pO1xuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnBtJywgJ3BydW5lJ10pO1xuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnBtJywgJ2xzJ10pOyAvLyB0aGlzIHdpbGwgZmFpbCBpZiB3ZSBoYXZlIHVubWV0IHBlZXIgZGVwZW5kZW5jaWVzXG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWyducG0nLCAncnVuJywgJ3Rlc3QnXSk7XG5cbiAgICBhd2FpdCBzaGVsbC5zaGVsbChbJ2NkaycsICdzeW50aCddKTtcbiAgfSkpKTtcbn0pO1xuXG5pbnRlZ1Rlc3QoJ1Rlc3QgaW1wb3J0aW5nIENESyBmcm9tIEVTTScsIHdpdGhUZW1wb3JhcnlEaXJlY3Rvcnkod2l0aFBhY2thZ2VzKGFzeW5jIChjb250ZXh0KSA9PiB7XG4gIC8vIFVzZSAnY2RrIGluaXQgLWw9amF2YXNjcmlwdCcgdG8gZ2V0IHNldCB1cCwgYnV0IHVzZSBhIGRpZmZlcmVudCBmaWxlXG4gIGNvbnN0IHNoZWxsID0gU2hlbGxIZWxwZXIuZnJvbUNvbnRleHQoY29udGV4dCk7XG4gIGF3YWl0IGNvbnRleHQucGFja2FnZXMubWFrZUNsaUF2YWlsYWJsZSgpO1xuXG4gIGF3YWl0IHNoZWxsLnNoZWxsKFsnY2RrJywgJ2luaXQnLCAnLWwnLCAnamF2YXNjcmlwdCcsICdhcHAnXSk7XG5cbiAgLy8gUmV3cml0ZSBzb21lIGZpbGVzXG4gIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4oY29udGV4dC5pbnRlZ1Rlc3REaXIsICduZXctZW50cnlwb2ludC5tanMnKSwgYFxuLy8gVGVzdCBtdWx0aXBsZSBzdHlsZXMgb2YgaW1wb3J0c1xuaW1wb3J0IHsgU3RhY2ssIGF3c19zbnMgYXMgc25zIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgU3FzU3Vic2NyaXB0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucy1zdWJzY3JpcHRpb25zJztcbmltcG9ydCAqIGFzIHNxcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3FzJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5cbmNsYXNzIFRlc3Rqc1N0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZSwgaWQsIHByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBzcXMuUXVldWUodGhpcywgJ1Rlc3Rqc1F1ZXVlJywge1xuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwMClcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvcGljID0gbmV3IHNucy5Ub3BpYyh0aGlzLCAnVGVzdGpzVG9waWMnKTtcblxuICAgIHRvcGljLmFkZFN1YnNjcmlwdGlvbihuZXcgU3FzU3Vic2NyaXB0aW9uKHF1ZXVlKSk7XG4gIH1cbn1cblxuY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbm5ldyBUZXN0anNTdGFjayhhcHAsICdUZXN0anNTdGFjaycpO1xuYCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcblxuICAvLyBSZXdyaXRlICdjZGsuanNvbicgdG8gdXNlIG5ldyBlbnRyeXBvaW50XG4gIGNvbnN0IGNka0pzb24gPSBhd2FpdCBmcy5yZWFkSnNvbihwYXRoLmpvaW4oY29udGV4dC5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpKTtcbiAgY2RrSnNvbi5hcHAgPSAnbm9kZSBuZXctZW50cnlwb2ludC5tanMnO1xuICBhd2FpdCBmcy53cml0ZUpzb24ocGF0aC5qb2luKGNvbnRleHQuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgY2RrSnNvbik7XG5cbiAgYXdhaXQgc2hlbGwuc2hlbGwoWydjZGsnLCAnc3ludGgnXSk7XG5cbn0pKSk7XG4iXX0=
|