@aws-cdk-testing/cli-integ 3.28.1 → 3.29.1
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/assertions.d.ts +14 -0
- package/lib/assertions.js +29 -0
- package/lib/with-sam.js +3 -8
- package/npm-shrinkwrap.json +110 -179
- package/package.json +2 -3
- package/resources/cdk-apps/guard-hook-app/app.js +99 -0
- package/resources/cdk-apps/guard-hook-app/cdk.json +4 -0
- package/resources/cdk-apps/nested-stack-with-fn-join-export/app.js +46 -0
- package/resources/cdk-apps/nested-stack-with-fn-join-export/cdk.json +7 -0
- package/resources/cdk-apps/nested-stack-with-iam/app.js +38 -0
- package/resources/cdk-apps/nested-stack-with-iam/cdk.json +7 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-guard-hook-failure-displays-annotations.integtest.js +19 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-nested-stacks-with-fn-join-export.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-nested-stacks-with-fn-join-export.integtest.js +10 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-skips-unnecessary-updates-for-nested-stacks.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-skips-unnecessary-updates-for-nested-stacks.integtest.js +33 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-can-be-run-twice-on-a-new-stack.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-can-be-run-twice-on-a-new-stack.integtest.js +13 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-doubly-nested-stacks.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-doubly-nested-stacks.integtest.js +16 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-nested-stacks-through-full-lifecycle.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-nested-stacks-through-full-lifecycle.integtest.js +30 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only--method-change-set-detects-security-changes-in-nested-stacks.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only--method-change-set-detects-security-changes-in-nested-stacks.integtest.js +15 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only-detects-security-changes-in-nested-stacks.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only-detects-security-changes-in-nested-stacks.integtest.js +15 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-idempotent-and-force.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-idempotent-and-force.integtest.js +18 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-then-deploy.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-then-deploy.integtest.js +17 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-without-deploying.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-without-deploying.integtest.js +15 -0
- package/tests/telemetry-integ-tests/cdk-synth-telemetry.integtest.js +4 -1
- package/tests/cli-integ-tests/deploy/cdk-fast-deploy.integtest.js +0 -33
- /package/tests/cli-integ-tests/deploy/{cdk-fast-deploy.integtest.d.ts → cdk-deploy-guard-hook-failure-displays-annotations.integtest.d.ts} +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
const cdk = require('aws-cdk-lib/core');
|
|
2
|
+
const s3 = require('aws-cdk-lib/aws-s3');
|
|
3
|
+
const iam = require('aws-cdk-lib/aws-iam');
|
|
4
|
+
const s3deploy = require('aws-cdk-lib/aws-s3-deployment');
|
|
5
|
+
|
|
6
|
+
const stackPrefix = process.env.STACK_NAME_PREFIX;
|
|
7
|
+
if (!stackPrefix) {
|
|
8
|
+
throw new Error('the STACK_NAME_PREFIX environment variable is required');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const guardRuleKey = 'rules/AWS_S3_Bucket_AccessControl.guard';
|
|
12
|
+
|
|
13
|
+
const guardRuleContent = `rule AWS_S3_Bucket_AccessControl
|
|
14
|
+
{
|
|
15
|
+
let resources = Resources.*[ Type == "AWS::S3::Bucket" ]
|
|
16
|
+
%resources[*] {
|
|
17
|
+
Properties.AccessControl not exists
|
|
18
|
+
<<
|
|
19
|
+
AccessControl is deprecated
|
|
20
|
+
>>
|
|
21
|
+
}
|
|
22
|
+
}`;
|
|
23
|
+
|
|
24
|
+
// Setup Guard Hook that will evaluate and fail the test stack
|
|
25
|
+
class GuardHookSetupStack extends cdk.Stack {
|
|
26
|
+
constructor(scope, id, props) {
|
|
27
|
+
super(scope, id, props);
|
|
28
|
+
|
|
29
|
+
// S3 bucket for Guard rules
|
|
30
|
+
const rulesBucket = new s3.Bucket(this, 'RulesBucket', {
|
|
31
|
+
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
32
|
+
autoDeleteObjects: true,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// S3 bucket for Guard logs
|
|
36
|
+
const logsBucket = new s3.Bucket(this, 'LogsBucket', {
|
|
37
|
+
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
38
|
+
autoDeleteObjects: true,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Upload Guard rule to rules bucket
|
|
42
|
+
new s3deploy.BucketDeployment(this, 'UploadGuardRule', {
|
|
43
|
+
sources: [s3deploy.Source.data(guardRuleKey, guardRuleContent)],
|
|
44
|
+
destinationBucket: rulesBucket,
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// IAM role for Guard Hook execution
|
|
48
|
+
const hookRole = new iam.Role(this, 'GuardHookExecutionRole', {
|
|
49
|
+
assumedBy: new iam.ServicePrincipal('hooks.cloudformation.amazonaws.com'),
|
|
50
|
+
});
|
|
51
|
+
hookRole.addToPolicy(new iam.PolicyStatement({
|
|
52
|
+
effect: iam.Effect.ALLOW,
|
|
53
|
+
actions: ['s3:ListBucket', 's3:GetObject', 's3:GetObjectVersion'],
|
|
54
|
+
resources: [rulesBucket.bucketArn, rulesBucket.arnForObjects('*')],
|
|
55
|
+
}));
|
|
56
|
+
hookRole.addToPolicy(new iam.PolicyStatement({
|
|
57
|
+
effect: iam.Effect.ALLOW,
|
|
58
|
+
actions: ['s3:PutObject'],
|
|
59
|
+
resources: [logsBucket.arnForObjects('*')],
|
|
60
|
+
}));
|
|
61
|
+
|
|
62
|
+
// Guard Hook - activates and configures the AWS Guard Hook in this account/region
|
|
63
|
+
new cdk.CfnGuardHook(this, 'GuardHook', {
|
|
64
|
+
alias: 'Private::Guard::TestHook',
|
|
65
|
+
executionRole: hookRole.roleArn,
|
|
66
|
+
failureMode: 'FAIL',
|
|
67
|
+
hookStatus: 'ENABLED',
|
|
68
|
+
ruleLocation: {
|
|
69
|
+
uri: `s3://${rulesBucket.bucketName}/${guardRuleKey}`,
|
|
70
|
+
},
|
|
71
|
+
logBucket: logsBucket.bucketName,
|
|
72
|
+
targetOperations: ['RESOURCE'],
|
|
73
|
+
stackFilters: {
|
|
74
|
+
filteringCriteria: "ANY",
|
|
75
|
+
stackNames: {
|
|
76
|
+
// Do not evalute this stack with the hook
|
|
77
|
+
exclude: [cdk.Aws.STACK_NAME]
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
class GuardHookTestStack extends cdk.Stack {
|
|
85
|
+
constructor(scope, id, props) {
|
|
86
|
+
super(scope, id, props);
|
|
87
|
+
|
|
88
|
+
// This bucket violates the Guard rule by using the deprecated AccessControl property
|
|
89
|
+
new s3.CfnBucket(this, 'NonCompliantBucket', {
|
|
90
|
+
accessControl: 'Private',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const app = new cdk.App();
|
|
96
|
+
new GuardHookSetupStack(app, `${stackPrefix}-guard-hook-setup`);
|
|
97
|
+
new GuardHookTestStack(app, `${stackPrefix}-guard-hook-test`);
|
|
98
|
+
|
|
99
|
+
app.synth();
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const cdk = require('aws-cdk-lib');
|
|
2
|
+
const { aws_cloudformation: cfn, aws_sns: sns, aws_ssm: ssm } = cdk;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Reproduces https://t.corp.amazon.com/D423570178
|
|
6
|
+
*
|
|
7
|
+
* When IncludeNestedStacks is true, CloudFormation validates all nested stacks
|
|
8
|
+
* together. Export names using Fn::Join with a runtime reference get collapsed
|
|
9
|
+
* to the placeholder {{IntrinsicFunction://Fn::Join}}, causing a false
|
|
10
|
+
* "duplicate Export names" error when 2+ such exports exist across nested stacks.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
class NestedStackWithFnJoinExports extends cfn.NestedStack {
|
|
14
|
+
constructor(scope, id, props) {
|
|
15
|
+
super(scope, id, props);
|
|
16
|
+
const topic = new sns.Topic(this, 'Topic');
|
|
17
|
+
new cdk.CfnOutput(this, 'ExportArn', {
|
|
18
|
+
value: topic.topicArn,
|
|
19
|
+
exportName: cdk.Fn.join(':', [props.runtimeRef, 'GetAtt', id, 'Arn']),
|
|
20
|
+
});
|
|
21
|
+
new cdk.CfnOutput(this, 'ExportName', {
|
|
22
|
+
value: topic.topicName,
|
|
23
|
+
exportName: cdk.Fn.join(':', [props.runtimeRef, 'GetAtt', id, 'Name']),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
class NestedStacksFnJoinExportStack extends cdk.Stack {
|
|
29
|
+
constructor(scope, id, props) {
|
|
30
|
+
super(scope, id, props);
|
|
31
|
+
// SSM parameter name is a runtime reference (not known at validation time)
|
|
32
|
+
const param = new ssm.StringParameter(this, 'Param', { stringValue: 'value' });
|
|
33
|
+
new NestedStackWithFnJoinExports(this, 'Nested1', { runtimeRef: param.parameterName });
|
|
34
|
+
new NestedStackWithFnJoinExports(this, 'Nested2', { runtimeRef: param.parameterName });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const app = new cdk.App();
|
|
39
|
+
|
|
40
|
+
const stackPrefix = process.env.STACK_NAME_PREFIX;
|
|
41
|
+
if (!stackPrefix) {
|
|
42
|
+
throw new Error('the STACK_NAME_PREFIX environment variable is required');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
new NestedStacksFnJoinExportStack(app, `${stackPrefix}-nested-stacks-fn-join-export`);
|
|
46
|
+
app.synth();
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const { Stack, App } = require('aws-cdk-lib/core');
|
|
2
|
+
const { NestedStack } = require('aws-cdk-lib/aws-cloudformation');
|
|
3
|
+
const iam = require('aws-cdk-lib/aws-iam');
|
|
4
|
+
const sns = require('aws-cdk-lib/aws-sns');
|
|
5
|
+
|
|
6
|
+
const stackPrefix = process.env.STACK_NAME_PREFIX;
|
|
7
|
+
if (!stackPrefix) {
|
|
8
|
+
throw new Error('the STACK_NAME_PREFIX environment variable is required');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
class IamNestedStack extends NestedStack {
|
|
12
|
+
constructor(scope, id) {
|
|
13
|
+
super(scope, id);
|
|
14
|
+
new iam.Role(this, 'NestedRole', {
|
|
15
|
+
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
class NoSecurityNestedStack extends NestedStack {
|
|
21
|
+
constructor(scope, id) {
|
|
22
|
+
super(scope, id);
|
|
23
|
+
new sns.Topic(this, 'Topic');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
class ParentStack extends Stack {
|
|
28
|
+
constructor(scope, id) {
|
|
29
|
+
super(scope, id);
|
|
30
|
+
new IamNestedStack(this, 'IamNested');
|
|
31
|
+
new NoSecurityNestedStack(this, 'NoSecurityNested');
|
|
32
|
+
new IamNestedStack(this, 'AnotherIamNested');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const app = new App();
|
|
37
|
+
new ParentStack(app, `${stackPrefix}-nested-iam`);
|
|
38
|
+
app.synth();
|
package/tests/cli-integ-tests/deploy/cdk-deploy-guard-hook-failure-displays-annotations.integtest.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
jest.setTimeout(2 * 60 * 60_000);
|
|
5
|
+
(0, lib_1.integTest)('deploy with guard hook failure displays hook annoations', (0, lib_1.withSpecificFixture)('guard-hook-app', async (fixture) => {
|
|
6
|
+
// Deploy the setup stack which creates the Guard Hook via CloudFormation
|
|
7
|
+
await fixture.cdkDeploy('guard-hook-setup');
|
|
8
|
+
// Attempt to deploy non-compliant stack (should fail due to Guard Hook)
|
|
9
|
+
const deployOutput = await fixture.cdkDeploy('guard-hook-test', {
|
|
10
|
+
options: ['--no-rollback'],
|
|
11
|
+
allowErrExit: true,
|
|
12
|
+
});
|
|
13
|
+
expect(deployOutput).toContain('CREATE_FAILED');
|
|
14
|
+
expect(deployOutput).toContain('NonCompliant Rules:');
|
|
15
|
+
expect(deployOutput).toContain('[AWS_S3_Bucket_AccessControl]');
|
|
16
|
+
expect(deployOutput).toContain('• Check was not compliant as property [/Resources/NonCompliantBucket/Properties/AccessControl[L:0,C:91]] existed.');
|
|
17
|
+
expect(deployOutput).toContain('Remediation: AccessControl is deprecated');
|
|
18
|
+
}));
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRlcGxveS1ndWFyZC1ob29rLWZhaWx1cmUtZGlzcGxheXMtYW5ub3RhdGlvbnMuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWRlcGxveS1ndWFyZC1ob29rLWZhaWx1cmUtZGlzcGxheXMtYW5ub3RhdGlvbnMuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUVqQyxJQUFBLGVBQVMsRUFDUCx5REFBeUQsRUFDekQsSUFBQSx5QkFBbUIsRUFBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDdEQseUVBQXlFO0lBQ3pFLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRTVDLHdFQUF3RTtJQUN4RSxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUU7UUFDOUQsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO1FBQzFCLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNoRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLG1IQUFtSCxDQUFDLENBQUM7SUFDcEosTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhTcGVjaWZpY0ZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTtcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IHdpdGggZ3VhcmQgaG9vayBmYWlsdXJlIGRpc3BsYXlzIGhvb2sgYW5ub2F0aW9ucycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ2d1YXJkLWhvb2stYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBEZXBsb3kgdGhlIHNldHVwIHN0YWNrIHdoaWNoIGNyZWF0ZXMgdGhlIEd1YXJkIEhvb2sgdmlhIENsb3VkRm9ybWF0aW9uXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2d1YXJkLWhvb2stc2V0dXAnKTtcblxuICAgIC8vIEF0dGVtcHQgdG8gZGVwbG95IG5vbi1jb21wbGlhbnQgc3RhY2sgKHNob3VsZCBmYWlsIGR1ZSB0byBHdWFyZCBIb29rKVxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdndWFyZC1ob29rLXRlc3QnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snXSxcbiAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICB9KTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oJ0NSRUFURV9GQUlMRUQnKTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oJ05vbkNvbXBsaWFudCBSdWxlczonKTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oJ1tBV1NfUzNfQnVja2V0X0FjY2Vzc0NvbnRyb2xdJyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCfigKIgQ2hlY2sgd2FzIG5vdCBjb21wbGlhbnQgYXMgcHJvcGVydHkgWy9SZXNvdXJjZXMvTm9uQ29tcGxpYW50QnVja2V0L1Byb3BlcnRpZXMvQWNjZXNzQ29udHJvbFtMOjAsQzo5MV1dIGV4aXN0ZWQuJyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdSZW1lZGlhdGlvbjogQWNjZXNzQ29udHJvbCBpcyBkZXByZWNhdGVkJyk7XG4gIH0pLFxuKTtcbiJdfQ==
|
package/tests/cli-integ-tests/deploy/cdk-deploy-nested-stacks-with-fn-join-export.integtest.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/tests/cli-integ-tests/deploy/cdk-deploy-nested-stacks-with-fn-join-export.integtest.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
(0, lib_1.integTest)('deploy nested stacks with Fn::Join export names', (0, lib_1.withSpecificFixture)('nested-stack-with-fn-join-export', async (fixture) => {
|
|
5
|
+
// This should succeed. With IncludeNestedStacks:true, CloudFormation
|
|
6
|
+
// incorrectly reports duplicate export names when multiple nested stacks
|
|
7
|
+
// use Fn::Join with the same runtime reference to build export names.
|
|
8
|
+
await fixture.cdkDeploy('nested-stacks-fn-join-export', { captureStderr: false });
|
|
9
|
+
}));
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRlcGxveS1uZXN0ZWQtc3RhY2tzLXdpdGgtZm4tam9pbi1leHBvcnQuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWRlcGxveS1uZXN0ZWQtc3RhY2tzLXdpdGgtZm4tam9pbi1leHBvcnQuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLGlEQUFpRCxFQUNqRCxJQUFBLHlCQUFtQixFQUFDLGtDQUFrQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUN4RSxxRUFBcUU7SUFDckUseUVBQXlFO0lBQ3pFLHNFQUFzRTtJQUN0RSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsOEJBQThCLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNwRixDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IG5lc3RlZCBzdGFja3Mgd2l0aCBGbjo6Sm9pbiBleHBvcnQgbmFtZXMnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCduZXN0ZWQtc3RhY2std2l0aC1mbi1qb2luLWV4cG9ydCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gVGhpcyBzaG91bGQgc3VjY2VlZC4gV2l0aCBJbmNsdWRlTmVzdGVkU3RhY2tzOnRydWUsIENsb3VkRm9ybWF0aW9uXG4gICAgLy8gaW5jb3JyZWN0bHkgcmVwb3J0cyBkdXBsaWNhdGUgZXhwb3J0IG5hbWVzIHdoZW4gbXVsdGlwbGUgbmVzdGVkIHN0YWNrc1xuICAgIC8vIHVzZSBGbjo6Sm9pbiB3aXRoIHRoZSBzYW1lIHJ1bnRpbWUgcmVmZXJlbmNlIHRvIGJ1aWxkIGV4cG9ydCBuYW1lcy5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbmVzdGVkLXN0YWNrcy1mbi1qb2luLWV4cG9ydCcsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG4gIH0pLFxuKTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
|
|
4
|
+
const lib_1 = require("../../../lib");
|
|
5
|
+
(0, lib_1.integTest)('deploy skips unnecessary updates for nested stacks', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
6
|
+
// we are using a stack with a nested stack because CFN will always attempt to
|
|
7
|
+
// update a nested stack, which will allow us to verify that updates are actually
|
|
8
|
+
// skipped unless --force is specified.
|
|
9
|
+
const stackArn = await fixture.cdkDeploy('with-nested-stack', { captureStderr: false });
|
|
10
|
+
const changeSet1 = await getLatestChangeSet();
|
|
11
|
+
// Deploy the same stack again, there should be no new change set created
|
|
12
|
+
await fixture.cdkDeploy('with-nested-stack');
|
|
13
|
+
const changeSet2 = await getLatestChangeSet();
|
|
14
|
+
expect(changeSet2.ChangeSetId).toEqual(changeSet1.ChangeSetId);
|
|
15
|
+
// Deploy the stack again with --force, now we should create a changeset
|
|
16
|
+
await fixture.cdkDeploy('with-nested-stack', { options: ['--force'] });
|
|
17
|
+
const changeSet3 = await getLatestChangeSet();
|
|
18
|
+
expect(changeSet3.ChangeSetId).not.toEqual(changeSet2.ChangeSetId);
|
|
19
|
+
// Deploy the stack again with tags, expected to create a new changeset
|
|
20
|
+
// even though the resources didn't change.
|
|
21
|
+
await fixture.cdkDeploy('with-nested-stack', { options: ['--tags', 'key=value'] });
|
|
22
|
+
const changeSet4 = await getLatestChangeSet();
|
|
23
|
+
expect(changeSet4.ChangeSetId).not.toEqual(changeSet3.ChangeSetId);
|
|
24
|
+
async function getLatestChangeSet() {
|
|
25
|
+
const response = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: stackArn }));
|
|
26
|
+
if (!response.Stacks?.[0]) {
|
|
27
|
+
throw new Error('Did not get a ChangeSet at all');
|
|
28
|
+
}
|
|
29
|
+
fixture.log(`Found Change Set ${response.Stacks?.[0].ChangeSetId}`);
|
|
30
|
+
return response.Stacks?.[0];
|
|
31
|
+
}
|
|
32
|
+
}));
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRlcGxveS1za2lwcy11bm5lY2Vzc2FyeS11cGRhdGVzLWZvci1uZXN0ZWQtc3RhY2tzLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1kZXBsb3ktc2tpcHMtdW5uZWNlc3NhcnktdXBkYXRlcy1mb3ItbmVzdGVkLXN0YWNrcy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBdUU7QUFDdkUsc0NBQTZEO0FBRTdELElBQUEsZUFBUyxFQUNQLG9EQUFvRCxFQUNwRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyw4RUFBOEU7SUFDOUUsaUZBQWlGO0lBQ2pGLHVDQUF1QztJQUN2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4RixNQUFNLFVBQVUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7SUFFOUMseUVBQXlFO0lBQ3pFLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sVUFBVSxHQUFHLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztJQUM5QyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFL0Qsd0VBQXdFO0lBQ3hFLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RSxNQUFNLFVBQVUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7SUFDOUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVuRSx1RUFBdUU7SUFDdkUsMkNBQTJDO0lBQzNDLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkYsTUFBTSxVQUFVLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFbkUsS0FBSyxVQUFVLGtCQUFrQjtRQUMvQixNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLDZDQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNwRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tzQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBza2lwcyB1bm5lY2Vzc2FyeSB1cGRhdGVzIGZvciBuZXN0ZWQgc3RhY2tzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gd2UgYXJlIHVzaW5nIGEgc3RhY2sgd2l0aCBhIG5lc3RlZCBzdGFjayBiZWNhdXNlIENGTiB3aWxsIGFsd2F5cyBhdHRlbXB0IHRvXG4gICAgLy8gdXBkYXRlIGEgbmVzdGVkIHN0YWNrLCB3aGljaCB3aWxsIGFsbG93IHVzIHRvIHZlcmlmeSB0aGF0IHVwZGF0ZXMgYXJlIGFjdHVhbGx5XG4gICAgLy8gc2tpcHBlZCB1bmxlc3MgLS1mb3JjZSBpcyBzcGVjaWZpZWQuXG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDEgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcblxuICAgIC8vIERlcGxveSB0aGUgc2FtZSBzdGFjayBhZ2FpbiwgdGhlcmUgc2hvdWxkIGJlIG5vIG5ldyBjaGFuZ2Ugc2V0IGNyZWF0ZWRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snKTtcbiAgICBjb25zdCBjaGFuZ2VTZXQyID0gYXdhaXQgZ2V0TGF0ZXN0Q2hhbmdlU2V0KCk7XG4gICAgZXhwZWN0KGNoYW5nZVNldDIuQ2hhbmdlU2V0SWQpLnRvRXF1YWwoY2hhbmdlU2V0MS5DaGFuZ2VTZXRJZCk7XG5cbiAgICAvLyBEZXBsb3kgdGhlIHN0YWNrIGFnYWluIHdpdGggLS1mb3JjZSwgbm93IHdlIHNob3VsZCBjcmVhdGUgYSBjaGFuZ2VzZXRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IG9wdGlvbnM6IFsnLS1mb3JjZSddIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDMgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0My5DaGFuZ2VTZXRJZCkubm90LnRvRXF1YWwoY2hhbmdlU2V0Mi5DaGFuZ2VTZXRJZCk7XG5cbiAgICAvLyBEZXBsb3kgdGhlIHN0YWNrIGFnYWluIHdpdGggdGFncywgZXhwZWN0ZWQgdG8gY3JlYXRlIGEgbmV3IGNoYW5nZXNldFxuICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSByZXNvdXJjZXMgZGlkbid0IGNoYW5nZS5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IG9wdGlvbnM6IFsnLS10YWdzJywgJ2tleT12YWx1ZSddIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDQgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0NC5DaGFuZ2VTZXRJZCkubm90LnRvRXF1YWwoY2hhbmdlU2V0My5DaGFuZ2VTZXRJZCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RDaGFuZ2VTZXQoKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQobmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogc3RhY2tBcm4gfSkpO1xuICAgICAgaWYgKCFyZXNwb25zZS5TdGFja3M/LlswXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpZCBub3QgZ2V0IGEgQ2hhbmdlU2V0IGF0IGFsbCcpO1xuICAgICAgfVxuICAgICAgZml4dHVyZS5sb2coYEZvdW5kIENoYW5nZSBTZXQgJHtyZXNwb25zZS5TdGFja3M/LlswXS5DaGFuZ2VTZXRJZH1gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5TdGFja3M/LlswXTtcbiAgICB9XG4gIH0pLFxuKTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
(0, lib_1.integTest)('cdk diff --method=change-set can be run twice on a new stack', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
5
|
+
const stackName = fixture.fullStackName('test-1');
|
|
6
|
+
// First diff creates a CREATE changeset, leaving the stack in REVIEW_IN_PROGRESS
|
|
7
|
+
const diff1 = await fixture.cdk(['diff', '--method=change-set', stackName]);
|
|
8
|
+
expect(diff1).toContain('AWS::SNS::Topic');
|
|
9
|
+
// Second diff should also succeed, not fail with "Stack does not exist" or UPDATE errors
|
|
10
|
+
const diff2 = await fixture.cdk(['diff', '--method=change-set', stackName]);
|
|
11
|
+
expect(diff2).toContain('AWS::SNS::Topic');
|
|
12
|
+
}));
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS0tbWV0aG9kLWNoYW5nZS1zZXQtY2FuLWJlLXJ1bi10d2ljZS1vbi1hLW5ldy1zdGFjay5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstY2RrLWRpZmYtLS1tZXRob2QtY2hhbmdlLXNldC1jYW4tYmUtcnVuLXR3aWNlLW9uLWEtbmV3LXN0YWNrLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUE2RDtBQUU3RCxJQUFBLGVBQVMsRUFDUCw4REFBOEQsRUFDOUQsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVsRCxpRkFBaUY7SUFDakYsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRTNDLHlGQUF5RjtJQUN6RixNQUFNLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1tZXRob2Q9Y2hhbmdlLXNldCBjYW4gYmUgcnVuIHR3aWNlIG9uIGEgbmV3IHN0YWNrJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKTtcblxuICAgIC8vIEZpcnN0IGRpZmYgY3JlYXRlcyBhIENSRUFURSBjaGFuZ2VzZXQsIGxlYXZpbmcgdGhlIHN0YWNrIGluIFJFVklFV19JTl9QUk9HUkVTU1xuICAgIGNvbnN0IGRpZmYxID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnLCBzdGFja05hbWVdKTtcbiAgICBleHBlY3QoZGlmZjEpLnRvQ29udGFpbignQVdTOjpTTlM6OlRvcGljJyk7XG5cbiAgICAvLyBTZWNvbmQgZGlmZiBzaG91bGQgYWxzbyBzdWNjZWVkLCBub3QgZmFpbCB3aXRoIFwiU3RhY2sgZG9lcyBub3QgZXhpc3RcIiBvciBVUERBVEUgZXJyb3JzXG4gICAgY29uc3QgZGlmZjIgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1tZXRob2Q9Y2hhbmdlLXNldCcsIHN0YWNrTmFtZV0pO1xuICAgIGV4cGVjdChkaWZmMikudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcbiAgfSksXG4pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
(0, lib_1.integTest)('cdk diff --method=change-set with doubly nested stacks', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
5
|
+
const stackName = fixture.fullStackName('with-doubly-nested-stack');
|
|
6
|
+
// Diff a stack with two levels of nesting
|
|
7
|
+
const diff = await fixture.cdk(['diff', '--method=change-set', stackName]);
|
|
8
|
+
// Root stack should contain the outer nested stack
|
|
9
|
+
expect(diff).toContain('AWS::CloudFormation::Stack');
|
|
10
|
+
// The inner nested stack should contain the SNS topic
|
|
11
|
+
expect(diff).toContain('AWS::SNS::Topic');
|
|
12
|
+
// Should use changeset-based diff successfully
|
|
13
|
+
expect(diff).not.toContain('Could not create a change set');
|
|
14
|
+
expect(diff).toContain('read-only change set');
|
|
15
|
+
}));
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS0tbWV0aG9kLWNoYW5nZS1zZXQtd2l0aC1kb3VibHktbmVzdGVkLXN0YWNrcy5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstY2RrLWRpZmYtLS1tZXRob2QtY2hhbmdlLXNldC13aXRoLWRvdWJseS1uZXN0ZWQtc3RhY2tzLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUE2RDtBQUU3RCxJQUFBLGVBQVMsRUFDUCx3REFBd0QsRUFDeEQsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBRXBFLDBDQUEwQztJQUMxQyxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUUzRSxtREFBbUQ7SUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3JELHNEQUFzRDtJQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUMsK0NBQStDO0lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDNUQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tbWV0aG9kPWNoYW5nZS1zZXQgd2l0aCBkb3VibHkgbmVzdGVkIHN0YWNrcycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnd2l0aC1kb3VibHktbmVzdGVkLXN0YWNrJyk7XG5cbiAgICAvLyBEaWZmIGEgc3RhY2sgd2l0aCB0d28gbGV2ZWxzIG9mIG5lc3RpbmdcbiAgICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnLCBzdGFja05hbWVdKTtcblxuICAgIC8vIFJvb3Qgc3RhY2sgc2hvdWxkIGNvbnRhaW4gdGhlIG91dGVyIG5lc3RlZCBzdGFja1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyk7XG4gICAgLy8gVGhlIGlubmVyIG5lc3RlZCBzdGFjayBzaG91bGQgY29udGFpbiB0aGUgU05TIHRvcGljXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQVdTOjpTTlM6OlRvcGljJyk7XG4gICAgLy8gU2hvdWxkIHVzZSBjaGFuZ2VzZXQtYmFzZWQgZGlmZiBzdWNjZXNzZnVsbHlcbiAgICBleHBlY3QoZGlmZikubm90LnRvQ29udGFpbignQ291bGQgbm90IGNyZWF0ZSBhIGNoYW5nZSBzZXQnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdyZWFkLW9ubHkgY2hhbmdlIHNldCcpO1xuICB9KSxcbik7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
(0, lib_1.integTest)('cdk diff --method=change-set with nested stacks through full lifecycle', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
5
|
+
const stackName = fixture.fullStackName('with-nested-stack');
|
|
6
|
+
// 1. Diff a new stack with nested stacks (CREATE change set)
|
|
7
|
+
const diffNew = await fixture.cdk(['diff', '--method=change-set', stackName]);
|
|
8
|
+
// Should show the nested stack resource in the root stack
|
|
9
|
+
expect(diffNew).toContain('AWS::CloudFormation::Stack');
|
|
10
|
+
// Should show the SNS topic from inside the nested stack
|
|
11
|
+
expect(diffNew).toContain('AWS::SNS::Topic');
|
|
12
|
+
// Should use changeset-based diff, not fall back to template diff
|
|
13
|
+
expect(diffNew).not.toContain('Could not create a change set');
|
|
14
|
+
expect(diffNew).not.toContain('falling back to template diff');
|
|
15
|
+
// Should show the changeset info message
|
|
16
|
+
expect(diffNew).toContain('read-only change set');
|
|
17
|
+
// 2. Deploy the stack
|
|
18
|
+
await fixture.cdkDeploy('with-nested-stack');
|
|
19
|
+
// 3. Diff after deploy with no changes — should report no differences
|
|
20
|
+
const diffNoChanges = await fixture.cdk(['diff', '--method=change-set', stackName]);
|
|
21
|
+
expect(diffNoChanges).toContain('There were no differences');
|
|
22
|
+
expect(diffNoChanges).not.toContain('Could not create a change set');
|
|
23
|
+
// 4. Destroy the stack
|
|
24
|
+
await fixture.cdkDestroy('with-nested-stack');
|
|
25
|
+
// 5. Diff again after destroy (CREATE change set for a new stack)
|
|
26
|
+
const diffAfterDestroy = await fixture.cdk(['diff', '--method=change-set', stackName]);
|
|
27
|
+
expect(diffAfterDestroy).toContain('AWS::CloudFormation::Stack');
|
|
28
|
+
expect(diffAfterDestroy).toContain('AWS::SNS::Topic');
|
|
29
|
+
}));
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS0tbWV0aG9kLWNoYW5nZS1zZXQtd2l0aC1uZXN0ZWQtc3RhY2tzLXRocm91Z2gtZnVsbC1saWZlY3ljbGUuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWNkay1kaWZmLS0tbWV0aG9kLWNoYW5nZS1zZXQtd2l0aC1uZXN0ZWQtc3RhY2tzLXRocm91Z2gtZnVsbC1saWZlY3ljbGUuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQTZEO0FBRTdELElBQUEsZUFBUyxFQUNQLHdFQUF3RSxFQUN4RSxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFN0QsNkRBQTZEO0lBQzdELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlFLDBEQUEwRDtJQUMxRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDeEQseURBQXlEO0lBQ3pELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM3QyxrRUFBa0U7SUFDbEUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUMvRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQy9ELHlDQUF5QztJQUN6QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFbEQsc0JBQXNCO0lBQ3RCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRTdDLHNFQUFzRTtJQUN0RSxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNwRixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDN0QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUVyRSx1QkFBdUI7SUFDdkIsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFOUMsa0VBQWtFO0lBQ2xFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDakUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDeEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1tZXRob2Q9Y2hhbmdlLXNldCB3aXRoIG5lc3RlZCBzdGFja3MgdGhyb3VnaCBmdWxsIGxpZmVjeWNsZScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnd2l0aC1uZXN0ZWQtc3RhY2snKTtcblxuICAgIC8vIDEuIERpZmYgYSBuZXcgc3RhY2sgd2l0aCBuZXN0ZWQgc3RhY2tzIChDUkVBVEUgY2hhbmdlIHNldClcbiAgICBjb25zdCBkaWZmTmV3ID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnLCBzdGFja05hbWVdKTtcbiAgICAvLyBTaG91bGQgc2hvdyB0aGUgbmVzdGVkIHN0YWNrIHJlc291cmNlIGluIHRoZSByb290IHN0YWNrXG4gICAgZXhwZWN0KGRpZmZOZXcpLnRvQ29udGFpbignQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snKTtcbiAgICAvLyBTaG91bGQgc2hvdyB0aGUgU05TIHRvcGljIGZyb20gaW5zaWRlIHRoZSBuZXN0ZWQgc3RhY2tcbiAgICBleHBlY3QoZGlmZk5ldykudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcbiAgICAvLyBTaG91bGQgdXNlIGNoYW5nZXNldC1iYXNlZCBkaWZmLCBub3QgZmFsbCBiYWNrIHRvIHRlbXBsYXRlIGRpZmZcbiAgICBleHBlY3QoZGlmZk5ldykubm90LnRvQ29udGFpbignQ291bGQgbm90IGNyZWF0ZSBhIGNoYW5nZSBzZXQnKTtcbiAgICBleHBlY3QoZGlmZk5ldykubm90LnRvQ29udGFpbignZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlIGRpZmYnKTtcbiAgICAvLyBTaG91bGQgc2hvdyB0aGUgY2hhbmdlc2V0IGluZm8gbWVzc2FnZVxuICAgIGV4cGVjdChkaWZmTmV3KS50b0NvbnRhaW4oJ3JlYWQtb25seSBjaGFuZ2Ugc2V0Jyk7XG5cbiAgICAvLyAyLiBEZXBsb3kgdGhlIHN0YWNrXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrJyk7XG5cbiAgICAvLyAzLiBEaWZmIGFmdGVyIGRlcGxveSB3aXRoIG5vIGNoYW5nZXMg4oCUIHNob3VsZCByZXBvcnQgbm8gZGlmZmVyZW5jZXNcbiAgICBjb25zdCBkaWZmTm9DaGFuZ2VzID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnLCBzdGFja05hbWVdKTtcbiAgICBleHBlY3QoZGlmZk5vQ2hhbmdlcykudG9Db250YWluKCdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzJyk7XG4gICAgZXhwZWN0KGRpZmZOb0NoYW5nZXMpLm5vdC50b0NvbnRhaW4oJ0NvdWxkIG5vdCBjcmVhdGUgYSBjaGFuZ2Ugc2V0Jyk7XG5cbiAgICAvLyA0LiBEZXN0cm95IHRoZSBzdGFja1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnd2l0aC1uZXN0ZWQtc3RhY2snKTtcblxuICAgIC8vIDUuIERpZmYgYWdhaW4gYWZ0ZXIgZGVzdHJveSAoQ1JFQVRFIGNoYW5nZSBzZXQgZm9yIGEgbmV3IHN0YWNrKVxuICAgIGNvbnN0IGRpZmZBZnRlckRlc3Ryb3kgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1tZXRob2Q9Y2hhbmdlLXNldCcsIHN0YWNrTmFtZV0pO1xuICAgIGV4cGVjdChkaWZmQWZ0ZXJEZXN0cm95KS50b0NvbnRhaW4oJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyk7XG4gICAgZXhwZWN0KGRpZmZBZnRlckRlc3Ryb3kpLnRvQ29udGFpbignQVdTOjpTTlM6OlRvcGljJyk7XG4gIH0pLFxuKTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '../../../lib/assertions';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
require("../../../lib/assertions");
|
|
5
|
+
(0, lib_1.integTest)('cdk diff --security-only --method=change-set detects security changes in nested stacks', (0, lib_1.withSpecificFixture)('nested-stack-with-iam', async (fixture) => {
|
|
6
|
+
const stackName = fixture.fullStackName('nested-iam');
|
|
7
|
+
const diff = await fixture.cdk(['diff', '--security-only', '--method=change-set', stackName]);
|
|
8
|
+
// Two nested stacks have IAM roles
|
|
9
|
+
expect(diff).toContain('sts:AssumeRole');
|
|
10
|
+
expect(diff).toContain('lambda.amazonaws.com');
|
|
11
|
+
expect(diff).toContain('Number of stacks with differences: 2');
|
|
12
|
+
// The nested stack without security changes should say so on the next line
|
|
13
|
+
expect(diff).toHaveNextLineMatching(/Stack NoSecurityNested\S+/, 'There were no security-related changes');
|
|
14
|
+
}));
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS0tc2VjdXJpdHktb25seS0tbWV0aG9kLWNoYW5nZS1zZXQtZGV0ZWN0cy1zZWN1cml0eS1jaGFuZ2VzLWluLW5lc3RlZC1zdGFja3MuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWNkay1kaWZmLS0tc2VjdXJpdHktb25seS0tbWV0aG9kLWNoYW5nZS1zZXQtZGV0ZWN0cy1zZWN1cml0eS1jaGFuZ2VzLWluLW5lc3RlZC1zdGFja3MuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBQzlELG1DQUFpQztBQUVqQyxJQUFBLGVBQVMsRUFDUCx3RkFBd0YsRUFDeEYsSUFBQSx5QkFBbUIsRUFBQyx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDN0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV0RCxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUU5RixtQ0FBbUM7SUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFFL0QsMkVBQTJFO0lBQzNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQywyQkFBMkIsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFDO0FBQzdHLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhTcGVjaWZpY0ZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuaW1wb3J0ICcuLi8uLi8uLi9saWIvYXNzZXJ0aW9ucyc7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSAtLW1ldGhvZD1jaGFuZ2Utc2V0IGRldGVjdHMgc2VjdXJpdHkgY2hhbmdlcyBpbiBuZXN0ZWQgc3RhY2tzJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgnbmVzdGVkLXN0YWNrLXdpdGgtaWFtJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBzdGFja05hbWUgPSBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ25lc3RlZC1pYW0nKTtcblxuICAgIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnLCBzdGFja05hbWVdKTtcblxuICAgIC8vIFR3byBuZXN0ZWQgc3RhY2tzIGhhdmUgSUFNIHJvbGVzXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignc3RzOkFzc3VtZVJvbGUnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ051bWJlciBvZiBzdGFja3Mgd2l0aCBkaWZmZXJlbmNlczogMicpO1xuXG4gICAgLy8gVGhlIG5lc3RlZCBzdGFjayB3aXRob3V0IHNlY3VyaXR5IGNoYW5nZXMgc2hvdWxkIHNheSBzbyBvbiB0aGUgbmV4dCBsaW5lXG4gICAgZXhwZWN0KGRpZmYpLnRvSGF2ZU5leHRMaW5lTWF0Y2hpbmcoL1N0YWNrIE5vU2VjdXJpdHlOZXN0ZWRcXFMrLywgJ1RoZXJlIHdlcmUgbm8gc2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzJyk7XG4gIH0pLFxuKTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '../../../lib/assertions';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
require("../../../lib/assertions");
|
|
5
|
+
(0, lib_1.integTest)('cdk diff --security-only detects security changes in nested stacks', (0, lib_1.withSpecificFixture)('nested-stack-with-iam', async (fixture) => {
|
|
6
|
+
const stackName = fixture.fullStackName('nested-iam');
|
|
7
|
+
const diff = await fixture.cdk(['diff', '--security-only', stackName]);
|
|
8
|
+
// Two nested stacks have IAM roles
|
|
9
|
+
expect(diff).toContain('sts:AssumeRole');
|
|
10
|
+
expect(diff).toContain('lambda.amazonaws.com');
|
|
11
|
+
expect(diff).toContain('Number of stacks with differences: 2');
|
|
12
|
+
// The nested stack without security changes should say so on the next line
|
|
13
|
+
expect(diff).toHaveNextLineMatching(/Stack NoSecurityNested\S+/, 'There were no security-related changes');
|
|
14
|
+
}));
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS0tc2VjdXJpdHktb25seS1kZXRlY3RzLXNlY3VyaXR5LWNoYW5nZXMtaW4tbmVzdGVkLXN0YWNrcy5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstY2RrLWRpZmYtLS1zZWN1cml0eS1vbmx5LWRldGVjdHMtc2VjdXJpdHktY2hhbmdlcy1pbi1uZXN0ZWQtc3RhY2tzLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUE4RDtBQUM5RCxtQ0FBaUM7QUFFakMsSUFBQSxlQUFTLEVBQ1Asb0VBQW9FLEVBQ3BFLElBQUEseUJBQW1CLEVBQUMsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQzdELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFdkUsbUNBQW1DO0lBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBRS9ELDJFQUEyRTtJQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsc0JBQXNCLENBQUMsMkJBQTJCLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztBQUM3RyxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCAnLi4vLi4vLi4vbGliL2Fzc2VydGlvbnMnO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgZGV0ZWN0cyBzZWN1cml0eSBjaGFuZ2VzIGluIG5lc3RlZCBzdGFja3MnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCduZXN0ZWQtc3RhY2std2l0aC1pYW0nLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbmVzdGVkLWlhbScpO1xuXG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCBzdGFja05hbWVdKTtcblxuICAgIC8vIFR3byBuZXN0ZWQgc3RhY2tzIGhhdmUgSUFNIHJvbGVzXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignc3RzOkFzc3VtZVJvbGUnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ051bWJlciBvZiBzdGFja3Mgd2l0aCBkaWZmZXJlbmNlczogMicpO1xuXG4gICAgLy8gVGhlIG5lc3RlZCBzdGFjayB3aXRob3V0IHNlY3VyaXR5IGNoYW5nZXMgc2hvdWxkIHNheSBzbyBvbiB0aGUgbmV4dCBsaW5lXG4gICAgZXhwZWN0KGRpZmYpLnRvSGF2ZU5leHRMaW5lTWF0Y2hpbmcoL1N0YWNrIE5vU2VjdXJpdHlOZXN0ZWRcXFMrLywgJ1RoZXJlIHdlcmUgbm8gc2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzJyk7XG4gIH0pLFxuKTtcbiJdfQ==
|
package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-idempotent-and-force.integtest.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-idempotent-and-force.integtest.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
|
|
5
|
+
(0, lib_1.integTest)('publish-assets is idempotent and --force re-uploads', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
6
|
+
const stackName = 'lambda';
|
|
7
|
+
const fullStackName = fixture.fullStackName(stackName);
|
|
8
|
+
// First publish
|
|
9
|
+
const firstOutput = await fixture.cdk(['publish-assets', fullStackName, '--unstable=publish-assets']);
|
|
10
|
+
expect(firstOutput).toMatch('Assets published successfully');
|
|
11
|
+
// Second publish without --force should detect nothing to do
|
|
12
|
+
const secondOutput = await fixture.cdk(['publish-assets', fullStackName, '--unstable=publish-assets']);
|
|
13
|
+
expect(secondOutput).toMatch('All assets are already published');
|
|
14
|
+
// Third publish with --force should re-upload
|
|
15
|
+
const forceOutput = await fixture.cdk(['publish-assets', fullStackName, '--unstable=publish-assets', '--force']);
|
|
16
|
+
expect(forceOutput).toMatch('Assets published successfully');
|
|
17
|
+
}));
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXB1Ymxpc2gtYXNzZXRzLWlkZW1wb3RlbnQtYW5kLWZvcmNlLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1wdWJsaXNoLWFzc2V0cy1pZGVtcG90ZW50LWFuZC1mb3JjZS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBNkQ7QUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLElBQUEsZUFBUyxFQUNQLHFEQUFxRCxFQUNyRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDM0IsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2RCxnQkFBZ0I7SUFDaEIsTUFBTSxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQztJQUN0RyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFFN0QsNkRBQTZEO0lBQzdELE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLENBQUM7SUFDdkcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBRWpFLDhDQUE4QztJQUM5QyxNQUFNLFdBQVcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsMkJBQTJCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqSCxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDIgKiA2MCAqIDYwXzAwMCk7IC8vIEluY2x1ZGVzIHRoZSB0aW1lIHRvIGFjcXVpcmUgbG9ja3MsIHdvcnN0LWNhc2Ugc2luZ2xlLXRocmVhZGVkIHJ1bnRpbWVcblxuaW50ZWdUZXN0KFxuICAncHVibGlzaC1hc3NldHMgaXMgaWRlbXBvdGVudCBhbmQgLS1mb3JjZSByZS11cGxvYWRzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ2xhbWJkYSc7XG4gICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpO1xuXG4gICAgLy8gRmlyc3QgcHVibGlzaFxuICAgIGNvbnN0IGZpcnN0T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydwdWJsaXNoLWFzc2V0cycsIGZ1bGxTdGFja05hbWUsICctLXVuc3RhYmxlPXB1Ymxpc2gtYXNzZXRzJ10pO1xuICAgIGV4cGVjdChmaXJzdE91dHB1dCkudG9NYXRjaCgnQXNzZXRzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHknKTtcblxuICAgIC8vIFNlY29uZCBwdWJsaXNoIHdpdGhvdXQgLS1mb3JjZSBzaG91bGQgZGV0ZWN0IG5vdGhpbmcgdG8gZG9cbiAgICBjb25zdCBzZWNvbmRPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ3B1Ymxpc2gtYXNzZXRzJywgZnVsbFN0YWNrTmFtZSwgJy0tdW5zdGFibGU9cHVibGlzaC1hc3NldHMnXSk7XG4gICAgZXhwZWN0KHNlY29uZE91dHB1dCkudG9NYXRjaCgnQWxsIGFzc2V0cyBhcmUgYWxyZWFkeSBwdWJsaXNoZWQnKTtcblxuICAgIC8vIFRoaXJkIHB1Ymxpc2ggd2l0aCAtLWZvcmNlIHNob3VsZCByZS11cGxvYWRcbiAgICBjb25zdCBmb3JjZU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsncHVibGlzaC1hc3NldHMnLCBmdWxsU3RhY2tOYW1lLCAnLS11bnN0YWJsZT1wdWJsaXNoLWFzc2V0cycsICctLWZvcmNlJ10pO1xuICAgIGV4cGVjdChmb3JjZU91dHB1dCkudG9NYXRjaCgnQXNzZXRzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHknKTtcbiAgfSksXG4pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
|
|
5
|
+
(0, lib_1.integTest)('publish-assets then deploy detects already uploaded assets', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
6
|
+
const stackName = 'lambda';
|
|
7
|
+
const fullStackName = fixture.fullStackName(stackName);
|
|
8
|
+
// First, publish assets
|
|
9
|
+
const publishOutput = await fixture.cdk(['publish-assets', fullStackName, '--unstable=publish-assets']);
|
|
10
|
+
expect(publishOutput).toMatch('Assets published successfully');
|
|
11
|
+
// Then deploy the same stack; it should detect the already published assets and skip re-publishing
|
|
12
|
+
const deployOutput = await fixture.cdkDeploy(stackName, { options: ['-v'], captureStderr: true });
|
|
13
|
+
expect(deployOutput).toMatch(/0 still need to be published/);
|
|
14
|
+
// Clean up
|
|
15
|
+
await fixture.cdkDestroy(stackName);
|
|
16
|
+
}));
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXB1Ymxpc2gtYXNzZXRzLXRoZW4tZGVwbG95LmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1wdWJsaXNoLWFzc2V0cy10aGVuLWRlcGxveS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBNkQ7QUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLElBQUEsZUFBUyxFQUNQLDREQUE0RCxFQUM1RCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDM0IsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2RCx3QkFBd0I7SUFDeEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQztJQUN4RyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFFL0QsbUdBQW1HO0lBQ25HLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFN0QsV0FBVztJQUNYLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gICdwdWJsaXNoLWFzc2V0cyB0aGVuIGRlcGxveSBkZXRlY3RzIGFscmVhZHkgdXBsb2FkZWQgYXNzZXRzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ2xhbWJkYSc7XG4gICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpO1xuXG4gICAgLy8gRmlyc3QsIHB1Ymxpc2ggYXNzZXRzXG4gICAgY29uc3QgcHVibGlzaE91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsncHVibGlzaC1hc3NldHMnLCBmdWxsU3RhY2tOYW1lLCAnLS11bnN0YWJsZT1wdWJsaXNoLWFzc2V0cyddKTtcbiAgICBleHBlY3QocHVibGlzaE91dHB1dCkudG9NYXRjaCgnQXNzZXRzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHknKTtcblxuICAgIC8vIFRoZW4gZGVwbG95IHRoZSBzYW1lIHN0YWNrOyBpdCBzaG91bGQgZGV0ZWN0IHRoZSBhbHJlYWR5IHB1Ymxpc2hlZCBhc3NldHMgYW5kIHNraXAgcmUtcHVibGlzaGluZ1xuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwgeyBvcHRpb25zOiBbJy12J10sIGNhcHR1cmVTdGRlcnI6IHRydWUgfSk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9NYXRjaCgvMCBzdGlsbCBuZWVkIHRvIGJlIHB1Ymxpc2hlZC8pO1xuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koc3RhY2tOYW1lKTtcbiAgfSksXG4pO1xuIl19
|
package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-without-deploying.integtest.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-without-deploying.integtest.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
|
|
4
|
+
const lib_1 = require("../../../lib");
|
|
5
|
+
jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
|
|
6
|
+
(0, lib_1.integTest)('publish-assets without deploying', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
7
|
+
const stackName = 'lambda';
|
|
8
|
+
const fullStackName = fixture.fullStackName(stackName);
|
|
9
|
+
const output = await fixture.cdk(['publish-assets', fullStackName, '--unstable=publish-assets']);
|
|
10
|
+
expect(output).toMatch('Assets published successfully');
|
|
11
|
+
// assert the stack was not deployed
|
|
12
|
+
await expect(fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: fullStackName })))
|
|
13
|
+
.rejects.toThrow(/does not exist/);
|
|
14
|
+
}));
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXB1Ymxpc2gtYXNzZXRzLXdpdGhvdXQtZGVwbG95aW5nLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1wdWJsaXNoLWFzc2V0cy13aXRob3V0LWRlcGxveWluZy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBdUU7QUFDdkUsc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCxrQ0FBa0MsRUFDbEMsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzNCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQztJQUNqRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFFeEQsb0NBQW9DO0lBQ3BDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLDZDQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNuRyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tzQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmludGVnVGVzdChcbiAgJ3B1Ymxpc2gtYXNzZXRzIHdpdGhvdXQgZGVwbG95aW5nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ2xhbWJkYSc7XG4gICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydwdWJsaXNoLWFzc2V0cycsIGZ1bGxTdGFja05hbWUsICctLXVuc3RhYmxlPXB1Ymxpc2gtYXNzZXRzJ10pO1xuICAgIGV4cGVjdChvdXRwdXQpLnRvTWF0Y2goJ0Fzc2V0cyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICAvLyBhc3NlcnQgdGhlIHN0YWNrIHdhcyBub3QgZGVwbG95ZWRcbiAgICBhd2FpdCBleHBlY3QoZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pKSlcbiAgICAgIC5yZWplY3RzLnRvVGhyb3coL2RvZXMgbm90IGV4aXN0Lyk7XG4gIH0pLFxuKTtcbiJdfQ==
|
|
@@ -59,6 +59,9 @@ const lib_1 = require("../../lib");
|
|
|
59
59
|
duration: expect.objectContaining({
|
|
60
60
|
total: expect.anything(),
|
|
61
61
|
}),
|
|
62
|
+
counters: expect.objectContaining({
|
|
63
|
+
stacks: expect.anything(),
|
|
64
|
+
}),
|
|
62
65
|
}),
|
|
63
66
|
expect.objectContaining({
|
|
64
67
|
event: expect.objectContaining({
|
|
@@ -111,4 +114,4 @@ const lib_1 = require("../../lib");
|
|
|
111
114
|
]);
|
|
112
115
|
fs.unlinkSync(telemetryFile);
|
|
113
116
|
}));
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXN5bnRoLXRlbGVtZXRyeS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstc3ludGgtdGVsZW1ldHJ5LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsMkNBQXdEO0FBQ3hELG1DQUEwRDtBQUUxRCxJQUFBLGVBQVMsRUFDUCwrQkFBK0IsRUFDL0IsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV0RixNQUFNLFdBQVcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ25DLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsb0JBQW9CLGFBQWEsRUFBRSxDQUFDLEVBQy9FLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUNwQixDQUFDO0lBRUYsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUU3RCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkIsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1lBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7b0JBQzVCLFVBQVUsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7d0JBQ2xDLFFBQVEsRUFB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QyxnQkFBZ0IsQ0FBQztnQkFDbkMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUM1QixnQkFBZ0IsRUFBRSxxQ0FBeUI7Z0JBQzNDLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO2dCQUNyRCxNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDekIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2FBQzdCLENBQUM7WUFDRixXQUFXLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDO2dCQUNuQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDckIsRUFBRSxFQUFFO29CQUNGLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO29CQUMzQixPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtpQkFDM0I7Z0JBQ0QsV0FBVyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7YUFDL0IsQ0FBQztZQUNGLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3BDLFFBQVEsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2hDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2FBQ3pCLENBQUM7U0FDSCxDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IENVUlJFTlRfVEVMRU1FVFJZX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2NkayBzeW50aCB3aXRoIHRlbGVtZXRyeSBkYXRhJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgdGVsZW1ldHJ5RmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgYHRlbGVtZXRyeS0ke0RhdGUubm93KCl9Lmpzb25gKTtcblxuICAgIGNvbnN0IHN5bnRoT3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoXG4gICAgICBbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKSwgYC0tdGVsZW1ldHJ5LWZpbGU9JHt0ZWxlbWV0cnlGaWxlfWBdLFxuICAgICAgeyB2ZXJib3NlTGV2ZWw6IDMgfSwgLy8gdHJhY2UgbW9kZVxuICAgICk7XG5cbiAgICAvLyBDaGVjayB0aGUgdHJhY2UgdGhhdCB0ZWxlbWV0cnkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICAgIGV4cGVjdChzeW50aE91dHB1dCkudG9Db250YWluKCdUZWxlbWV0cnkgU2VudCBTdWNjZXNzZnVsbHknKTtcblxuICAgIGNvbnN0IGpzb24gPSBmcy5yZWFkSlNPTlN5bmModGVsZW1ldHJ5RmlsZSk7XG4gICAgZXhwZWN0KGpzb24pLnRvRXF1YWwoW1xuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBldmVudDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGNvbW1hbmQ6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICAgIHBhdGg6IFsnc3ludGgnLCAnJFNUQUNLU18xJ10sXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICAgIHVuc3RhYmxlOiAnPHJlZGFjdGVkPicsXG4gICAgICAgICAgICAgIFsndGVsZW1ldHJ5LWZpbGUnXTogJzxyZWRhY3RlZD4nLFxuICAgICAgICAgICAgICBsb29rdXBzOiB0cnVlLFxuICAgICAgICAgICAgICBbJ2lnbm9yZS1lcnJvcnMnXTogZmFsc2UsXG4gICAgICAgICAgICAgIGpzb246IGZhbHNlLFxuICAgICAgICAgICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgICAgICAgICAgIHN0YWdpbmc6IHRydWUsXG4gICAgICAgICAgICAgIFsnbm8tY29sb3InXTogZmFsc2UsXG4gICAgICAgICAgICAgIGNpOiBleHBlY3QuYW55dGhpbmcoKSwgLy8gY2hhbmdlcyBiYXNlZCBvbiB3aGVyZSB0aGlzIGlzIGNhbGxlZFxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICBxdWlldDogZmFsc2UsXG4gICAgICAgICAgICAgIHllczogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3RhdGU6ICdTVUNDRUVERUQnLFxuICAgICAgICAgIGV2ZW50VHlwZTogJ1NZTlRIJyxcbiAgICAgICAgfSksXG4gICAgICAgIC8vIHNvbWUgb2YgdGhlc2UgY2FuIGNoYW5nZTsgYnV0IHdlIGFzc2VydCB0aGF0IHNvbWUgdmFsdWUgaXMgcmVjb3JkZWRcbiAgICAgICAgaWRlbnRpZmllcnM6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBpbnN0YWxsYXRpb25JZDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgc2Vzc2lvbklkOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICB0ZWxlbWV0cnlWZXJzaW9uOiBDVVJSRU5UX1RFTEVNRVRSWV9WRVJTSU9OLFxuICAgICAgICAgIGNka0NsaVZlcnNpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIGNka0xpYnJhcnlWZXJzaW9uOiBmaXh0dXJlLmxpYnJhcnkucmVxdWVzdGVkVmVyc2lvbigpLFxuICAgICAgICAgIHJlZ2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgZXZlbnRJZDogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJzoxJyksXG4gICAgICAgICAgdGltZXN0YW1wOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgfSksXG4gICAgICAgIGVudmlyb25tZW50OiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgY2k6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIG9zOiB7XG4gICAgICAgICAgICBwbGF0Zm9ybTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgICByZWxlYXNlOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vZGVWZXJzaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgfSksXG4gICAgICAgIHByb2plY3Q6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHt9KSxcbiAgICAgICAgZHVyYXRpb246IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICB0b3RhbDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIGV2ZW50OiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgY29tbWFuZDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgcGF0aDogWydzeW50aCcsICckU1RBQ0tTXzEnXSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICAgICAgdW5zdGFibGU6ICc8cmVkYWN0ZWQ+JyxcbiAgICAgICAgICAgICAgWyd0ZWxlbWV0cnktZmlsZSddOiAnPHJlZGFjdGVkPicsXG4gICAgICAgICAgICAgIGxvb2t1cHM6IHRydWUsXG4gICAgICAgICAgICAgIFsnaWdub3JlLWVycm9ycyddOiBmYWxzZSxcbiAgICAgICAgICAgICAganNvbjogZmFsc2UsXG4gICAgICAgICAgICAgIGRlYnVnOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3RhZ2luZzogdHJ1ZSxcbiAgICAgICAgICAgICAgWyduby1jb2xvciddOiBmYWxzZSxcbiAgICAgICAgICAgICAgY2k6IGV4cGVjdC5hbnl0aGluZygpLCAvLyBjaGFuZ2VzIGJhc2VkIG9uIHdoZXJlIHRoaXMgaXMgY2FsbGVkXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IHRydWUsXG4gICAgICAgICAgICAgIHF1aWV0OiBmYWxzZSxcbiAgICAgICAgICAgICAgeWVzOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzdGF0ZTogJ1NVQ0NFRURFRCcsXG4gICAgICAgICAgZXZlbnRUeXBlOiAnSU5WT0tFJyxcbiAgICAgICAgfSksXG4gICAgICAgIGlkZW50aWZpZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIHNlc3Npb25JZDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgdGVsZW1ldHJ5VmVyc2lvbjogQ1VSUkVOVF9URUxFTUVUUllfVkVSU0lPTixcbiAgICAgICAgICBjZGtDbGlWZXJzaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBjZGtMaWJyYXJ5VmVyc2lvbjogZml4dHVyZS5saWJyYXJ5LnJlcXVlc3RlZFZlcnNpb24oKSxcbiAgICAgICAgICByZWdpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIGV2ZW50SWQ6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCc6MicpLFxuICAgICAgICAgIHRpbWVzdGFtcDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBlbnZpcm9ubWVudDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGNpOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBvczoge1xuICAgICAgICAgICAgcGxhdGZvcm06IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgICAgcmVsZWFzZTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub2RlVmVyc2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBwcm9qZWN0OiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7fSksXG4gICAgICAgIGR1cmF0aW9uOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgdG90YWw6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIF0pO1xuICAgIGZzLnVubGlua1N5bmModGVsZW1ldHJ5RmlsZSk7XG4gIH0pLFxuKTtcbiJdfQ==
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXN5bnRoLXRlbGVtZXRyeS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstc3ludGgtdGVsZW1ldHJ5LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsMkNBQXdEO0FBQ3hELG1DQUEwRDtBQUUxRCxJQUFBLGVBQVMsRUFDUCwrQkFBK0IsRUFDL0IsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV0RixNQUFNLFdBQVcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ25DLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsb0JBQW9CLGFBQWEsRUFBRSxDQUFDLEVBQy9FLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUNwQixDQUFDO0lBRUYsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUU3RCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkIsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1lBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7b0JBQzVCLFVBQVUsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7d0JBQ2xDLFFBQVEsRUFB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ZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBDVVJSRU5UX1RFTEVNRVRSWV9WRVJTSU9OIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi9saWInO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgc3ludGggd2l0aCB0ZWxlbWV0cnkgZGF0YScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHRlbGVtZXRyeUZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsIGB0ZWxlbWV0cnktJHtEYXRlLm5vdygpfS5qc29uYCk7XG5cbiAgICBjb25zdCBzeW50aE91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFxuICAgICAgWydzeW50aCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyksIGAtLXRlbGVtZXRyeS1maWxlPSR7dGVsZW1ldHJ5RmlsZX1gXSxcbiAgICAgIHsgdmVyYm9zZUxldmVsOiAzIH0sIC8vIHRyYWNlIG1vZGVcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgdGhlIHRyYWNlIHRoYXQgdGVsZW1ldHJ5IHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHlcbiAgICBleHBlY3Qoc3ludGhPdXRwdXQpLnRvQ29udGFpbignVGVsZW1ldHJ5IFNlbnQgU3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICBjb25zdCBqc29uID0gZnMucmVhZEpTT05TeW5jKHRlbGVtZXRyeUZpbGUpO1xuICAgIGV4cGVjdChqc29uKS50b0VxdWFsKFtcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgZXZlbnQ6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBjb21tYW5kOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBwYXRoOiBbJ3N5bnRoJywgJyRTVEFDS1NfMSddLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgICB1bnN0YWJsZTogJzxyZWRhY3RlZD4nLFxuICAgICAgICAgICAgICBbJ3RlbGVtZXRyeS1maWxlJ106ICc8cmVkYWN0ZWQ+JyxcbiAgICAgICAgICAgICAgbG9va3VwczogdHJ1ZSxcbiAgICAgICAgICAgICAgWydpZ25vcmUtZXJyb3JzJ106IGZhbHNlLFxuICAgICAgICAgICAgICBqc29uOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGVidWc6IGZhbHNlLFxuICAgICAgICAgICAgICBzdGFnaW5nOiB0cnVlLFxuICAgICAgICAgICAgICBbJ25vLWNvbG9yJ106IGZhbHNlLFxuICAgICAgICAgICAgICBjaTogZXhwZWN0LmFueXRoaW5nKCksIC8vIGNoYW5nZXMgYmFzZWQgb24gd2hlcmUgdGhpcyBpcyBjYWxsZWRcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgcXVpZXQ6IGZhbHNlLFxuICAgICAgICAgICAgICB5ZXM6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgY29udGV4dDoge30sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHN0YXRlOiAnU1VDQ0VFREVEJyxcbiAgICAgICAgICBldmVudFR5cGU6ICdTWU5USCcsXG4gICAgICAgIH0pLFxuICAgICAgICAvLyBzb21lIG9mIHRoZXNlIGNhbiBjaGFuZ2U7IGJ1dCB3ZSBhc3NlcnQgdGhhdCBzb21lIHZhbHVlIGlzIHJlY29yZGVkXG4gICAgICAgIGlkZW50aWZpZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIHNlc3Npb25JZDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgdGVsZW1ldHJ5VmVyc2lvbjogQ1VSUkVOVF9URUxFTUVUUllfVkVSU0lPTixcbiAgICAgICAgICBjZGtDbGlWZXJzaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBjZGtMaWJyYXJ5VmVyc2lvbjogZml4dHVyZS5saWJyYXJ5LnJlcXVlc3RlZFZlcnNpb24oKSxcbiAgICAgICAgICByZWdpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIGV2ZW50SWQ6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCc6MScpLFxuICAgICAgICAgIHRpbWVzdGFtcDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBlbnZpcm9ubWVudDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGNpOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBvczoge1xuICAgICAgICAgICAgcGxhdGZvcm06IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgICAgcmVsZWFzZTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub2RlVmVyc2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBwcm9qZWN0OiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7fSksXG4gICAgICAgIGR1cmF0aW9uOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgdG90YWw6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgICAgY291bnRlcnM6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBzdGFja3M6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBldmVudDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGNvbW1hbmQ6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICAgIHBhdGg6IFsnc3ludGgnLCAnJFNUQUNLU18xJ10sXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICAgIHVuc3RhYmxlOiAnPHJlZGFjdGVkPicsXG4gICAgICAgICAgICAgIFsndGVsZW1ldHJ5LWZpbGUnXTogJzxyZWRhY3RlZD4nLFxuICAgICAgICAgICAgICBsb29rdXBzOiB0cnVlLFxuICAgICAgICAgICAgICBbJ2lnbm9yZS1lcnJvcnMnXTogZmFsc2UsXG4gICAgICAgICAgICAgIGpzb246IGZhbHNlLFxuICAgICAgICAgICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgICAgICAgICAgIHN0YWdpbmc6IHRydWUsXG4gICAgICAgICAgICAgIFsnbm8tY29sb3InXTogZmFsc2UsXG4gICAgICAgICAgICAgIGNpOiBleHBlY3QuYW55dGhpbmcoKSwgLy8gY2hhbmdlcyBiYXNlZCBvbiB3aGVyZSB0aGlzIGlzIGNhbGxlZFxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICBxdWlldDogZmFsc2UsXG4gICAgICAgICAgICAgIHllczogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3RhdGU6ICdTVUNDRUVERUQnLFxuICAgICAgICAgIGV2ZW50VHlwZTogJ0lOVk9LRScsXG4gICAgICAgIH0pLFxuICAgICAgICBpZGVudGlmaWVyczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBzZXNzaW9uSWQ6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIHRlbGVtZXRyeVZlcnNpb246IENVUlJFTlRfVEVMRU1FVFJZX1ZFUlNJT04sXG4gICAgICAgICAgY2RrQ2xpVmVyc2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgY2RrTGlicmFyeVZlcnNpb246IGZpeHR1cmUubGlicmFyeS5yZXF1ZXN0ZWRWZXJzaW9uKCksXG4gICAgICAgICAgcmVnaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBldmVudElkOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZygnOjInKSxcbiAgICAgICAgICB0aW1lc3RhbXA6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBjaTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgb3M6IHtcbiAgICAgICAgICAgIHBsYXRmb3JtOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICAgIHJlbGVhc2U6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm9kZVZlcnNpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgICAgcHJvamVjdDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe30pLFxuICAgICAgICBkdXJhdGlvbjogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIHRvdGFsOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBmcy51bmxpbmtTeW5jKHRlbGVtZXRyeUZpbGUpO1xuICB9KSxcbik7XG4iXX0=
|