@liflig/cdk 2.21.3 → 2.21.5

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 (33) hide show
  1. package/lib/index.d.ts +1 -4
  2. package/lib/index.js +2 -6
  3. package/package.json +12 -12
  4. package/lib/cdk-deploy/cdk-deploy.d.ts +0 -63
  5. package/lib/cdk-deploy/cdk-deploy.js +0 -174
  6. package/lib/cdk-deploy/index.d.ts +0 -1
  7. package/lib/cdk-deploy/index.js +0 -6
  8. package/lib/cdk-deploy/start-deploy-handler.d.ts +0 -8
  9. package/lib/cdk-deploy/start-deploy-handler.js +0 -65
  10. package/lib/cdk-deploy/status-handler.d.ts +0 -6
  11. package/lib/cdk-deploy/status-handler.js +0 -80
  12. package/lib/ecs-update-image/artifact-status.d.ts +0 -39
  13. package/lib/ecs-update-image/artifact-status.js +0 -41
  14. package/lib/ecs-update-image/ecs-update-image.d.ts +0 -41
  15. package/lib/ecs-update-image/ecs-update-image.js +0 -97
  16. package/lib/ecs-update-image/index.d.ts +0 -3
  17. package/lib/ecs-update-image/index.js +0 -10
  18. package/lib/ecs-update-image/start-deploy-handler.d.ts +0 -6
  19. package/lib/ecs-update-image/start-deploy-handler.js +0 -95
  20. package/lib/ecs-update-image/status-handler.d.ts +0 -11
  21. package/lib/ecs-update-image/status-handler.js +0 -67
  22. package/lib/ecs-update-image/tag.d.ts +0 -47
  23. package/lib/ecs-update-image/tag.js +0 -67
  24. package/lib/pipelines/conventions.d.ts +0 -14
  25. package/lib/pipelines/conventions.js +0 -24
  26. package/lib/pipelines/deploy-env.d.ts +0 -18
  27. package/lib/pipelines/deploy-env.js +0 -96
  28. package/lib/pipelines/index.d.ts +0 -2
  29. package/lib/pipelines/index.js +0 -8
  30. package/lib/pipelines/liflig-cdk-deployer-deps.d.ts +0 -13
  31. package/lib/pipelines/liflig-cdk-deployer-deps.js +0 -35
  32. package/lib/pipelines/pipeline.d.ts +0 -78
  33. package/lib/pipelines/pipeline.js +0 -229
package/lib/index.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import * as alarms from "./alarms";
2
2
  import * as cdkPipelines from "./cdk-pipelines";
3
3
  import * as griid from "./griid";
4
- import * as pipelines from "./pipelines";
5
4
  import * as ses from "./ses";
6
5
  import * as webapp from "./webapp";
7
6
  import * as configureParameters from "./configure-parameters";
@@ -12,16 +11,14 @@ import * as rds from "./rds";
12
11
  import * as platform from "./platform";
13
12
  export { BastionHost } from "./bastion-host";
14
13
  export * from "./build-artifacts";
15
- export * from "./cdk-deploy";
16
14
  export { CrossRegionSsmParameter } from "./cross-region-ssm-parameter";
17
- export * from "./ecs-update-image";
18
15
  export { HostedZoneWithParam } from "./hosted-zone-with-param";
19
16
  export { createCloudAssemblySnapshot } from "./snapshots";
20
17
  export { SsmParameterBackedResource } from "./ssm-parameter-backed-resource";
21
18
  export { SsmParameterReader } from "./ssm-parameter-reader";
22
19
  export { tagResources } from "./tags";
23
20
  export { WebappDeployViaRole } from "./webapp-deploy-via-role";
24
- export { alarms, cdkPipelines, griid, pipelines, ses, webapp, configureParameters, ecs, loadBalancer, rds, platform, cloudTrailSlackIntegration, };
21
+ export { alarms, cdkPipelines, griid, ses, webapp, configureParameters, ecs, loadBalancer, rds, platform, cloudTrailSlackIntegration, };
25
22
  /**
26
23
  * Check if we are synthesizing a snapshot by setting IS_SNAPSHOT
27
24
  * environment variable to true.
package/lib/index.js CHANGED
@@ -14,15 +14,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.isSnapshot = exports.cloudTrailSlackIntegration = exports.platform = exports.rds = exports.loadBalancer = exports.ecs = exports.configureParameters = exports.webapp = exports.ses = exports.pipelines = exports.griid = exports.cdkPipelines = exports.alarms = exports.WebappDeployViaRole = exports.tagResources = exports.SsmParameterReader = exports.SsmParameterBackedResource = exports.createCloudAssemblySnapshot = exports.HostedZoneWithParam = exports.CrossRegionSsmParameter = exports.BastionHost = void 0;
17
+ exports.isSnapshot = exports.cloudTrailSlackIntegration = exports.platform = exports.rds = exports.loadBalancer = exports.ecs = exports.configureParameters = exports.webapp = exports.ses = exports.griid = exports.cdkPipelines = exports.alarms = exports.WebappDeployViaRole = exports.tagResources = exports.SsmParameterReader = exports.SsmParameterBackedResource = exports.createCloudAssemblySnapshot = exports.HostedZoneWithParam = exports.CrossRegionSsmParameter = exports.BastionHost = void 0;
18
18
  const alarms = require("./alarms");
19
19
  exports.alarms = alarms;
20
20
  const cdkPipelines = require("./cdk-pipelines");
21
21
  exports.cdkPipelines = cdkPipelines;
22
22
  const griid = require("./griid");
23
23
  exports.griid = griid;
24
- const pipelines = require("./pipelines");
25
- exports.pipelines = pipelines;
26
24
  const ses = require("./ses");
27
25
  exports.ses = ses;
28
26
  const webapp = require("./webapp");
@@ -44,10 +42,8 @@ exports.platform = platform;
44
42
  var bastion_host_1 = require("./bastion-host");
45
43
  Object.defineProperty(exports, "BastionHost", { enumerable: true, get: function () { return bastion_host_1.BastionHost; } });
46
44
  __exportStar(require("./build-artifacts"), exports);
47
- __exportStar(require("./cdk-deploy"), exports);
48
45
  var cross_region_ssm_parameter_1 = require("./cross-region-ssm-parameter");
49
46
  Object.defineProperty(exports, "CrossRegionSsmParameter", { enumerable: true, get: function () { return cross_region_ssm_parameter_1.CrossRegionSsmParameter; } });
50
- __exportStar(require("./ecs-update-image"), exports);
51
47
  var hosted_zone_with_param_1 = require("./hosted-zone-with-param");
52
48
  Object.defineProperty(exports, "HostedZoneWithParam", { enumerable: true, get: function () { return hosted_zone_with_param_1.HostedZoneWithParam; } });
53
49
  var snapshots_1 = require("./snapshots");
@@ -68,4 +64,4 @@ Object.defineProperty(exports, "WebappDeployViaRole", { enumerable: true, get: f
68
64
  * happen during snapshot creation.
69
65
  */
