aws-delivlib 13.4.2 → 13.4.6

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.
Files changed (72) hide show
  1. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/create-release.js +0 -0
  2. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package-lock.json +100 -95
  3. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package.json +0 -0
  4. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/publish.sh +0 -0
  5. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/sign-files.sh +0 -0
  6. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/with-signing-key.sh +0 -0
  7. package/cdk.out/{asset.dc2e98009b027861f34e56eebb81faa5a3951ed9da80ce4a903a45de04268238 → asset.3044256b9586ecb8a7709713aaca30ceb34f699e3f93c8858f633aaf2f0c7140}/index.js +17 -11
  8. package/cdk.out/delivlib-test.assets.json +8 -8
  9. package/cdk.out/delivlib-test.template.json +32 -27
  10. package/cdk.out/manifest.json +272 -272
  11. package/cdk.out/tree.json +442 -437
  12. package/lib/custom-resource-handlers/src/certificate-signing-request.tsbuildinfo +1 -1
  13. package/lib/custom-resource-handlers/src/pgp-secret.tsbuildinfo +1 -1
  14. package/lib/custom-resource-handlers/src/private-key.tsbuildinfo +1 -1
  15. package/lib/publishing/github/package-lock.json +100 -95
  16. package/package.json +17 -18
  17. package/lib/__tests__/auto-build.test.d.ts +0 -1
  18. package/lib/__tests__/auto-build.test.js +0 -119
  19. package/lib/__tests__/build-spec.test.d.ts +0 -1
  20. package/lib/__tests__/build-spec.test.js +0 -82
  21. package/lib/__tests__/bump.test.d.ts +0 -1
  22. package/lib/__tests__/bump.test.js +0 -284
  23. package/lib/__tests__/canary.test.d.ts +0 -1
  24. package/lib/__tests__/canary.test.js +0 -144
  25. package/lib/__tests__/change-control-lambda/disable-transition.test.d.ts +0 -1
  26. package/lib/__tests__/change-control-lambda/disable-transition.test.js +0 -64
  27. package/lib/__tests__/change-control-lambda/handler.test.d.ts +0 -1
  28. package/lib/__tests__/change-control-lambda/handler.test.js +0 -143
  29. package/lib/__tests__/change-control-lambda/time-window.test.d.ts +0 -1
  30. package/lib/__tests__/change-control-lambda/time-window.test.js +0 -131
  31. package/lib/__tests__/chime-notifier.test.d.ts +0 -6
  32. package/lib/__tests__/chime-notifier.test.js +0 -138
  33. package/lib/__tests__/code-signing-cert.test.d.ts +0 -1
  34. package/lib/__tests__/code-signing-cert.test.js +0 -72
  35. package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.d.ts +0 -1
  36. package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.js +0 -100
  37. package/lib/__tests__/custom-resource-handlers/_exec.test.d.ts +0 -1
  38. package/lib/__tests__/custom-resource-handlers/_exec.test.js +0 -9
  39. package/lib/__tests__/custom-resource-handlers/_rmrf.test.d.ts +0 -1
  40. package/lib/__tests__/custom-resource-handlers/_rmrf.test.js +0 -13
  41. package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.d.ts +0 -1
  42. package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.js +0 -171
  43. package/lib/__tests__/custom-resource-handlers/pgp-secret.test.d.ts +0 -1
  44. package/lib/__tests__/custom-resource-handlers/pgp-secret.test.js +0 -169
  45. package/lib/__tests__/custom-resource-handlers/private-key.test.d.ts +0 -1
  46. package/lib/__tests__/custom-resource-handlers/private-key.test.js +0 -164
  47. package/lib/__tests__/integ.delivlib.d.ts +0 -1
  48. package/lib/__tests__/integ.delivlib.js +0 -33
  49. package/lib/__tests__/open-pgp-key-pair.test.d.ts +0 -1
  50. package/lib/__tests__/open-pgp-key-pair.test.js +0 -130
  51. package/lib/__tests__/pipeline-notifications/chime.test.d.ts +0 -1
  52. package/lib/__tests__/pipeline-notifications/chime.test.js +0 -69
  53. package/lib/__tests__/pipeline-notifications/slack.test.d.ts +0 -1
  54. package/lib/__tests__/pipeline-notifications/slack.test.js +0 -82
  55. package/lib/__tests__/pipeline.test.d.ts +0 -1
  56. package/lib/__tests__/pipeline.test.js +0 -362
  57. package/lib/__tests__/pr.test.d.ts +0 -3
  58. package/lib/__tests__/pr.test.js +0 -88
  59. package/lib/__tests__/publishing.test.d.ts +0 -1
  60. package/lib/__tests__/publishing.test.js +0 -89
  61. package/lib/__tests__/registry-sync/ecr-mirror.test.d.ts +0 -1
  62. package/lib/__tests__/registry-sync/ecr-mirror.test.js +0 -313
  63. package/lib/__tests__/registry-sync/mirror-source.test.d.ts +0 -1
  64. package/lib/__tests__/registry-sync/mirror-source.test.js +0 -225
  65. package/lib/__tests__/shellable.test.d.ts +0 -1
  66. package/lib/__tests__/shellable.test.js +0 -479
  67. package/lib/__tests__/test-stack.d.ts +0 -4
  68. package/lib/__tests__/test-stack.js +0 -184
  69. package/lib/__tests__/watcher-handler.test.d.ts +0 -1
  70. package/lib/__tests__/watcher-handler.test.js +0 -190
  71. package/lib/__tests__/watcher.test.d.ts +0 -1
  72. package/lib/__tests__/watcher.test.js +0 -78
