aws-delivlib 13.4.3 → 13.4.7

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,88 +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.containsSlice = void 0;
23
- // tslint:disable: max-line-length
24
- const assert_1 = require("@monocdk-experiment/assert");
25
- require("@monocdk-experiment/assert/jest");
26
- const cdk = __importStar(require("monocdk"));
27
- const lib_1 = require("../../lib");
28
- const MOCK_REPO = new lib_1.WritableGitHubRepo({
29
- sshKeySecret: { secretArn: 'ssh-key-secret-arn' },
30
- commitUsername: 'user',
31
- commitEmail: 'email@email',
32
- repository: 'owner/repo',
33
- tokenSecretArn: 'token-secret-arn',
34
- });
35
- let app;
36
- let stack;
37
- beforeEach(() => {
38
- app = new cdk.App();
39
- stack = new cdk.Stack(app, 'TestStack');
40
- });
41
- test('skip PR if still open', () => {
42
- // WHEN
43
- new lib_1.AutoPullRequest(stack, 'AutoPull', {
44
- repo: MOCK_REPO,
45
- head: { name: 'new-feature' },
46
- skipIfOpenPrsWithLabels: ['asdf'],
47
- });
48
- // THEN
49
- expect(stack).toHaveResourceLike('AWS::CodeBuild::Project', {
50
- Source: {
51
- BuildSpec: (0, assert_1.encodedJson)({
52
- version: '0.2',
53
- phases: (0, assert_1.objectLike)({
54
- build: {
55
- commands: containsSlice([
56
- '$SKIP || { export GITHUB_TOKEN=$(aws secretsmanager get-secret-value --secret-id "token-secret-arn" --output=text --query=SecretString) ; }',
57
- '$SKIP || { curl --fail -o search.json --header "Authorization: token $GITHUB_TOKEN" --header "Content-Type: application/json" \'https://api.github.com/search/issues?q=repo%3Aowner%2Frepo%20is%3Apr%20is%3Aopen%20label%3Aasdf\' ; }',
58
- '$SKIP || { node -e \'process.exitCode = require("./search.json").total_count\' || { echo "Found open PRs with label asdf, skipping PR."; export SKIP=true; } ; }',
59
- ]),
60
- },
61
- }),
62
- }),
63
- },
64
- });
65
- });
66
- function containsSlice(elements) {
67
- return (0, assert_1.annotateMatcher)({ $containsSlice: elements }, (value, failure) => {
68
- if (!Array.isArray(value)) {
69
- failure.failureReason = `Expected an Array, but got '${typeof value}'`;
70
- return false;
71
- }
72
- const innerMatchers = elements.map(assert_1.matcherFrom);
73
- for (let i = 0; i < value.length - elements.length; i++) {
74
- const innerInspection = { ...failure, failureReason: '' };
75
- let success = true;
76
- for (let j = 0; success && j < innerMatchers.length; j++) {
77
- success = innerMatchers[j](value[i + j], innerInspection);
78
- }
79
- if (success) {
80
- return true;
81
- }
82
- }
83
- failure.failureReason = 'Array did not contain expected elements';
84
- return false;
85
- });
86
- }
87
- exports.containsSlice = containsSlice;
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtDQUFrQztBQUNsQyx1REFBdUk7QUFDdkksMkNBQXlDO0FBQ3pDLDZDQUErQjtBQUMvQixtQ0FBZ0U7QUFFaEUsTUFBTSxTQUFTLEdBQUcsSUFBSSx3QkFBa0IsQ0FBQztJQUN2QyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUU7SUFDakQsY0FBYyxFQUFFLE1BQU07SUFDdEIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsY0FBYyxFQUFFLGtCQUFrQjtDQUNuQyxDQUFDLENBQUM7QUFHSCxJQUFJLEdBQVksQ0FBQztBQUNqQixJQUFJLEtBQWdCLENBQUM7QUFFckIsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNwQixLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7SUFDakMsT0FBTztJQUNQLElBQUkscUJBQWUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO1FBQ3JDLElBQUksRUFBRSxTQUFTO1FBQ2YsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtRQUM3Qix1QkFBdUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztLQUNsQyxDQUFDLENBQUM7SUFFSCxPQUFPO0lBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDLHlCQUF5QixFQUFFO1FBQzFELE1BQU0sRUFBRTtZQUNOLFNBQVMsRUFBRSxJQUFBLG9CQUFXLEVBQUM7Z0JBQ3JCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE1BQU0sRUFBRSxJQUFBLG1CQUFVLEVBQUM7b0JBQ2pCLEtBQUssRUFBRTt3QkFDTCxRQUFRLEVBQUUsYUFBYSxDQUFDOzRCQUN0Qiw2SUFBNkk7NEJBQzdJLHVPQUF1Tzs0QkFDdk8sa0tBQWtLO3lCQUNuSyxDQUFDO3FCQUNIO2lCQUNGLENBQUM7YUFDSCxDQUFDO1NBQ0g7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFNBQWdCLGFBQWEsQ0FBQyxRQUFlO0lBQzNDLE9BQU8sSUFBQSx3QkFBZSxFQUFDLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBVSxFQUFFLE9BQTBCLEVBQUUsRUFBRTtRQUM5RixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6QixPQUFPLENBQUMsYUFBYSxHQUFHLCtCQUErQixPQUFPLEtBQUssR0FBRyxDQUFDO1lBQ3ZFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLG9CQUFXLENBQUMsQ0FBQztRQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBRXZELE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzFELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztZQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hELE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQzthQUMzRDtZQUVELElBQUksT0FBTyxFQUFFO2dCQUNYLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUVELE9BQU8sQ0FBQyxhQUFhLEdBQUcseUNBQXlDLENBQUM7UUFDbEUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUF6QkQsc0NBeUJDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGU6IG1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHsgYW5ub3RhdGVNYXRjaGVyLCBlbmNvZGVkSnNvbiwgSW5zcGVjdGlvbkZhaWx1cmUsIG1hdGNoZXJGcm9tLCBvYmplY3RMaWtlLCBQcm9wZXJ0eU1hdGNoZXIgfSBmcm9tICdAbW9ub2Nkay1leHBlcmltZW50L2Fzc2VydCc7XG5pbXBvcnQgJ0Btb25vY2RrLWV4cGVyaW1lbnQvYXNzZXJ0L2plc3QnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ21vbm9jZGsnO1xuaW1wb3J0IHsgQXV0b1B1bGxSZXF1ZXN0LCBXcml0YWJsZUdpdEh1YlJlcG8gfSBmcm9tICcuLi8uLi9saWInO1xuXG5jb25zdCBNT0NLX1JFUE8gPSBuZXcgV3JpdGFibGVHaXRIdWJSZXBvKHtcbiAgc3NoS2V5U2VjcmV0OiB7IHNlY3JldEFybjogJ3NzaC1rZXktc2VjcmV0LWFybicgfSxcbiAgY29tbWl0VXNlcm5hbWU6ICd1c2VyJyxcbiAgY29tbWl0RW1haWw6ICdlbWFpbEBlbWFpbCcsXG4gIHJlcG9zaXRvcnk6ICdvd25lci9yZXBvJyxcbiAgdG9rZW5TZWNyZXRBcm46ICd0b2tlbi1zZWNyZXQtYXJuJyxcbn0pO1xuXG5cbmxldCBhcHA6IGNkay5BcHA7XG5sZXQgc3RhY2s6IGNkay5TdGFjaztcblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gIHN0YWNrID0gbmV3IGNkay5TdGFjayhhcHAsICdUZXN0U3RhY2snKTtcbn0pO1xuXG50ZXN0KCdza2lwIFBSIGlmIHN0aWxsIG9wZW4nLCAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgbmV3IEF1dG9QdWxsUmVxdWVzdChzdGFjaywgJ0F1dG9QdWxsJywge1xuICAgIHJlcG86IE1PQ0tfUkVQTyxcbiAgICBoZWFkOiB7IG5hbWU6ICduZXctZmVhdHVyZScgfSxcbiAgICBza2lwSWZPcGVuUHJzV2l0aExhYmVsczogWydhc2RmJ10sXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6Q29kZUJ1aWxkOjpQcm9qZWN0Jywge1xuICAgIFNvdXJjZToge1xuICAgICAgQnVpbGRTcGVjOiBlbmNvZGVkSnNvbih7XG4gICAgICAgIHZlcnNpb246ICcwLjInLFxuICAgICAgICBwaGFzZXM6IG9iamVjdExpa2Uoe1xuICAgICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogY29udGFpbnNTbGljZShbXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGV4cG9ydCBHSVRIVUJfVE9LRU49JChhd3Mgc2VjcmV0c21hbmFnZXIgZ2V0LXNlY3JldC12YWx1ZSAtLXNlY3JldC1pZCBcInRva2VuLXNlY3JldC1hcm5cIiAtLW91dHB1dD10ZXh0IC0tcXVlcnk9U2VjcmV0U3RyaW5nKSA7IH0nLFxuICAgICAgICAgICAgICAnJFNLSVAgfHwgeyBjdXJsIC0tZmFpbCAtbyBzZWFyY2guanNvbiAtLWhlYWRlciBcIkF1dGhvcml6YXRpb246IHRva2VuICRHSVRIVUJfVE9LRU5cIiAtLWhlYWRlciBcIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblwiIFxcJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vc2VhcmNoL2lzc3Vlcz9xPXJlcG8lM0Fvd25lciUyRnJlcG8lMjBpcyUzQXByJTIwaXMlM0FvcGVuJTIwbGFiZWwlM0Fhc2RmXFwnIDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IG5vZGUgLWUgXFwncHJvY2Vzcy5leGl0Q29kZSA9IHJlcXVpcmUoXCIuL3NlYXJjaC5qc29uXCIpLnRvdGFsX2NvdW50XFwnIHx8IHsgZWNobyBcIkZvdW5kIG9wZW4gUFJzIHdpdGggbGFiZWwgYXNkZiwgc2tpcHBpbmcgUFIuXCI7IGV4cG9ydCBTS0lQPXRydWU7IH0gOyB9JyxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgfSxcbiAgfSk7XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zU2xpY2UoZWxlbWVudHM6IGFueVtdKTogUHJvcGVydHlNYXRjaGVyIHtcbiAgcmV0dXJuIGFubm90YXRlTWF0Y2hlcih7ICRjb250YWluc1NsaWNlOiBlbGVtZW50cyB9LCAodmFsdWU6IGFueSwgZmFpbHVyZTogSW5zcGVjdGlvbkZhaWx1cmUpID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmYWlsdXJlLmZhaWx1cmVSZWFzb24gPSBgRXhwZWN0ZWQgYW4gQXJyYXksIGJ1dCBnb3QgJyR7dHlwZW9mIHZhbHVlfSdgO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGlubmVyTWF0Y2hlcnMgPSBlbGVtZW50cy5tYXAobWF0Y2hlckZyb20pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGggLSBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuXG4gICAgICBjb25zdCBpbm5lckluc3BlY3Rpb24gPSB7IC4uLmZhaWx1cmUsIGZhaWx1cmVSZWFzb246ICcnIH07XG4gICAgICBsZXQgc3VjY2VzcyA9IHRydWU7XG4gICAgICBmb3IgKGxldCBqID0gMDsgc3VjY2VzcyAmJiBqIDwgaW5uZXJNYXRjaGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICBzdWNjZXNzID0gaW5uZXJNYXRjaGVyc1tqXSh2YWx1ZVtpICsgal0sIGlubmVySW5zcGVjdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZhaWx1cmUuZmFpbHVyZVJlYXNvbiA9ICdBcnJheSBkaWQgbm90IGNvbnRhaW4gZXhwZWN0ZWQgZWxlbWVudHMnO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG4iXX0=
@@ -1 +0,0 @@
1
- export {};
@@ -1,89 +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
- const assert_1 = require("@monocdk-experiment/assert");
23
- const monocdk_1 = require("monocdk");
24
- const delivlib = __importStar(require("../../lib"));
25
- const { Template, Match } = monocdk_1.assertions;
26
- describe('with standard pipeline', () => {
27
- let stack;
28
- let pipeline;
29
- beforeEach(() => {
30
- stack = new monocdk_1.Stack(new monocdk_1.App(), 'TestStack');
31
- pipeline = new delivlib.Pipeline(stack, 'Pipeline', {
32
- repo: new delivlib.CodeCommitRepo(new monocdk_1.aws_codecommit.Repository(stack, 'Repo', { repositoryName: 'test' })),
33
- pipelineName: 'HelloPipeline',
34
- });
35
- });
36
- test('can configure build image for NuGet publishing', () => {
37
- pipeline.publishToNuGet({
38
- nugetApiKeySecret: { secretArn: 'arn:aws:secretsmanager:us-east-1:712950704752:secret:delivlib/nuget-fHzSUD' },
39
- buildImage: monocdk_1.aws_codebuild.LinuxBuildImage.fromDockerRegistry('xyz'),
40
- });
41
- (0, assert_1.expect)(stack).to((0, assert_1.haveResourceLike)('AWS::CodeBuild::Project', {
42
- Environment: {
43
- Image: 'xyz',
44
- },
45
- }));
46
- });
47
- test('can configure build image for Maven publishing', () => {
48
- const signingKey = new delivlib.OpenPGPKeyPair(stack, 'CodeSign', {
49
- email: 'aws-cdk-dev+delivlib@amazon.com',
50
- encryptionKey: new monocdk_1.aws_kms.Key(stack, 'CodeSign-CMK'),
51
- expiry: '4y',
52
- identity: 'aws-cdk-dev',
53
- keySizeBits: 4096,
54
- pubKeyParameterName: `/${stack.node.path}/CodeSign.pub`,
55
- secretName: stack.node.path + '/CodeSign',
56
- version: 0,
57
- removalPolicy: delivlib.OpenPGPKeyPairRemovalPolicy.DESTROY_IMMEDIATELY,
58
- });
59
- pipeline.publishToMaven({
60
- mavenLoginSecret: { secretArn: 'arn:aws:secretsmanager:us-east-1:712950704752:secret:delivlib/maven-7ROCWi' },
61
- mavenEndpoint: 'https://aws.oss.sonatype.org:443/',
62
- signingKey,
63
- stagingProfileId: '68a05363083174',
64
- buildImage: monocdk_1.aws_codebuild.LinuxBuildImage.fromDockerRegistry('xyz'),
65
- });
66
- (0, assert_1.expect)(stack).to((0, assert_1.haveResourceLike)('AWS::CodeBuild::Project', {
67
- Environment: {
68
- Image: 'xyz',
69
- },
70
- }));
71
- });
72
- test('can control stage name', () => {
73
- pipeline.publishToNuGet({
74
- nugetApiKeySecret: { secretArn: 'arn:aws:secretsmanager:us-east-1:712950704752:secret:delivlib/nuget-fHzSUD' },
75
- buildImage: monocdk_1.aws_codebuild.LinuxBuildImage.fromDockerRegistry('xyz'),
76
- stageName: 'MyPublishStage',
77
- });
78
- const template = Template.fromStack(stack);
79
- template.hasResourceProperties('AWS::CodePipeline::Pipeline', {
80
- Stages: Match.arrayWith([{
81
- Name: 'MyPublishStage',
82
- Actions: [Match.objectLike({
83
- Name: 'NuGetPublish',
84
- })],
85
- }]),
86
- });
87
- });
88
- });
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGluZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHVibGlzaGluZy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVEQUFvRjtBQUNwRixxQ0FNaUI7QUFDakIsb0RBQXNDO0FBRXRDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsb0JBQVUsQ0FBQztBQUd2QyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLElBQUksS0FBWSxDQUFDO0lBQ2pCLElBQUksUUFBMkIsQ0FBQztJQUNoQyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsS0FBSyxHQUFHLElBQUksZUFBSyxDQUFDLElBQUksYUFBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFMUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO1lBQ2xELElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSx3QkFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdkcsWUFBWSxFQUFFLGVBQWU7U0FDOUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxFQUFFO1FBQzFELFFBQVEsQ0FBQyxjQUFjLENBQUM7WUFDdEIsaUJBQWlCLEVBQUUsRUFBRSxTQUFTLEVBQUUsNEVBQTRFLEVBQUU7WUFDOUcsVUFBVSxFQUFFLHVCQUFTLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztTQUNoRSxDQUFDLENBQUM7UUFFSCxJQUFBLGVBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBQSx5QkFBZ0IsRUFBQyx5QkFBeUIsRUFBRTtZQUMvRCxXQUFXLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLEtBQUs7YUFDYjtTQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxFQUFFO1FBQzFELE1BQU0sVUFBVSxHQUFHLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO1lBQ2hFLEtBQUssRUFBRSxpQ0FBaUM7WUFDeEMsYUFBYSxFQUFFLElBQUksaUJBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQztZQUNqRCxNQUFNLEVBQUUsSUFBSTtZQUNaLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLFdBQVcsRUFBRSxJQUFLO1lBQ2xCLG1CQUFtQixFQUFFLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLGVBQWU7WUFDdkQsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVc7WUFDekMsT0FBTyxFQUFFLENBQUM7WUFDVixhQUFhLEVBQUUsUUFBUSxDQUFDLDJCQUEyQixDQUFDLG1CQUFtQjtTQUN4RSxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsY0FBYyxDQUFDO1lBQ3RCLGdCQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLDRFQUE0RSxFQUFFO1lBQzdHLGFBQWEsRUFBRSxtQ0FBbUM7WUFDbEQsVUFBVTtZQUNWLGdCQUFnQixFQUFFLGdCQUFnQjtZQUNsQyxVQUFVLEVBQUUsdUJBQVMsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO1NBQ2hFLENBQUMsQ0FBQztRQUVILElBQUEsZUFBVSxFQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFBLHlCQUFnQixFQUFDLHlCQUF5QixFQUFFO1lBQy9ELFdBQVcsRUFBRTtnQkFDWCxLQUFLLEVBQUUsS0FBSzthQUNiO1NBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUN0QixpQkFBaUIsRUFBRSxFQUFFLFNBQVMsRUFBRSw0RUFBNEUsRUFBRTtZQUM5RyxVQUFVLEVBQUUsdUJBQVMsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO1lBQy9ELFNBQVMsRUFBRSxnQkFBZ0I7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsNkJBQTZCLEVBQUU7WUFDNUQsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzs0QkFDekIsSUFBSSxFQUFFLGNBQWM7eUJBQ3JCLENBQUMsQ0FBQztpQkFDSixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0IGFzIGNka19leHBlY3QsIGhhdmVSZXNvdXJjZUxpa2UgfSBmcm9tICdAbW9ub2Nkay1leHBlcmltZW50L2Fzc2VydCc7XG5pbXBvcnQge1xuICBBcHAsIFN0YWNrLFxuICBhd3NfY29kZWJ1aWxkIGFzIGNvZGVidWlsZCxcbiAgYXdzX2NvZGVjb21taXQgYXMgY29kZWNvbW1pdCxcbiAgYXdzX2ttcyBhcyBrbXMsXG4gIGFzc2VydGlvbnMsXG59IGZyb20gJ21vbm9jZGsnO1xuaW1wb3J0ICogYXMgZGVsaXZsaWIgZnJvbSAnLi4vLi4vbGliJztcblxuY29uc3QgeyBUZW1wbGF0ZSwgTWF0Y2ggfSA9IGFzc2VydGlvbnM7XG5cblxuZGVzY3JpYmUoJ3dpdGggc3RhbmRhcmQgcGlwZWxpbmUnLCAoKSA9PiB7XG4gIGxldCBzdGFjazogU3RhY2s7XG4gIGxldCBwaXBlbGluZTogZGVsaXZsaWIuUGlwZWxpbmU7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHN0YWNrID0gbmV3IFN0YWNrKG5ldyBBcHAoKSwgJ1Rlc3RTdGFjaycpO1xuXG4gICAgcGlwZWxpbmUgPSBuZXcgZGVsaXZsaWIuUGlwZWxpbmUoc3RhY2ssICdQaXBlbGluZScsIHtcbiAgICAgIHJlcG86IG5ldyBkZWxpdmxpYi5Db2RlQ29tbWl0UmVwbyhuZXcgY29kZWNvbW1pdC5SZXBvc2l0b3J5KHN0YWNrLCAnUmVwbycsIHsgcmVwb3NpdG9yeU5hbWU6ICd0ZXN0JyB9KSksXG4gICAgICBwaXBlbGluZU5hbWU6ICdIZWxsb1BpcGVsaW5lJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnY2FuIGNvbmZpZ3VyZSBidWlsZCBpbWFnZSBmb3IgTnVHZXQgcHVibGlzaGluZycsICgpID0+IHtcbiAgICBwaXBlbGluZS5wdWJsaXNoVG9OdUdldCh7XG4gICAgICBudWdldEFwaUtleVNlY3JldDogeyBzZWNyZXRBcm46ICdhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnVzLWVhc3QtMTo3MTI5NTA3MDQ3NTI6c2VjcmV0OmRlbGl2bGliL251Z2V0LWZIelNVRCcgfSxcbiAgICAgIGJ1aWxkSW1hZ2U6IGNvZGVidWlsZC5MaW51eEJ1aWxkSW1hZ2UuZnJvbURvY2tlclJlZ2lzdHJ5KCd4eXonKSxcbiAgICB9KTtcblxuICAgIGNka19leHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6Q29kZUJ1aWxkOjpQcm9qZWN0Jywge1xuICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgSW1hZ2U6ICd4eXonLFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NhbiBjb25maWd1cmUgYnVpbGQgaW1hZ2UgZm9yIE1hdmVuIHB1Ymxpc2hpbmcnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2lnbmluZ0tleSA9IG5ldyBkZWxpdmxpYi5PcGVuUEdQS2V5UGFpcihzdGFjaywgJ0NvZGVTaWduJywge1xuICAgICAgZW1haWw6ICdhd3MtY2RrLWRlditkZWxpdmxpYkBhbWF6b24uY29tJyxcbiAgICAgIGVuY3J5cHRpb25LZXk6IG5ldyBrbXMuS2V5KHN0YWNrLCAnQ29kZVNpZ24tQ01LJyksXG4gICAgICBleHBpcnk6ICc0eScsXG4gICAgICBpZGVudGl0eTogJ2F3cy1jZGstZGV2JyxcbiAgICAgIGtleVNpemVCaXRzOiA0XzA5NixcbiAgICAgIHB1YktleVBhcmFtZXRlck5hbWU6IGAvJHtzdGFjay5ub2RlLnBhdGh9L0NvZGVTaWduLnB1YmAsXG4gICAgICBzZWNyZXROYW1lOiBzdGFjay5ub2RlLnBhdGggKyAnL0NvZGVTaWduJyxcbiAgICAgIHZlcnNpb246IDAsXG4gICAgICByZW1vdmFsUG9saWN5OiBkZWxpdmxpYi5PcGVuUEdQS2V5UGFpclJlbW92YWxQb2xpY3kuREVTVFJPWV9JTU1FRElBVEVMWSxcbiAgICB9KTtcblxuICAgIHBpcGVsaW5lLnB1Ymxpc2hUb01hdmVuKHtcbiAgICAgIG1hdmVuTG9naW5TZWNyZXQ6IHsgc2VjcmV0QXJuOiAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjp1cy1lYXN0LTE6NzEyOTUwNzA0NzUyOnNlY3JldDpkZWxpdmxpYi9tYXZlbi03Uk9DV2knIH0sXG4gICAgICBtYXZlbkVuZHBvaW50OiAnaHR0cHM6Ly9hd3Mub3NzLnNvbmF0eXBlLm9yZzo0NDMvJyxcbiAgICAgIHNpZ25pbmdLZXksXG4gICAgICBzdGFnaW5nUHJvZmlsZUlkOiAnNjhhMDUzNjMwODMxNzQnLFxuICAgICAgYnVpbGRJbWFnZTogY29kZWJ1aWxkLkxpbnV4QnVpbGRJbWFnZS5mcm9tRG9ja2VyUmVnaXN0cnkoJ3h5eicpLFxuICAgIH0pO1xuXG4gICAgY2RrX2V4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlTGlrZSgnQVdTOjpDb2RlQnVpbGQ6OlByb2plY3QnLCB7XG4gICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICBJbWFnZTogJ3h5eicsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgdGVzdCgnY2FuIGNvbnRyb2wgc3RhZ2UgbmFtZScsICgpID0+IHtcbiAgICBwaXBlbGluZS5wdWJsaXNoVG9OdUdldCh7XG4gICAgICBudWdldEFwaUtleVNlY3JldDogeyBzZWNyZXRBcm46ICdhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnVzLWVhc3QtMTo3MTI5NTA3MDQ3NTI6c2VjcmV0OmRlbGl2bGliL251Z2V0LWZIelNVRCcgfSxcbiAgICAgIGJ1aWxkSW1hZ2U6IGNvZGVidWlsZC5MaW51eEJ1aWxkSW1hZ2UuZnJvbURvY2tlclJlZ2lzdHJ5KCd4eXonKSxcbiAgICAgIHN0YWdlTmFtZTogJ015UHVibGlzaFN0YWdlJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Q29kZVBpcGVsaW5lOjpQaXBlbGluZScsIHtcbiAgICAgIFN0YWdlczogTWF0Y2guYXJyYXlXaXRoKFt7XG4gICAgICAgIE5hbWU6ICdNeVB1Ymxpc2hTdGFnZScsXG4gICAgICAgIEFjdGlvbnM6IFtNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICBOYW1lOiAnTnVHZXRQdWJsaXNoJyxcbiAgICAgICAgfSldLFxuICAgICAgfV0pLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -1 +0,0 @@
1
- import '@monocdk-experiment/assert/jest';
@@ -1,313 +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
- require("@monocdk-experiment/assert/jest");
23
- const path = __importStar(require("path"));
24
- const assert_1 = require("@monocdk-experiment/assert");
25
- const monocdk_1 = require("monocdk");
26
- const registry_sync_1 = require("../../../lib/registry-sync");
27
- describe('EcrMirror', () => {
28
- test('default', () => {
29
- const stack = new monocdk_1.Stack();
30
- new registry_sync_1.EcrMirror(stack, 'EcrRegistrySync', {
31
- sources: [registry_sync_1.MirrorSource.fromDockerHub('docker-image')],
32
- dockerHubCredentials: {
33
- usernameKey: 'username-key',
34
- passwordKey: 'password-key',
35
- secret: monocdk_1.aws_secretsmanager.Secret.fromSecretArn(stack, 'DockerhubSecret', 'arn:aws:secretsmanager:us-west-2:111122223333:secret:123aass'),
36
- },
37
- schedule: monocdk_1.aws_events.Schedule.cron({}),
38
- });
39
- expect(stack).toHaveResourceLike('AWS::CodeBuild::Project', {
40
- Environment: {
41
- EnvironmentVariables: [
42
- {
43
- Name: 'DOCKERHUB_USERNAME',
44
- Type: 'SECRETS_MANAGER',
45
- Value: '123aass:username-key:AWSCURRENT',
46
- },
47
- {
48
- Name: 'DOCKERHUB_PASSWORD',
49
- Type: 'SECRETS_MANAGER',
50
- Value: '123aass:password-key:AWSCURRENT',
51
- },
52
- ],
53
- Image: 'jsii/superchain',
54
- RegistryCredential: {
55
- Credential: '123aass',
56
- CredentialProvider: 'SECRETS_MANAGER',
57
- },
58
- },
59
- Source: {
60
- BuildSpec: {
61
- 'Fn::Join': [
62
- '',
63
- [
64
- '{\n "version": "0.2",\n "phases": {\n "build": {\n "commands": [\n "nohup /usr/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2&",\n "timeout 15 sh -c \\"until docker info; do echo .; sleep 1; done\\"",\n "docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}",\n "aws ecr get-login-password | docker login --username AWS --password-stdin ',
65
- {
66
- Ref: 'AWS::AccountId',
67
- },
68
- '.dkr.ecr.',
69
- {
70
- Ref: 'AWS::Region',
71
- },
72
- '.amazonaws.com",\n "docker pull library/docker-image:latest",\n "docker tag library/docker-image:latest ',
73
- {
74
- Ref: 'AWS::AccountId',
75
- },
76
- '.dkr.ecr.',
77
- {
78
- Ref: 'AWS::Region',
79
- },
80
- '.amazonaws.com/library/docker-image:latest",\n "docker push ',
81
- {
82
- Ref: 'AWS::AccountId',
83
- },
84
- '.dkr.ecr.',
85
- {
86
- Ref: 'AWS::Region',
87
- },
88
- '.amazonaws.com/library/docker-image:latest",\n "docker image prune --all --force"\n ]\n }\n }\n}',
89
- ],
90
- ],
91
- },
92
- },
93
- });
94
- });
95
- test('autoStart', () => {
96
- const stack = new monocdk_1.Stack();
97
- new registry_sync_1.EcrMirror(stack, 'EcrRegistrySync', {
98
- sources: [registry_sync_1.MirrorSource.fromDockerHub('docker-image')],
99
- dockerHubCredentials: {
100
- usernameKey: 'username-key',
101
- passwordKey: 'password-key',
102
- secret: monocdk_1.aws_secretsmanager.Secret.fromSecretArn(stack, 'DockerhubSecret', 'arn:aws:secretsmanager:us-west-2:111122223333:secret:123aass'),
103
- },
104
- autoStart: true,
105
- });
106
- expect(stack).toHaveResource('Custom::AWS');
107
- expect(stack).not.toHaveResource('AWS::Events::Rule');
108
- });
109
- test('schedule', () => {
110
- const stack = new monocdk_1.Stack();
111
- new registry_sync_1.EcrMirror(stack, 'EcrRegistrySync', {
112
- sources: [registry_sync_1.MirrorSource.fromDockerHub('docker-image')],
113
- dockerHubCredentials: {
114
- usernameKey: 'username-key',
115
- passwordKey: 'password-key',
116
- secret: monocdk_1.aws_secretsmanager.Secret.fromSecretArn(stack, 'DockerhubSecret', 'arn:aws:secretsmanager:us-west-2:111122223333:secret:123aass'),
117
- },
118
- schedule: monocdk_1.aws_events.Schedule.rate(monocdk_1.Duration.hours(1)),
119
- });
120
- expect(stack).toHaveResource('AWS::Events::Rule', {
121
- ScheduleExpression: 'rate(1 hour)',
122
- });
123
- expect(stack).not.toHaveResource('Custom::AWS');
124
- expect(stack).not.toHaveResource('AWS::Lambda::Function');
125
- });
126
- test('errors on duplicate repository', () => {
127
- const stack = new monocdk_1.Stack();
128
- expect(() => new registry_sync_1.EcrMirror(stack, 'EcrRegistrySync', {
129
- sources: [
130
- registry_sync_1.MirrorSource.fromDockerHub('my/docker-image'),
131
- registry_sync_1.MirrorSource.fromDirectory(path.join(__dirname, 'docker-asset'), 'my/docker-image'),
132
- ],
133
- dockerHubCredentials: {
134
- usernameKey: 'username-key',
135
- passwordKey: 'password-key',
136
- secret: monocdk_1.aws_secretsmanager.Secret.fromSecretArn(stack, 'DockerhubSecret', 'arn:aws:secretsmanager:us-west-2:111122223333:secret:123aass'),
137
- },
138
- schedule: monocdk_1.aws_events.Schedule.rate(monocdk_1.Duration.hours(1)),
139
- })).toThrow(/Mirror source.*already exists/);
140
- });
141
- describe('ecrRepository()', () => {
142
- test('default', () => {
143
- const stack = new monocdk_1.Stack();
144
- const image = registry_sync_1.MirrorSource.fromDockerHub('my/docker-image');
145
- const registry = new registry_sync_1.EcrMirror(stack, 'EcrRegistrySync', {
146
- sources: [image],
147
- dockerHubCredentials: {
148
- usernameKey: 'username-key',
149
- passwordKey: 'password-key',
150
- secret: monocdk_1.aws_secretsmanager.Secret.fromSecretArn(stack, 'DockerhubSecret', 'arn:aws:secretsmanager:us-west-2:111122223333:secret:123aass'),
151
- },
152
- schedule: monocdk_1.aws_events.Schedule.cron({}),
153
- });
154
- const repo = registry.ecrRepository('my/docker-image');
155
- expect(repo).toBeDefined();
156
- expect(stack.resolve(repo.repositoryArn)).toEqual({
157
- 'Fn::GetAtt': ['EcrRegistrySyncRepomydockerimageCE3ABCA6', 'Arn'],
158
- });
159
- });
160
- test('returning a mirrored repository does not depend on the tag', () => {
161
- const stack = new monocdk_1.Stack();
162
- const image = registry_sync_1.MirrorSource.fromDockerHub('my/docker-image', 'mytag');
163
- const registry = new registry_sync_1.EcrMirror(stack, 'EcrRegistrySync', {
164
- sources: [image],
165
- dockerHubCredentials: {
166
- usernameKey: 'username-key',
167
- passwordKey: 'password-key',
168
- secret: monocdk_1.aws_secretsmanager.Secret.fromSecretArn(stack, 'DockerhubSecret', 'arn:aws:secretsmanager:us-west-2:111122223333:secret:123aass'),
169
- },
170
- schedule: monocdk_1.aws_events.Schedule.cron({}),
171
- });
172
- expect(registry.ecrRepository('my/docker-image')).toBeDefined();
173
- });
174
- });
175
- test('schedule and/or autoStart', () => {
176
- const stack = new monocdk_1.Stack();
177
- const image = registry_sync_1.MirrorSource.fromDockerHub('my/docker-image');
178
- expect(() => new registry_sync_1.EcrMirror(stack, 'EcrRegistrySync', {
179
- sources: [image],
180
- dockerHubCredentials: {
181
- usernameKey: 'username-key',
182
- passwordKey: 'password-key',
183
- secret: monocdk_1.aws_secretsmanager.Secret.fromSecretArn(stack, 'DockerhubSecret', 'arn:aws:secretsmanager:us-west-2:111122223333:secret:123aass'),
184
- },
185
- })).toThrow(/schedule or autoStart/);
186
- });
187
- });
188
- describe('EcrMirrorAspect', () => {
189
- test('applies to relevant codebuild projects', () => {
190
- // GIVEN
191
- const stack = new monocdk_1.Stack();
192
- const mirror = new registry_sync_1.EcrMirror(stack, 'Mirror', {
193
- sources: [registry_sync_1.MirrorSource.fromDockerHub('my/docker-image')],
194
- dockerHubCredentials: {
195
- usernameKey: 'username-key',
196
- passwordKey: 'password-key',
197
- secret: monocdk_1.aws_secretsmanager.Secret.fromSecretArn(stack, 'DockerhubSecret', 'arn:aws:secretsmanager:us-west-2:111122223333:secret:123aass'),
198
- },
199
- schedule: monocdk_1.aws_events.Schedule.cron({}),
200
- });
201
- new monocdk_1.aws_codebuild.Project(stack, 'MyDockerImageProject', {
202
- buildSpec: monocdk_1.aws_codebuild.BuildSpec.fromObject({}),
203
- environment: {
204
- buildImage: monocdk_1.aws_codebuild.LinuxBuildImage.fromDockerRegistry('my/docker-image'),
205
- },
206
- });
207
- // WHEN
208
- monocdk_1.Aspects.of(stack).add(new registry_sync_1.EcrMirrorAspect(mirror));
209
- // THEN
210
- expect(stack).toHaveResourceLike('AWS::CodeBuild::Project', {
211
- Environment: {
212
- Image: {
213
- 'Fn::Join': [
214
- '',
215
- [
216
- {
217
- 'Fn::Select': [
218
- 4,
219
- {
220
- 'Fn::Split': [
221
- ':',
222
- { 'Fn::GetAtt': ['MirrorRepomydockerimageE8DCCA4F', 'Arn'] },
223
- ],
224
- },
225
- ],
226
- },
227
- '.dkr.ecr.',
228
- {
229
- 'Fn::Select': [
230
- 3,
231
- {
232
- 'Fn::Split': [
233
- ':',
234
- { 'Fn::GetAtt': ['MirrorRepomydockerimageE8DCCA4F', 'Arn'] },
235
- ],
236
- },
237
- ],
238
- },
239
- '.',
240
- { Ref: 'AWS::URLSuffix' },
241
- '/',
242
- { Ref: 'MirrorRepomydockerimageE8DCCA4F' },
243
- ':latest',
244
- ],
245
- ],
246
- },
247
- },
248
- });
249
- });
250
- test('does not affect unrelated codebuild projects', () => {
251
- // GIVEN
252
- const stack = new monocdk_1.Stack();
253
- const mirror = new registry_sync_1.EcrMirror(stack, 'Mirror', {
254
- sources: [registry_sync_1.MirrorSource.fromDockerHub('my/docker-image')],
255
- dockerHubCredentials: {
256
- usernameKey: 'username-key',
257
- passwordKey: 'password-key',
258
- secret: monocdk_1.aws_secretsmanager.Secret.fromSecretArn(stack, 'DockerhubSecret', 'arn:aws:secretsmanager:us-west-2:111122223333:secret:123aass'),
259
- },
260
- schedule: monocdk_1.aws_events.Schedule.cron({}),
261
- });
262
- new monocdk_1.aws_codebuild.Project(stack, 'UnrelatedProject', {
263
- buildSpec: monocdk_1.aws_codebuild.BuildSpec.fromObject({}),
264
- environment: {
265
- buildImage: monocdk_1.aws_codebuild.LinuxBuildImage.fromDockerRegistry('unrelated/image'),
266
- },
267
- });
268
- // WHEN
269
- monocdk_1.Aspects.of(stack).add(new registry_sync_1.EcrMirrorAspect(mirror));
270
- // THEN
271
- expect(stack).toHaveResourceLike('AWS::CodeBuild::Project', {
272
- Environment: {
273
- Image: 'unrelated/image',
274
- },
275
- });
276
- });
277
- test('can mirror multiple tags from same repository', () => {
278
- // GIVEN
279
- const stack = new monocdk_1.Stack(undefined, 'Stack', {
280
- env: { account: 'account', region: 'region' },
281
- });
282
- new registry_sync_1.EcrMirror(stack, 'Mirror', {
283
- sources: [
284
- registry_sync_1.MirrorSource.fromDockerHub('my/docker-image'),
285
- registry_sync_1.MirrorSource.fromDockerHub('my/docker-image', 'some_tag'),
286
- ],
287
- dockerHubCredentials: {
288
- usernameKey: 'username-key',
289
- passwordKey: 'password-key',
290
- secret: monocdk_1.aws_secretsmanager.Secret.fromSecretArn(stack, 'DockerhubSecret', 'arn:aws:secretsmanager:us-west-2:111122223333:secret:123aass'),
291
- },
292
- schedule: monocdk_1.aws_events.Schedule.cron({}),
293
- });
294
- // THEN: one repo that mirrors both tags
295
- expect(stack).toHaveResource('AWS::ECR::Repository', {
296
- RepositoryName: 'my/docker-image',
297
- });
298
- (0, assert_1.expect)(stack).to((0, assert_1.countResources)('AWS::ECR::Repository', 1));
299
- // Have both pushes in the project buildspec
300
- expect(stack).toHaveResourceLike('AWS::CodeBuild::Project', {
301
- Source: {
302
- BuildSpec: (0, assert_1.encodedJson)((0, assert_1.objectLike)({
303
- phases: {
304
- build: {
305
- commands: (0, assert_1.arrayWith)('docker push account.dkr.ecr.region.amazonaws.com/my/docker-image:latest', 'docker push account.dkr.ecr.region.amazonaws.com/my/docker-image:some_tag'),
306
- },
307
- },
308
- })),
309
- },
310
- });
311
- });
312
- });
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNyLW1pcnJvci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZWNyLW1pcnJvci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QztBQUN6QywyQ0FBNkI7QUFDN0IsdURBQXFIO0FBQ3JILHFDQUtpQjtBQUNqQiw4REFBc0Y7QUFFdEYsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7SUFDekIsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLHlCQUFTLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFO1lBQ3RDLE9BQU8sRUFBRSxDQUFDLDRCQUFZLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3JELG9CQUFvQixFQUFFO2dCQUNwQixXQUFXLEVBQUUsY0FBYztnQkFDM0IsV0FBVyxFQUFFLGNBQWM7Z0JBQzNCLE1BQU0sRUFBRSw0QkFBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLDhEQUE4RCxDQUFDO2FBQy9IO1lBQ0QsUUFBUSxFQUFFLG9CQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDLHlCQUF5QixFQUFFO1lBQzFELFdBQVcsRUFBRTtnQkFDWCxvQkFBb0IsRUFBRTtvQkFDcEI7d0JBQ0UsSUFBSSxFQUFFLG9CQUFvQjt3QkFDMUIsSUFBSSxFQUFFLGlCQUFpQjt3QkFDdkIsS0FBSyxFQUFFLGlDQUFpQztxQkFDekM7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLG9CQUFvQjt3QkFDMUIsSUFBSSxFQUFFLGlCQUFpQjt3QkFDdkIsS0FBSyxFQUFFLGlDQUFpQztxQkFDekM7aUJBQ0Y7Z0JB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QUFDO29CQUNoQyxNQUFNLEVBQUU7d0JBQ04sS0FBSyxFQUFFOzRCQUNMLFFBQVEsRUFBRSxJQUFBLGtCQUFTLEVBQ2pCLHlFQUF5RSxFQUN6RSwyRUFBMkUsQ0FDNUU7eUJBQ0Y7cUJBQ0Y7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdAbW9ub2Nkay1leHBlcmltZW50L2Fzc2VydC9qZXN0JztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBhcnJheVdpdGgsIGNvdW50UmVzb3VyY2VzLCBlbmNvZGVkSnNvbiwgZXhwZWN0IGFzIGNka0V4cGVjdCwgb2JqZWN0TGlrZSB9IGZyb20gJ0Btb25vY2RrLWV4cGVyaW1lbnQvYXNzZXJ0JztcbmltcG9ydCB7XG4gIEFzcGVjdHMsIER1cmF0aW9uLCBTdGFjayxcbiAgYXdzX2NvZGVidWlsZCBhcyBjb2RlYnVpbGQsXG4gIGF3c19ldmVudHMgYXMgZXZlbnRzLFxuICBhd3Nfc2VjcmV0c21hbmFnZXIgYXMgc2VjcmV0cyxcbn0gZnJvbSAnbW9ub2Nkayc7XG5pbXBvcnQgeyBFY3JNaXJyb3IsIEVjck1pcnJvckFzcGVjdCwgTWlycm9yU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vbGliL3JlZ2lzdHJ5LXN5bmMnO1xuXG5kZXNjcmliZSgnRWNyTWlycm9yJywgKCkgPT4ge1xuICB0ZXN0KCdkZWZhdWx0JywgKCkgPT4ge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgbmV3IEVjck1pcnJvcihzdGFjaywgJ0VjclJlZ2lzdHJ5U3luYycsIHtcbiAgICAgIHNvdXJjZXM6IFtNaXJyb3JTb3VyY2UuZnJvbURvY2tlckh1YignZG9ja2VyLWltYWdlJyldLFxuICAgICAgZG9ja2VySHViQ3JlZGVudGlhbHM6IHtcbiAgICAgICAgdXNlcm5hbWVLZXk6ICd1c2VybmFtZS1rZXknLFxuICAgICAgICBwYXNzd29yZEtleTogJ3Bhc3N3b3JkLWtleScsXG4gICAgICAgIHNlY3JldDogc2VjcmV0cy5TZWNyZXQuZnJvbVNlY3JldEFybihzdGFjaywgJ0RvY2tlcmh1YlNlY3JldCcsICdhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnVzLXdlc3QtMjoxMTExMjIyMjMzMzM6c2VjcmV0OjEyM2Fhc3MnKSxcbiAgICAgIH0sXG4gICAgICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmNyb24oe30pLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6Q29kZUJ1aWxkOjpQcm9qZWN0Jywge1xuICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgRW52aXJvbm1lbnRWYXJpYWJsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBOYW1lOiAnRE9DS0VSSFVCX1VTRVJOQU1FJyxcbiAgICAgICAgICAgIFR5cGU6ICdTRUNSRVRTX01BTkFHRVInLFxuICAgICAgICAgICAgVmFsdWU6ICcxMjNhYXNzOnVzZXJuYW1lLWtleTpBV1NDVVJSRU5UJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIE5hbWU6ICdET0NLRVJIVUJfUEFTU1dPUkQnLFxuICAgICAgICAgICAgVHlwZTogJ1NFQ1JFVFNfTUFOQUdFUicsXG4gICAgICAgICAgICBWYWx1ZTogJzEyM2Fhc3M6cGFzc3dvcmQta2V5OkFXU0NVUlJFTlQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIEltYWdlOiAnanNpaS9zdXBlcmNoYWluJyxcbiAgICAgICAgUmVnaXN0cnlDcmVkZW50aWFsOiB7XG4gICAgICAgICAgQ3JlZGVudGlhbDogJzEyM2Fhc3MnLFxuICAgICAgICAgIENyZWRlbnRpYWxQcm92aWRlcjogJ1NFQ1JFVFNfTUFOQUdFUicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgU291cmNlOiB7XG4gICAgICAgIEJ1aWxkU3BlYzoge1xuICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAne1xcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4yXCIsXFxuICBcInBoYXNlc1wiOiB7XFxuICAgIFwiYnVpbGRcIjoge1xcbiAgICAgIFwiY29tbWFuZHNcIjogW1xcbiAgICAgICAgXCJub2h1cCAvdXNyL2Jpbi9kb2NrZXJkIC0taG9zdD11bml4Oi8vL3Zhci9ydW4vZG9ja2VyLnNvY2sgLS1ob3N0PXRjcDovLzEyNy4wLjAuMToyMzc1IC0tc3RvcmFnZS1kcml2ZXI9b3ZlcmxheTImXCIsXFxuICAgICAgICBcInRpbWVvdXQgMTUgc2ggLWMgXFxcXFwidW50aWwgZG9ja2VyIGluZm87IGRvIGVjaG8gLjsgc2xlZXAgMTsgZG9uZVxcXFxcIlwiLFxcbiAgICAgICAgXCJkb2NrZXIgbG9naW4gLXUgJHtET0NLRVJIVUJfVVNFUk5BTUV9IC1wICR7RE9DS0VSSFVCX1BBU1NXT1JEfVwiLFxcbiAgICAgICAgXCJhd3MgZWNyIGdldC1sb2dpbi1wYXNzd29yZCB8IGRvY2tlciBsb2dpbiAtLXVzZXJuYW1lIEFXUyAtLXBhc3N3b3JkLXN0ZGluICcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBSZWY6ICdBV1M6OkFjY291bnRJZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICcuZGtyLmVjci4nLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgUmVmOiAnQVdTOjpSZWdpb24nLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAnLmFtYXpvbmF3cy5jb21cIixcXG4gICAgICAgIFwiZG9ja2VyIHB1bGwgbGlicmFyeS9kb2NrZXItaW1hZ2U6bGF0ZXN0XCIsXFxuICAgICAgICBcImRvY2tlciB0YWcgbGlicmFyeS9kb2NrZXItaW1hZ2U6bGF0ZXN0ICcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBSZWY6ICdBV1M6OkFjY291bnRJZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICcuZGtyLmVjci4nLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgUmVmOiAnQVdTOjpSZWdpb24nLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAnLmFtYXpvbmF3cy5jb20vbGlicmFyeS9kb2NrZXItaW1hZ2U6bGF0ZXN0XCIsXFxuICAgICAgICBcImRvY2tlciBwdXNoICcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBSZWY6ICdBV1M6OkFjY291bnRJZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICcuZGtyLmVjci4nLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgUmVmOiAnQVdTOjpSZWdpb24nLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAnLmFtYXpvbmF3cy5jb20vbGlicmFyeS9kb2NrZXItaW1hZ2U6bGF0ZXN0XCIsXFxuICAgICAgICBcImRvY2tlciBpbWFnZSBwcnVuZSAtLWFsbCAtLWZvcmNlXCJcXG4gICAgICBdXFxuICAgIH1cXG4gIH1cXG59JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2F1dG9TdGFydCcsICgpID0+IHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIG5ldyBFY3JNaXJyb3Ioc3RhY2ssICdFY3JSZWdpc3RyeVN5bmMnLCB7XG4gICAgICBzb3VyY2VzOiBbTWlycm9yU291cmNlLmZyb21Eb2NrZXJIdWIoJ2RvY2tlci1pbWFnZScpXSxcbiAgICAgIGRvY2tlckh1YkNyZWRlbnRpYWxzOiB7XG4gICAgICAgIHVzZXJuYW1lS2V5OiAndXNlcm5hbWUta2V5JyxcbiAgICAgICAgcGFzc3dvcmRLZXk6ICdwYXNzd29yZC1rZXknLFxuICAgICAgICBzZWNyZXQ6IHNlY3JldHMuU2VjcmV0LmZyb21TZWNyZXRBcm4oc3RhY2ssICdEb2NrZXJodWJTZWNyZXQnLCAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjp1cy13ZXN0LTI6MTExMTIyMjIzMzMzOnNlY3JldDoxMjNhYXNzJyksXG4gICAgICB9LFxuICAgICAgYXV0b1N0YXJ0OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZSgnQ3VzdG9tOjpBV1MnKTtcbiAgICBleHBlY3Qoc3RhY2spLm5vdC50b0hhdmVSZXNvdXJjZSgnQVdTOjpFdmVudHM6OlJ1bGUnKTtcbiAgfSk7XG5cbiAgdGVzdCgnc2NoZWR1bGUnLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBuZXcgRWNyTWlycm9yKHN0YWNrLCAnRWNyUmVnaXN0cnlTeW5jJywge1xuICAgICAgc291cmNlczogW01pcnJvclNvdXJjZS5mcm9tRG9ja2VySHViKCdkb2NrZXItaW1hZ2UnKV0sXG4gICAgICBkb2NrZXJIdWJDcmVkZW50aWFsczoge1xuICAgICAgICB1c2VybmFtZUtleTogJ3VzZXJuYW1lLWtleScsXG4gICAgICAgIHBhc3N3b3JkS2V5OiAncGFzc3dvcmQta2V5JyxcbiAgICAgICAgc2VjcmV0OiBzZWNyZXRzLlNlY3JldC5mcm9tU2VjcmV0QXJuKHN0YWNrLCAnRG9ja2VyaHViU2VjcmV0JywgJ2Fybjphd3M6c2VjcmV0c21hbmFnZXI6dXMtd2VzdC0yOjExMTEyMjIyMzMzMzpzZWNyZXQ6MTIzYWFzcycpLFxuICAgICAgfSxcbiAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUucmF0ZShEdXJhdGlvbi5ob3VycygxKSksXG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKCdBV1M6OkV2ZW50czo6UnVsZScsIHtcbiAgICAgIFNjaGVkdWxlRXhwcmVzc2lvbjogJ3JhdGUoMSBob3VyKScsXG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc3RhY2spLm5vdC50b0hhdmVSZXNvdXJjZSgnQ3VzdG9tOjpBV1MnKTtcbiAgICBleHBlY3Qoc3RhY2spLm5vdC50b0hhdmVSZXNvdXJjZSgnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ2Vycm9ycyBvbiBkdXBsaWNhdGUgcmVwb3NpdG9yeScsICgpID0+IHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgRWNyTWlycm9yKHN0YWNrLCAnRWNyUmVnaXN0cnlTeW5jJywge1xuICAgICAgc291cmNlczogW1xuICAgICAgICBNaXJyb3JTb3VyY2UuZnJvbURvY2tlckh1YignbXkvZG9ja2VyLWltYWdlJyksXG4gICAgICAgIE1pcnJvclNvdXJjZS5mcm9tRGlyZWN0b3J5KHBhdGguam9pbihfX2Rpcm5hbWUsICdkb2NrZXItYXNzZXQnKSwgJ215L2RvY2tlci1pbWFnZScpLFxuICAgICAgXSxcbiAgICAgIGRvY2tlckh1YkNyZWRlbnRpYWxzOiB7XG4gICAgICAgIHVzZXJuYW1lS2V5OiAndXNlcm5hbWUta2V5JyxcbiAgICAgICAgcGFzc3dvcmRLZXk6ICdwYXNzd29yZC1rZXknLFxuICAgICAgICBzZWNyZXQ6IHNlY3JldHMuU2VjcmV0LmZyb21TZWNyZXRBcm4oc3RhY2ssICdEb2NrZXJodWJTZWNyZXQnLCAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjp1cy13ZXN0LTI6MTExMTIyMjIzMzMzOnNlY3JldDoxMjNhYXNzJyksXG4gICAgICB9LFxuICAgICAgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZS5yYXRlKER1cmF0aW9uLmhvdXJzKDEpKSxcbiAgICB9KSkudG9UaHJvdygvTWlycm9yIHNvdXJjZS4qYWxyZWFkeSBleGlzdHMvKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VjclJlcG9zaXRvcnkoKScsICgpID0+IHtcbiAgICB0ZXN0KCdkZWZhdWx0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgIGNvbnN0IGltYWdlID0gTWlycm9yU291cmNlLmZyb21Eb2NrZXJIdWIoJ215L2RvY2tlci1pbWFnZScpO1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBuZXcgRWNyTWlycm9yKHN0YWNrLCAnRWNyUmVnaXN0cnlTeW5jJywge1xuICAgICAgICBzb3VyY2VzOiBbaW1hZ2VdLFxuICAgICAgICBkb2NrZXJIdWJDcmVkZW50aWFsczoge1xuICAgICAgICAgIHVzZXJuYW1lS2V5OiAndXNlcm5hbWUta2V5JyxcbiAgICAgICAgICBwYXNzd29yZEtleTogJ3Bhc3N3b3JkLWtleScsXG4gICAgICAgICAgc2VjcmV0OiBzZWNyZXRzLlNlY3JldC5mcm9tU2VjcmV0QXJuKHN0YWNrLCAnRG9ja2VyaHViU2VjcmV0JywgJ2Fybjphd3M6c2VjcmV0c21hbmFnZXI6dXMtd2VzdC0yOjExMTEyMjIyMzMzMzpzZWNyZXQ6MTIzYWFzcycpLFxuICAgICAgICB9LFxuICAgICAgICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmNyb24oe30pLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcG8gPSByZWdpc3RyeS5lY3JSZXBvc2l0b3J5KCdteS9kb2NrZXItaW1hZ2UnKTtcbiAgICAgIGV4cGVjdChyZXBvKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHN0YWNrLnJlc29sdmUocmVwbyEucmVwb3NpdG9yeUFybikpLnRvRXF1YWwoe1xuICAgICAgICAnRm46OkdldEF0dCc6IFsnRWNyUmVnaXN0cnlTeW5jUmVwb215ZG9ja2VyaW1hZ2VDRTNBQkNBNicsICdBcm4nXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJuaW5nIGEgbWlycm9yZWQgcmVwb3NpdG9yeSBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIHRhZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICBjb25zdCBpbWFnZSA9IE1pcnJvclNvdXJjZS5mcm9tRG9ja2VySHViKCdteS9kb2NrZXItaW1hZ2UnLCAnbXl0YWcnKTtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gbmV3IEVjck1pcnJvcihzdGFjaywgJ0VjclJlZ2lzdHJ5U3luYycsIHtcbiAgICAgICAgc291cmNlczogW2ltYWdlXSxcbiAgICAgICAgZG9ja2VySHViQ3JlZGVudGlhbHM6IHtcbiAgICAgICAgICB1c2VybmFtZUtleTogJ3VzZXJuYW1lLWtleScsXG4gICAgICAgICAgcGFzc3dvcmRLZXk6ICdwYXNzd29yZC1rZXknLFxuICAgICAgICAgIHNlY3JldDogc2VjcmV0cy5TZWNyZXQuZnJvbVNlY3JldEFybihzdGFjaywgJ0RvY2tlcmh1YlNlY3JldCcsICdhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnVzLXdlc3QtMjoxMTExMjIyMjMzMzM6c2VjcmV0OjEyM2Fhc3MnKSxcbiAgICAgICAgfSxcbiAgICAgICAgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZS5jcm9uKHt9KSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVnaXN0cnkuZWNyUmVwb3NpdG9yeSgnbXkvZG9ja2VyLWltYWdlJykpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3NjaGVkdWxlIGFuZC9vciBhdXRvU3RhcnQnLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCBpbWFnZSA9IE1pcnJvclNvdXJjZS5mcm9tRG9ja2VySHViKCdteS9kb2NrZXItaW1hZ2UnKTtcbiAgICBleHBlY3QoKCkgPT4gbmV3IEVjck1pcnJvcihzdGFjaywgJ0VjclJlZ2lzdHJ5U3luYycsIHtcbiAgICAgIHNvdXJjZXM6IFtpbWFnZV0sXG4gICAgICBkb2NrZXJIdWJDcmVkZW50aWFsczoge1xuICAgICAgICB1c2VybmFtZUtleTogJ3VzZXJuYW1lLWtleScsXG4gICAgICAgIHBhc3N3b3JkS2V5OiAncGFzc3dvcmQta2V5JyxcbiAgICAgICAgc2VjcmV0OiBzZWNyZXRzLlNlY3JldC5mcm9tU2VjcmV0QXJuKHN0YWNrLCAnRG9ja2VyaHViU2VjcmV0JywgJ2Fybjphd3M6c2VjcmV0c21hbmFnZXI6dXMtd2VzdC0yOjExMTEyMjIyMzMzMzpzZWNyZXQ6MTIzYWFzcycpLFxuICAgICAgfSxcbiAgICB9KSkudG9UaHJvdygvc2NoZWR1bGUgb3IgYXV0b1N0YXJ0Lyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdFY3JNaXJyb3JBc3BlY3QnLCAoKSA9PiB7XG4gIHRlc3QoJ2FwcGxpZXMgdG8gcmVsZXZhbnQgY29kZWJ1aWxkIHByb2plY3RzJywgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCBtaXJyb3IgPSBuZXcgRWNyTWlycm9yKHN0YWNrLCAnTWlycm9yJywge1xuICAgICAgc291cmNlczogW01pcnJvclNvdXJjZS5mcm9tRG9ja2VySHViKCdteS9kb2NrZXItaW1hZ2UnKV0sXG4gICAgICBkb2NrZXJIdWJDcmVkZW50aWFsczoge1xuICAgICAgICB1c2VybmFtZUtleTogJ3VzZXJuYW1lLWtleScsXG4gICAgICAgIHBhc3N3b3JkS2V5OiAncGFzc3dvcmQta2V5JyxcbiAgICAgICAgc2VjcmV0OiBzZWNyZXRzLlNlY3JldC5mcm9tU2VjcmV0QXJuKHN0YWNrLCAnRG9ja2VyaHViU2VjcmV0JywgJ2Fybjphd3M6c2VjcmV0c21hbmFnZXI6dXMtd2VzdC0yOjExMTEyMjIyMzMzMzpzZWNyZXQ6MTIzYWFzcycpLFxuICAgICAgfSxcbiAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuY3Jvbih7fSksXG4gICAgfSk7XG4gICAgbmV3IGNvZGVidWlsZC5Qcm9qZWN0KHN0YWNrLCAnTXlEb2NrZXJJbWFnZVByb2plY3QnLCB7XG4gICAgICBidWlsZFNwZWM6IGNvZGVidWlsZC5CdWlsZFNwZWMuZnJvbU9iamVjdCh7fSksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBidWlsZEltYWdlOiBjb2RlYnVpbGQuTGludXhCdWlsZEltYWdlLmZyb21Eb2NrZXJSZWdpc3RyeSgnbXkvZG9ja2VyLWltYWdlJyksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIEFzcGVjdHMub2Yoc3RhY2spLmFkZChuZXcgRWNyTWlycm9yQXNwZWN0KG1pcnJvcikpO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkNvZGVCdWlsZDo6UHJvamVjdCcsIHtcbiAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgIEltYWdlOiB7XG4gICAgICAgICAgJ0ZuOjpKb2luJzogW1xuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAnRm46OlNlbGVjdCc6IFtcbiAgICAgICAgICAgICAgICAgIDQsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICdGbjo6U3BsaXQnOiBbXG4gICAgICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAgICAgIHsgJ0ZuOjpHZXRBdHQnOiBbJ01pcnJvclJlcG9teWRvY2tlcmltYWdlRThEQ0NBNEYnLCAnQXJuJ10gfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgJy5ka3IuZWNyLicsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAnRm46OlNlbGVjdCc6IFtcbiAgICAgICAgICAgICAgICAgIDMsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICdGbjo6U3BsaXQnOiBbXG4gICAgICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAgICAgIHsgJ0ZuOjpHZXRBdHQnOiBbJ01pcnJvclJlcG9teWRvY2tlcmltYWdlRThEQ0NBNEYnLCAnQXJuJ10gfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgJy4nLFxuICAgICAgICAgICAgICB7IFJlZjogJ0FXUzo6VVJMU3VmZml4JyB9LFxuICAgICAgICAgICAgICAnLycsXG4gICAgICAgICAgICAgIHsgUmVmOiAnTWlycm9yUmVwb215ZG9ja2VyaW1hZ2VFOERDQ0E0RicgfSxcbiAgICAgICAgICAgICAgJzpsYXRlc3QnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZG9lcyBub3QgYWZmZWN0IHVucmVsYXRlZCBjb2RlYnVpbGQgcHJvamVjdHMnLCAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIGNvbnN0IG1pcnJvciA9IG5ldyBFY3JNaXJyb3Ioc3RhY2ssICdNaXJyb3InLCB7XG4gICAgICBzb3VyY2VzOiBbTWlycm9yU291cmNlLmZyb21Eb2NrZXJIdWIoJ215L2RvY2tlci1pbWFnZScpXSxcbiAgICAgIGRvY2tlckh1YkNyZWRlbnRpYWxzOiB7XG4gICAgICAgIHVzZXJuYW1lS2V5OiAndXNlcm5hbWUta2V5JyxcbiAgICAgICAgcGFzc3dvcmRLZXk6ICdwYXNzd29yZC1rZXknLFxuICAgICAgICBzZWNyZXQ6IHNlY3JldHMuU2VjcmV0LmZyb21TZWNyZXRBcm4oc3RhY2ssICdEb2NrZXJodWJTZWNyZXQnLCAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjp1cy13ZXN0LTI6MTExMTIyMjIzMzMzOnNlY3JldDoxMjNhYXNzJyksXG4gICAgICB9LFxuICAgICAgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZS5jcm9uKHt9KSxcbiAgICB9KTtcbiAgICBuZXcgY29kZWJ1aWxkLlByb2plY3Qoc3RhY2ssICdVbnJlbGF0ZWRQcm9qZWN0Jywge1xuICAgICAgYnVpbGRTcGVjOiBjb2RlYnVpbGQuQnVpbGRTcGVjLmZyb21PYmplY3Qoe30pLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgYnVpbGRJbWFnZTogY29kZWJ1aWxkLkxpbnV4QnVpbGRJbWFnZS5mcm9tRG9ja2VyUmVnaXN0cnkoJ3VucmVsYXRlZC9pbWFnZScpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBBc3BlY3RzLm9mKHN0YWNrKS5hZGQobmV3IEVjck1pcnJvckFzcGVjdChtaXJyb3IpKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlTGlrZSgnQVdTOjpDb2RlQnVpbGQ6OlByb2plY3QnLCB7XG4gICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICBJbWFnZTogJ3VucmVsYXRlZC9pbWFnZScsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdjYW4gbWlycm9yIG11bHRpcGxlIHRhZ3MgZnJvbSBzYW1lIHJlcG9zaXRvcnknLCAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdTdGFjaycsIHtcbiAgICAgIGVudjogeyBhY2NvdW50OiAnYWNjb3VudCcsIHJlZ2lvbjogJ3JlZ2lvbicgfSxcbiAgICB9KTtcbiAgICBuZXcgRWNyTWlycm9yKHN0YWNrLCAnTWlycm9yJywge1xuICAgICAgc291cmNlczogW1xuICAgICAgICBNaXJyb3JTb3VyY2UuZnJvbURvY2tlckh1YignbXkvZG9ja2VyLWltYWdlJyksXG4gICAgICAgIE1pcnJvclNvdXJjZS5mcm9tRG9ja2VySHViKCdteS9kb2NrZXItaW1hZ2UnLCAnc29tZV90YWcnKSxcbiAgICAgIF0sXG4gICAgICBkb2NrZXJIdWJDcmVkZW50aWFsczoge1xuICAgICAgICB1c2VybmFtZUtleTogJ3VzZXJuYW1lLWtleScsXG4gICAgICAgIHBhc3N3b3JkS2V5OiAncGFzc3dvcmQta2V5JyxcbiAgICAgICAgc2VjcmV0OiBzZWNyZXRzLlNlY3JldC5mcm9tU2VjcmV0QXJuKHN0YWNrLCAnRG9ja2VyaHViU2VjcmV0JywgJ2Fybjphd3M6c2VjcmV0c21hbmFnZXI6dXMtd2VzdC0yOjExMTEyMjIyMzMzMzpzZWNyZXQ6MTIzYWFzcycpLFxuICAgICAgfSxcbiAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuY3Jvbih7fSksXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOOiBvbmUgcmVwbyB0aGF0IG1pcnJvcnMgYm90aCB0YWdzXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZSgnQVdTOjpFQ1I6OlJlcG9zaXRvcnknLCB7XG4gICAgICBSZXBvc2l0b3J5TmFtZTogJ215L2RvY2tlci1pbWFnZScsXG4gICAgfSk7XG4gICAgY2RrRXhwZWN0KHN0YWNrKS50byhjb3VudFJlc291cmNlcygnQVdTOjpFQ1I6OlJlcG9zaXRvcnknLCAxKSk7XG5cbiAgICAvLyBIYXZlIGJvdGggcHVzaGVzIGluIHRoZSBwcm9qZWN0IGJ1aWxkc3BlY1xuICAgIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkNvZGVCdWlsZDo6UHJvamVjdCcsIHtcbiAgICAgIFNvdXJjZToge1xuICAgICAgICBCdWlsZFNwZWM6IGVuY29kZWRKc29uKG9iamVjdExpa2Uoe1xuICAgICAgICAgIHBoYXNlczoge1xuICAgICAgICAgICAgYnVpbGQ6IHtcbiAgICAgICAgICAgICAgY29tbWFuZHM6IGFycmF5V2l0aChcbiAgICAgICAgICAgICAgICAnZG9ja2VyIHB1c2ggYWNjb3VudC5ka3IuZWNyLnJlZ2lvbi5hbWF6b25hd3MuY29tL215L2RvY2tlci1pbWFnZTpsYXRlc3QnLFxuICAgICAgICAgICAgICAgICdkb2NrZXIgcHVzaCBhY2NvdW50LmRrci5lY3IucmVnaW9uLmFtYXpvbmF3cy5jb20vbXkvZG9ja2VyLWltYWdlOnNvbWVfdGFnJyxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG59KTsiXX0=
@@ -1 +0,0 @@
1
- import '@monocdk-experiment/assert/jest';