70
66
  exports.isSnapshot = process.env.IS_SNAPSHOT === "true";
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBa0M7QUE2QmhDLHdCQUFNO0FBNUJSLGdEQUErQztBQTZCN0Msb0NBQVk7QUE1QmQsaUNBQWdDO0FBNkI5QixzQkFBSztBQTVCUCx5Q0FBd0M7QUE2QnRDLDhCQUFTO0FBNUJYLDZCQUE0QjtBQTZCMUIsa0JBQUc7QUE1QkwsbUNBQWtDO0FBNkJoQyx3QkFBTTtBQTVCUiw4REFBNkQ7QUE2QjNELGtEQUFtQjtBQTVCckIsNkJBQTRCO0FBNkIxQixrQkFBRztBQTVCTCxnREFBK0M7QUE2QjdDLG9DQUFZO0FBNUJkLDZFQUE0RTtBQStCMUUsZ0VBQTBCO0FBOUI1Qiw2QkFBNEI7QUE0QjFCLGtCQUFHO0FBM0JMLHVDQUFzQztBQTRCcEMsNEJBQVE7QUExQlYsZ0VBQWdFO0FBQ2hFLHVDQUF1QztBQUV2QywrQ0FBNEM7QUFBbkMsMkdBQUEsV0FBVyxPQUFBO0FBQ3BCLG9EQUFpQztBQUNqQywrQ0FBNEI7QUFDNUIsMkVBQXNFO0FBQTdELHFJQUFBLHVCQUF1QixPQUFBO0FBQ2hDLHFEQUFrQztBQUNsQyxtRUFBOEQ7QUFBckQsNkhBQUEsbUJBQW1CLE9BQUE7QUFDNUIseUNBQXlEO0FBQWhELHdIQUFBLDJCQUEyQixPQUFBO0FBQ3BDLGlGQUE0RTtBQUFuRSwySUFBQSwwQkFBMEIsT0FBQTtBQUNuQywrREFBMkQ7QUFBbEQsMEhBQUEsa0JBQWtCLE9BQUE7QUFDM0IsK0JBQXFDO0FBQTVCLG9HQUFBLFlBQVksT0FBQTtBQUNyQixtRUFBOEQ7QUFBckQsNkhBQUEsbUJBQW1CLE9BQUE7QUFpQjVCOzs7Ozs7R0FNRztBQUNVLFFBQUEsVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFsYXJtcyBmcm9tIFwiLi9hbGFybXNcIlxuaW1wb3J0ICogYXMgY2RrUGlwZWxpbmVzIGZyb20gXCIuL2Nkay1waXBlbGluZXNcIlxuaW1wb3J0ICogYXMgZ3JpaWQgZnJvbSBcIi4vZ3JpaWRcIlxuaW1wb3J0ICogYXMgcGlwZWxpbmVzIGZyb20gXCIuL3BpcGVsaW5lc1wiXG5pbXBvcnQgKiBhcyBzZXMgZnJvbSBcIi4vc2VzXCJcbmltcG9ydCAqIGFzIHdlYmFwcCBmcm9tIFwiLi93ZWJhcHBcIlxuaW1wb3J0ICogYXMgY29uZmlndXJlUGFyYW1ldGVycyBmcm9tIFwiLi9jb25maWd1cmUtcGFyYW1ldGVyc1wiXG5pbXBvcnQgKiBhcyBlY3MgZnJvbSBcIi4vZWNzXCJcbmltcG9ydCAqIGFzIGxvYWRCYWxhbmNlciBmcm9tIFwiLi9sb2FkLWJhbGFuY2VyXCJcbmltcG9ydCAqIGFzIGNsb3VkVHJhaWxTbGFja0ludGVncmF0aW9uIGZyb20gXCIuL2Nsb3VkdHJhaWwtc2xhY2staW50ZWdyYXRpb25cIlxuaW1wb3J0ICogYXMgcmRzIGZyb20gXCIuL3Jkc1wiXG5pbXBvcnQgKiBhcyBwbGF0Zm9ybSBmcm9tIFwiLi9wbGF0Zm9ybVwiXG5cbi8vIFRPRE86IFdlIHdhbnQgdG8gc3dpdGNoIGV4cG9ydHMgc28gdGhleSBldmVyeSBjb25zdHJ1Y3QgdW5kZXJcbi8vICBhIG5hbWVzcGFjZSBzdWNoIGFzIHRoZSBzbnMgZXhwb3J0LlxuXG5leHBvcnQgeyBCYXN0aW9uSG9zdCB9IGZyb20gXCIuL2Jhc3Rpb24taG9zdFwiXG5leHBvcnQgKiBmcm9tIFwiLi9idWlsZC1hcnRpZmFjdHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vY2RrLWRlcGxveVwiXG5leHBvcnQgeyBDcm9zc1JlZ2lvblNzbVBhcmFtZXRlciB9IGZyb20gXCIuL2Nyb3NzLXJlZ2lvbi1zc20tcGFyYW1ldGVyXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Vjcy11cGRhdGUtaW1hZ2VcIlxuZXhwb3J0IHsgSG9zdGVkWm9uZVdpdGhQYXJhbSB9IGZyb20gXCIuL2hvc3RlZC16b25lLXdpdGgtcGFyYW1cIlxuZXhwb3J0IHsgY3JlYXRlQ2xvdWRBc3NlbWJseVNuYXBzaG90IH0gZnJvbSBcIi4vc25hcHNob3RzXCJcbmV4cG9ydCB7IFNzbVBhcmFtZXRlckJhY2tlZFJlc291cmNlIH0gZnJvbSBcIi4vc3NtLXBhcmFtZXRlci1iYWNrZWQtcmVzb3VyY2VcIlxuZXhwb3J0IHsgU3NtUGFyYW1ldGVyUmVhZGVyIH0gZnJvbSBcIi4vc3NtLXBhcmFtZXRlci1yZWFkZXJcIlxuZXhwb3J0IHsgdGFnUmVzb3VyY2VzIH0gZnJvbSBcIi4vdGFnc1wiXG5leHBvcnQgeyBXZWJhcHBEZXBsb3lWaWFSb2xlIH0gZnJvbSBcIi4vd2ViYXBwLWRlcGxveS12aWEtcm9sZVwiXG5cbmV4cG9ydCB7XG4gIGFsYXJtcyxcbiAgY2RrUGlwZWxpbmVzLFxuICBncmlpZCxcbiAgcGlwZWxpbmVzLFxuICBzZXMsXG4gIHdlYmFwcCxcbiAgY29uZmlndXJlUGFyYW1ldGVycyxcbiAgZWNzLFxuICBsb2FkQmFsYW5jZXIsXG4gIHJkcyxcbiAgcGxhdGZvcm0sXG4gIGNsb3VkVHJhaWxTbGFja0ludGVncmF0aW9uLFxufVxuXG4vKipcbiAqIENoZWNrIGlmIHdlIGFyZSBzeW50aGVzaXppbmcgYSBzbmFwc2hvdCBieSBzZXR0aW5nIElTX1NOQVBTSE9UXG4gKiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0cnVlLlxuICpcbiAqIFRoaXMgYWxsb3dzIGZvciBzcGVjaWFsIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgc2hvdWxkIG9ubHlcbiAqIGhhcHBlbiBkdXJpbmcgc25hcHNob3QgY3JlYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NuYXBzaG90ID0gcHJvY2Vzcy5lbnYuSVNfU05BUFNIT1QgPT09IFwidHJ1ZVwiXG4iXX0=
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBa0M7QUEwQmhDLHdCQUFNO0FBekJSLGdEQUErQztBQTBCN0Msb0NBQVk7QUF6QmQsaUNBQWdDO0FBMEI5QixzQkFBSztBQXpCUCw2QkFBNEI7QUEwQjFCLGtCQUFHO0FBekJMLG1DQUFrQztBQTBCaEMsd0JBQU07QUF6QlIsOERBQTZEO0FBMEIzRCxrREFBbUI7QUF6QnJCLDZCQUE0QjtBQTBCMUIsa0JBQUc7QUF6QkwsZ0RBQStDO0FBMEI3QyxvQ0FBWTtBQXpCZCw2RUFBNEU7QUE0QjFFLGdFQUEwQjtBQTNCNUIsNkJBQTRCO0FBeUIxQixrQkFBRztBQXhCTCx1Q0FBc0M7QUF5QnBDLDRCQUFRO0FBdkJWLGdFQUFnRTtBQUNoRSx1Q0FBdUM7QUFFdkMsK0NBQTRDO0FBQW5DLDJHQUFBLFdBQVcsT0FBQTtBQUNwQixvREFBaUM7QUFDakMsMkVBQXNFO0FBQTdELHFJQUFBLHVCQUF1QixPQUFBO0FBQ2hDLG1FQUE4RDtBQUFyRCw2SEFBQSxtQkFBbUIsT0FBQTtBQUM1Qix5Q0FBeUQ7QUFBaEQsd0hBQUEsMkJBQTJCLE9BQUE7QUFDcEMsaUZBQTRFO0FBQW5FLDJJQUFBLDBCQUEwQixPQUFBO0FBQ25DLCtEQUEyRDtBQUFsRCwwSEFBQSxrQkFBa0IsT0FBQTtBQUMzQiwrQkFBcUM7QUFBNUIsb0dBQUEsWUFBWSxPQUFBO0FBQ3JCLG1FQUE4RDtBQUFyRCw2SEFBQSxtQkFBbUIsT0FBQTtBQWdCNUI7Ozs7OztHQU1HO0FBQ1UsUUFBQSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYWxhcm1zIGZyb20gXCIuL2FsYXJtc1wiXG5pbXBvcnQgKiBhcyBjZGtQaXBlbGluZXMgZnJvbSBcIi4vY2RrLXBpcGVsaW5lc1wiXG5pbXBvcnQgKiBhcyBncmlpZCBmcm9tIFwiLi9ncmlpZFwiXG5pbXBvcnQgKiBhcyBzZXMgZnJvbSBcIi4vc2VzXCJcbmltcG9ydCAqIGFzIHdlYmFwcCBmcm9tIFwiLi93ZWJhcHBcIlxuaW1wb3J0ICogYXMgY29uZmlndXJlUGFyYW1ldGVycyBmcm9tIFwiLi9jb25maWd1cmUtcGFyYW1ldGVyc1wiXG5pbXBvcnQgKiBhcyBlY3MgZnJvbSBcIi4vZWNzXCJcbmltcG9ydCAqIGFzIGxvYWRCYWxhbmNlciBmcm9tIFwiLi9sb2FkLWJhbGFuY2VyXCJcbmltcG9ydCAqIGFzIGNsb3VkVHJhaWxTbGFja0ludGVncmF0aW9uIGZyb20gXCIuL2Nsb3VkdHJhaWwtc2xhY2staW50ZWdyYXRpb25cIlxuaW1wb3J0ICogYXMgcmRzIGZyb20gXCIuL3Jkc1wiXG5pbXBvcnQgKiBhcyBwbGF0Zm9ybSBmcm9tIFwiLi9wbGF0Zm9ybVwiXG5cbi8vIFRPRE86IFdlIHdhbnQgdG8gc3dpdGNoIGV4cG9ydHMgc28gdGhleSBldmVyeSBjb25zdHJ1Y3QgdW5kZXJcbi8vICBhIG5hbWVzcGFjZSBzdWNoIGFzIHRoZSBzbnMgZXhwb3J0LlxuXG5leHBvcnQgeyBCYXN0aW9uSG9zdCB9IGZyb20gXCIuL2Jhc3Rpb24taG9zdFwiXG5leHBvcnQgKiBmcm9tIFwiLi9idWlsZC1hcnRpZmFjdHNcIlxuZXhwb3J0IHsgQ3Jvc3NSZWdpb25Tc21QYXJhbWV0ZXIgfSBmcm9tIFwiLi9jcm9zcy1yZWdpb24tc3NtLXBhcmFtZXRlclwiXG5leHBvcnQgeyBIb3N0ZWRab25lV2l0aFBhcmFtIH0gZnJvbSBcIi4vaG9zdGVkLXpvbmUtd2l0aC1wYXJhbVwiXG5leHBvcnQgeyBjcmVhdGVDbG91ZEFzc2VtYmx5U25hcHNob3QgfSBmcm9tIFwiLi9zbmFwc2hvdHNcIlxuZXhwb3J0IHsgU3NtUGFyYW1ldGVyQmFja2VkUmVzb3VyY2UgfSBmcm9tIFwiLi9zc20tcGFyYW1ldGVyLWJhY2tlZC1yZXNvdXJjZVwiXG5leHBvcnQgeyBTc21QYXJhbWV0ZXJSZWFkZXIgfSBmcm9tIFwiLi9zc20tcGFyYW1ldGVyLXJlYWRlclwiXG5leHBvcnQgeyB0YWdSZXNvdXJjZXMgfSBmcm9tIFwiLi90YWdzXCJcbmV4cG9ydCB7IFdlYmFwcERlcGxveVZpYVJvbGUgfSBmcm9tIFwiLi93ZWJhcHAtZGVwbG95LXZpYS1yb2xlXCJcblxuZXhwb3J0IHtcbiAgYWxhcm1zLFxuICBjZGtQaXBlbGluZXMsXG4gIGdyaWlkLFxuICBzZXMsXG4gIHdlYmFwcCxcbiAgY29uZmlndXJlUGFyYW1ldGVycyxcbiAgZWNzLFxuICBsb2FkQmFsYW5jZXIsXG4gIHJkcyxcbiAgcGxhdGZvcm0sXG4gIGNsb3VkVHJhaWxTbGFja0ludGVncmF0aW9uLFxufVxuXG4vKipcbiAqIENoZWNrIGlmIHdlIGFyZSBzeW50aGVzaXppbmcgYSBzbmFwc2hvdCBieSBzZXR0aW5nIElTX1NOQVBTSE9UXG4gKiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0cnVlLlxuICpcbiAqIFRoaXMgYWxsb3dzIGZvciBzcGVjaWFsIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgc2hvdWxkIG9ubHlcbiAqIGhhcHBlbiBkdXJpbmcgc25hcHNob3QgY3JlYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NuYXBzaG90ID0gcHJvY2Vzcy5lbnYuSVNfU05BUFNIT1QgPT09IFwidHJ1ZVwiXG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liflig/cdk",
3
- "version": "2.21.3",
3
+ "version": "2.21.5",
4
4
  "description": "CDK library for Liflig",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,21 +40,21 @@