@@ -1,184 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.TestStack = void 0;
23
- const path = __importStar(require("path"));
24
- const monocdk_1 = require("monocdk");
25
- const delivlib = __importStar(require("../../lib"));
26
- const testDir = path.join(__dirname, 'delivlib-tests');
27
- class TestStack extends monocdk_1.Stack {
28
- constructor(parent, id, props = {}) {
29
- super(parent, id, props);
30
- //
31
- // SOURCE
32
- //
33
- const githubRepo = new delivlib.WritableGitHubRepo({
34
- repository: 'awslabs/aws-delivlib-sample',
35
- tokenSecretArn: 'arn:aws:secretsmanager:us-east-1:712950704752:secret:github-token-nnAqfW',
36
- sshKeySecret: { secretArn: 'arn:aws:secretsmanager:us-east-1:712950704752:secret:delivlib/github-ssh-lwzfjW' },
37
- commitEmail: 'foo@bar.com',
38
- commitUsername: 'foobar',
39
- });
40
- //
41
- // BUILD
42
- //
43
- const pipeline = new delivlib.Pipeline(this, 'CodeCommitPipeline', {
44
- title: 'aws-delivlib test pipeline',
45
- repo: githubRepo,
46
- notificationEmail: 'aws-cdk-dev+delivlib-test@amazon.com',
47
- environment: {
48
- DELIVLIB_ENV_TEST: 'MAGIC_1924',
49
- },
50
- });
51
- //
52
- // TEST
53
- //
54
- // add a test that runs on an ubuntu linux
55
- pipeline.addTest('HelloLinux', {
56
- platform: delivlib.ShellPlatform.LinuxUbuntu,
57
- entrypoint: 'test.sh',
58
- scriptDirectory: path.join(testDir, 'linux'),
59
- });
60
- // add a test that runs on Windows
61
- pipeline.addTest('HelloWindows', {
62
- platform: delivlib.ShellPlatform.Windows,
63
- entrypoint: 'test.ps1',
64
- scriptDirectory: path.join(testDir, 'windows'),
65
- });
66
- const externalId = 'require-me-please';
67
- const role = new monocdk_1.aws_iam.Role(this, 'AssumeMe', {
68
- assumedBy: new monocdk_1.aws_iam.AccountPrincipal(monocdk_1.Stack.of(this).account),
69
- externalId,
70
- });
71
- pipeline.addTest('AssumeRole', {
72
- entrypoint: 'test.sh',
73
- scriptDirectory: path.join(testDir, 'assume-role'),
74
- assumeRole: {
75
- roleArn: role.roleArn,
76
- sessionName: 'assume-role-test',
77
- externalId,
78
- },
79
- environment: {
80
- EXPECTED_ROLE_NAME: role.roleName,
81
- },
82
- });
83
- const action = pipeline.addShellable('Test', 'GenerateTwoArtifacts', {
84
- entrypoint: 'void.sh',
85
- scriptDirectory: path.join(testDir, 'linux'),
86
- buildSpec: delivlib.BuildSpec.simple({
87
- build: [
88
- 'mkdir -p output1 output2',
89
- 'echo \'{"name": "output1", "version": "1.2.3", "commit": "abcdef"}\' > output1/build.json',
90
- 'echo \'{"name": "output2", "version": "1.2.3", "commit": "abcdef"}\' > output2/build.json',
91
- ],
92
- artifactDirectory: 'output1',
93
- additionalArtifactDirectories: {
94
- artifact2: 'output2',
95
- },
96
- }),
97
- }).action;
98
- const shellableArtifacts = action.actionProperties.outputs;
99
- //
100
- // CANARY
101
- //
102
- pipeline.addCanary('HelloCanary', {
103
- schedule: monocdk_1.aws_events.Schedule.expression('rate(1 minute)'),
104
- scriptDirectory: path.join(testDir, 'linux'),
105
- entrypoint: 'test.sh',
106
- });
107
- //
108
- // PUBLISH
109
- //
110
- pipeline.publishToNpm({
111
- npmTokenSecret: { secretArn: 'arn:aws:secretsmanager:us-east-1:712950704752:secret:delivlib/npm-OynG62' },
112
- access: delivlib.NpmAccess.RESTRICTED,
113
- });
114
- // this creates a self-signed certificate
115
- const codeSign = new delivlib.CodeSigningCertificate(this, 'X509CodeSigningKey', {
116
- distinguishedName: {
117
- commonName: 'delivlib-test',
118
- country: 'IL',
119
- emailAddress: 'aws-cdk-dev+delivlib-test@amazon.com',
120
- locality: 'Zity',
121
- organizationName: 'Amazon Test',
122
- organizationalUnitName: 'AWS',
123
- stateOrProvince: 'Ztate',
124
- },
125
- retainPrivateKey: false,
126
- });
127
- pipeline.publishToNuGet({
128
- nugetApiKeySecret: { secretArn: 'arn:aws:secretsmanager:us-east-1:712950704752:secret:delivlib/nuget-fHzSUD' },
129
- codeSign,
130
- });
131
- const signingKey = new delivlib.OpenPGPKeyPair(this, 'CodeSign', {
132
- email: 'aws-cdk-dev+delivlib@amazon.com',
133
- encryptionKey: new monocdk_1.aws_kms.Key(this, 'CodeSign-CMK'),
134
- expiry: '4y',
135
- identity: 'aws-cdk-dev',
136
- keySizeBits: 4096,
137
- pubKeyParameterName: `/${this.node.path}/CodeSign.pub`,
138
- secretName: this.node.path + '/CodeSign',
139
- version: 0,
140
- removalPolicy: delivlib.OpenPGPKeyPairRemovalPolicy.DESTROY_IMMEDIATELY,
141
- });
142
- pipeline.publishToMaven({
143
- mavenLoginSecret: { secretArn: 'arn:aws:secretsmanager:us-east-1:712950704752:secret:delivlib/maven-7ROCWi' },
144
- mavenEndpoint: 'https://aws.oss.sonatype.org:443/',
145
- signingKey,
146
- stagingProfileId: '68a05363083174',
147
- });
148
- pipeline.publishToGitHub({
149
- githubRepo,
150
- signingKey,
151
- additionalInputArtifacts: shellableArtifacts,
152
- });
153
- pipeline.publishToGitHubPages({
154
- githubRepo,
155
- });
156
- pipeline.publishToPyPI({
157
- loginSecret: { secretArn: 'arn:aws:secretsmanager:us-east-1:712950704752:secret:delivlib/pypi-tOhH6X' },
158
- });
159
- // publish go bindings to awslabs/aws-delivlib-sample under the "golang"
160
- // branch (repository is derived from "go.moduleName" in package.json)
161
- pipeline.publishToGolang({
162
- githubTokenSecret: { secretArn: githubRepo.tokenSecretArn },
163
- gitBranch: 'golang',
164
- gitUserEmail: 'aws-cdk-dev+delivlib@amazon.com',
165
- gitUserName: 'Delivlib Tests',
166
- });
167
- //
168
- // BUMP
169
- pipeline.autoBump({
170
- bumpCommand: 'npm i && npm run bump',
171
- });
172
- //
173
- // AUTO-BUILD
174
- pipeline.autoBuild({
175
- publicLogs: true,
176
- });
177
- //
178
- // CHANGE CONTROL
179
- //
180
- pipeline.addChangeControl();
181
- }
182
- }
183
- exports.TestStack = TestStack;
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3Qtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3QixxQ0FLaUI7QUFDakIsb0RBQXNDO0FBR3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFFdkQsTUFBYSxTQUFVLFNBQVEsZUFBSztJQUNsQyxZQUFZLE1BQVcsRUFBRSxFQUFVLEVBQUUsUUFBb0IsRUFBRztRQUMxRCxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV6QixFQUFFO1FBQ0YsU0FBUztRQUNULEVBQUU7UUFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztZQUNqRCxVQUFVLEVBQUUsNkJBQTZCO1lBQ3pDLGNBQWMsRUFBRSwwRUFBMEU7WUFDMUYsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLGlGQUFpRixFQUFFO1lBQzlHLFdBQVcsRUFBRSxhQUFhO1lBQzFCLGNBQWMsRUFBRSxRQUFRO1NBQ3pCLENBQUMsQ0FBQztRQUVILEVBQUU7UUFDRixRQUFRO1FBQ1IsRUFBRTtRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDakUsS0FBSyxFQUFFLDRCQUE0QjtZQUNuQyxJQUFJLEVBQUUsVUFBVTtZQUNoQixpQkFBaUIsRUFBRSxzQ0FBc0M7WUFDekQsV0FBVyxFQUFFO2dCQUNYLGlCQUFpQixFQUFFLFlBQVk7YUFDaEM7U0FDRixDQUFDLENBQUM7UUFFSCxFQUFFO1FBQ0YsT0FBTztRQUNQLEVBQUU7UUFFRiwwQ0FBMEM7UUFDMUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDN0IsUUFBUSxFQUFFLFFBQVEs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MkUsRUFBRTtTQUN4RyxDQUFDLENBQUM7UUFFSCx3RUFBd0U7UUFDeEUsc0VBQXNFO1FBQ3RFLFFBQVEsQ0FBQyxlQUFlLENBQUM7WUFDdkIsaUJBQWlCLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLGNBQWMsRUFBRTtZQUMzRCxTQUFTLEVBQUUsUUFBUTtZQUNuQixZQUFZLEVBQUUsaUNBQWlDO1lBQy9DLFdBQVcsRUFBRSxnQkFBZ0I7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsRUFBRTtRQUNGLE9BQU87UUFFUCxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ2hCLFdBQVcsRUFBRSx1QkFBdUI7U0FDckMsQ0FBQyxDQUFDO1FBRUgsRUFBRTtRQUNGLGFBQWE7UUFFYixRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ2pCLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILEVBQUU7UUFDRixpQkFBaUI7UUFDakIsRUFBRTtRQUVGLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQXhMRCw4QkF3TEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgQXBwLCBTdGFjaywgU3RhY2tQcm9wcyxcbiAgYXdzX2V2ZW50cyBhcyBldmVudHMsXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3Nfa21zIGFzIGttcyxcbn0gZnJvbSAnbW9ub2Nkayc7XG5pbXBvcnQgKiBhcyBkZWxpdmxpYiBmcm9tICcuLi8uLi9saWInO1xuXG5cbmNvbnN0IHRlc3REaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZGVsaXZsaWItdGVzdHMnKTtcblxuZXhwb3J0IGNsYXNzIFRlc3RTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3IocGFyZW50OiBBcHAsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGFja1Byb3BzID0geyB9KSB7XG4gICAgc3VwZXIocGFyZW50LCBpZCwgcHJvcHMpO1xuXG4gICAgLy9cbiAgICAvLyBTT1VSQ0VcbiAgICAvL1xuXG4gICAgY29uc3QgZ2l0aHViUmVwbyA9IG5ldyBkZWxpdmxpYi5Xcml0YWJsZUdpdEh1YlJlcG8oe1xuICAgICAgcmVwb3NpdG9yeTogJ2F3c2xhYnMvYXdzLWRlbGl2bGliLXNhbXBsZScsXG4gICAgICB0b2tlblNlY3JldEFybjogJ2Fybjphd3M6c2VjcmV0c21hbmFnZXI6dXMtZWFzdC0xOjcxMjk1MDcwNDc1MjpzZWNyZXQ6Z2l0aHViLXRva2VuLW5uQXFmVycsXG4gICAgICBzc2hLZXlTZWNyZXQ6IHsgc2VjcmV0QXJuOiAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjp1cy1lYXN0LTE6NzEyOTUwNzA0NzUyOnNlY3JldDpkZWxpdmxpYi9naXRodWItc3NoLWx3emZqVycgfSxcbiAgICAgIGNvbW1pdEVtYWlsOiAnZm9vQGJhci5jb20nLFxuICAgICAgY29tbWl0VXNlcm5hbWU6ICdmb29iYXInLFxuICAgIH0pO1xuXG4gICAgLy9cbiAgICAvLyBCVUlMRFxuICAgIC8vXG5cbiAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBkZWxpdmxpYi5QaXBlbGluZSh0aGlzLCAnQ29kZUNvbW1pdFBpcGVsaW5lJywge1xuICAgICAgdGl0bGU6ICdhd3MtZGVsaXZsaWIgdGVzdCBwaXBlbGluZScsXG4gICAgICByZXBvOiBnaXRodWJSZXBvLFxuICAgICAgbm90aWZpY2F0aW9uRW1haWw6ICdhd3MtY2RrLWRlditkZWxpdmxpYi10ZXN0QGFtYXpvbi5jb20nLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgREVMSVZMSUJfRU5WX1RFU1Q6ICdNQUdJQ18xOTI0JyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvL1xuICAgIC8vIFRFU1RcbiAgICAvL1xuXG4gICAgLy8gYWRkIGEgdGVzdCB0aGF0IHJ1bnMgb24gYW4gdWJ1bnR1IGxpbnV4XG4gICAgcGlwZWxpbmUuYWRkVGVzdCgnSGVsbG9MaW51eCcsIHtcbiAgICAgIHBsYXRmb3JtOiBkZWxpdmxpYi5TaGVsbFBsYXRmb3JtLkxpbnV4VWJ1bnR1LFxuICAgICAgZW50cnlwb2ludDogJ3Rlc3Quc2gnLFxuICAgICAgc2NyaXB0RGlyZWN0b3J5OiBwYXRoLmpvaW4odGVzdERpciwgJ2xpbnV4JyksXG4gICAgfSk7XG5cbiAgICAvLyBhZGQgYSB0ZXN0IHRoYXQgcnVucyBvbiBXaW5kb3dzXG4gICAgcGlwZWxpbmUuYWRkVGVzdCgnSGVsbG9XaW5kb3dzJywge1xuICAgICAgcGxhdGZvcm06IGRlbGl2bGliLlNoZWxsUGxhdGZvcm0uV2luZG93cyxcbiAgICAgIGVudHJ5cG9pbnQ6ICd0ZXN0LnBzMScsXG4gICAgICBzY3JpcHREaXJlY3Rvcnk6IHBhdGguam9pbih0ZXN0RGlyLCAnd2luZG93cycpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxJZCA9ICdyZXF1aXJlLW1lLXBsZWFzZSc7XG5cbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdBc3N1bWVNZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5BY2NvdW50UHJpbmNpcGFsKFN0YWNrLm9mKHRoaXMpLmFjY291bnQpLFxuICAgICAgZXh0ZXJuYWxJZCxcbiAgICB9KTtcblxuICAgIHBpcGVsaW5lLmFkZFRlc3QoJ0Fzc3VtZVJvbGUnLCB7XG4gICAgICBlbnRyeXBvaW50OiAndGVzdC5zaCcsXG4gICAgICBzY3JpcHREaXJlY3Rvcnk6IHBhdGguam9pbih0ZXN0RGlyLCAnYXNzdW1lLXJvbGUnKSxcbiAgICAgIGFzc3VtZVJvbGU6IHtcbiAgICAgICAgcm9sZUFybjogcm9sZS5yb2xlQXJuLFxuICAgICAgICBzZXNzaW9uTmFtZTogJ2Fzc3VtZS1yb2xlLXRlc3QnLFxuICAgICAgICBleHRlcm5hbElkLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIEVYUEVDVEVEX1JPTEVfTkFNRTogcm9sZS5yb2xlTmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBhY3Rpb24gPSBwaXBlbGluZS5hZGRTaGVsbGFibGUoJ1Rlc3QnLCAnR2VuZXJhdGVUd29BcnRpZmFjdHMnLCB7XG4gICAgICBlbnRyeXBvaW50OiAndm9pZC5zaCcsXG4gICAgICBzY3JpcHREaXJlY3Rvcnk6IHBhdGguam9pbih0ZXN0RGlyLCAnbGludXgnKSxcbiAgICAgIGJ1aWxkU3BlYzogZGVsaXZsaWIuQnVpbGRTcGVjLnNpbXBsZSh7XG4gICAgICAgIGJ1aWxkOiBbXG4gICAgICAgICAgJ21rZGlyIC1wIG91dHB1dDEgb3V0cHV0MicsXG4gICAgICAgICAgJ2VjaG8gXFwne1wibmFtZVwiOiBcIm91dHB1dDFcIiwgXCJ2ZXJzaW9uXCI6IFwiMS4yLjNcIiwgXCJjb21taXRcIjogXCJhYmNkZWZcIn1cXCcgPiBvdXRwdXQxL2J1aWxkLmpzb24nLFxuICAgICAgICAgICdlY2hvIFxcJ3tcIm5hbWVcIjogXCJvdXRwdXQyXCIsIFwidmVyc2lvblwiOiBcIjEuMi4zXCIsIFwiY29tbWl0XCI6IFwiYWJjZGVmXCJ9XFwnID4gb3V0cHV0Mi9idWlsZC5qc29uJyxcbiAgICAgICAgXSxcbiAgICAgICAgYXJ0aWZhY3REaXJlY3Rvcnk6ICdvdXRwdXQxJyxcbiAgICAgICAgYWRkaXRpb25hbEFydGlmYWN0RGlyZWN0b3JpZXM6IHtcbiAgICAgICAgICBhcnRpZmFjdDI6ICdvdXRwdXQyJyxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH0pLmFjdGlvbjtcbiAgICBjb25zdCBzaGVsbGFibGVBcnRpZmFjdHMgPSBhY3Rpb24uYWN0aW9uUHJvcGVydGllcy5vdXRwdXRzO1xuXG4gICAgLy9cbiAgICAvLyBDQU5BUllcbiAgICAvL1xuXG4gICAgcGlwZWxpbmUuYWRkQ2FuYXJ5KCdIZWxsb0NhbmFyeScsIHtcbiAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbigncmF0ZSgxIG1pbnV0ZSknKSxcbiAgICAgIHNjcmlwdERpcmVjdG9yeTogcGF0aC5qb2luKHRlc3REaXIsICdsaW51eCcpLFxuICAgICAgZW50cnlwb2ludDogJ3Rlc3Quc2gnLFxuICAgIH0pO1xuXG4gICAgLy9cbiAgICAvLyBQVUJMSVNIXG4gICAgLy9cblxuICAgIHBpcGVsaW5lLnB1Ymxpc2hUb05wbSh7XG4gICAgICBucG1Ub2tlblNlY3JldDogeyBzZWNyZXRBcm46ICdhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnVzLWVhc3QtMTo3MTI5NTA3MDQ3NTI6c2VjcmV0OmRlbGl2bGliL25wbS1PeW5HNjInIH0sXG4gICAgICBhY2Nlc3M6IGRlbGl2bGliLk5wbUFjY2Vzcy5SRVNUUklDVEVELFxuICAgIH0pO1xuXG4gICAgLy8gdGhpcyBjcmVhdGVzIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGVcbiAgICBjb25zdCBjb2RlU2lnbiA9IG5ldyBkZWxpdmxpYi5Db2RlU2lnbmluZ0NlcnRpZmljYXRlKHRoaXMsICdYNTA5Q29kZVNpZ25pbmdLZXknLCB7XG4gICAgICBkaXN0aW5ndWlzaGVkTmFtZToge1xuICAgICAgICBjb21tb25OYW1lOiAnZGVsaXZsaWItdGVzdCcsXG4gICAgICAgIGNvdW50cnk6ICdJTCcsXG4gICAgICAgIGVtYWlsQWRkcmVzczogJ2F3cy1jZGstZGV2K2RlbGl2bGliLXRlc3RAYW1hem9uLmNvbScsXG4gICAgICAgIGxvY2FsaXR5OiAnWml0eScsXG4gICAgICAgIG9yZ2FuaXphdGlvbk5hbWU6ICdBbWF6b24gVGVzdCcsXG4gICAgICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWU6ICdBV1MnLFxuICAgICAgICBzdGF0ZU9yUHJvdmluY2U6ICdadGF0ZScsXG4gICAgICB9LFxuICAgICAgcmV0YWluUHJpdmF0ZUtleTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBwaXBlbGluZS5wdWJsaXNoVG9OdUdldCh7XG4gICAgICBudWdldEFwaUtleVNlY3JldDogeyBzZWNyZXRBcm46ICdhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnVzLWVhc3QtMTo3MTI5NTA3MDQ3NTI6c2VjcmV0OmRlbGl2bGliL251Z2V0LWZIelNVRCcgfSxcbiAgICAgIGNvZGVTaWduLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2lnbmluZ0tleSA9IG5ldyBkZWxpdmxpYi5PcGVuUEdQS2V5UGFpcih0aGlzLCAnQ29kZVNpZ24nLCB7XG4gICAgICBlbWFpbDogJ2F3cy1jZGstZGV2K2RlbGl2bGliQGFtYXpvbi5jb20nLFxuICAgICAgZW5jcnlwdGlvbktleTogbmV3IGttcy5LZXkodGhpcywgJ0NvZGVTaWduLUNNSycpLFxuICAgICAgZXhwaXJ5OiAnNHknLFxuICAgICAgaWRlbnRpdHk6ICdhd3MtY2RrLWRldicsXG4gICAgICBrZXlTaXplQml0czogNF8wOTYsXG4gICAgICBwdWJLZXlQYXJhbWV0ZXJOYW1lOiBgLyR7dGhpcy5ub2RlLnBhdGh9L0NvZGVTaWduLnB1YmAsXG4gICAgICBzZWNyZXROYW1lOiB0aGlzLm5vZGUucGF0aCArICcvQ29kZVNpZ24nLFxuICAgICAgdmVyc2lvbjogMCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IGRlbGl2bGliLk9wZW5QR1BLZXlQYWlyUmVtb3ZhbFBvbGljeS5ERVNUUk9ZX0lNTUVESUFURUxZLFxuICAgIH0pO1xuXG4gICAgcGlwZWxpbmUucHVibGlzaFRvTWF2ZW4oe1xuICAgICAgbWF2ZW5Mb2dpblNlY3JldDogeyBzZWNyZXRBcm46ICdhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnVzLWVhc3QtMTo3MTI5NTA3MDQ3NTI6c2VjcmV0OmRlbGl2bGliL21hdmVuLTdST0NXaScgfSxcbiAgICAgIG1hdmVuRW5kcG9pbnQ6ICdodHRwczovL2F3cy5vc3Muc29uYXR5cGUub3JnOjQ0My8nLFxuICAgICAgc2lnbmluZ0tleSxcbiAgICAgIHN0YWdpbmdQcm9maWxlSWQ6ICc2OGEwNTM2MzA4MzE3NCcsXG4gICAgfSk7XG5cbiAgICBwaXBlbGluZS5wdWJsaXNoVG9HaXRIdWIoe1xuICAgICAgZ2l0aHViUmVwbyxcbiAgICAgIHNpZ25pbmdLZXksXG4gICAgICBhZGRpdGlvbmFsSW5wdXRBcnRpZmFjdHM6IHNoZWxsYWJsZUFydGlmYWN0cyxcbiAgICB9KTtcblxuICAgIHBpcGVsaW5lLnB1Ymxpc2hUb0dpdEh1YlBhZ2VzKHtcbiAgICAgIGdpdGh1YlJlcG8sXG4gICAgfSk7XG5cbiAgICBwaXBlbGluZS5wdWJsaXNoVG9QeVBJKHtcbiAgICAgIGxvZ2luU2VjcmV0OiB7IHNlY3JldEFybjogJ2Fybjphd3M6c2VjcmV0c21hbmFnZXI6dXMtZWFzdC0xOjcxMjk1MDcwNDc1MjpzZWNyZXQ6ZGVsaXZsaWIvcHlwaS10T2hINlgnIH0sXG4gICAgfSk7XG5cbiAgICAvLyBwdWJsaXNoIGdvIGJpbmRpbmdzIHRvIGF3c2xhYnMvYXdzLWRlbGl2bGliLXNhbXBsZSB1bmRlciB0aGUgXCJnb2xhbmdcIlxuICAgIC8vIGJyYW5jaCAocmVwb3NpdG9yeSBpcyBkZXJpdmVkIGZyb20gXCJnby5tb2R1bGVOYW1lXCIgaW4gcGFja2FnZS5qc29uKVxuICAgIHBpcGVsaW5lLnB1Ymxpc2hUb0dvbGFuZyh7XG4gICAgICBnaXRodWJUb2tlblNlY3JldDogeyBzZWNyZXRBcm46IGdpdGh1YlJlcG8udG9rZW5TZWNyZXRBcm4gfSxcbiAgICAgIGdpdEJyYW5jaDogJ2dvbGFuZycsXG4gICAgICBnaXRVc2VyRW1haWw6ICdhd3MtY2RrLWRlditkZWxpdmxpYkBhbWF6b24uY29tJyxcbiAgICAgIGdpdFVzZXJOYW1lOiAnRGVsaXZsaWIgVGVzdHMnLFxuICAgIH0pO1xuXG4gICAgLy9cbiAgICAvLyBCVU1QXG5cbiAgICBwaXBlbGluZS5hdXRvQnVtcCh7XG4gICAgICBidW1wQ29tbWFuZDogJ25wbSBpICYmIG5wbSBydW4gYnVtcCcsXG4gICAgfSk7XG5cbiAgICAvL1xuICAgIC8vIEFVVE8tQlVJTERcblxuICAgIHBpcGVsaW5lLmF1dG9CdWlsZCh7XG4gICAgICBwdWJsaWNMb2dzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy9cbiAgICAvLyBDSEFOR0UgQ09OVFJPTFxuICAgIC8vXG5cbiAgICBwaXBlbGluZS5hZGRDaGFuZ2VDb250cm9sKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1 +0,0 @@
1
- export {};
@@ -1,190 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const watcher_handler_1 = require("../../lib/pipeline-watcher/handler/watcher-handler");
4
- watcher_handler_1.cloudwatch.putMetricData = jest.fn();
5
- describe('watcher-handler', () => {
6
- beforeEach(() => {
7
- process.env.METRIC_NAME = 'metricName';
8
- process.env.METRIC_NAMESPACE = 'metricNamespace';
9
- });
10
- test('throws an error if PutMetricData fails', async () => {
11
- expect.assertions(1);
12
- watcher_handler_1.cloudwatch.putMetricData = jest.fn(_request => {
13
- return {
14
- promise: () => new Promise((_, reject) => reject(new Error('fail'))),
15
- };
16
- });
17
- try {
18
- await (0, watcher_handler_1.handler)(actionExecutionEvent());
19
- }
20
- catch (err) {
21
- expect(err.message).toEqual('fail');
22
- }
23
- });
24
- test('throws an error if METRIC_NAME is undefined', async () => {
25
- delete process.env.METRIC_NAME;
26
- expect.assertions(1);
27
- try {
28
- await (0, watcher_handler_1.handler)(actionExecutionEvent());
29
- }
30
- catch (err) {
31
- expect(err.message).toMatch(/environment variables must be set/);
32
- }
33
- });
34
- test('throws an error if METRIC_NAMESPACE is undefined', async () => {
35
- delete process.env.METRIC_NAMESPACE;
36
- expect.assertions(1);
37
- try {
38
- await (0, watcher_handler_1.handler)(actionExecutionEvent());
39
- }
40
- catch (err) {
41
- expect(err.message).toMatch(/environment variables must be set/);
42
- }
43
- });
44
- describe('Action Execution State Change', () => {
45
- test('throws an error if state is not SUCCEEDED or FAILED', async () => {
46
- expect.assertions(1);
47
- try {
48
- await (0, watcher_handler_1.handler)(actionExecutionEvent('STARTED'));
49
- }
50
- catch (err) {
51
- expect(err.message).toMatch(/Unsupported/);
52
- }
53
- });
54
- test('reports FAILED state metrics', async () => {
55
- expect.assertions(1);
56
- watcher_handler_1.cloudwatch.putMetricData = jest.fn(request => {
57
- expect(request).toEqual({
58
- Namespace: 'metricNamespace',
59
- MetricData: [
60
- {
61
- MetricName: 'metricName',
62
- Value: 1,
63
- Dimensions: [
64
- { Name: 'Pipeline', Value: 'some-pipeline' },
65
- { Name: 'Action', Value: 'some-action' },
66
- ],
67
- Timestamp: new Date(1611751440000),
68
- },
69
- ],
70
- });
71
- return {
72
- promise: () => new Promise((resolve, _) => resolve({})),
73
- };
74
- });
75
- await (0, watcher_handler_1.handler)(actionExecutionEvent('FAILED'));
76
- });
77
- test('reports SUCCEEDED state metrics', async () => {
78
- expect.assertions(1);
79
- watcher_handler_1.cloudwatch.putMetricData = jest.fn(request => {
80
- expect(request).toEqual({
81
- Namespace: 'metricNamespace',
82
- MetricData: [
83
- {
84
- MetricName: 'metricName',
85
- Value: 0,
86
- Dimensions: [
87
- { Name: 'Pipeline', Value: 'some-pipeline' },
88
- { Name: 'Action', Value: 'some-action' },
89
- ],
90
- Timestamp: new Date(1611751440000),
91
- },
92
- ],
93
- });
94
- return {
95
- promise: () => new Promise((resolve, _) => resolve({})),
96
- };
97
- });
98
- await (0, watcher_handler_1.handler)(actionExecutionEvent('SUCCEEDED'));
99
- });
100
- });
101
- describe('Pipeline Execution State Change', () => {
102
- test('throws an error if state is not SUCCEEDED or FAILED', async () => {
103
- expect.assertions(1);
104
- try {
105
- await (0, watcher_handler_1.handler)(pipelineExecutionEvent('STARTED'));
106
- }
107
- catch (err) {
108
- expect(err.message).toMatch(/Unsupported/);
109
- }
110
- });
111
- test('reports FAILED state metrics', async () => {
112
- expect.assertions(1);
113
- watcher_handler_1.cloudwatch.putMetricData = jest.fn(request => {
114
- expect(request).toEqual({
115
- Namespace: 'metricNamespace',
116
- MetricData: [
117
- {
118
- MetricName: 'metricName',
119
- Value: 1,
120
- Dimensions: [
121
- { Name: 'Pipeline', Value: 'some-pipeline' },
122
- ],
123
- Timestamp: new Date(1611751440000),
124
- },
125
- ],
126
- });
127
- return {
128
- promise: () => new Promise((resolve, _) => resolve({})),
129
- };
130
- });
131
- await (0, watcher_handler_1.handler)(pipelineExecutionEvent('FAILED'));
132
- });
133
- test('reports SUCCEEDED state metrics', async () => {
134
- expect.assertions(1);
135
- watcher_handler_1.cloudwatch.putMetricData = jest.fn(request => {
136
- expect(request).toEqual({
137
- Namespace: 'metricNamespace',
138
- MetricData: [
139
- {
140
- MetricName: 'metricName',
141
- Value: 0,
142
- Dimensions: [
143
- { Name: 'Pipeline', Value: 'some-pipeline' },
144
- ],
145
- Timestamp: new Date(1611751440000),
146
- },
147
- ],
148
- });
149
- return {
150
- promise: () => new Promise((resolve, _) => resolve({})),
151
- };
152
- });
153
- await (0, watcher_handler_1.handler)(pipelineExecutionEvent('SUCCEEDED'));
154
- });
155
- });
156
- });
157
- function actionExecutionEvent(state = 'SUCCEEDED') {
158
- return {
159
- 'id': 'some-id',
160
- 'version': '1',
161
- 'account': '0123456789',
162
- 'resources': ['some-resource'],
163
- 'time': '2021-01-27T12:44:00Z',
164
- 'detail-type': 'CodePipeline Action Execution State Change',
165
- 'region': 'us-east-1',
166
- 'source': 'aws.codepipeline',
167
- 'detail': {
168
- action: 'some-action',
169
- pipeline: 'some-pipeline',
170
- state,
171
- },
172
- };
173
- }
174
- function pipelineExecutionEvent(state = 'SUCCEEDED') {
175
- return {
176
- 'id': 'some-id',
177
- 'version': '1',
178
- 'account': '0123456789',
179
- 'resources': ['some-resource'],
180
- 'time': '2021-01-27T12:44:00Z',
181
- 'detail-type': 'CodePipeline Pipeline Execution State Change',
182
- 'region': 'us-east-1',
183
- 'source': 'aws.codepipeline',
184
- 'detail': {
185
- pipeline: 'some-pipeline',
186
- state,
187
- },
188
- };
189
- }
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci1oYW5kbGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3YXRjaGVyLWhhbmRsZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdGQUF3SjtBQUV4Siw0QkFBVSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFFckMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtJQUMvQixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDeEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQiw0QkFBVSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzVDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDckUsQ0FBQztRQUNKLENBQUMsQ0FBUSxDQUFDO1FBQ1YsSUFBSTtZQUNGLE1BQU0sSUFBQSx5QkFBTyxFQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztTQUN2QztRQUFDLE9BQU8sR0FBUSxFQUFFO1lBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxJQUFJLEVBQUU7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USxFQUFFO1lBQ1IsUUFBUSxFQUFFLGVBQWU7WUFDekIsS0FBSztTQUNOO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYW1iZGFBY3Rpb25TdGF0ZUNoYW5nZUV2ZW50LCBMYW1iZGFFeGVjdXRpb25TdGF0ZUNoYW5nZUV2ZW50LCBjbG91ZHdhdGNoLCBoYW5kbGVyIH0gZnJvbSAnLi4vLi4vbGliL3BpcGVsaW5lLXdhdGNoZXIvaGFuZGxlci93YXRjaGVyLWhhbmRsZXInO1xuXG5jbG91ZHdhdGNoLnB1dE1ldHJpY0RhdGEgPSBqZXN0LmZuKCk7XG5cbmRlc2NyaWJlKCd3YXRjaGVyLWhhbmRsZXInLCAoKSA9PiB7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52Lk1FVFJJQ19OQU1FID0gJ21ldHJpY05hbWUnO1xuICAgIHByb2Nlc3MuZW52Lk1FVFJJQ19OQU1FU1BBQ0UgPSAnbWV0cmljTmFtZXNwYWNlJztcbiAgfSk7XG5cbiAgdGVzdCgndGhyb3dzIGFuIGVycm9yIGlmIFB1dE1ldHJpY0RhdGEgZmFpbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0LmFzc2VydGlvbnMoMSk7XG4gICAgY2xvdWR3YXRjaC5wdXRNZXRyaWNEYXRhID0gamVzdC5mbihfcmVxdWVzdCA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9taXNlOiAoKSA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QobmV3IEVycm9yKCdmYWlsJykpKSxcbiAgICAgIH07XG4gICAgfSkgYXMgYW55O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBoYW5kbGVyKGFjdGlvbkV4ZWN1dGlvbkV2ZW50KCkpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBleHBlY3QoZXJyLm1lc3NhZ2UpLnRvRXF1YWwoJ2ZhaWwnKTtcbiAgICB9XG4gIH0pO1xuXG4gIHRlc3QoJ3Rocm93cyBhbiBlcnJvciBpZiBNRVRSSUNfTkFNRSBpcyB1bmRlZmluZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52Lk1FVFJJQ19OQU1FO1xuICAgIGV4cGVjdC5hc3NlcnRpb25zKDEpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBoYW5kbGVyKGFjdGlvbkV4ZWN1dGlvbkV2ZW50KCkpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBleHBlY3QoZXJyLm1lc3NhZ2UpLnRvTWF0Y2goL2Vudmlyb25tZW50IHZhcmlhYmxlcyBtdXN0IGJlIHNldC8pO1xuICAgIH1cbiAgfSk7XG5cbiAgdGVzdCgndGhyb3dzIGFuIGVycm9yIGlmIE1FVFJJQ19OQU1FU1BBQ0UgaXMgdW5kZWZpbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5NRVRSSUNfTkFNRVNQQUNFO1xuICAgIGV4cGVjdC5hc3NlcnRpb25zKDEpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBoYW5kbGVyKGFjdGlvbkV4ZWN1dGlvbkV2ZW50KCkpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBleHBlY3QoZXJyLm1lc3NhZ2UpLnRvTWF0Y2goL2Vudmlyb25tZW50IHZhcmlhYmxlcyBtdXN0IGJlIHNldC8pO1xuICAgIH1cbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FjdGlvbiBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJywgKCkgPT4ge1xuICAgIHRlc3QoJ3Rocm93cyBhbiBlcnJvciBpZiBzdGF0ZSBpcyBub3QgU1VDQ0VFREVEIG9yIEZBSUxFRCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGV4cGVjdC5hc3NlcnRpb25zKDEpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgaGFuZGxlcihhY3Rpb25FeGVjdXRpb25FdmVudCgnU1RBUlRFRCcpKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGV4cGVjdChlcnIubWVzc2FnZSkudG9NYXRjaCgvVW5zdXBwb3J0ZWQvKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRlc3QoJ3JlcG9ydHMgRkFJTEVEIHN0YXRlIG1ldHJpY3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBleHBlY3QuYXNzZXJ0aW9ucygxKTtcbiAgICAgIGNsb3Vkd2F0Y2gucHV0TWV0cmljRGF0YSA9IGplc3QuZm4ocmVxdWVzdCA9PiB7XG4gICAgICAgIGV4cGVjdChyZXF1ZXN0KS50b0VxdWFsKHtcbiAgICAgICAgICBOYW1lc3BhY2U6ICdtZXRyaWNOYW1lc3BhY2UnLFxuICAgICAgICAgIE1ldHJpY0RhdGE6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgTWV0cmljTmFtZTogJ21ldHJpY05hbWUnLFxuICAgICAgICAgICAgICBWYWx1ZTogMSxcbiAgICAgICAgICAgICAgRGltZW5zaW9uczogW1xuICAgICAgICAgICAgICAgIHsgTmFtZTogJ1BpcGVsaW5lJywgVmFsdWU6ICdzb21lLXBpcGVsaW5lJyB9LFxuICAgICAgICAgICAgICAgIHsgTmFtZTogJ0FjdGlvbicsIFZhbHVlOiAnc29tZS1hY3Rpb24nIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoMTYxMTc1MTQ0MDAwMCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb21pc2U6ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCBfKSA9PiByZXNvbHZlKHt9KSksXG4gICAgICAgIH07XG4gICAgICB9KSBhcyBhbnk7XG4gICAgICBhd2FpdCBoYW5kbGVyKGFjdGlvbkV4ZWN1dGlvbkV2ZW50KCdGQUlMRUQnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXBvcnRzIFNVQ0NFRURFRCBzdGF0ZSBtZXRyaWNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZXhwZWN0LmFzc2VydGlvbnMoMSk7XG4gICAgICBjbG91ZHdhdGNoLnB1dE1ldHJpY0RhdGEgPSBqZXN0LmZuKHJlcXVlc3QgPT4ge1xuICAgICAgICBleHBlY3QocmVxdWVzdCkudG9FcXVhbCh7XG4gICAgICAgICAgTmFtZXNwYWNlOiAnbWV0cmljTmFtZXNwYWNlJyxcbiAgICAgICAgICBNZXRyaWNEYXRhOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIE1ldHJpY05hbWU6ICdtZXRyaWNOYW1lJyxcbiAgICAgICAgICAgICAgVmFsdWU6IDAsXG4gICAgICAgICAgICAgIERpbWVuc2lvbnM6IFtcbiAgICAgICAgICAgICAgICB7IE5hbWU6ICdQaXBlbGluZScsIFZhbHVlOiAnc29tZS1waXBlbGluZScgfSxcbiAgICAgICAgICAgICAgICB7IE5hbWU6ICdBY3Rpb24nLCBWYWx1ZTogJ3NvbWUtYWN0aW9uJyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKDE2MTE3NTE0NDAwMDApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm9taXNlOiAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgXykgPT4gcmVzb2x2ZSh7fSkpLFxuICAgICAgICB9O1xuICAgICAgfSkgYXMgYW55O1xuICAgICAgYXdhaXQgaGFuZGxlcihhY3Rpb25FeGVjdXRpb25FdmVudCgnU1VDQ0VFREVEJykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGlwZWxpbmUgRXhlY3V0aW9uIFN0YXRlIENoYW5nZScsICgpID0+IHtcbiAgICB0ZXN0KCd0aHJvd3MgYW4gZXJyb3IgaWYgc3RhdGUgaXMgbm90IFNVQ0NFRURFRCBvciBGQUlMRUQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBleHBlY3QuYXNzZXJ0aW9ucygxKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZXIocGlwZWxpbmVFeGVjdXRpb25FdmVudCgnU1RBUlRFRCcpKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGV4cGVjdChlcnIubWVzc2FnZSkudG9NYXRjaCgvVW5zdXBwb3J0ZWQvKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRlc3QoJ3JlcG9ydHMgRkFJTEVEIHN0YXRlIG1ldHJpY3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBleHBlY3QuYXNzZXJ0aW9ucygxKTtcbiAgICAgIGNsb3Vkd2F0Y2gucHV0TWV0cmljRGF0YSA9IGplc3QuZm4ocmVxdWVzdCA9PiB7XG4gICAgICAgIGV4cGVjdChyZXF1ZXN0KS50b0VxdWFsKHtcbiAgICAgICAgICBOYW1lc3BhY2U6ICdtZXRyaWNOYW1lc3BhY2UnLFxuICAgICAgICAgIE1ldHJpY0RhdGE6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgTWV0cmljTmFtZTogJ21ldHJpY05hbWUnLFxuICAgICAgICAgICAgICBWYWx1ZTogMSxcbiAgICAgICAgICAgICAgRGltZW5zaW9uczogW1xuICAgICAgICAgICAgICAgIHsgTmFtZTogJ1BpcGVsaW5lJywgVmFsdWU6ICdzb21lLXBpcGVsaW5lJyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKDE2MTE3NTE0NDAwMDApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm9taXNlOiAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgXykgPT4gcmVzb2x2ZSh7fSkpLFxuICAgICAgICB9O1xuICAgICAgfSkgYXMgYW55O1xuICAgICAgYXdhaXQgaGFuZGxlcihwaXBlbGluZUV4ZWN1dGlvbkV2ZW50KCdGQUlMRUQnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXBvcnRzIFNVQ0NFRURFRCBzdGF0ZSBtZXRyaWNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZXhwZWN0LmFzc2VydGlvbnMoMSk7XG4gICAgICBjbG91ZHdhdGNoLnB1dE1ldHJpY0RhdGEgPSBqZXN0LmZuKHJlcXVlc3QgPT4ge1xuICAgICAgICBleHBlY3QocmVxdWVzdCkudG9FcXVhbCh7XG4gICAgICAgICAgTmFtZXNwYWNlOiAnbWV0cmljTmFtZXNwYWNlJyxcbiAgICAgICAgICBNZXRyaWNEYXRhOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIE1ldHJpY05hbWU6ICdtZXRyaWNOYW1lJyxcbiAgICAgICAgICAgICAgVmFsdWU6IDAsXG4gICAgICAgICAgICAgIERpbWVuc2lvbnM6IFtcbiAgICAgICAgICAgICAgICB7IE5hbWU6ICdQaXBlbGluZScsIFZhbHVlOiAnc29tZS1waXBlbGluZScgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgVGltZXN0YW1wOiBuZXcgRGF0ZSgxNjExNzUxNDQwMDAwKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJvbWlzZTogKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIF8pID0+IHJlc29sdmUoe30pKSxcbiAgICAgICAgfTtcbiAgICAgIH0pIGFzIGFueTtcbiAgICAgIGF3YWl0IGhhbmRsZXIocGlwZWxpbmVFeGVjdXRpb25FdmVudCgnU1VDQ0VFREVEJykpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBhY3Rpb25FeGVjdXRpb25FdmVudChcbiAgc3RhdGU6ICdTVEFSVEVEJyB8ICdDQU5DRUxFRCcgfCAnRkFJTEVEJyB8ICdTVUNDRUVERUQnID0gJ1NVQ0NFRURFRCcsXG4pOiBMYW1iZGFBY3Rpb25TdGF0ZUNoYW5nZUV2ZW50IHtcbiAgcmV0dXJuIHtcbiAgICAnaWQnOiAnc29tZS1pZCcsXG4gICAgJ3ZlcnNpb24nOiAnMScsXG4gICAgJ2FjY291bnQnOiAnMDEyMzQ1Njc4OScsXG4gICAgJ3Jlc291cmNlcyc6IFsnc29tZS1yZXNvdXJjZSddLFxuICAgICd0aW1lJzogJzIwMjEtMDEtMjdUMTI6NDQ6MDBaJyxcbiAgICAnZGV0YWlsLXR5cGUnOiAnQ29kZVBpcGVsaW5lIEFjdGlvbiBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJyxcbiAgICAncmVnaW9uJzogJ3VzLWVhc3QtMScsXG4gICAgJ3NvdXJjZSc6ICdhd3MuY29kZXBpcGVsaW5lJyxcbiAgICAnZGV0YWlsJzoge1xuICAgICAgYWN0aW9uOiAnc29tZS1hY3Rpb24nLFxuICAgICAgcGlwZWxpbmU6ICdzb21lLXBpcGVsaW5lJyxcbiAgICAgIHN0YXRlLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lRXhlY3V0aW9uRXZlbnQoXG4gIHN0YXRlOiAnU1RBUlRFRCcgfCAnQ0FOQ0VMRUQnIHwgJ0ZBSUxFRCcgfCAnU1VDQ0VFREVEJyA9ICdTVUNDRUVERUQnLFxuKTogTGFtYmRhRXhlY3V0aW9uU3RhdGVDaGFuZ2VFdmVudCB7XG4gIHJldHVybiB7XG4gICAgJ2lkJzogJ3NvbWUtaWQnLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICdhY2NvdW50JzogJzAxMjM0NTY3ODknLFxuICAgICdyZXNvdXJjZXMnOiBbJ3NvbWUtcmVzb3VyY2UnXSxcbiAgICAndGltZSc6ICcyMDIxLTAxLTI3VDEyOjQ0OjAwWicsXG4gICAgJ2RldGFpbC10eXBlJzogJ0NvZGVQaXBlbGluZSBQaXBlbGluZSBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJyxcbiAgICAncmVnaW9uJzogJ3VzLWVhc3QtMScsXG4gICAgJ3NvdXJjZSc6ICdhd3MuY29kZXBpcGVsaW5lJyxcbiAgICAnZGV0YWlsJzoge1xuICAgICAgcGlwZWxpbmU6ICdzb21lLXBpcGVsaW5lJyxcbiAgICAgIHN0YXRlLFxuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -1 +0,0 @@
1
- import '@monocdk-experiment/assert/jest';
@@ -1,78 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- require("@monocdk-experiment/assert/jest");
4
- const monocdk_1 = require("monocdk");
5
- const aws_codepipeline_1 = require("monocdk/aws-codepipeline");
6
- const pipeline_watcher_1 = require("../../lib/pipeline-watcher");
7
- const props = {
8
- metricNamespace: 'Namespace',
9
- failureMetricName: 'FailureMetricName',
10
- };
11
- describe('PipelineWatcher', () => {
12
- test('default', () => {
13
- const stack = new monocdk_1.Stack();
14
- const pipeline = aws_codepipeline_1.Pipeline.fromPipelineArn(stack, 'Pipeline', 'arn:aws:codepipeline:us-east-1:012345789:MyPipeline');
15
- new pipeline_watcher_1.PipelineWatcher(stack, 'Watcher', { pipeline, ...props });
16
- expect(stack).toHaveResource('AWS::Events::Rule');
17
- expect(stack).toHaveResource('AWS::Lambda::Function');
18
- expect(stack).toHaveResource('AWS::CloudWatch::Alarm', {
19
- ComparisonOperator: 'GreaterThanOrEqualToThreshold',
20
- EvaluationPeriods: 1,
21
- AlarmDescription: 'Pipeline MyPipeline has failed stages',
22
- Dimensions: [
23
- {
24
- Name: 'Pipeline',
25
- Value: 'MyPipeline',
26
- },
27
- ],
28
- MetricName: 'FailureMetricName',
29
- Namespace: 'Namespace',
30
- Period: 300,
31
- Statistic: 'Maximum',
32
- Threshold: 1,
33
- });
34
- });
35
- test('title option is correctly handled', () => {
36
- const stack = new monocdk_1.Stack();
37
- const pipeline = aws_codepipeline_1.Pipeline.fromPipelineArn(stack, 'Pipeline', 'arn:aws:codepipeline:us-east-1:012345789:MyPipeline');
38
- new pipeline_watcher_1.PipelineWatcher(stack, 'Watcher', { pipeline, title: 'MyTitle', ...props });
39
- expect(stack).toHaveResource('AWS::CloudWatch::Alarm', {
40
- AlarmDescription: 'Pipeline MyTitle has failed stages',
41
- });
42
- });
43
- test('lambda function has the expected policy', () => {
44
- const stack = new monocdk_1.Stack();
45
- const pipeline = aws_codepipeline_1.Pipeline.fromPipelineArn(stack, 'Pipeline', 'arn:aws:codepipeline:us-east-1:012345789:MyPipeline');
46
- new pipeline_watcher_1.PipelineWatcher(stack, 'Watcher', { pipeline, ...props });
47
- expect(stack).toHaveResourceLike('AWS::IAM::Policy', {
48
- PolicyDocument: {
49
- Statement: [
50
- {
51
- Action: 'cloudwatch:PutMetricData',
52
- Condition: {
53
- StringEquals: {
54
- 'cloudwatch:namespace': 'Namespace',
55
- },
56
- },
57
- Effect: 'Allow',
58
- Resource: '*',
59
- },
60
- ],
61
- },
62
- Roles: [
63
- {
64
- Ref: 'WatcherPollerServiceRole04A8CDED',
65
- },
66
- ],
67
- });
68
- });
69
- test('missing data should be treated as ignore', () => {
70
- const stack = new monocdk_1.Stack();
71
- const pipeline = aws_codepipeline_1.Pipeline.fromPipelineArn(stack, 'Pipeline', 'arn:aws:codepipeline:us-east-1:012345789:MyPipeline');
72
- new pipeline_watcher_1.PipelineWatcher(stack, 'Watcher', { pipeline, ...props });
73
- expect(stack).toHaveResource('AWS::CloudWatch::Alarm', {
74
- TreatMissingData: 'ignore',
75
- });
76
- });
77
- });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2F0Y2hlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXlDO0FBQ3pDLHFDQUFnQztBQUNoQywrREFBb0Q7QUFDcEQsaUVBQTZEO0FBRTdELE1BQU0sS0FBSyxHQUFHO0lBQ1osZUFBZSxFQUFFLFdBQVc7SUFDNUIsaUJBQWlCLEVBQUUsbUJBQW1CO0NBQ3ZDLENBQUM7QUFFRixRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksZUFBSyxFQUFFLENBQUM7UUFDMUIsTUFBTSxRQUFRLEdBQUcsMkJBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxxREFBcUQsQ0FBQyxDQUFDO1FBQ3BILElBQUksa0NBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUU5RCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLEVBQUU7WUFDckQsa0JBQWtCLEVBQUUsK0JBQStCO1lBQ25ELGlCQUFpQixFQUFFLENBQUM7WUFDcEIsZ0JBQWdCLEVBQUUsdUNBQXVDO1lBQ3pELFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsS0FBSyxFQUFFLFlBQVk7aUJBQ3BCO2FBQ0Y7WUFDRCxVQUFVLEVBQUUsbUJBQW1CO1lBQy9CLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLE1BQU0sRUFBRSxHQUFHO1lBQ1gsU0FBUyxFQUFFLFNBQVM7WUFDcEIsU0FBUyxFQUFFLENBQUM7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUU7UUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFLLEVBQUUsQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRywyQkFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLHFEQUFxRCxDQUFDLENBQUM7UUFDcEgsSUFBSSxrQ0FBZSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFaEYsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRTtZQUNyRCxnQkFBZ0IsRUFBRSxvQ0FBb0M7U0FDdkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO1FBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksZUFBSyxFQUFFLENBQUM7UUFDMUIsTUFBTSxRQUFRLEdBQUcsMkJBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxxREFBcUQsQ0FBQyxDQUFDO1FBQ3BILElBQUksa0NBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUU5RCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUU7WUFDbkQsY0FBYyxFQUFFO2dCQUNkLFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxNQUFNLEVBQUUsMEJBQTBCO3dCQUNsQyxTQUFTLEVBQUU7NEJBQ1QsWUFBWSxFQUFFO2dDQUNaLHNCQUFzQixFQUFFLFdBQVc7NkJBQ3BDO3lCQUNGO3dCQUNELE1BQU0sRUFBRSxPQUFPO3dCQUNmLFFBQVEsRUFBRSxHQUFHO3FCQUNkO2lCQUNGO2FBQ0Y7WUFDRCxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsR0FBRyxFQUFFLGtDQUFrQztpQkFDeEM7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtRQUNwRCxNQUFNLEtBQUssR0FBRyxJQUFJLGVBQUssRUFBRSxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFHLDJCQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUscURBQXFELENBQUMsQ0FBQztRQUNwSCxJQUFJLGtDQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFOUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRTtZQUNyRCxnQkFBZ0IsRUFBRSxRQUFRO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ0Btb25vY2RrLWV4cGVyaW1lbnQvYXNzZXJ0L2plc3QnO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdtb25vY2RrJztcbmltcG9ydCB7IFBpcGVsaW5lIH0gZnJvbSAnbW9ub2Nkay9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCB7IFBpcGVsaW5lV2F0Y2hlciB9IGZyb20gJy4uLy4uL2xpYi9waXBlbGluZS13YXRjaGVyJztcblxuY29uc3QgcHJvcHMgPSB7XG4gIG1ldHJpY05hbWVzcGFjZTogJ05hbWVzcGFjZScsXG4gIGZhaWx1cmVNZXRyaWNOYW1lOiAnRmFpbHVyZU1ldHJpY05hbWUnLFxufTtcblxuZGVzY3JpYmUoJ1BpcGVsaW5lV2F0Y2hlcicsICgpID0+IHtcbiAgdGVzdCgnZGVmYXVsdCcsICgpID0+IHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIGNvbnN0IHBpcGVsaW5lID0gUGlwZWxpbmUuZnJvbVBpcGVsaW5lQXJuKHN0YWNrLCAnUGlwZWxpbmUnLCAnYXJuOmF3czpjb2RlcGlwZWxpbmU6dXMtZWFzdC0xOjAxMjM0NTc4OTpNeVBpcGVsaW5lJyk7XG4gICAgbmV3IFBpcGVsaW5lV2F0Y2hlcihzdGFjaywgJ1dhdGNoZXInLCB7IHBpcGVsaW5lLCAuLi5wcm9wcyB9KTtcblxuICAgIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2UoJ0FXUzo6RXZlbnRzOjpSdWxlJyk7XG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZSgnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyk7XG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZSgnQVdTOjpDbG91ZFdhdGNoOjpBbGFybScsIHtcbiAgICAgIENvbXBhcmlzb25PcGVyYXRvcjogJ0dyZWF0ZXJUaGFuT3JFcXVhbFRvVGhyZXNob2xkJyxcbiAgICAgIEV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgQWxhcm1EZXNjcmlwdGlvbjogJ1BpcGVsaW5lIE15UGlwZWxpbmUgaGFzIGZhaWxlZCBzdGFnZXMnLFxuICAgICAgRGltZW5zaW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgTmFtZTogJ1BpcGVsaW5lJyxcbiAgICAgICAgICBWYWx1ZTogJ015UGlwZWxpbmUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIE1ldHJpY05hbWU6ICdGYWlsdXJlTWV0cmljTmFtZScsXG4gICAgICBOYW1lc3BhY2U6ICdOYW1lc3BhY2UnLFxuICAgICAgUGVyaW9kOiAzMDAsXG4gICAgICBTdGF0aXN0aWM6ICdNYXhpbXVtJyxcbiAgICAgIFRocmVzaG9sZDogMSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgndGl0bGUgb3B0aW9uIGlzIGNvcnJlY3RseSBoYW5kbGVkJywgKCkgPT4ge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgY29uc3QgcGlwZWxpbmUgPSBQaXBlbGluZS5mcm9tUGlwZWxpbmVBcm4oc3RhY2ssICdQaXBlbGluZScsICdhcm46YXdzOmNvZGVwaXBlbGluZTp1cy1lYXN0LTE6MDEyMzQ1Nzg5Ok15UGlwZWxpbmUnKTtcbiAgICBuZXcgUGlwZWxpbmVXYXRjaGVyKHN0YWNrLCAnV2F0Y2hlcicsIHsgcGlwZWxpbmUsIHRpdGxlOiAnTXlUaXRsZScsIC4uLnByb3BzIH0pO1xuXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZSgnQVdTOjpDbG91ZFdhdGNoOjpBbGFybScsIHtcbiAgICAgIEFsYXJtRGVzY3JpcHRpb246ICdQaXBlbGluZSBNeVRpdGxlIGhhcyBmYWlsZWQgc3RhZ2VzJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnbGFtYmRhIGZ1bmN0aW9uIGhhcyB0aGUgZXhwZWN0ZWQgcG9saWN5JywgKCkgPT4ge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgY29uc3QgcGlwZWxpbmUgPSBQaXBlbGluZS5mcm9tUGlwZWxpbmVBcm4oc3RhY2ssICdQaXBlbGluZScsICdhcm46YXdzOmNvZGVwaXBlbGluZTp1cy1lYXN0LTE6MDEyMzQ1Nzg5Ok15UGlwZWxpbmUnKTtcbiAgICBuZXcgUGlwZWxpbmVXYXRjaGVyKHN0YWNrLCAnV2F0Y2hlcicsIHsgcGlwZWxpbmUsIC4uLnByb3BzIH0pO1xuXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6SUFNOjpQb2xpY3knLCB7XG4gICAgICBQb2xpY3lEb2N1bWVudDoge1xuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBBY3Rpb246ICdjbG91ZHdhdGNoOlB1dE1ldHJpY0RhdGEnLFxuICAgICAgICAgICAgQ29uZGl0aW9uOiB7XG4gICAgICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgICAgICdjbG91ZHdhdGNoOm5hbWVzcGFjZSc6ICdOYW1lc3BhY2UnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIFJlc291cmNlOiAnKicsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBSb2xlczogW1xuICAgICAgICB7XG4gICAgICAgICAgUmVmOiAnV2F0Y2hlclBvbGxlclNlcnZpY2VSb2xlMDRBOENERUQnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnbWlzc2luZyBkYXRhIHNob3VsZCBiZSB0cmVhdGVkIGFzIGlnbm9yZScsICgpID0+IHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIGNvbnN0IHBpcGVsaW5lID0gUGlwZWxpbmUuZnJvbVBpcGVsaW5lQXJuKHN0YWNrLCAnUGlwZWxpbmUnLCAnYXJuOmF3czpjb2RlcGlwZWxpbmU6dXMtZWFzdC0xOjAxMjM0NTc4OTpNeVBpcGVsaW5lJyk7XG4gICAgbmV3IFBpcGVsaW5lV2F0Y2hlcihzdGFjaywgJ1dhdGNoZXInLCB7IHBpcGVsaW5lLCAuLi5wcm9wcyB9KTtcblxuICAgIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2UoJ0FXUzo6Q2xvdWRXYXRjaDo6QWxhcm0nLCB7XG4gICAgICBUcmVhdE1pc3NpbmdEYXRhOiAnaWdub3JlJyxcbiAgICB9KTtcbiAgfSk7XG59KTsiXX0=