40
40
  },
41
41
  "devDependencies": {
42
42
  "@aws-cdk/assert": "2.68.0",
43
- "@aws-sdk/client-cloudwatch-logs": "3.577.0",
44
- "@aws-sdk/client-codebuild": "3.579.0",
45
- "@aws-sdk/client-codepipeline": "3.577.0",
46
- "@aws-sdk/client-ecs": "3.577.0",
47
- "@aws-sdk/client-s3": "3.577.0",
48
- "@aws-sdk/client-secrets-manager": "3.582.0",
49
- "@aws-sdk/client-ses": "3.577.0",
50
- "@aws-sdk/client-sesv2": "3.577.0",
51
- "@aws-sdk/client-sfn": "3.577.0",
52
- "@aws-sdk/lib-storage": "3.577.0",
43
+ "@aws-sdk/client-cloudwatch-logs": "3.588.0",
44
+ "@aws-sdk/client-codebuild": "3.588.0",
45
+ "@aws-sdk/client-codepipeline": "3.588.0",
46
+ "@aws-sdk/client-ecs": "3.588.0",
47
+ "@aws-sdk/client-s3": "3.588.0",
48
+ "@aws-sdk/client-secrets-manager": "3.588.0",
49
+ "@aws-sdk/client-ses": "3.588.0",
50
+ "@aws-sdk/client-sesv2": "3.588.0",
51
+ "@aws-sdk/client-sfn": "3.588.0",
52
+ "@aws-sdk/lib-storage": "3.588.0",
53
53
  "@commitlint/cli": "19.3.0",
54
54
  "@commitlint/config-conventional": "19.2.2",
55
55
  "@types/aws-lambda": "8.10.138",
56
56
  "@types/jest": "29.5.12",
57
- "@types/node": "20.13.0",
57
+ "@types/node": "20.14.0",
58
58
  "@typescript-eslint/eslint-plugin": "5.62.0",
59
59
  "@typescript-eslint/parser": "5.62.0",
60
60
  "aws-cdk": "2.141.0",
@@ -1,63 +0,0 @@
1
- import * as constructs from "constructs";
2
- import * as cdk from "aws-cdk-lib";
3
- interface Props extends cdk.StackProps {
4
- /**
5
- * The role that will be granted permission to assume the deploy
6
- * role. This role must have permission to assume the deploy role.
7
- */
8
- callerRoleArn: string;
9
- /**
10
- * The name that will be used for the deploy role. This is the role
11
- * that the caller will assume in order to have permission to invoke
12
- * the Lambda Functions.
13
- */
14
- roleName: string;
15
- /**
16
- * The bucket used for storing artifacts. This is used to grant
17
- * permission to the role to read artifact. If the bucket is in
18
- * another account, it must have a policy which allows the target
19
- * account to use IAM permissions from target account.
20
- */
21
- artifactsBucketName: string;
22
- startDeployFunctionName: string;
23
- statusFunctionName: string;
24
- /**
25
- * This is the stack name used with `cdk bootstrap` and can e
26
- * found in cdk.json as "toolkitStackName".
27
- */
28
- cdkToolkitStackName: string;
29
- /**
30
- * We pass the CDK context values as they contain feature flags
31
- * used by the CDK CLI.
32
- */
33
- cdkContext: Record<string, string | string[]>;
34
- /**
35
- * The secret containing username and password (or access token)
36
- * for a valid docker user. This is used to access private
37
- * repositories or to handle docker hub's pull rate limiting.
38
- */
39
- dockerCredentialsSecretName?: string;
40
- }
41
- /**
42
- * This construct is responsible for the privileges and logic of
43
- * automatically deploying stack resources in an account.
44
- * Its resources are used from a deployment pipeline.
45
- *
46
- * The deployment is performed by invoking the "start deploy"
47
- * lambda with details of what should be deployed. As this is
48
- * responsible for deploying infrastructure, the principal invoking
49
- * might be able to cause privilege escalation. The principal invoking
50
- * should be assumed to have full administrator access.
51
- *
52
- * The process deploying the infrastructure is locked down so this
53
- * is only possibly by deployment through CloudFormation, and as
54
- * such removes a lot of possible escalation paths (e.g. no role
55
- * can be created by direct API call).
56
- *
57
- * The "status" lambda can be used to poll for completion, and will
58
- * also return logs from the job upon completion.
59
- */
60
- export declare class CdkDeploy extends constructs.Construct {
61
- constructor(scope: constructs.Construct, id: string, props: Props);
62
- }
63
- export {};
@@ -1,174 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CdkDeploy = void 0;
4
- const constructs = require("constructs");
5
- const codebuild = require("aws-cdk-lib/aws-codebuild");
6
- const iam = require("aws-cdk-lib/aws-iam");
7
- const lambda = require("aws-cdk-lib/aws-lambda");
8
- const s3 = require("aws-cdk-lib/aws-s3");
9
- const cdk = require("aws-cdk-lib");
10
- const secretsmanager = require("aws-cdk-lib/aws-secretsmanager");
11
- const aws_lambda_nodejs_1 = require("aws-cdk-lib/aws-lambda-nodejs");
12
- /**
13
- * This construct is responsible for the privileges and logic of
14
- * automatically deploying stack resources in an account.
15
- * Its resources are used from a deployment pipeline.
16
- *
17
- * The deployment is performed by invoking the "start deploy"
18
- * lambda with details of what should be deployed. As this is
19
- * responsible for deploying infrastructure, the principal invoking
20
- * might be able to cause privilege escalation. The principal invoking
21
- * should be assumed to have full administrator access.
22
- *
23
- * The process deploying the infrastructure is locked down so this
24
- * is only possibly by deployment through CloudFormation, and as
25
- * such removes a lot of possible escalation paths (e.g. no role
26
- * can be created by direct API call).
27
- *
28
- * The "status" lambda can be used to poll for completion, and will
29
- * also return logs from the job upon completion.
30
- */
31
- class CdkDeploy extends constructs.Construct {
32
- constructor(scope, id, props) {
33
- super(scope, id);
34
- const account = cdk.Stack.of(this).account;
35
- const region = cdk.Stack.of(this).region;
36
- const artifactsBucket = s3.Bucket.fromBucketName(this, "ArtifactsBucket", props.artifactsBucketName);
37
- const roleToBeAssumed = new iam.Role(this, "Role", {
38
- roleName: props.roleName,
39
- assumedBy: new iam.ArnPrincipal(props.callerRoleArn),
40
- });
41
- // Bucked used for input to CodeBuild.
42
- // We let CloudFormation manage the bucket name.
43
- const codebuildBucket = new s3.Bucket(this, "CodebuildSourceBucket", {
44
- encryption: s3.BucketEncryption.S3_MANAGED,
45
- blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
46
- lifecycleRules: [
47
- {
48
- expiration: cdk.Duration.days(5),
49
- },
50
- ],
51
- });
52
- // The role used for CloudFormation deployment.
53
- const cloudFormationRole = new iam.Role(this, "CloudFormationRole", {
54
- assumedBy: new iam.ServicePrincipal("cloudformation.amazonaws.com"),
55
- managedPolicies: [
56
- // TODO: Can we restrict this a bit more? E.g. look into how Griid has
57
- // limited what the individual stack deployments have permissions to do.
58
- iam.ManagedPolicy.fromAwsManagedPolicyName("AdministratorAccess"),
59
- ],
60
- });
61
- // Replace CodeBuild with ECS task?
62
- // See https://aws.amazon.com/blogs/devops/using-aws-codebuild-to-execute-administrative-tasks/
63
- const codebuildProject = new codebuild.Project(this, "CodebuildProject", {
64
- environment: {
65
- buildImage: props.dockerCredentialsSecretName == null
66
- ? codebuild.LinuxBuildImage.fromDockerRegistry("node:16")
67
- : codebuild.LinuxBuildImage.fromDockerRegistry("node:16", {
68
- secretsManagerCredentials: secretsmanager.Secret.fromSecretNameV2(this, "dockerCredentialsSecretName", props.dockerCredentialsSecretName),
69
- }),
70
- },
71
- buildSpec: codebuild.BuildSpec.fromObject({
72
- version: "0.2",
73
- env: {
74
- variables: {
75
- CDK_DEPLOY_ROLE_ARN: cloudFormationRole.roleArn,
76
- CDK_TOOLKIT_STACK_NAME: props.cdkToolkitStackName,
77
- },
78
- },
79
- phases: {
80
- build: {
81
- commands: [
82
- "npm install -g aws-cdk",
83
- 'cdk --app "$CODEBUILD_SRC_DIR_CLOUDASSEMBLY" --role-arn "$CDK_DEPLOY_ROLE_ARN" --toolkit-stack-name "$CDK_TOOLKIT_STACK_NAME" --require-approval never deploy --exclusively $(cat stack-names.txt)',
84
- ],
85
- },
86
- },
87
- }),
88
- timeout: cdk.Duration.hours(4),
89
- });
90
- // Grant access to CloudFormation.
91
- codebuildProject.addToRolePolicy(new iam.PolicyStatement({
92
- actions: [
93
- // For diff.
94
- "cloudformation:DescribeStacks",
95
- "cloudformation:GetTemplate",
96
- // For deploy.
97
- "cloudformation:CreateChangeSet",
98
- "cloudformation:DeleteStack",
99
- "cloudformation:DescribeChangeSet",
100
- "cloudformation:ExecuteChangeSet",
101
- "cloudformation:DescribeStackEvents",
102
- "cloudformation:DeleteChangeSet",
103
- ],
104
- resources: ["*"],
105
- }));
106
- // Grant access to the CDK Toolkit bucket.
107
- codebuildProject.addToRolePolicy(new iam.PolicyStatement({
108
- actions: [
109
- "s3:GetObject*",
110
- "s3:GetBucket*",
111
- "s3:List*",
112
- "s3:PutObject*",
113
- "s3:Abort*",
114
- "s3:DeleteObject*",
115
- ],
116
- resources: [
117
- `arn:aws:s3:::${props.cdkToolkitStackName.toLowerCase()}-stagingbucket-*`,
118
- ],
119
- }));
120
- artifactsBucket.grantRead(codebuildProject);
121
- cloudFormationRole.grantPassRole(codebuildProject.role);
122
- codebuildBucket.grantReadWrite(codebuildProject);
123
- const startDeployFn = new aws_lambda_nodejs_1.NodejsFunction(this, "StartDeployFunction", {
124
- entry: require.resolve("./start-deploy-handler"),
125
- runtime: lambda.Runtime.NODEJS_18_X,
126
- functionName: props.startDeployFunctionName,
127
- awsSdkConnectionReuse: false,
128
- environment: {
129
- PROJECT_NAME: codebuildProject.projectName,
130
- BUCKET_NAME: codebuildBucket.bucketName,
131
- CDK_CONTEXT: JSON.stringify(props.cdkContext),
132
- },
133
- timeout: cdk.Duration.seconds(30),
134
- });
135
- startDeployFn.grantInvoke(roleToBeAssumed);
136
- codebuildBucket.grantReadWrite(startDeployFn);
137
- startDeployFn.addToRolePolicy(new iam.PolicyStatement({
138
- actions: ["codebuild:StartBuild", "codebuild:BatchGetBuilds"],
139
- resources: [codebuildProject.projectArn],
140
- }));
141
- const statusFn = new aws_lambda_nodejs_1.NodejsFunction(this, "StatusFunction", {
142
- entry: require.resolve("./status-handler"),
143
- runtime: lambda.Runtime.NODEJS_18_X,
144
- functionName: props.statusFunctionName,
145
- awsSdkConnectionReuse: false,
146
- environment: {
147
- PROJECT_NAME: codebuildProject.projectName,
148
- },
149
- timeout: cdk.Duration.seconds(30),
150
- });
151
- statusFn.grantInvoke(roleToBeAssumed);
152
- statusFn.addToRolePolicy(new iam.PolicyStatement({
153
- actions: ["codebuild:BatchGetBuilds"],
154
- resources: [codebuildProject.projectArn],
155
- }));
156
- statusFn.addToRolePolicy(new iam.PolicyStatement({
157
- actions: ["logs:GetLogEvents"],
158
- resources: [
159
- `arn:aws:logs:${region}:${account}:log-group:/aws/codebuild/${codebuildProject.projectName}:log-stream:*`,
160
- ],
161
- }));
162
- new cdk.CfnOutput(this, "RoleToBeAssumedArn", {
163
- value: roleToBeAssumed.roleArn,
164
- });
165
- new cdk.CfnOutput(this, "StatusFunctionArn", {
166
- value: statusFn.functionArn,
167
- });
168
- new cdk.CfnOutput(this, "StartDeployFunctionArn", {
169
- value: startDeployFn.functionArn,
170
- });
171
- }
172
- }
173
- exports.CdkDeploy = CdkDeploy;
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRlcGxveS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jZGstZGVwbG95L2Nkay1kZXBsb3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXdDO0FBQ3hDLHVEQUFzRDtBQUN0RCwyQ0FBMEM7QUFDMUMsaURBQWdEO0FBQ2hELHlDQUF3QztBQUN4QyxtQ0FBa0M7QUFDbEMsaUVBQWdFO0FBQ2hFLHFFQUE4RDtBQXlDOUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQWEsU0FBVSxTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBQ2pELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBWTtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQTtRQUMxQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFFeEMsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQzlDLElBQUksRUFDSixpQkFBaUIsRUFDakIsS0FBSyxDQUFDLG1CQUFtQixDQUMxQixDQUFBO1FBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDakQsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztTQUNyRCxDQUFDLENBQUE7UUFFRixzQ0FBc0M7UUFDdEMsZ0RBQWdEO1FBQ2hELE1BQU0sZUFBZSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLEVBQUU7WUFDbkUs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QUFFLEtBQUs7WUFDNUIsV0FBVyxFQUFFO2dCQUNYLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXO2FBQzNDO1lBQ0QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNsQyxDQUFDLENBQUE7UUFFRixRQUFRLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBRXJDLFFBQVEsQ0FBQyxlQUFlLENBQ3RCLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixPQUFPLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztZQUNyQyxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7U0FDekMsQ0FBQyxDQUNILENBQUE7UUFFRCxRQUFRLENBQUMsZUFBZSxDQUN0QixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDdEIsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDOUIsU0FBUyxFQUFFO2dCQUNULGdCQUFnQixNQUFNLElBQUksT0FBTyw2QkFBNkIsZ0JBQWdCLENBQUMsV0FBVyxlQUFlO2FBQzFHO1NBQ0YsQ0FBQyxDQUNILENBQUE7UUFFRCxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQzVDLEtBQUssRUFBRSxlQUFlLENBQUMsT0FBTztTQUMvQixDQUFDLENBQUE7UUFDRixJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQzNDLEtBQUssRUFBRSxRQUFRLENBQUMsV0FBVztTQUM1QixDQUFDLENBQUE7UUFDRixJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQ2hELEtBQUssRUFBRSxhQUFhLENBQUMsV0FBVztTQUNqQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUFwTEQsOEJBb0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgKiBhcyBjb2RlYnVpbGQgZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlYnVpbGRcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMgc2VjcmV0c21hbmFnZXIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiXG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiXG5cbmludGVyZmFjZSBQcm9wcyBleHRlbmRzIGNkay5TdGFja1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSByb2xlIHRoYXQgd2lsbCBiZSBncmFudGVkIHBlcm1pc3Npb24gdG8gYXNzdW1lIHRoZSBkZXBsb3lcbiAgICogcm9sZS4gVGhpcyByb2xlIG11c3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFzc3VtZSB0aGUgZGVwbG95IHJvbGUuXG4gICAqL1xuICBjYWxsZXJSb2xlQXJuOiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgZGVwbG95IHJvbGUuIFRoaXMgaXMgdGhlIHJvbGVcbiAgICogdGhhdCB0aGUgY2FsbGVyIHdpbGwgYXNzdW1lIGluIG9yZGVyIHRvIGhhdmUgcGVybWlzc2lvbiB0byBpbnZva2VcbiAgICogdGhlIExhbWJkYSBGdW5jdGlvbnMuXG4gICAqL1xuICByb2xlTmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IHVzZWQgZm9yIHN0b3JpbmcgYXJ0aWZhY3RzLiBUaGlzIGlzIHVzZWQgdG8gZ3JhbnRcbiAgICogcGVybWlzc2lvbiB0byB0aGUgcm9sZSB0byByZWFkIGFydGlmYWN0LiBJZiB0aGUgYnVja2V0IGlzIGluXG4gICAqIGFub3RoZXIgYWNjb3VudCwgaXQgbXVzdCBoYXZlIGEgcG9saWN5IHdoaWNoIGFsbG93cyB0aGUgdGFyZ2V0XG4gICAqIGFjY291bnQgdG8gdXNlIElBTSBwZXJtaXNzaW9ucyBmcm9tIHRhcmdldCBhY2NvdW50LlxuICAgKi9cbiAgYXJ0aWZhY3RzQnVja2V0TmFtZTogc3RyaW5nXG4gIHN0YXJ0RGVwbG95RnVuY3Rpb25OYW1lOiBzdHJpbmdcbiAgc3RhdHVzRnVuY3Rpb25OYW1lOiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHN0YWNrIG5hbWUgdXNlZCB3aXRoIGBjZGsgYm9vdHN0cmFwYCBhbmQgY2FuIGVcbiAgICogZm91bmQgaW4gY2RrLmpzb24gYXMgXCJ0b29sa2l0U3RhY2tOYW1lXCIuXG4gICAqL1xuICBjZGtUb29sa2l0U3RhY2tOYW1lOiBzdHJpbmdcbiAgLyoqXG4gICAqIFdlIHBhc3MgdGhlIENESyBjb250ZXh0IHZhbHVlcyBhcyB0aGV5IGNvbnRhaW4gZmVhdHVyZSBmbGFnc1xuICAgKiB1c2VkIGJ5IHRoZSBDREsgQ0xJLlxuICAgKi9cbiAgY2RrQ29udGV4dDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+XG4gIC8qKlxuICAgKiBUaGUgc2VjcmV0IGNvbnRhaW5pbmcgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIChvciBhY2Nlc3MgdG9rZW4pXG4gICAqIGZvciBhIHZhbGlkIGRvY2tlciB1c2VyLiBUaGlzIGlzIHVzZWQgdG8gYWNjZXNzIHByaXZhdGVcbiAgICogcmVwb3NpdG9yaWVzIG9yIHRvIGhhbmRsZSBkb2NrZXIgaHViJ3MgcHVsbCByYXRlIGxpbWl0aW5nLlxuICAgKi9cbiAgZG9ja2VyQ3JlZGVudGlhbHNTZWNyZXROYW1lPzogc3RyaW5nXG59XG5cbi8qKlxuICogVGhpcyBjb25zdHJ1Y3QgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBwcml2aWxlZ2VzIGFuZCBsb2dpYyBvZlxuICogYXV0b21hdGljYWxseSBkZXBsb3lpbmcgc3RhY2sgcmVzb3VyY2VzIGluIGFuIGFjY291bnQuXG4gKiBJdHMgcmVzb3VyY2VzIGFyZSB1c2VkIGZyb20gYSBkZXBsb3ltZW50IHBpcGVsaW5lLlxuICpcbiAqIFRoZSBkZXBsb3ltZW50IGlzIHBlcmZvcm1lZCBieSBpbnZva2luZyB0aGUgXCJzdGFydCBkZXBsb3lcIlxuICogbGFtYmRhIHdpdGggZGV0YWlscyBvZiB3aGF0IHNob3VsZCBiZSBkZXBsb3llZC4gQXMgdGhpcyBpc1xuICogcmVzcG9uc2libGUgZm9yIGRlcGxveWluZyBpbmZyYXN0cnVjdHVyZSwgdGhlIHByaW5jaXBhbCBpbnZva2luZ1xuICogbWlnaHQgYmUgYWJsZSB0byBjYXVzZSBwcml2aWxlZ2UgZXNjYWxhdGlvbi4gVGhlIHByaW5jaXBhbCBpbnZva2luZ1xuICogc2hvdWxkIGJlIGFzc3VtZWQgdG8gaGF2ZSBmdWxsIGFkbWluaXN0cmF0b3IgYWNjZXNzLlxuICpcbiAqIFRoZSBwcm9jZXNzIGRlcGxveWluZyB0aGUgaW5mcmFzdHJ1Y3R1cmUgaXMgbG9ja2VkIGRvd24gc28gdGhpc1xuICogaXMgb25seSBwb3NzaWJseSBieSBkZXBsb3ltZW50IHRocm91Z2ggQ2xvdWRGb3JtYXRpb24sIGFuZCBhc1xuICogc3VjaCByZW1vdmVzIGEgbG90IG9mIHBvc3NpYmxlIGVzY2FsYXRpb24gcGF0aHMgKGUuZy4gbm8gcm9sZVxuICogY2FuIGJlIGNyZWF0ZWQgYnkgZGlyZWN0IEFQSSBjYWxsKS5cbiAqXG4gKiBUaGUgXCJzdGF0dXNcIiBsYW1iZGEgY2FuIGJlIHVzZWQgdG8gcG9sbCBmb3IgY29tcGxldGlvbiwgYW5kIHdpbGxcbiAqIGFsc28gcmV0dXJuIGxvZ3MgZnJvbSB0aGUgam9iIHVwb24gY29tcGxldGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENka0RlcGxveSBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICBjb25zdCBhY2NvdW50ID0gY2RrLlN0YWNrLm9mKHRoaXMpLmFjY291bnRcbiAgICBjb25zdCByZWdpb24gPSBjZGsuU3RhY2sub2YodGhpcykucmVnaW9uXG5cbiAgICBjb25zdCBhcnRpZmFjdHNCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgXCJBcnRpZmFjdHNCdWNrZXRcIixcbiAgICAgIHByb3BzLmFydGlmYWN0c0J1Y2tldE5hbWUsXG4gICAgKVxuXG4gICAgY29uc3Qgcm9sZVRvQmVBc3N1bWVkID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiUm9sZVwiLCB7XG4gICAgICByb2xlTmFtZTogcHJvcHMucm9sZU5hbWUsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uQXJuUHJpbmNpcGFsKHByb3BzLmNhbGxlclJvbGVBcm4pLFxuICAgIH0pXG5cbiAgICAvLyBCdWNrZWQgdXNlZCBmb3IgaW5wdXQgdG8gQ29kZUJ1aWxkLlxuICAgIC8vIFdlIGxldCBDbG91ZEZvcm1hdGlvbiBtYW5hZ2UgdGhlIGJ1Y2tldCBuYW1lLlxuICAgIGNvbnN0IGNvZGVidWlsZEJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgXCJDb2RlYnVpbGRTb3VyY2VCdWNrZXRcIiwge1xuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IHMzLkJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGxpZmVjeWNsZVJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBleHBpcmF0aW9uOiBjZGsuRHVyYXRpb24uZGF5cyg1KSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIC8vIFRoZSByb2xlIHVzZWQgZm9yIENsb3VkRm9ybWF0aW9uIGRlcGxveW1lbnQuXG4gICAgY29uc3QgY2xvdWRGb3JtYXRpb25Sb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiQ2xvdWRGb3JtYXRpb25Sb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiY2xvdWRmb3JtYXRpb24uYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVzdHJpY3QgdGhpcyBhIGJpdCBtb3JlPyBFLmcuIGxvb2sgaW50byBob3cgR3JpaWQgaGFzXG4gICAgICAgIC8vICBsaW1pdGVkIHdoYXQgdGhlIGluZGl2aWR1YWwgc3RhY2sgZGVwbG95bWVudHMgaGF2ZSBwZXJtaXNzaW9ucyB0byBkby5cbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFwiQWRtaW5pc3RyYXRvckFjY2Vzc1wiKSxcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIC8vIFJlcGxhY2UgQ29kZUJ1aWxkIHdpdGggRUNTIHRhc2s/XG4gICAgLy8gU2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vYmxvZ3MvZGV2b3BzL3VzaW5nLWF3cy1jb2RlYnVpbGQtdG8tZXhlY3V0ZS1hZG1pbmlzdHJhdGl2ZS10YXNrcy9cbiAgICBjb25zdCBjb2RlYnVpbGRQcm9qZWN0ID0gbmV3IGNvZGVidWlsZC5Qcm9qZWN0KHRoaXMsIFwiQ29kZWJ1aWxkUHJvamVjdFwiLCB7XG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBidWlsZEltYWdlOlxuICAgICAgICAgIHByb3BzLmRvY2tlckNyZWRlbnRpYWxzU2VjcmV0TmFtZSA9PSBudWxsXG4gICAgICAgICAgICA/IGNvZGVidWlsZC5MaW51eEJ1aWxkSW1hZ2UuZnJvbURvY2tlclJlZ2lzdHJ5KFwibm9kZToxNlwiKVxuICAgICAgICAgICAgOiBjb2RlYnVpbGQuTGludXhCdWlsZEltYWdlLmZyb21Eb2NrZXJSZWdpc3RyeShcIm5vZGU6MTZcIiwge1xuICAgICAgICAgICAgICAgIHNlY3JldHNNYW5hZ2VyQ3JlZGVudGlhbHM6XG4gICAgICAgICAgICAgICAgICBzZWNyZXRzbWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgXCJkb2NrZXJDcmVkZW50aWFsc1NlY3JldE5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZG9ja2VyQ3JlZGVudGlhbHNTZWNyZXROYW1lLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgYnVpbGRTcGVjOiBjb2RlYnVpbGQuQnVpbGRTcGVjLmZyb21PYmplY3Qoe1xuICAgICAgICB2ZXJzaW9uOiBcIjAuMlwiLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIENES19ERVBMT1lfUk9MRV9BUk46IGNsb3VkRm9ybWF0aW9uUm9sZS5yb2xlQXJuLFxuICAgICAgICAgICAgQ0RLX1RPT0xLSVRfU1RBQ0tfTkFNRTogcHJvcHMuY2RrVG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwaGFzZXM6IHtcbiAgICAgICAgICBidWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgXCJucG0gaW5zdGFsbCAtZyBhd3MtY2RrXCIsXG4gICAgICAgICAgICAgICdjZGsgLS1hcHAgXCIkQ09ERUJVSUxEX1NSQ19ESVJfQ0xPVURBU1NFTUJMWVwiIC0tcm9sZS1hcm4gXCIkQ0RLX0RFUExPWV9ST0xFX0FSTlwiIC0tdG9vbGtpdC1zdGFjay1uYW1lIFwiJENES19UT09MS0lUX1NUQUNLX05BTUVcIiAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXIgZGVwbG95IC0tZXhjbHVzaXZlbHkgJChjYXQgc3RhY2stbmFtZXMudHh0KScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5ob3Vycyg0KSxcbiAgICB9KVxuXG4gICAgLy8gR3JhbnQgYWNjZXNzIHRvIENsb3VkRm9ybWF0aW9uLlxuICAgIGNvZGVidWlsZFByb2plY3QuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgLy8gRm9yIGRpZmYuXG4gICAgICAgICAgXCJjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrc1wiLFxuICAgICAgICAgIFwiY2xvdWRmb3JtYXRpb246R2V0VGVtcGxhdGVcIixcbiAgICAgICAgICAvLyBGb3IgZGVwbG95LlxuICAgICAgICAgIFwiY2xvdWRmb3JtYXRpb246Q3JlYXRlQ2hhbmdlU2V0XCIsXG4gICAgICAgICAgXCJjbG91ZGZvcm1hdGlvbjpEZWxldGVTdGFja1wiLFxuICAgICAgICAgIFwiY2xvdWRmb3JtYXRpb246RGVzY3JpYmVDaGFuZ2VTZXRcIixcbiAgICAgICAgICBcImNsb3VkZm9ybWF0aW9uOkV4ZWN1dGVDaGFuZ2VTZXRcIixcbiAgICAgICAgICBcImNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tFdmVudHNcIixcbiAgICAgICAgICBcImNsb3VkZm9ybWF0aW9uOkRlbGV0ZUNoYW5nZVNldFwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBHcmFudCBhY2Nlc3MgdG8gdGhlIENESyBUb29sa2l0IGJ1Y2tldC5cbiAgICBjb2RlYnVpbGRQcm9qZWN0LmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiczM6R2V0T2JqZWN0KlwiLFxuICAgICAgICAgIFwiczM6R2V0QnVja2V0KlwiLFxuICAgICAgICAgIFwiczM6TGlzdCpcIixcbiAgICAgICAgICBcInMzOlB1dE9iamVjdCpcIixcbiAgICAgICAgICBcInMzOkFib3J0KlwiLFxuICAgICAgICAgIFwiczM6RGVsZXRlT2JqZWN0KlwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpzMzo6OiR7cHJvcHMuY2RrVG9vbGtpdFN0YWNrTmFtZS50b0xvd2VyQ2FzZSgpfS1zdGFnaW5nYnVja2V0LSpgLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgYXJ0aWZhY3RzQnVja2V0LmdyYW50UmVhZChjb2RlYnVpbGRQcm9qZWN0KVxuXG4gICAgY2xvdWRGb3JtYXRpb25Sb2xlLmdyYW50UGFzc1JvbGUoY29kZWJ1aWxkUHJvamVjdC5yb2xlISlcblxuICAgIGNvZGVidWlsZEJ1Y2tldC5ncmFudFJlYWRXcml0ZShjb2RlYnVpbGRQcm9qZWN0KVxuXG4gICAgY29uc3Qgc3RhcnREZXBsb3lGbiA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCBcIlN0YXJ0RGVwbG95RnVuY3Rpb25cIiwge1xuICAgICAgZW50cnk6IHJlcXVpcmUucmVzb2x2ZShcIi4vc3RhcnQtZGVwbG95LWhhbmRsZXJcIiksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMThfWCxcbiAgICAgIGZ1bmN0aW9uTmFtZTogcHJvcHMuc3RhcnREZXBsb3lGdW5jdGlvbk5hbWUsXG4gICAgICBhd3NTZGtDb25uZWN0aW9uUmV1c2U6IGZhbHNlLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgUFJPSkVDVF9OQU1FOiBjb2RlYnVpbGRQcm9qZWN0LnByb2plY3ROYW1lLFxuICAgICAgICBCVUNLRVRfTkFNRTogY29kZWJ1aWxkQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgIENES19DT05URVhUOiBKU09OLnN0cmluZ2lmeShwcm9wcy5jZGtDb250ZXh0KSxcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgfSlcblxuICAgIHN0YXJ0RGVwbG95Rm4uZ3JhbnRJbnZva2Uocm9sZVRvQmVBc3N1bWVkKVxuICAgIGNvZGVidWlsZEJ1Y2tldC5ncmFudFJlYWRXcml0ZShzdGFydERlcGxveUZuKVxuXG4gICAgc3RhcnREZXBsb3lGbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcImNvZGVidWlsZDpTdGFydEJ1aWxkXCIsIFwiY29kZWJ1aWxkOkJhdGNoR2V0QnVpbGRzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtjb2RlYnVpbGRQcm9qZWN0LnByb2plY3RBcm5dLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgY29uc3Qgc3RhdHVzRm4gPSBuZXcgTm9kZWpzRnVuY3Rpb24odGhpcywgXCJTdGF0dXNGdW5jdGlvblwiLCB7XG4gICAgICBlbnRyeTogcmVxdWlyZS5yZXNvbHZlKFwiLi9zdGF0dXMtaGFuZGxlclwiKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xOF9YLFxuICAgICAgZnVuY3Rpb25OYW1lOiBwcm9wcy5zdGF0dXNGdW5jdGlvbk5hbWUsXG4gICAgICBhd3NTZGtDb25uZWN0aW9uUmV1c2U6IGZhbHNlLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgUFJPSkVDVF9OQU1FOiBjb2RlYnVpbGRQcm9qZWN0LnByb2plY3ROYW1lLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICB9KVxuXG4gICAgc3RhdHVzRm4uZ3JhbnRJbnZva2Uocm9sZVRvQmVBc3N1bWVkKVxuXG4gICAgc3RhdHVzRm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJjb2RlYnVpbGQ6QmF0Y2hHZXRCdWlsZHNcIl0sXG4gICAgICAgIHJlc291cmNlczogW2NvZGVidWlsZFByb2plY3QucHJvamVjdEFybl0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICBzdGF0dXNGbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcImxvZ3M6R2V0TG9nRXZlbnRzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDovYXdzL2NvZGVidWlsZC8ke2NvZGVidWlsZFByb2plY3QucHJvamVjdE5hbWV9OmxvZy1zdHJlYW06KmAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIlJvbGVUb0JlQXNzdW1lZEFyblwiLCB7XG4gICAgICB2YWx1ZTogcm9sZVRvQmVBc3N1bWVkLnJvbGVBcm4sXG4gICAgfSlcbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIlN0YXR1c0Z1bmN0aW9uQXJuXCIsIHtcbiAgICAgIHZhbHVlOiBzdGF0dXNGbi5mdW5jdGlvbkFybixcbiAgICB9KVxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiU3RhcnREZXBsb3lGdW5jdGlvbkFyblwiLCB7XG4gICAgICB2YWx1ZTogc3RhcnREZXBsb3lGbi5mdW5jdGlvbkFybixcbiAgICB9KVxuICB9XG59XG4iXX0=
@@ -1 +0,0 @@
1
- export { CdkDeploy } from "./cdk-deploy";
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CdkDeploy = void 0;
4
- var cdk_deploy_1 = require("./cdk-deploy");
5
- Object.defineProperty(exports, "CdkDeploy", { enumerable: true, get: function () { return cdk_deploy_1.CdkDeploy; } });
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2RrLWRlcGxveS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBd0M7QUFBL0IsdUdBQUEsU0FBUyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQ2RrRGVwbG95IH0gZnJvbSBcIi4vY2RrLWRlcGxveVwiXG4iXX0=
@@ -1,8 +0,0 @@
1
- import { Handler } from "aws-lambda";
2
- interface StartDeployExpectedInput {
3
- bucketName: string;
4
- bucketKey: string;
5
- stackNames: string[];
6
- }
7
- export declare const handler: Handler<Partial<StartDeployExpectedInput>>;
8
- export {};
@@ -1,65 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handler = void 0;
4
- const client_s3_1 = require("@aws-sdk/client-s3");
5
- const client_codebuild_1 = require("@aws-sdk/client-codebuild");
6
- // noinspection JSUnusedGlobalSymbols
7
- const handler = async (event, context) => {
8
- const codeBuildClient = new client_codebuild_1.CodeBuildClient();
9
- const s3Client = new client_s3_1.S3Client();
10
- function requireEnv(name) {
11
- const value = process.env[name];
12
- if (value === undefined) {
13
- throw new Error(`Missing ${name}`);
14
- }
15
- return value;
16
- }
17
- const projectName = requireEnv("PROJECT_NAME");
18
- const bucketName = requireEnv("BUCKET_NAME");
19
- const cdkContext = JSON.parse(requireEnv("CDK_CONTEXT"));
20
- // Since we pass the stack names as strings to the shell,
21
- // be a bit restrictive of the valid values we can use.
22
- const validStackName = /^[a-z0-9_][a-z0-9\-_]*$/i;
23
- const s3KeyPrefix = `${context.awsRequestId}/`;
24
- // Validate the input.
25
- if (typeof event.bucketName !== "string" ||
26
- typeof event.bucketKey !== "string" ||
27
- !Array.isArray(event.stackNames) ||
28
- !event.stackNames.every((it) => typeof it === "string" && validStackName.test(it))) {
29
- throw new Error("Input invalid: " + JSON.stringify(event, undefined, " "));
30
- }
31
- async function putObject(name, data) {
32
- await s3Client.send(new client_s3_1.PutObjectCommand({
33
- Bucket: bucketName,
34
- Key: `${s3KeyPrefix}${name}`,
35
- Body: data,
36
- }));
37
- }
38
- await putObject("stack-names.txt", event.stackNames.join(" "));
39
- // Ensure that we run the script using same feature flags.
40
- await putObject("cdk.json", JSON.stringify({ context: cdkContext }));
41
- const { build } = await codeBuildClient.send(new client_codebuild_1.StartBuildCommand({
42
- projectName,
43
- sourceTypeOverride: client_codebuild_1.SourceType.S3,
44
- sourceLocationOverride: `${bucketName}/${s3KeyPrefix}`,
45
- secondarySourcesOverride: [
46
- {
47
- type: client_codebuild_1.SourceType.S3,
48
- location: `${event.bucketName}/${event.bucketKey}`,
49
- sourceIdentifier: "CLOUDASSEMBLY",
50
- },
51
- ],
52
- }));
53
- const buildId = build === null || build === void 0 ? void 0 : build.id;
54
- if (buildId == null) {
55
- throw new Error("Unknown build ID");
56
- }
57
- return {
58
- // This is the value the caller will use to fetch updated status.
59
- // Avoid exposing what kind of ID this is, because we should be free
60
- // to change implementation details.
61
- jobId: buildId,
62
- };
63
- };
64
- exports.handler = handler;
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtZGVwbG95LWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2RrLWRlcGxveS9zdGFydC1kZXBsb3ktaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxrREFBK0Q7QUFDL0QsZ0VBSWtDO0FBUWxDLHFDQUFxQztBQUM5QixNQUFNLE9BQU8sR0FBK0MsS0FBSyxFQUN0RSxLQUFLLEVBQ0wsT0FBTyxFQUNQLEVBQUU7SUFDRixNQUFNLGVBQWUsR0FBRyxJQUFJLGtDQUFlLEVBQUUsQ0FBQTtJQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLG9CQUFRLEVBQUUsQ0FBQTtJQUUvQixTQUFTLFVBQVUsQ0FBQyxJQUFZO1FBQzlCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0IsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUE7UUFDcEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUM5QyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDNUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtJQUV4RCx5REFBeUQ7SUFDekQsdURBQXVEO0lBQ3ZELE1BQU0sY0FBYyxHQUFHLDBCQUEwQixDQUFBO0lBQ2pELE1BQU0sV0FBVyxHQUFHLEdBQUcsT0FBTyxDQUFDLFlBQVksR0FBRyxDQUFBO0lBRTlDLHNCQUFzQjtJQUN0QixJQUNFLE9BQU8sS0FBSyxDQUFDLFVBQVUsS0FBSyxRQUFRO1FBQ3BDLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxRQUFRO1FBQ25DLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ2hDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQ3JCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDMUQsRUFDRCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM3RSxDQUFDO0lBRUQsS0FBSyxVQUFVLFNBQVMsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUNqRCxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQ2pCLElBQUksNEJBQWdCLENBQUM7WUFDbkIsTUFBTSxFQUFFLFVBQVU7WUFDbEIsR0FBRyxFQUFFLEdBQUcsV0FBVyxHQUFHLElBQUksRUFBRTtZQUM1QixJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sU0FBUyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDOUQsMERBQTBEO0lBQzFELE1BQU0sU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUVwRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUMxQyxJQUFJLG9DQUFpQixDQUFDO1FBQ3BCLFdBQVc7UUFDWCxrQkFBa0IsRUFBRSw2QkFBVSxDQUFDLEVBQUU7UUFDakMsc0JBQXNCLEVBQUUsR0FBRyxVQUFVLElBQUksV0FBVyxFQUFFO1FBQ3RELHdCQUF3QixFQUFFO1lBQ3hCO2dCQUNFLElBQUksRUFBRSw2QkFBVSxDQUFDLEVBQUU7Z0JBQ25CLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtnQkFDbEQsZ0JBQWdCLEVBQUUsZUFBZTthQUNsQztTQUNGO0tBQ0YsQ0FBQyxDQUNILENBQUE7SUFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsRUFBRSxDQUFBO0lBRXpCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQsT0FBTztRQUNMLGlFQUFpRTtRQUNqRSxvRUFBb0U7UUFDcEUsb0NBQW9DO1FBQ3BDLEtBQUssRUFBRSxPQUFPO0tBQ2YsQ0FBQTtBQUNILENBQUMsQ0FBQTtBQTVFWSxRQUFBLE9BQU8sV0E0RW5CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50ICovXG5pbXBvcnQgeyBIYW5kbGVyIH0gZnJvbSBcImF3cy1sYW1iZGFcIlxuXG5pbXBvcnQgeyBTM0NsaWVudCwgUHV0T2JqZWN0Q29tbWFuZCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIlxuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkQ2xpZW50LFxuICBTdGFydEJ1aWxkQ29tbWFuZCxcbiAgU291cmNlVHlwZSxcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1jb2RlYnVpbGRcIlxuXG5pbnRlcmZhY2UgU3RhcnREZXBsb3lFeHBlY3RlZElucHV0IHtcbiAgYnVja2V0TmFtZTogc3RyaW5nXG4gIGJ1Y2tldEtleTogc3RyaW5nXG4gIHN0YWNrTmFtZXM6IHN0cmluZ1tdXG59XG5cbi8vIG5vaW5zcGVjdGlvbiBKU1VudXNlZEdsb2JhbFN5bWJvbHNcbmV4cG9ydCBjb25zdCBoYW5kbGVyOiBIYW5kbGVyPFBhcnRpYWw8U3RhcnREZXBsb3lFeHBlY3RlZElucHV0Pj4gPSBhc3luYyAoXG4gIGV2ZW50LFxuICBjb250ZXh0LFxuKSA9PiB7XG4gIGNvbnN0IGNvZGVCdWlsZENsaWVudCA9IG5ldyBDb2RlQnVpbGRDbGllbnQoKVxuICBjb25zdCBzM0NsaWVudCA9IG5ldyBTM0NsaWVudCgpXG5cbiAgZnVuY3Rpb24gcmVxdWlyZUVudihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZbbmFtZV1cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICR7bmFtZX1gKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2plY3ROYW1lID0gcmVxdWlyZUVudihcIlBST0pFQ1RfTkFNRVwiKVxuICBjb25zdCBidWNrZXROYW1lID0gcmVxdWlyZUVudihcIkJVQ0tFVF9OQU1FXCIpXG4gIGNvbnN0IGNka0NvbnRleHQgPSBKU09OLnBhcnNlKHJlcXVpcmVFbnYoXCJDREtfQ09OVEVYVFwiKSlcblxuICAvLyBTaW5jZSB3ZSBwYXNzIHRoZSBzdGFjayBuYW1lcyBhcyBzdHJpbmdzIHRvIHRoZSBzaGVsbCxcbiAgLy8gYmUgYSBiaXQgcmVzdHJpY3RpdmUgb2YgdGhlIHZhbGlkIHZhbHVlcyB3ZSBjYW4gdXNlLlxuICBjb25zdCB2YWxpZFN0YWNrTmFtZSA9IC9eW2EtejAtOV9dW2EtejAtOVxcLV9dKiQvaVxuICBjb25zdCBzM0tleVByZWZpeCA9IGAke2NvbnRleHQuYXdzUmVxdWVzdElkfS9gXG5cbiAgLy8gVmFsaWRhdGUgdGhlIGlucHV0LlxuICBpZiAoXG4gICAgdHlwZW9mIGV2ZW50LmJ1Y2tldE5hbWUgIT09IFwic3RyaW5nXCIgfHxcbiAgICB0eXBlb2YgZXZlbnQuYnVja2V0S2V5ICE9PSBcInN0cmluZ1wiIHx8XG4gICAgIUFycmF5LmlzQXJyYXkoZXZlbnQuc3RhY2tOYW1lcykgfHxcbiAgICAhZXZlbnQuc3RhY2tOYW1lcy5ldmVyeShcbiAgICAgIChpdCkgPT4gdHlwZW9mIGl0ID09PSBcInN0cmluZ1wiICYmIHZhbGlkU3RhY2tOYW1lLnRlc3QoaXQpLFxuICAgIClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgaW52YWxpZDogXCIgKyBKU09OLnN0cmluZ2lmeShldmVudCwgdW5kZWZpbmVkLCBcIiAgXCIpKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcHV0T2JqZWN0KG5hbWU6IHN0cmluZywgZGF0YTogc3RyaW5nKSB7XG4gICAgYXdhaXQgczNDbGllbnQuc2VuZChcbiAgICAgIG5ldyBQdXRPYmplY3RDb21tYW5kKHtcbiAgICAgICAgQnVja2V0OiBidWNrZXROYW1lLFxuICAgICAgICBLZXk6IGAke3MzS2V5UHJlZml4fSR7bmFtZX1gLFxuICAgICAgICBCb2R5OiBkYXRhLFxuICAgICAgfSksXG4gICAgKVxuICB9XG5cbiAgYXdhaXQgcHV0T2JqZWN0KFwic3RhY2stbmFtZXMudHh0XCIsIGV2ZW50LnN0YWNrTmFtZXMuam9pbihcIiBcIikpXG4gIC8vIEVuc3VyZSB0aGF0IHdlIHJ1biB0aGUgc2NyaXB0IHVzaW5nIHNhbWUgZmVhdHVyZSBmbGFncy5cbiAgYXdhaXQgcHV0T2JqZWN0KFwiY2RrLmpzb25cIiwgSlNPTi5zdHJpbmdpZnkoeyBjb250ZXh0OiBjZGtDb250ZXh0IH0pKVxuXG4gIGNvbnN0IHsgYnVpbGQgfSA9IGF3YWl0IGNvZGVCdWlsZENsaWVudC5zZW5kKFxuICAgIG5ldyBTdGFydEJ1aWxkQ29tbWFuZCh7XG4gICAgICBwcm9qZWN0TmFtZSxcbiAgICAgIHNvdXJjZVR5cGVPdmVycmlkZTogU291cmNlVHlwZS5TMyxcbiAgICAgIHNvdXJjZUxvY2F0aW9uT3ZlcnJpZGU6IGAke2J1Y2tldE5hbWV9LyR7czNLZXlQcmVmaXh9YCxcbiAgICAgIHNlY29uZGFyeVNvdXJjZXNPdmVycmlkZTogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogU291cmNlVHlwZS5TMyxcbiAgICAgICAgICBsb2NhdGlvbjogYCR7ZXZlbnQuYnVja2V0TmFtZX0vJHtldmVudC5idWNrZXRLZXl9YCxcbiAgICAgICAgICBzb3VyY2VJZGVudGlmaWVyOiBcIkNMT1VEQVNTRU1CTFlcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSksXG4gIClcbiAgY29uc3QgYnVpbGRJZCA9IGJ1aWxkPy5pZFxuXG4gIGlmIChidWlsZElkID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGJ1aWxkIElEXCIpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8vIFRoaXMgaXMgdGhlIHZhbHVlIHRoZSBjYWxsZXIgd2lsbCB1c2UgdG8gZmV0Y2ggdXBkYXRlZCBzdGF0dXMuXG4gICAgLy8gQXZvaWQgZXhwb3Npbmcgd2hhdCBraW5kIG9mIElEIHRoaXMgaXMsIGJlY2F1c2Ugd2Ugc2hvdWxkIGJlIGZyZWVcbiAgICAvLyB0byBjaGFuZ2UgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cbiAgICBqb2JJZDogYnVpbGRJZCxcbiAgfVxufVxuIl19
@@ -1,6 +0,0 @@
1
- import { Handler } from "aws-lambda";
2
- interface StatusExpectedInput {
3
- jobId: string;
4
- }
5
- export declare const handler: Handler<Partial<StatusExpectedInput>>;
6
- export {};
@@ -1,80 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handler = void 0;
4
- const client_codebuild_1 = require("@aws-sdk/client-codebuild");
5
- const client_cloudwatch_logs_1 = require("@aws-sdk/client-cloudwatch-logs");
6
- const handler = async (event) => {
7
- const codeBuildClient = new client_codebuild_1.CodeBuildClient();
8
- const cloudWatchLogsClient = new client_cloudwatch_logs_1.CloudWatchLogsClient();
9
- function requireEnv(name) {
10
- const value = process.env[name];
11
- if (value === undefined) {
12
- throw new Error(`Missing ${name}`);
13
- }
14
- return value;
15
- }
16
- /**
17
- * Get success status.
18
- *
19
- * A value of true means the job has completed successfully, while
20
- * a value of false means the job did complete but not successfully.
21
- *
22
- * A null value means the job is still in progress and the
23
- * completion status is not yet known.
24
- */
25
- function getSuccess(status) {
26
- if (status == "SUCCEEDED") {
27
- return true;
28
- }
29
- if (status == "IN_PROGRESS") {
30
- return null;
31
- }
32
- return false;
33
- }
34
- async function getBuild(buildId) {
35
- var _a;
36
- const { builds } = await codeBuildClient.send(new client_codebuild_1.BatchGetBuildsCommand({ ids: [buildId] }));
37
- if ((builds === null || builds === void 0 ? void 0 : builds.length) !== 1) {
38
- throw new Error(`Expected 1 item, found ${(_a = builds === null || builds === void 0 ? void 0 : builds.length) !== null && _a !== void 0 ? _a : "unknown"}`);
39
- }
40
- return builds[0];
41
- }
42
- async function getLogs(build) {
43
- if (build.logs == null) {
44
- throw new Error("Missing logs attribute on build");
45
- }
46
- if (build.logs.groupName == null) {
47
- throw new Error("Missing log groupName");
48
- }
49
- if (build.logs.streamName == null) {
50
- throw new Error("Missing log streamName");
51
- }
52
- const { events } = await cloudWatchLogsClient.send(new client_cloudwatch_logs_1.GetLogEventsCommand({
53
- logGroupName: build.logs.groupName,
54
- logStreamName: build.logs.streamName,
55
- startFromHead: true,
56
- }));
57
- if (events == null) {
58
- throw new Error("Failed to fetch log events");
59
- }
60
- // The logs contain newlines, so no need to add more.
61
- return events.map((it) => it.message).join("");
62
- }
63
- const projectName = requireEnv("PROJECT_NAME");
64
- // Validate the input.
65
- if (typeof event.jobId !== "string" ||
66
- !event.jobId.startsWith(`${projectName}:`)) {
67
- throw new Error("Input invalid: " + JSON.stringify(event, undefined, " "));
68
- }
69
- const build = await getBuild(event.jobId);
70
- const success = build.buildStatus == null ? null : getSuccess(build.buildStatus);
71
- // Read logs from CloudWatch if completed.
72
- const logs = success != null ? await getLogs(build) : null;
73
- return {
74
- jobId: event.jobId,
75
- success,
76
- logs,
77
- };
78
- };
79
- exports.handler = handler;
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2RrLWRlcGxveS9zdGF0dXMtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxnRUFLa0M7QUFFbEMsNEVBR3dDO0FBTWpDLE1BQU0sT0FBTyxHQUEwQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDNUUsTUFBTSxlQUFlLEdBQUcsSUFBSSxrQ0FBZSxFQUFFLENBQUE7SUFDN0MsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLDZDQUFvQixFQUFFLENBQUE7SUFFdkQsU0FBUyxVQUFVLENBQUMsSUFBWTtRQUM5QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQy9CLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3BDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFNBQVMsVUFBVSxDQUFDLE1BQWtCO1FBQ3BDLElBQUksTUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVELElBQUksTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELEtBQUssVUFBVSxRQUFRLENBQUMsT0FBZTs7UUFDckMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sZUFBZSxDQUFDLElBQUksQ0FDM0MsSUFBSSx3Q0FBcUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FDOUMsQ0FBQTtRQUVELElBQUksQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxNQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sbUNBQUksU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUMxRSxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEIsQ0FBQztJQUVELEtBQUssVUFBVSxPQUFPLENBQUMsS0FBWTtRQUNqQyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO1FBQ3BELENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUMxQyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFDM0MsQ0FBQztRQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLG9CQUFvQixDQUFDLElBQUksQ0FDaEQsSUFBSSw0Q0FBbUIsQ0FBQztZQUN0QixZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQ2xDLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFDcEMsYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FBQyxDQUNILENBQUE7UUFFRCxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7UUFDL0MsQ0FBQztRQUVELHFEQUFxRDtRQUNyRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUU5QyxzQkFBc0I7SUFDdEIsSUFDRSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUMvQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxHQUFHLENBQUMsRUFDMUMsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDN0UsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUV6QyxNQUFNLE9BQU8sR0FDWCxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRWxFLDBDQUEwQztJQUMxQyxNQUFNLElBQUksR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBRTFELE9BQU87UUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsT0FBTztRQUNQLElBQUk7S0FDTCxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBakdZLFFBQUEsT0FBTyxXQWlHbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYW5kbGVyIH0gZnJvbSBcImF3cy1sYW1iZGFcIlxuXG5pbXBvcnQge1xuICBDb2RlQnVpbGRDbGllbnQsXG4gIEJhdGNoR2V0QnVpbGRzQ29tbWFuZCxcbiAgU3RhdHVzVHlwZSxcbiAgQnVpbGQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtY29kZWJ1aWxkXCJcblxuaW1wb3J0IHtcbiAgQ2xvdWRXYXRjaExvZ3NDbGllbnQsXG4gIEdldExvZ0V2ZW50c0NvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtY2xvdWR3YXRjaC1sb2dzXCJcblxuaW50ZXJmYWNlIFN0YXR1c0V4cGVjdGVkSW5wdXQge1xuICBqb2JJZDogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyOiBIYW5kbGVyPFBhcnRpYWw8U3RhdHVzRXhwZWN0ZWRJbnB1dD4+ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGNvZGVCdWlsZENsaWVudCA9IG5ldyBDb2RlQnVpbGRDbGllbnQoKVxuICBjb25zdCBjbG91ZFdhdGNoTG9nc0NsaWVudCA9IG5ldyBDbG91ZFdhdGNoTG9nc0NsaWVudCgpXG5cbiAgZnVuY3Rpb24gcmVxdWlyZUVudihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZbbmFtZV1cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICR7bmFtZX1gKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3VjY2VzcyBzdGF0dXMuXG4gICAqXG4gICAqIEEgdmFsdWUgb2YgdHJ1ZSBtZWFucyB0aGUgam9iIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB3aGlsZVxuICAgKiBhIHZhbHVlIG9mIGZhbHNlIG1lYW5zIHRoZSBqb2IgZGlkIGNvbXBsZXRlIGJ1dCBub3Qgc3VjY2Vzc2Z1bGx5LlxuICAgKlxuICAgKiBBIG51bGwgdmFsdWUgbWVhbnMgdGhlIGpvYiBpcyBzdGlsbCBpbiBwcm9ncmVzcyBhbmQgdGhlXG4gICAqIGNvbXBsZXRpb24gc3RhdHVzIGlzIG5vdCB5ZXQga25vd24uXG4gICAqL1xuICBmdW5jdGlvbiBnZXRTdWNjZXNzKHN0YXR1czogU3RhdHVzVHlwZSk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICBpZiAoc3RhdHVzID09IFwiU1VDQ0VFREVEXCIpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PSBcIklOX1BST0dSRVNTXCIpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRCdWlsZChidWlsZElkOiBzdHJpbmcpOiBQcm9taXNlPEJ1aWxkPiB7XG4gICAgY29uc3QgeyBidWlsZHMgfSA9IGF3YWl0IGNvZGVCdWlsZENsaWVudC5zZW5kKFxuICAgICAgbmV3IEJhdGNoR2V0QnVpbGRzQ29tbWFuZCh7IGlkczogW2J1aWxkSWRdIH0pLFxuICAgIClcblxuICAgIGlmIChidWlsZHM/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAxIGl0ZW0sIGZvdW5kICR7YnVpbGRzPy5sZW5ndGggPz8gXCJ1bmtub3duXCJ9YClcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRzWzBdXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRMb2dzKGJ1aWxkOiBCdWlsZCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKGJ1aWxkLmxvZ3MgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBsb2dzIGF0dHJpYnV0ZSBvbiBidWlsZFwiKVxuICAgIH1cblxuICAgIGlmIChidWlsZC5sb2dzLmdyb3VwTmFtZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGxvZyBncm91cE5hbWVcIilcbiAgICB9XG5cbiAgICBpZiAoYnVpbGQubG9ncy5zdHJlYW1OYW1lID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgbG9nIHN0cmVhbU5hbWVcIilcbiAgICB9XG5cbiAgICBjb25zdCB7IGV2ZW50cyB9ID0gYXdhaXQgY2xvdWRXYXRjaExvZ3NDbGllbnQuc2VuZChcbiAgICAgIG5ldyBHZXRMb2dFdmVudHNDb21tYW5kKHtcbiAgICAgICAgbG9nR3JvdXBOYW1lOiBidWlsZC5sb2dzLmdyb3VwTmFtZSxcbiAgICAgICAgbG9nU3RyZWFtTmFtZTogYnVpbGQubG9ncy5zdHJlYW1OYW1lLFxuICAgICAgICBzdGFydEZyb21IZWFkOiB0cnVlLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgaWYgKGV2ZW50cyA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggbG9nIGV2ZW50c1wiKVxuICAgIH1cblxuICAgIC8vIFRoZSBsb2dzIGNvbnRhaW4gbmV3bGluZXMsIHNvIG5vIG5lZWQgdG8gYWRkIG1vcmUuXG4gICAgcmV0dXJuIGV2ZW50cy5tYXAoKGl0KSA9PiBpdC5tZXNzYWdlKS5qb2luKFwiXCIpXG4gIH1cblxuICBjb25zdCBwcm9qZWN0TmFtZSA9IHJlcXVpcmVFbnYoXCJQUk9KRUNUX05BTUVcIilcblxuICAvLyBWYWxpZGF0ZSB0aGUgaW5wdXQuXG4gIGlmIChcbiAgICB0eXBlb2YgZXZlbnQuam9iSWQgIT09IFwic3RyaW5nXCIgfHxcbiAgICAhZXZlbnQuam9iSWQuc3RhcnRzV2l0aChgJHtwcm9qZWN0TmFtZX06YClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgaW52YWxpZDogXCIgKyBKU09OLnN0cmluZ2lmeShldmVudCwgdW5kZWZpbmVkLCBcIiAgXCIpKVxuICB9XG5cbiAgY29uc3QgYnVpbGQgPSBhd2FpdCBnZXRCdWlsZChldmVudC5qb2JJZClcblxuICBjb25zdCBzdWNjZXNzID1cbiAgICBidWlsZC5idWlsZFN0YXR1cyA9PSBudWxsID8gbnVsbCA6IGdldFN1Y2Nlc3MoYnVpbGQuYnVpbGRTdGF0dXMpXG5cbiAgLy8gUmVhZCBsb2dzIGZyb20gQ2xvdWRXYXRjaCBpZiBjb21wbGV0ZWQuXG4gIGNvbnN0IGxvZ3MgPSBzdWNjZXNzICE9IG51bGwgPyBhd2FpdCBnZXRMb2dzKGJ1aWxkKSA6IG51bGxcblxuICByZXR1cm4ge1xuICAgIGpvYklkOiBldmVudC5qb2JJZCxcbiAgICBzdWNjZXNzLFxuICAgIGxvZ3MsXG4gIH1cbn1cbiJdfQ==
@@ -1,39 +0,0 @@
1
- interface Props {
2
- artifactPushedAndTagUpdated: boolean;
3
- }
4
- /**
5
- * The responsibility of this class is to be a Value Object to cause
6
- * more consistent usage and the importance of an artifact being published.
7
- *
8
- * Due to the way we build and deploy ECS services, the ECR image will
9
- * not be available during the first initial account/service deployment.
10
- *
11
- * This causes the following sequence:
12
- *
13
- * 1. The ECR repository must be provisioned.
14
- *
15
- * 2. The tag container must be provisioned in every target account.
16
- * Before we can provision the ECS service this must be updated
17
- * to reference an existing artifact.
18
- *
19
- * 3. The build system must produce and upload an artifact.
20
- *
21
- * 4. The tag container must be updated in every target account
22
- * to contain the newly built image. This is easiest done by also
23
- * provisioning the ECS update image construct as part of step 2,
24
- * without including service and task definition details (which
25
- * does not exist yet before we can resolve the ECR image).
26
- * When the ECS update image construct is provisioned the deployment
27
- * pipeline can start a deployment, which under this state will
28
- * only store the updated tag but cause no ECS service update.
29
- *
30
- * 5. The ECS service can be provisioned, which will use the image
31
- * reference in the tag container as the first deployment.
32
- *
33
- * 6. The next time a deploy is started, the ECS service will be updated.
34
- */
35
- export declare class EcsUpdateImageArtifactStatus {
36
- readonly artifactPushedAndTagUpdated: boolean;
37
- constructor(props: Props);
38
- }
39
- export {};