@liflig/cdk 2.21.2 → 2.21.4

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 (46) hide show
  1. package/README.md +18 -2
  2. package/lib/cdk-pipelines/cloud-assembly-lookup-handler.d.ts +1 -1
  3. package/lib/cdk-pipelines/cloud-assembly-lookup-handler.js +46 -35
  4. package/lib/cdk-pipelines/liflig-cdk-pipeline.js +6 -6
  5. package/lib/index.d.ts +1 -4
  6. package/lib/index.js +2 -6
  7. package/lib/ses/configurationsetsnsdestination/handler.d.ts +1 -1
  8. package/lib/ses/configurationsetsnsdestination/handler.js +15 -25
  9. package/lib/ses/configurationsetsnsdestination/index.js +7 -7
  10. package/lib/ses/sesdomain/handler.d.ts +1 -1
  11. package/lib/ses/sesdomain/handler.js +31 -31
  12. package/lib/ses/sesdomain/index.js +6 -6
  13. package/lib/ses/sesverifyemail/handler.d.ts +1 -1
  14. package/lib/ses/sesverifyemail/handler.js +12 -10
  15. package/lib/ses/sesverifyemail/index.js +6 -6
  16. package/package.json +14 -3
  17. package/lib/cdk-deploy/cdk-deploy.d.ts +0 -63
  18. package/lib/cdk-deploy/cdk-deploy.js +0 -175
  19. package/lib/cdk-deploy/index.d.ts +0 -1
  20. package/lib/cdk-deploy/index.js +0 -6
  21. package/lib/cdk-deploy/start-deploy-handler.d.ts +0 -8
  22. package/lib/cdk-deploy/start-deploy-handler.js +0 -72
  23. package/lib/cdk-deploy/status-handler.d.ts +0 -6
  24. package/lib/cdk-deploy/status-handler.js +0 -83
  25. package/lib/ecs-update-image/artifact-status.d.ts +0 -39
  26. package/lib/ecs-update-image/artifact-status.js +0 -41
  27. package/lib/ecs-update-image/ecs-update-image.d.ts +0 -41
  28. package/lib/ecs-update-image/ecs-update-image.js +0 -98
  29. package/lib/ecs-update-image/index.d.ts +0 -3
  30. package/lib/ecs-update-image/index.js +0 -10
  31. package/lib/ecs-update-image/start-deploy-handler.d.ts +0 -6
  32. package/lib/ecs-update-image/start-deploy-handler.js +0 -104
  33. package/lib/ecs-update-image/status-handler.d.ts +0 -11
  34. package/lib/ecs-update-image/status-handler.js +0 -74
  35. package/lib/ecs-update-image/tag.d.ts +0 -47
  36. package/lib/ecs-update-image/tag.js +0 -67
  37. package/lib/pipelines/conventions.d.ts +0 -14
  38. package/lib/pipelines/conventions.js +0 -24
  39. package/lib/pipelines/deploy-env.d.ts +0 -18
  40. package/lib/pipelines/deploy-env.js +0 -96
  41. package/lib/pipelines/index.d.ts +0 -2
  42. package/lib/pipelines/index.js +0 -8
  43. package/lib/pipelines/liflig-cdk-deployer-deps.d.ts +0 -13
  44. package/lib/pipelines/liflig-cdk-deployer-deps.js +0 -35
  45. package/lib/pipelines/pipeline.d.ts +0 -78
  46. package/lib/pipelines/pipeline.js +0 -224
@@ -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 startDeployHandler: Handler<Partial<StartDeployExpectedInput>>;
8
- export {};
@@ -1,72 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startDeployHandler = void 0;
4
- // This function is inline-compiled for the lambda.
5
- // It must be self-contained.
6
- const startDeployHandler = async (event, context) => {
7
- var _a;
8
- const AWS = require("aws-sdk");
9
- const codebuild = new AWS.CodeBuild();
10
- const s3 = new AWS.S3();
11
- function requireEnv(name) {
12
- const value = process.env[name];
13
- if (value === undefined) {
14
- throw new Error(`Missing ${name}`);
15
- }
16
- return value;
17
- }
18
- const projectName = requireEnv("PROJECT_NAME");
19
- const bucketName = requireEnv("BUCKET_NAME");
20
- const cdkContext = JSON.parse(requireEnv("CDK_CONTEXT"));
21
- // Since we pass the stack names as strings to the shell,
22
- // be a bit restrictive of the valid values we can use.
23
- const validStackName = /^[a-z0-9_][a-z0-9\-_]*$/i;
24
- const s3KeyPrefix = `${context.awsRequestId}/`;
25
- // Validate the input.
26
- if (typeof event.bucketName !== "string" ||
27
- typeof event.bucketKey !== "string" ||
28
- !Array.isArray(event.stackNames) ||
29
- !event.stackNames.every((it) => typeof it === "string" && validStackName.test(it))) {
30
- throw new Error("Input invalid: " + JSON.stringify(event, undefined, " "));
31
- }
32
- async function put(name, data) {
33
- await s3
34
- .putObject({
35
- Bucket: bucketName,
36
- Key: `${s3KeyPrefix}${name}`,
37
- Body: data,
38
- })
39
- .promise();
40
- }
41
- await put("stack-names.txt", event.stackNames.join(" "));
42
- // Ensure that we run the script using same feature flags.
43
- await put("cdk.json", JSON.stringify({
44
- context: cdkContext,
45
- }));
46
- const build = await codebuild
47
- .startBuild({
48
- projectName,
49
- sourceTypeOverride: "S3",
50
- sourceLocationOverride: `${bucketName}/${s3KeyPrefix}`,
51
- secondarySourcesOverride: [
52
- {
53
- type: "S3",
54
- location: `${event.bucketName}/${event.bucketKey}`,
55
- sourceIdentifier: "CLOUDASSEMBLY",
56
- },
57
- ],
58
- })
59
- .promise();
60
- const buildId = (_a = build.build) === null || _a === void 0 ? void 0 : _a.id;
61
- if (buildId == null) {
62
- throw new Error("Unknown build ID");
63
- }
64
- return {
65
- // This is the value the caller will use to fetch updated status.
66
- // Avoid exposing what kind of ID this is, because we should be free
67
- // to change implementation details.
68
- jobId: buildId,
69
- };
70
- };
71
- exports.startDeployHandler = startDeployHandler;
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtZGVwbG95LWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2RrLWRlcGxveS9zdGFydC1kZXBsb3ktaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhQSxtREFBbUQ7QUFDbkQsNkJBQTZCO0FBQ3RCLE1BQU0sa0JBQWtCLEdBRTNCLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7O0lBQzNCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUU5QixNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQW9CLENBQUE7SUFDdkQsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFhLENBQUE7SUFFbEMsU0FBUyxVQUFVLENBQUMsSUFBWTtRQUM5QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQy9CLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3BDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDOUMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7SUFFeEQseURBQXlEO0lBQ3pELHVEQUF1RDtJQUN2RCxNQUFNLGNBQWMsR0FBRywwQkFBMEIsQ0FBQTtJQUVqRCxNQUFNLFdBQVcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQTtJQUU5QyxzQkFBc0I7SUFDdEIsSUFDRSxPQUFPLEtBQUssQ0FBQyxVQUFVLEtBQUssUUFBUTtRQUNwQyxPQUFPLEtBQUssQ0FBQyxTQUFTLEtBQUssUUFBUTtRQUNuQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNoQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUNyQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQzFELEVBQ0QsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDN0UsQ0FBQztJQUVELEtBQUssVUFBVSxHQUFHLENBQUMsSUFBWSxFQUFFLElBQWlCO1FBQ2hELE1BQU0sRUFBRTthQUNMLFNBQVMsQ0FBQztZQUNULE1BQU0sRUFBRSxVQUFVO1lBQ2xCLEdBQUcsRUFBRSxHQUFHLFdBQVcsR0FBRyxJQUFJLEVBQUU7WUFDNUIsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDO2FBQ0QsT0FBTyxFQUFFLENBQUE7SUFDZCxDQUFDO0lBRUQsTUFBTSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUN4RCwwREFBMEQ7SUFDMUQsTUFBTSxHQUFHLENBQ1AsVUFBVSxFQUNWLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDYixPQUFPLEVBQUUsVUFBVTtLQUNwQixDQUFDLENBQ0gsQ0FBQTtJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sU0FBUztTQUMxQixVQUFVLENBQUM7UUFDVixXQUFXO1FBQ1gsa0JBQWtCLEVBQUUsSUFBSTtRQUN4QixzQkFBc0IsRUFBRSxHQUFHLFVBQVUsSUFBSSxXQUFXLEVBQUU7UUFDdEQsd0JBQXdCLEVBQUU7WUFDeEI7Z0JBQ0UsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUNsRCxnQkFBZ0IsRUFBRSxlQUFlO2FBQ2xDO1NBQ0Y7S0FDRixDQUFDO1NBQ0QsT0FBTyxFQUFFLENBQUE7SUFFWixNQUFNLE9BQU8sR0FBRyxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLEVBQUUsQ0FBQTtJQUMvQixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVELE9BQU87UUFDTCxpRUFBaUU7UUFDakUsb0VBQW9FO1FBQ3BFLG9DQUFvQztRQUNwQyxLQUFLLEVBQUUsT0FBTztLQUNmLENBQUE7QUFDSCxDQUFDLENBQUE7QUFuRlksUUFBQSxrQkFBa0Isc0JBbUY5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXMgKi9cbmltcG9ydCB7IEhhbmRsZXIgfSBmcm9tIFwiYXdzLWxhbWJkYVwiXG5pbXBvcnQgdHlwZSAqIGFzIF9BV1MgZnJvbSBcImF3cy1zZGtcIlxuXG5pbnRlcmZhY2UgU3RhcnREZXBsb3lFeHBlY3RlZElucHV0IHtcbiAgYnVja2V0TmFtZTogc3RyaW5nXG4gIGJ1Y2tldEtleTogc3RyaW5nXG4gIHN0YWNrTmFtZXM6IHN0cmluZ1tdXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgaW5saW5lLWNvbXBpbGVkIGZvciB0aGUgbGFtYmRhLlxuLy8gSXQgbXVzdCBiZSBzZWxmLWNvbnRhaW5lZC5cbmV4cG9ydCBjb25zdCBzdGFydERlcGxveUhhbmRsZXI6IEhhbmRsZXI8XG4gIFBhcnRpYWw8U3RhcnREZXBsb3lFeHBlY3RlZElucHV0PlxuPiA9IGFzeW5jIChldmVudCwgY29udGV4dCkgPT4ge1xuICBjb25zdCBBV1MgPSByZXF1aXJlKFwiYXdzLXNka1wiKVxuXG4gIGNvbnN0IGNvZGVidWlsZCA9IG5ldyBBV1MuQ29kZUJ1aWxkKCkgYXMgX0FXUy5Db2RlQnVpbGRcbiAgY29uc3QgczMgPSBuZXcgQVdTLlMzKCkgYXMgX0FXUy5TM1xuXG4gIGZ1bmN0aW9uIHJlcXVpcmVFbnYobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MuZW52W25hbWVdXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAke25hbWV9YClcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBjb25zdCBwcm9qZWN0TmFtZSA9IHJlcXVpcmVFbnYoXCJQUk9KRUNUX05BTUVcIilcbiAgY29uc3QgYnVja2V0TmFtZSA9IHJlcXVpcmVFbnYoXCJCVUNLRVRfTkFNRVwiKVxuICBjb25zdCBjZGtDb250ZXh0ID0gSlNPTi5wYXJzZShyZXF1aXJlRW52KFwiQ0RLX0NPTlRFWFRcIikpXG5cbiAgLy8gU2luY2Ugd2UgcGFzcyB0aGUgc3RhY2sgbmFtZXMgYXMgc3RyaW5ncyB0byB0aGUgc2hlbGwsXG4gIC8vIGJlIGEgYml0IHJlc3RyaWN0aXZlIG9mIHRoZSB2YWxpZCB2YWx1ZXMgd2UgY2FuIHVzZS5cbiAgY29uc3QgdmFsaWRTdGFja05hbWUgPSAvXlthLXowLTlfXVthLXowLTlcXC1fXSokL2lcblxuICBjb25zdCBzM0tleVByZWZpeCA9IGAke2NvbnRleHQuYXdzUmVxdWVzdElkfS9gXG5cbiAgLy8gVmFsaWRhdGUgdGhlIGlucHV0LlxuICBpZiAoXG4gICAgdHlwZW9mIGV2ZW50LmJ1Y2tldE5hbWUgIT09IFwic3RyaW5nXCIgfHxcbiAgICB0eXBlb2YgZXZlbnQuYnVja2V0S2V5ICE9PSBcInN0cmluZ1wiIHx8XG4gICAgIUFycmF5LmlzQXJyYXkoZXZlbnQuc3RhY2tOYW1lcykgfHxcbiAgICAhZXZlbnQuc3RhY2tOYW1lcy5ldmVyeShcbiAgICAgIChpdCkgPT4gdHlwZW9mIGl0ID09PSBcInN0cmluZ1wiICYmIHZhbGlkU3RhY2tOYW1lLnRlc3QoaXQpLFxuICAgIClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgaW52YWxpZDogXCIgKyBKU09OLnN0cmluZ2lmeShldmVudCwgdW5kZWZpbmVkLCBcIiAgXCIpKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcHV0KG5hbWU6IHN0cmluZywgZGF0YTogQVdTLlMzLkJvZHkpIHtcbiAgICBhd2FpdCBzM1xuICAgICAgLnB1dE9iamVjdCh7XG4gICAgICAgIEJ1Y2tldDogYnVja2V0TmFtZSxcbiAgICAgICAgS2V5OiBgJHtzM0tleVByZWZpeH0ke25hbWV9YCxcbiAgICAgICAgQm9keTogZGF0YSxcbiAgICAgIH0pXG4gICAgICAucHJvbWlzZSgpXG4gIH1cblxuICBhd2FpdCBwdXQoXCJzdGFjay1uYW1lcy50eHRcIiwgZXZlbnQuc3RhY2tOYW1lcy5qb2luKFwiIFwiKSlcbiAgLy8gRW5zdXJlIHRoYXQgd2UgcnVuIHRoZSBzY3JpcHQgdXNpbmcgc2FtZSBmZWF0dXJlIGZsYWdzLlxuICBhd2FpdCBwdXQoXG4gICAgXCJjZGsuanNvblwiLFxuICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGNvbnRleHQ6IGNka0NvbnRleHQsXG4gICAgfSksXG4gIClcblxuICBjb25zdCBidWlsZCA9IGF3YWl0IGNvZGVidWlsZFxuICAgIC5zdGFydEJ1aWxkKHtcbiAgICAgIHByb2plY3ROYW1lLFxuICAgICAgc291cmNlVHlwZU92ZXJyaWRlOiBcIlMzXCIsXG4gICAgICBzb3VyY2VMb2NhdGlvbk92ZXJyaWRlOiBgJHtidWNrZXROYW1lfS8ke3MzS2V5UHJlZml4fWAsXG4gICAgICBzZWNvbmRhcnlTb3VyY2VzT3ZlcnJpZGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiUzNcIixcbiAgICAgICAgICBsb2NhdGlvbjogYCR7ZXZlbnQuYnVja2V0TmFtZX0vJHtldmVudC5idWNrZXRLZXl9YCxcbiAgICAgICAgICBzb3VyY2VJZGVudGlmaWVyOiBcIkNMT1VEQVNTRU1CTFlcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgICAucHJvbWlzZSgpXG5cbiAgY29uc3QgYnVpbGRJZCA9IGJ1aWxkLmJ1aWxkPy5pZFxuICBpZiAoYnVpbGRJZCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBidWlsZCBJRFwiKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBUaGlzIGlzIHRoZSB2YWx1ZSB0aGUgY2FsbGVyIHdpbGwgdXNlIHRvIGZldGNoIHVwZGF0ZWQgc3RhdHVzLlxuICAgIC8vIEF2b2lkIGV4cG9zaW5nIHdoYXQga2luZCBvZiBJRCB0aGlzIGlzLCBiZWNhdXNlIHdlIHNob3VsZCBiZSBmcmVlXG4gICAgLy8gdG8gY2hhbmdlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG4gICAgam9iSWQ6IGJ1aWxkSWQsXG4gIH1cbn1cbiJdfQ==
@@ -1,6 +0,0 @@
1
- import { Handler } from "aws-lambda";
2
- interface StatusExpectedInput {
3
- jobId: string;
4
- }
5
- export declare const statusHandler: Handler<Partial<StatusExpectedInput>>;
6
- export {};
@@ -1,83 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.statusHandler = void 0;
4
- // This function is inline-compiled for the lambda.
5
- // It must be self-contained.
6
- const statusHandler = async (event) => {
7
- const AWS = require("aws-sdk");
8
- function requireEnv(name) {
9
- const value = process.env[name];
10
- if (value === undefined) {
11
- throw new Error(`Missing ${name}`);
12
- }
13
- return value;
14
- }
15
- /**
16
- * Get success status.
17
- *
18
- * A value of true means the job has completed successfully, while
19
- * a value of false means the job did complete but not successfully.
20
- *
21
- * A null value means the job is still in progress and the
22
- * completion status is not yet known.
23
- */
24
- function getSuccess(status) {
25
- if (status == "SUCCEEDED") {
26
- return true;
27
- }
28
- if (status == "IN_PROGRESS") {
29
- return null;
30
- }
31
- return false;
32
- }
33
- async function getBuild(buildId) {
34
- var _a, _b, _c;
35
- const codebuild = new AWS.CodeBuild();
36
- const result = await codebuild.batchGetBuilds({ ids: [buildId] }).promise();
37
- if (((_a = result.builds) === null || _a === void 0 ? void 0 : _a.length) !== 1) {
38
- throw new Error(`Expected 1 item, found ${(_c = (_b = result.builds) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : "unknown"}`);
39
- }
40
- return result.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 cloudwatchlogs = new AWS.CloudWatchLogs();
53
- const data = await cloudwatchlogs
54
- .getLogEvents({
55
- logGroupName: build.logs.groupName,
56
- logStreamName: build.logs.streamName,
57
- startFromHead: true,
58
- })
59
- .promise();
60
- if (data.events == null) {
61
- throw new Error("Failed to fetch log events");
62
- }
63
- // The logs contain newlines, so no need to add more.
64
- return data.events.map((it) => it.message).join("");
65
- }
66
- const projectName = requireEnv("PROJECT_NAME");
67
- // Validate the input.
68
- if (typeof event.jobId !== "string" ||
69
- !event.jobId.startsWith(`${projectName}:`)) {
70
- throw new Error("Input invalid: " + JSON.stringify(event, undefined, " "));
71
- }
72
- const build = await getBuild(event.jobId);
73
- const success = build.buildStatus == null ? null : getSuccess(build.buildStatus);
74
- // Read logs from CloudWatch if completed.
75
- const logs = success != null ? await getLogs(build) : null;
76
- return {
77
- jobId: event.jobId,
78
- success,
79
- logs,
80
- };
81
- };
82
- exports.statusHandler = statusHandler;
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2RrLWRlcGxveS9zdGF0dXMtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSxtREFBbUQ7QUFDbkQsNkJBQTZCO0FBQ3RCLE1BQU0sYUFBYSxHQUEwQyxLQUFLLEVBQ3ZFLEtBQUssRUFDTCxFQUFFO0lBQ0YsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRTlCLFNBQVMsVUFBVSxDQUFDLElBQVk7UUFDOUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMvQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUNwQyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxTQUFTLFVBQVUsQ0FBQyxNQUFnQztRQUNsRCxJQUFJLE1BQU0sSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFFRCxJQUFJLE1BQU0sSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUM1QixPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxLQUFLLFVBQVUsUUFBUSxDQUFDLE9BQWU7O1FBQ3JDLE1BQU0sU0FBUyxHQUFrQixJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQW9CLENBQUE7UUFDdEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRTNFLElBQUksQ0FBQSxNQUFBLE1BQU0sQ0FBQyxNQUFNLDBDQUFFLE1BQU0sTUFBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLDBCQUEwQixNQUFBLE1BQUEsTUFBTSxDQUFDLE1BQU0sMENBQUUsTUFBTSxtQ0FBSSxTQUFTLEVBQUUsQ0FDL0QsQ0FBQTtRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVELEtBQUssVUFBVSxPQUFPLENBQUMsS0FBMEI7UUFDL0MsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtRQUNwRCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUE7UUFDMUMsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBQzNDLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FDbEIsSUFBSSxHQUFHLENBQUMsY0FBYyxFQUF5QixDQUFBO1FBQ2pELE1BQU0sSUFBSSxHQUFHLE1BQU0sY0FBYzthQUM5QixZQUFZLENBQUM7WUFDWixZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQ2xDLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFDcEMsYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FBQzthQUNELE9BQU8sRUFBRSxDQUFBO1FBRVosSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtRQUMvQyxDQUFDO1FBRUQscURBQXFEO1FBQ3JELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDckQsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUU5QyxzQkFBc0I7SUFDdEIsSUFDRSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUMvQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxHQUFHLENBQUMsRUFDMUMsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDN0UsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUV6QyxNQUFNLE9BQU8sR0FDWCxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRWxFLDBDQUEwQztJQUMxQyxNQUFNLElBQUksR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBRTFELE9BQU87UUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsT0FBTztRQUNQLElBQUk7S0FDTCxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBckdZLFFBQUEsYUFBYSxpQkFxR3pCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGwgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlcyAqL1xuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCJhd3MtbGFtYmRhXCJcbmltcG9ydCB0eXBlICogYXMgX0FXUyBmcm9tIFwiYXdzLXNka1wiXG5cbmludGVyZmFjZSBTdGF0dXNFeHBlY3RlZElucHV0IHtcbiAgam9iSWQ6IHN0cmluZ1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGlubGluZS1jb21waWxlZCBmb3IgdGhlIGxhbWJkYS5cbi8vIEl0IG11c3QgYmUgc2VsZi1jb250YWluZWQuXG5leHBvcnQgY29uc3Qgc3RhdHVzSGFuZGxlcjogSGFuZGxlcjxQYXJ0aWFsPFN0YXR1c0V4cGVjdGVkSW5wdXQ+PiA9IGFzeW5jIChcbiAgZXZlbnQsXG4pID0+IHtcbiAgY29uc3QgQVdTID0gcmVxdWlyZShcImF3cy1zZGtcIilcblxuICBmdW5jdGlvbiByZXF1aXJlRW52KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9jZXNzLmVudltuYW1lXVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgJHtuYW1lfWApXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdWNjZXNzIHN0YXR1cy5cbiAgICpcbiAgICogQSB2YWx1ZSBvZiB0cnVlIG1lYW5zIHRoZSBqb2IgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHdoaWxlXG4gICAqIGEgdmFsdWUgb2YgZmFsc2UgbWVhbnMgdGhlIGpvYiBkaWQgY29tcGxldGUgYnV0IG5vdCBzdWNjZXNzZnVsbHkuXG4gICAqXG4gICAqIEEgbnVsbCB2YWx1ZSBtZWFucyB0aGUgam9iIGlzIHN0aWxsIGluIHByb2dyZXNzIGFuZCB0aGVcbiAgICogY29tcGxldGlvbiBzdGF0dXMgaXMgbm90IHlldCBrbm93bi5cbiAgICovXG4gIGZ1bmN0aW9uIGdldFN1Y2Nlc3Moc3RhdHVzOiBBV1MuQ29kZUJ1aWxkLlN0YXR1c1R5cGUpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgaWYgKHN0YXR1cyA9PSBcIlNVQ0NFRURFRFwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPT0gXCJJTl9QUk9HUkVTU1wiKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0QnVpbGQoYnVpbGRJZDogc3RyaW5nKTogUHJvbWlzZTxBV1MuQ29kZUJ1aWxkLkJ1aWxkPiB7XG4gICAgY29uc3QgY29kZWJ1aWxkOiBBV1MuQ29kZUJ1aWxkID0gbmV3IEFXUy5Db2RlQnVpbGQoKSBhcyBfQVdTLkNvZGVCdWlsZFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvZGVidWlsZC5iYXRjaEdldEJ1aWxkcyh7IGlkczogW2J1aWxkSWRdIH0pLnByb21pc2UoKVxuXG4gICAgaWYgKHJlc3VsdC5idWlsZHM/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgMSBpdGVtLCBmb3VuZCAke3Jlc3VsdC5idWlsZHM/Lmxlbmd0aCA/PyBcInVua25vd25cIn1gLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQuYnVpbGRzWzBdXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRMb2dzKGJ1aWxkOiBBV1MuQ29kZUJ1aWxkLkJ1aWxkKSB7XG4gICAgaWYgKGJ1aWxkLmxvZ3MgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBsb2dzIGF0dHJpYnV0ZSBvbiBidWlsZFwiKVxuICAgIH1cblxuICAgIGlmIChidWlsZC5sb2dzLmdyb3VwTmFtZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGxvZyBncm91cE5hbWVcIilcbiAgICB9XG5cbiAgICBpZiAoYnVpbGQubG9ncy5zdHJlYW1OYW1lID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgbG9nIHN0cmVhbU5hbWVcIilcbiAgICB9XG5cbiAgICBjb25zdCBjbG91ZHdhdGNobG9nczogQVdTLkNsb3VkV2F0Y2hMb2dzID1cbiAgICAgIG5ldyBBV1MuQ2xvdWRXYXRjaExvZ3MoKSBhcyBfQVdTLkNsb3VkV2F0Y2hMb2dzXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGNsb3Vkd2F0Y2hsb2dzXG4gICAgICAuZ2V0TG9nRXZlbnRzKHtcbiAgICAgICAgbG9nR3JvdXBOYW1lOiBidWlsZC5sb2dzLmdyb3VwTmFtZSxcbiAgICAgICAgbG9nU3RyZWFtTmFtZTogYnVpbGQubG9ncy5zdHJlYW1OYW1lLFxuICAgICAgICBzdGFydEZyb21IZWFkOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIC5wcm9taXNlKClcblxuICAgIGlmIChkYXRhLmV2ZW50cyA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggbG9nIGV2ZW50c1wiKVxuICAgIH1cblxuICAgIC8vIFRoZSBsb2dzIGNvbnRhaW4gbmV3bGluZXMsIHNvIG5vIG5lZWQgdG8gYWRkIG1vcmUuXG4gICAgcmV0dXJuIGRhdGEuZXZlbnRzLm1hcCgoaXQpID0+IGl0Lm1lc3NhZ2UpLmpvaW4oXCJcIilcbiAgfVxuXG4gIGNvbnN0IHByb2plY3ROYW1lID0gcmVxdWlyZUVudihcIlBST0pFQ1RfTkFNRVwiKVxuXG4gIC8vIFZhbGlkYXRlIHRoZSBpbnB1dC5cbiAgaWYgKFxuICAgIHR5cGVvZiBldmVudC5qb2JJZCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICFldmVudC5qb2JJZC5zdGFydHNXaXRoKGAke3Byb2plY3ROYW1lfTpgKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBpbnZhbGlkOiBcIiArIEpTT04uc3RyaW5naWZ5KGV2ZW50LCB1bmRlZmluZWQsIFwiICBcIikpXG4gIH1cblxuICBjb25zdCBidWlsZCA9IGF3YWl0IGdldEJ1aWxkKGV2ZW50LmpvYklkKVxuXG4gIGNvbnN0IHN1Y2Nlc3MgPVxuICAgIGJ1aWxkLmJ1aWxkU3RhdHVzID09IG51bGwgPyBudWxsIDogZ2V0U3VjY2VzcyhidWlsZC5idWlsZFN0YXR1cylcblxuICAvLyBSZWFkIGxvZ3MgZnJvbSBDbG91ZFdhdGNoIGlmIGNvbXBsZXRlZC5cbiAgY29uc3QgbG9ncyA9IHN1Y2Nlc3MgIT0gbnVsbCA/IGF3YWl0IGdldExvZ3MoYnVpbGQpIDogbnVsbFxuXG4gIHJldHVybiB7XG4gICAgam9iSWQ6IGV2ZW50LmpvYklkLFxuICAgIHN1Y2Nlc3MsXG4gICAgbG9ncyxcbiAgfVxufVxuIl19
@@ -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 {};
@@ -1,41 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EcsUpdateImageArtifactStatus = void 0;
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
- class EcsUpdateImageArtifactStatus {
36
- constructor(props) {
37
- this.artifactPushedAndTagUpdated = props.artifactPushedAndTagUpdated;
38
- }
39
- }
40
- exports.EcsUpdateImageArtifactStatus = EcsUpdateImageArtifactStatus;
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3Qtc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vjcy11cGRhdGUtaW1hZ2UvYXJ0aWZhY3Qtc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFhLDRCQUE0QjtJQUd2QyxZQUFZLEtBQVk7UUFDdEIsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEtBQUssQ0FBQywyQkFBMkIsQ0FBQTtJQUN0RSxDQUFDO0NBQ0Y7QUFORCxvRUFNQyIsInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBQcm9wcyB7XG4gIGFydGlmYWN0UHVzaGVkQW5kVGFnVXBkYXRlZDogYm9vbGVhblxufVxuXG4vKipcbiAqIFRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGlzIGNsYXNzIGlzIHRvIGJlIGEgVmFsdWUgT2JqZWN0IHRvIGNhdXNlXG4gKiBtb3JlIGNvbnNpc3RlbnQgdXNhZ2UgYW5kIHRoZSBpbXBvcnRhbmNlIG9mIGFuIGFydGlmYWN0IGJlaW5nIHB1Ymxpc2hlZC5cbiAqXG4gKiBEdWUgdG8gdGhlIHdheSB3ZSBidWlsZCBhbmQgZGVwbG95IEVDUyBzZXJ2aWNlcywgdGhlIEVDUiBpbWFnZSB3aWxsXG4gKiBub3QgYmUgYXZhaWxhYmxlIGR1cmluZyB0aGUgZmlyc3QgaW5pdGlhbCBhY2NvdW50L3NlcnZpY2UgZGVwbG95bWVudC5cbiAqXG4gKiBUaGlzIGNhdXNlcyB0aGUgZm9sbG93aW5nIHNlcXVlbmNlOlxuICpcbiAqIDEuIFRoZSBFQ1IgcmVwb3NpdG9yeSBtdXN0IGJlIHByb3Zpc2lvbmVkLlxuICpcbiAqIDIuIFRoZSB0YWcgY29udGFpbmVyIG11c3QgYmUgcHJvdmlzaW9uZWQgaW4gZXZlcnkgdGFyZ2V0IGFjY291bnQuXG4gKiAgICBCZWZvcmUgd2UgY2FuIHByb3Zpc2lvbiB0aGUgRUNTIHNlcnZpY2UgdGhpcyBtdXN0IGJlIHVwZGF0ZWRcbiAqICAgIHRvIHJlZmVyZW5jZSBhbiBleGlzdGluZyBhcnRpZmFjdC5cbiAqXG4gKiAzLiBUaGUgYnVpbGQgc3lzdGVtIG11c3QgcHJvZHVjZSBhbmQgdXBsb2FkIGFuIGFydGlmYWN0LlxuICpcbiAqIDQuIFRoZSB0YWcgY29udGFpbmVyIG11c3QgYmUgdXBkYXRlZCBpbiBldmVyeSB0YXJnZXQgYWNjb3VudFxuICogICAgdG8gY29udGFpbiB0aGUgbmV3bHkgYnVpbHQgaW1hZ2UuIFRoaXMgaXMgZWFzaWVzdCBkb25lIGJ5IGFsc29cbiAqICAgIHByb3Zpc2lvbmluZyB0aGUgRUNTIHVwZGF0ZSBpbWFnZSBjb25zdHJ1Y3QgYXMgcGFydCBvZiBzdGVwIDIsXG4gKiAgICB3aXRob3V0IGluY2x1ZGluZyBzZXJ2aWNlIGFuZCB0YXNrIGRlZmluaXRpb24gZGV0YWlscyAod2hpY2hcbiAqICAgIGRvZXMgbm90IGV4aXN0IHlldCBiZWZvcmUgd2UgY2FuIHJlc29sdmUgdGhlIEVDUiBpbWFnZSkuXG4gKiAgICBXaGVuIHRoZSBFQ1MgdXBkYXRlIGltYWdlIGNvbnN0cnVjdCBpcyBwcm92aXNpb25lZCB0aGUgZGVwbG95bWVudFxuICogICAgcGlwZWxpbmUgY2FuIHN0YXJ0IGEgZGVwbG95bWVudCwgd2hpY2ggdW5kZXIgdGhpcyBzdGF0ZSB3aWxsXG4gKiAgICBvbmx5IHN0b3JlIHRoZSB1cGRhdGVkIHRhZyBidXQgY2F1c2Ugbm8gRUNTIHNlcnZpY2UgdXBkYXRlLlxuICpcbiAqIDUuIFRoZSBFQ1Mgc2VydmljZSBjYW4gYmUgcHJvdmlzaW9uZWQsIHdoaWNoIHdpbGwgdXNlIHRoZSBpbWFnZVxuICogICAgcmVmZXJlbmNlIGluIHRoZSB0YWcgY29udGFpbmVyIGFzIHRoZSBmaXJzdCBkZXBsb3ltZW50LlxuICpcbiAqIDYuIFRoZSBuZXh0IHRpbWUgYSBkZXBsb3kgaXMgc3RhcnRlZCwgdGhlIEVDUyBzZXJ2aWNlIHdpbGwgYmUgdXBkYXRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVjc1VwZGF0ZUltYWdlQXJ0aWZhY3RTdGF0dXMge1xuICByZWFkb25seSBhcnRpZmFjdFB1c2hlZEFuZFRhZ1VwZGF0ZWQ6IGJvb2xlYW5cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICB0aGlzLmFydGlmYWN0UHVzaGVkQW5kVGFnVXBkYXRlZCA9IHByb3BzLmFydGlmYWN0UHVzaGVkQW5kVGFnVXBkYXRlZFxuICB9XG59XG4iXX0=
@@ -1,41 +0,0 @@
1
- import * as constructs from "constructs";
2
- import * as ecr from "aws-cdk-lib/aws-ecr";
3
- import * as ecs from "aws-cdk-lib/aws-ecs";
4
- import * as iam from "aws-cdk-lib/aws-iam";
5
- import { EcsUpdateImageTag } from "./tag";
6
- interface Props {
7
- cluster: ecs.ICluster;
8
- service?: ecs.IService;
9
- taskRole?: iam.IRole;
10
- executionRole?: iam.IRole;
11
- /**
12
- * The role that will be granted permission to assume the deploy
13
- * role. This role must have permission to assume the deploy role.
14
- */
15
- callerRoleArn: string;
16
- /**
17
- * The name that will be used for the deploy role. This is the role
18
- * that the caller will assume in order to have permission to invoke
19
- * the Lambda Functions.
20
- */
21
- roleName: string;
22
- startDeployFunctionName: string;
23
- statusFunctionName: string;
24
- tagContainer: EcsUpdateImageTag;
25
- ecrRepository: ecr.IRepository;
26
- }
27
- /**
28
- * Dynamically update image of an ECS Service outside CDK.
29
- *
30
- * This construct sets up a Lambda Function that can be invoked
31
- * from the CD pipeline to update the ECS Service to a new image.
32
- *
33
- * To keep resources in sync, a Secret is used to keep track of
34
- * the current image, which is dynamically resolved in the CloudFormation
35
- * templates to avoid infrastructure changes to cause an older/different
36
- * image to be used.
37
- */
38
- export declare class EcsUpdateImage extends constructs.Construct {
39
- constructor(scope: constructs.Construct, id: string, props: Props);
40
- }
41
- export {};
@@ -1,98 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EcsUpdateImage = void 0;
4
- const constructs = require("constructs");
5
- const iam = require("aws-cdk-lib/aws-iam");
6
- const lambda = require("aws-cdk-lib/aws-lambda");
7
- const cdk = require("aws-cdk-lib");
8
- const start_deploy_handler_1 = require("./start-deploy-handler");
9
- const status_handler_1 = require("./status-handler");
10
- /**
11
- * Dynamically update image of an ECS Service outside CDK.
12
- *
13
- * This construct sets up a Lambda Function that can be invoked
14
- * from the CD pipeline to update the ECS Service to a new image.
15
- *
16
- * To keep resources in sync, a Secret is used to keep track of
17
- * the current image, which is dynamically resolved in the CloudFormation
18
- * templates to avoid infrastructure changes to cause an older/different
19
- * image to be used.
20
- */
21
- class EcsUpdateImage extends constructs.Construct {
22
- constructor(scope, id, props) {
23
- super(scope, id);
24
- const account = cdk.Stack.of(this).account;
25
- const region = cdk.Stack.of(this).region;
26
- const roleToBeAssumed = new iam.Role(this, "Role", {
27
- roleName: props.roleName,
28
- assumedBy: new iam.ArnPrincipal(props.callerRoleArn),
29
- });
30
- const startDeployFn = new lambda.Function(this, "StartDeployFunction", {
31
- functionName: props.startDeployFunctionName,
32
- code: new lambda.InlineCode(`exports.handler = ${start_deploy_handler_1.startDeployHandler.toString()};`),
33
- runtime: lambda.Runtime.NODEJS_16_X,
34
- handler: "index.handler",
35
- timeout: cdk.Duration.seconds(60),
36
- environment: {
37
- CLUSTER_NAME: props.cluster.clusterName,
38
- SERVICE_NAME: props.service == null ? "" : props.service.serviceName,
39
- REPOSITORY_URL: props.ecrRepository.repositoryUri,
40
- ECR_TAG_SECRET_ARN: props.tagContainer.secretArn,
41
- },
42
- reservedConcurrentExecutions: 1,
43
- });
44
- startDeployFn.grantInvoke(roleToBeAssumed);
45
- props.tagContainer.grantUpdate(startDeployFn);
46
- if (props.service != null) {
47
- startDeployFn.addToRolePolicy(new iam.PolicyStatement({
48
- actions: [
49
- "ecs:DeregisterTaskDefinition",
50
- "ecs:DescribeServices",
51
- "ecs:DescribeTaskDefinition",
52
- "ecs:DescribeTasks",
53
- "ecs:ListTasks",
54
- "ecs:ListTaskDefinitions",
55
- "ecs:RegisterTaskDefinition",
56
- ],
57
- resources: ["*"],
58
- }));
59
- startDeployFn.addToRolePolicy(new iam.PolicyStatement({
60
- actions: ["ecs:UpdateService"],
61
- resources: [
62
- `arn:aws:ecs:${region}:${account}:service/${props.cluster.clusterName}/${props.service.serviceName}`,
63
- ],
64
- }));
65
- }
66
- if (props.taskRole != null) {
67
- props.taskRole.grantPassRole(startDeployFn.role);
68
- }
69
- if (props.executionRole != null) {
70
- props.executionRole.grantPassRole(startDeployFn.role);
71
- }
72
- const statusFn = new lambda.Function(this, "StatusFunction", {
73
- functionName: props.statusFunctionName,
74
- code: new lambda.InlineCode(`exports.handler = ${status_handler_1.statusHandler.toString()};`),
75
- runtime: lambda.Runtime.NODEJS_16_X,
76
- handler: "index.handler",
77
- timeout: cdk.Duration.seconds(60),
78
- environment: {
79
- CLUSTER_NAME: props.cluster.clusterName,
80
- SERVICE_NAME: props.service == null ? "" : props.service.serviceName,
81
- },
82
- });
83
- statusFn.grantInvoke(roleToBeAssumed);
84
- statusFn.addToRolePolicy(new iam.PolicyStatement({
85
- actions: [
86
- "ecs:DeregisterTaskDefinition",
87
- "ecs:DescribeServices",
88
- "ecs:DescribeTaskDefinition",
89
- "ecs:DescribeTasks",
90
- "ecs:ListTasks",
91
- "ecs:ListTaskDefinitions",
92
- ],
93
- resources: ["*"],
94
- }));
95
- }
96
- }
97
- exports.EcsUpdateImage = EcsUpdateImage;
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLXVwZGF0ZS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lY3MtdXBkYXRlLWltYWdlL2Vjcy11cGRhdGUtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXdDO0FBR3hDLDJDQUEwQztBQUMxQyxpREFBZ0Q7QUFDaEQsbUNBQWtDO0FBQ2xDLGlFQUEyRDtBQUMzRCxxREFBZ0Q7QUF5QmhEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLGNBQWUsU0FBUSxVQUFVLENBQUMsU0FBUztJQUN0RCxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQVk7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDMUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFBO1FBRXhDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2pELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7U0FDckQsQ0FBQyxDQUFBO1FBRUYsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUNyRSxZQUFZLEVBQUUsS0FBSyxDQUFDLHVCQUF1QjtZQUMzQyxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUN6QixxQkFBcUIseUNBQWtCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FDdEQ7WUFDRCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxX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QkFBc0I7Z0JBQ3RCLDRCQUE0QjtnQkFDNUIsbUJBQW1CO2dCQUNuQixlQUFlO2dCQUNmLHlCQUF5QjthQUMxQjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQWhHRCx3Q0FnR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCAqIGFzIGVjciBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjclwiXG5pbXBvcnQgKiBhcyBlY3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IHN0YXJ0RGVwbG95SGFuZGxlciB9IGZyb20gXCIuL3N0YXJ0LWRlcGxveS1oYW5kbGVyXCJcbmltcG9ydCB7IHN0YXR1c0hhbmRsZXIgfSBmcm9tIFwiLi9zdGF0dXMtaGFuZGxlclwiXG5pbXBvcnQgeyBFY3NVcGRhdGVJbWFnZVRhZyB9IGZyb20gXCIuL3RhZ1wiXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNsdXN0ZXI6IGVjcy5JQ2x1c3RlclxuICBzZXJ2aWNlPzogZWNzLklTZXJ2aWNlXG4gIHRhc2tSb2xlPzogaWFtLklSb2xlXG4gIGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGVcbiAgLyoqXG4gICAqIFRoZSByb2xlIHRoYXQgd2lsbCBiZSBncmFudGVkIHBlcm1pc3Npb24gdG8gYXNzdW1lIHRoZSBkZXBsb3lcbiAgICogcm9sZS4gVGhpcyByb2xlIG11c3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFzc3VtZSB0aGUgZGVwbG95IHJvbGUuXG4gICAqL1xuICBjYWxsZXJSb2xlQXJuOiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgZGVwbG95IHJvbGUuIFRoaXMgaXMgdGhlIHJvbGVcbiAgICogdGhhdCB0aGUgY2FsbGVyIHdpbGwgYXNzdW1lIGluIG9yZGVyIHRvIGhhdmUgcGVybWlzc2lvbiB0byBpbnZva2VcbiAgICogdGhlIExhbWJkYSBGdW5jdGlvbnMuXG4gICAqL1xuICByb2xlTmFtZTogc3RyaW5nXG4gIHN0YXJ0RGVwbG95RnVuY3Rpb25OYW1lOiBzdHJpbmdcbiAgc3RhdHVzRnVuY3Rpb25OYW1lOiBzdHJpbmdcbiAgdGFnQ29udGFpbmVyOiBFY3NVcGRhdGVJbWFnZVRhZ1xuICBlY3JSZXBvc2l0b3J5OiBlY3IuSVJlcG9zaXRvcnlcbn1cblxuLyoqXG4gKiBEeW5hbWljYWxseSB1cGRhdGUgaW1hZ2Ugb2YgYW4gRUNTIFNlcnZpY2Ugb3V0c2lkZSBDREsuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3Qgc2V0cyB1cCBhIExhbWJkYSBGdW5jdGlvbiB0aGF0IGNhbiBiZSBpbnZva2VkXG4gKiBmcm9tIHRoZSBDRCBwaXBlbGluZSB0byB1cGRhdGUgdGhlIEVDUyBTZXJ2aWNlIHRvIGEgbmV3IGltYWdlLlxuICpcbiAqIFRvIGtlZXAgcmVzb3VyY2VzIGluIHN5bmMsIGEgU2VjcmV0IGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZlxuICogdGhlIGN1cnJlbnQgaW1hZ2UsIHdoaWNoIGlzIGR5bmFtaWNhbGx5IHJlc29sdmVkIGluIHRoZSBDbG91ZEZvcm1hdGlvblxuICogdGVtcGxhdGVzIHRvIGF2b2lkIGluZnJhc3RydWN0dXJlIGNoYW5nZXMgdG8gY2F1c2UgYW4gb2xkZXIvZGlmZmVyZW50XG4gKiBpbWFnZSB0byBiZSB1c2VkLlxuICovXG5leHBvcnQgY2xhc3MgRWNzVXBkYXRlSW1hZ2UgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgYWNjb3VudCA9IGNkay5TdGFjay5vZih0aGlzKS5hY2NvdW50XG4gICAgY29uc3QgcmVnaW9uID0gY2RrLlN0YWNrLm9mKHRoaXMpLnJlZ2lvblxuXG4gICAgY29uc3Qgcm9sZVRvQmVBc3N1bWVkID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiUm9sZVwiLCB7XG4gICAgICByb2xlTmFtZTogcHJvcHMucm9sZU5hbWUsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uQXJuUHJpbmNpcGFsKHByb3BzLmNhbGxlclJvbGVBcm4pLFxuICAgIH0pXG5cbiAgICBjb25zdCBzdGFydERlcGxveUZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCBcIlN0YXJ0RGVwbG95RnVuY3Rpb25cIiwge1xuICAgICAgZnVuY3Rpb25OYW1lOiBwcm9wcy5zdGFydERlcGxveUZ1bmN0aW9uTmFtZSxcbiAgICAgIGNvZGU6IG5ldyBsYW1iZGEuSW5saW5lQ29kZShcbiAgICAgICAgYGV4cG9ydHMuaGFuZGxlciA9ICR7c3RhcnREZXBsb3lIYW5kbGVyLnRvU3RyaW5nKCl9O2AsXG4gICAgICApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENMVVNURVJfTkFNRTogcHJvcHMuY2x1c3Rlci5jbHVzdGVyTmFtZSxcbiAgICAgICAgU0VSVklDRV9OQU1FOiBwcm9wcy5zZXJ2aWNlID09IG51bGwgPyBcIlwiIDogcHJvcHMuc2VydmljZS5zZXJ2aWNlTmFtZSxcbiAgICAgICAgUkVQT1NJVE9SWV9VUkw6IHByb3BzLmVjclJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaSxcbiAgICAgICAgRUNSX1RBR19TRUNSRVRfQVJOOiBwcm9wcy50YWdDb250YWluZXIuc2VjcmV0QXJuLFxuICAgICAgfSxcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IDEsXG4gICAgfSlcblxuICAgIHN0YXJ0RGVwbG95Rm4uZ3JhbnRJbnZva2Uocm9sZVRvQmVBc3N1bWVkKVxuICAgIHByb3BzLnRhZ0NvbnRhaW5lci5ncmFudFVwZGF0ZShzdGFydERlcGxveUZuKVxuXG4gICAgaWYgKHByb3BzLnNlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgc3RhcnREZXBsb3lGbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcImVjczpEZXJlZ2lzdGVyVGFza0RlZmluaXRpb25cIixcbiAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlU2VydmljZXNcIixcbiAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza0RlZmluaXRpb25cIixcbiAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza3NcIixcbiAgICAgICAgICAgIFwiZWNzOkxpc3RUYXNrc1wiLFxuICAgICAgICAgICAgXCJlY3M6TGlzdFRhc2tEZWZpbml0aW9uc1wiLFxuICAgICAgICAgICAgXCJlY3M6UmVnaXN0ZXJUYXNrRGVmaW5pdGlvblwiLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICB9KSxcbiAgICAgIClcblxuICAgICAgc3RhcnREZXBsb3lGbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJlY3M6VXBkYXRlU2VydmljZVwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOmVjczoke3JlZ2lvbn06JHthY2NvdW50fTpzZXJ2aWNlLyR7cHJvcHMuY2x1c3Rlci5jbHVzdGVyTmFtZX0vJHtwcm9wcy5zZXJ2aWNlLnNlcnZpY2VOYW1lfWAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRhc2tSb2xlICE9IG51bGwpIHtcbiAgICAgIHByb3BzLnRhc2tSb2xlLmdyYW50UGFzc1JvbGUoc3RhcnREZXBsb3lGbi5yb2xlISlcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZXhlY3V0aW9uUm9sZSAhPSBudWxsKSB7XG4gICAgICBwcm9wcy5leGVjdXRpb25Sb2xlLmdyYW50UGFzc1JvbGUoc3RhcnREZXBsb3lGbi5yb2xlISlcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXNGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgXCJTdGF0dXNGdW5jdGlvblwiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IHByb3BzLnN0YXR1c0Z1bmN0aW9uTmFtZSxcbiAgICAgIGNvZGU6IG5ldyBsYW1iZGEuSW5saW5lQ29kZShcbiAgICAgICAgYGV4cG9ydHMuaGFuZGxlciA9ICR7c3RhdHVzSGFuZGxlci50b1N0cmluZygpfTtgLFxuICAgICAgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBDTFVTVEVSX05BTUU6IHByb3BzLmNsdXN0ZXIuY2x1c3Rlck5hbWUsXG4gICAgICAgIFNFUlZJQ0VfTkFNRTogcHJvcHMuc2VydmljZSA9PSBudWxsID8gXCJcIiA6IHByb3BzLnNlcnZpY2Uuc2VydmljZU5hbWUsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBzdGF0dXNGbi5ncmFudEludm9rZShyb2xlVG9CZUFzc3VtZWQpXG5cbiAgICBzdGF0dXNGbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImVjczpEZXJlZ2lzdGVyVGFza0RlZmluaXRpb25cIixcbiAgICAgICAgICBcImVjczpEZXNjcmliZVNlcnZpY2VzXCIsXG4gICAgICAgICAgXCJlY3M6RGVzY3JpYmVUYXNrRGVmaW5pdGlvblwiLFxuICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza3NcIixcbiAgICAgICAgICBcImVjczpMaXN0VGFza3NcIixcbiAgICAgICAgICBcImVjczpMaXN0VGFza0RlZmluaXRpb25zXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pLFxuICAgIClcbiAgfVxufVxuIl19
@@ -1,3 +0,0 @@
1
- export { EcsUpdateImageArtifactStatus } from "./artifact-status";
2
- export { EcsUpdateImage } from "./ecs-update-image";
3
- export { EcsUpdateImageTag } from "./tag";
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EcsUpdateImageTag = exports.EcsUpdateImage = exports.EcsUpdateImageArtifactStatus = void 0;
4
- var artifact_status_1 = require("./artifact-status");
5
- Object.defineProperty(exports, "EcsUpdateImageArtifactStatus", { enumerable: true, get: function () { return artifact_status_1.EcsUpdateImageArtifactStatus; } });
6
- var ecs_update_image_1 = require("./ecs-update-image");
7
- Object.defineProperty(exports, "EcsUpdateImage", { enumerable: true, get: function () { return ecs_update_image_1.EcsUpdateImage; } });
8
- var tag_1 = require("./tag");
9
- Object.defineProperty(exports, "EcsUpdateImageTag", { enumerable: true, get: function () { return tag_1.EcsUpdateImageTag; } });
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWNzLXVwZGF0ZS1pbWFnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBZ0U7QUFBdkQsK0hBQUEsNEJBQTRCLE9BQUE7QUFDckMsdURBQW1EO0FBQTFDLGtIQUFBLGNBQWMsT0FBQTtBQUN2Qiw2QkFBeUM7QUFBaEMsd0dBQUEsaUJBQWlCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBFY3NVcGRhdGVJbWFnZUFydGlmYWN0U3RhdHVzIH0gZnJvbSBcIi4vYXJ0aWZhY3Qtc3RhdHVzXCJcbmV4cG9ydCB7IEVjc1VwZGF0ZUltYWdlIH0gZnJvbSBcIi4vZWNzLXVwZGF0ZS1pbWFnZVwiXG5leHBvcnQgeyBFY3NVcGRhdGVJbWFnZVRhZyB9IGZyb20gXCIuL3RhZ1wiXG4iXX0=
@@ -1,6 +0,0 @@
1
- import type { Handler } from "aws-lambda";
2
- interface ExpectedInput {
3
- tag: string;
4
- }
5
- export declare const startDeployHandler: Handler<Partial<ExpectedInput>>;
6
- export {};
@@ -1,104 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startDeployHandler = void 0;
4
- // This function is inline-compiled for the lambda.
5
- // It must be self-contained.
6
- const startDeployHandler = async (event) => {
7
- const AWS = require("aws-sdk");
8
- const ecs = new AWS.ECS();
9
- const sm = new AWS.SecretsManager();
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
- async function getService(clusterName, serviceName) {
18
- var _a;
19
- const services = await ecs
20
- .describeServices({
21
- cluster: clusterName,
22
- services: [serviceName],
23
- })
24
- .promise();
25
- if (((_a = services.services) === null || _a === void 0 ? void 0 : _a.length) !== 1) {
26
- throw new Error(`Service not found: ${clusterName}/${serviceName}`);
27
- }
28
- return services.services[0];
29
- }
30
- async function getTaskDefinition(taskDefinition) {
31
- return (await ecs
32
- .describeTaskDefinition({
33
- taskDefinition: taskDefinition,
34
- })
35
- .promise()).taskDefinition;
36
- }
37
- async function updateServiceToImage(clusterName, serviceName, image) {
38
- console.log(`Cluster name: ${clusterName}`);
39
- console.log(`Service name: ${serviceName}`);
40
- const service = await getService(clusterName, serviceName);
41
- const prevTaskDefinition = await getTaskDefinition(service.taskDefinition);
42
- // Don't bother updating the service if the image is already the latest.
43
- const prevImage = prevTaskDefinition.containerDefinitions[0].image;
44
- if (prevImage === image) {
45
- return;
46
- }
47
- console.log(`Updating image for service '${serviceName}' from '${prevImage}' to '${image}'`);
48
- const exclude = [
49
- "registeredAt",
50
- "registeredBy",
51
- "compatibilities",
52
- "requiresAttributes",
53
- "revision",
54
- "status",
55
- "taskDefinitionArn",
56
- ];
57
- const updatedSpec = {
58
- ...Object.fromEntries(Object.entries(prevTaskDefinition).filter(([key]) => !exclude.includes(key))),
59
- containerDefinitions: [
60
- {
61
- ...prevTaskDefinition.containerDefinitions[0],
62
- image,
63
- },
64
- ],
65
- };
66
- const updatedTaskDefinition = (await ecs.registerTaskDefinition(updatedSpec).promise()).taskDefinition;
67
- await ecs
68
- .updateService({
69
- cluster: clusterName,
70
- service: serviceName,
71
- taskDefinition: updatedTaskDefinition.taskDefinitionArn,
72
- })
73
- .promise();
74
- console.log("Service is updated");
75
- }
76
- const clusterName = requireEnv("CLUSTER_NAME");
77
- const serviceName = requireEnv("SERVICE_NAME");
78
- const repositoryUrl = requireEnv("REPOSITORY_URL");
79
- const ecrTagSecretArn = requireEnv("ECR_TAG_SECRET_ARN");
80
- // Validate the input.
81
- if (typeof event.tag !== "string") {
82
- throw new Error("Input invalid: " + JSON.stringify(event, undefined, " "));
83
- }
84
- // Register tag as current target.
85
- // This is needed so that CloudFormation deployments, e.g.
86
- // updates to the Task Definition, will use the same image.
87
- await sm
88
- .updateSecret({
89
- SecretId: ecrTagSecretArn,
90
- SecretString: JSON.stringify({
91
- tag: event.tag,
92
- }),
93
- })
94
- .promise();
95
- // Update the service if we know the service name. This is unknown
96
- // during initial deployment of the stack.
97
- if (serviceName !== "") {
98
- const image = `${repositoryUrl}:${event.tag}`;
99
- await updateServiceToImage(clusterName, serviceName, image);
100
- }
101
- return {};
102
- };
103
- exports.startDeployHandler = startDeployHandler;
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtZGVwbG95LWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWNzLXVwZGF0ZS1pbWFnZS9zdGFydC1kZXBsb3ktaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhQSxtREFBbUQ7QUFDbkQsNkJBQTZCO0FBQ3RCLE1BQU0sa0JBQWtCLEdBQW9DLEtBQUssRUFDdEUsS0FBSyxFQUNMLEVBQUU7SUFDRixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDOUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFjLENBQUE7SUFDckMsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsY0FBYyxFQUF5QixDQUFBO0lBRTFELFNBQVMsVUFBVSxDQUFDLElBQVk7UUFDOUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMvQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUNwQyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsS0FBSyxVQUFVLFVBQVUsQ0FDdkIsV0FBbUIsRUFDbkIsV0FBbUI7O1FBRW5CLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRzthQUN2QixnQkFBZ0IsQ0FBQztZQUNoQixPQUFPLEVBQUUsV0FBVztZQUNwQixRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUM7U0FDeEIsQ0FBQzthQUNELE9BQU8sRUFBRSxDQUFBO1FBRVosSUFBSSxDQUFBLE1BQUEsUUFBUSxDQUFDLFFBQVEsMENBQUUsTUFBTSxNQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLFdBQVcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLENB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SUFDM0QsTUFBTSxFQUFFO1NBQ0wsWUFBWSxDQUFDO1FBQ1osUUFBUSxFQUFFLGVBQWU7UUFDekIsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDM0IsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1NBQ2YsQ0FBQztLQUNILENBQUM7U0FDRCxPQUFPLEVBQUUsQ0FBQTtJQUVaLGtFQUFrRTtJQUNsRSwwQ0FBMEM7SUFDMUMsSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdkIsTUFBTSxLQUFLLEdBQUcsR0FBRyxhQUFhLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQzdDLE1BQU0sb0JBQW9CLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0lBRUQsT0FBTyxFQUFFLENBQUE7QUFDWCxDQUFDLENBQUE7QUF2SVksUUFBQSxrQkFBa0Isc0JBdUk5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzICovXG5pbXBvcnQgdHlwZSB7IEhhbmRsZXIgfSBmcm9tIFwiYXdzLWxhbWJkYVwiXG5pbXBvcnQgdHlwZSAqIGFzIF9BV1MgZnJvbSBcImF3cy1zZGtcIlxuaW1wb3J0IHsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvblJlcXVlc3QgfSBmcm9tIFwiYXdzLXNkay9jbGllbnRzL2Vjc1wiXG5cbmludGVyZmFjZSBFeHBlY3RlZElucHV0IHtcbiAgdGFnOiBzdHJpbmdcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBpbmxpbmUtY29tcGlsZWQgZm9yIHRoZSBsYW1iZGEuXG4vLyBJdCBtdXN0IGJlIHNlbGYtY29udGFpbmVkLlxuZXhwb3J0IGNvbnN0IHN0YXJ0RGVwbG95SGFuZGxlcjogSGFuZGxlcjxQYXJ0aWFsPEV4cGVjdGVkSW5wdXQ+PiA9IGFzeW5jIChcbiAgZXZlbnQsXG4pID0+IHtcbiAgY29uc3QgQVdTID0gcmVxdWlyZShcImF3cy1zZGtcIilcbiAgY29uc3QgZWNzID0gbmV3IEFXUy5FQ1MoKSBhcyBfQVdTLkVDU1xuICBjb25zdCBzbSA9IG5ldyBBV1MuU2VjcmV0c01hbmFnZXIoKSBhcyBfQVdTLlNlY3JldHNNYW5hZ2VyXG5cbiAgZnVuY3Rpb24gcmVxdWlyZUVudihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZbbmFtZV1cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICR7bmFtZX1gKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldFNlcnZpY2UoXG4gICAgY2x1c3Rlck5hbWU6IHN0cmluZyxcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPEFXUy5FQ1MuU2VydmljZT4ge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gYXdhaXQgZWNzXG4gICAgICAuZGVzY3JpYmVTZXJ2aWNlcyh7XG4gICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgICAgICBzZXJ2aWNlczogW3NlcnZpY2VOYW1lXSxcbiAgICAgIH0pXG4gICAgICAucHJvbWlzZSgpXG5cbiAgICBpZiAoc2VydmljZXMuc2VydmljZXM/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2aWNlIG5vdCBmb3VuZDogJHtjbHVzdGVyTmFtZX0vJHtzZXJ2aWNlTmFtZX1gKVxuICAgIH1cblxuICAgIHJldHVybiBzZXJ2aWNlcy5zZXJ2aWNlc1swXVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0VGFza0RlZmluaXRpb24oXG4gICAgdGFza0RlZmluaXRpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxBV1MuRUNTLlRhc2tEZWZpbml0aW9uPiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IGVjc1xuICAgICAgICAuZGVzY3JpYmVUYXNrRGVmaW5pdGlvbih7XG4gICAgICAgICAgdGFza0RlZmluaXRpb246IHRhc2tEZWZpbml0aW9uLFxuICAgICAgICB9KVxuICAgICAgICAucHJvbWlzZSgpXG4gICAgKS50YXNrRGVmaW5pdGlvbiFcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVNlcnZpY2VUb0ltYWdlKFxuICAgIGNsdXN0ZXJOYW1lOiBzdHJpbmcsXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICBpbWFnZTogc3RyaW5nLFxuICApIHtcbiAgICBjb25zb2xlLmxvZyhgQ2x1c3RlciBuYW1lOiAke2NsdXN0ZXJOYW1lfWApXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgbmFtZTogJHtzZXJ2aWNlTmFtZX1gKVxuXG4gICAgY29uc3Qgc2VydmljZSA9IGF3YWl0IGdldFNlcnZpY2UoY2x1c3Rlck5hbWUsIHNlcnZpY2VOYW1lKVxuICAgIGNvbnN0IHByZXZUYXNrRGVmaW5pdGlvbiA9IGF3YWl0IGdldFRhc2tEZWZpbml0aW9uKHNlcnZpY2UudGFza0RlZmluaXRpb24hKVxuXG4gICAgLy8gRG9uJ3QgYm90aGVyIHVwZGF0aW5nIHRoZSBzZXJ2aWNlIGlmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IHRoZSBsYXRlc3QuXG4gICAgY29uc3QgcHJldkltYWdlID0gcHJldlRhc2tEZWZpbml0aW9uLmNvbnRhaW5lckRlZmluaXRpb25zIVswXS5pbWFnZSFcbiAgICBpZiAocHJldkltYWdlID09PSBpbWFnZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgVXBkYXRpbmcgaW1hZ2UgZm9yIHNlcnZpY2UgJyR7c2VydmljZU5hbWV9JyBmcm9tICcke3ByZXZJbWFnZX0nIHRvICcke2ltYWdlfSdgLFxuICAgIClcblxuICAgIGNvbnN0IGV4Y2x1ZGUgPSBbXG4gICAgICBcInJlZ2lzdGVyZWRBdFwiLFxuICAgICAgXCJyZWdpc3RlcmVkQnlcIixcbiAgICAgIFwiY29tcGF0aWJpbGl0aWVzXCIsXG4gICAgICBcInJlcXVpcmVzQXR0cmlidXRlc1wiLFxuICAgICAgXCJyZXZpc2lvblwiLFxuICAgICAgXCJzdGF0dXNcIixcbiAgICAgIFwidGFza0RlZmluaXRpb25Bcm5cIixcbiAgICBdXG5cbiAgICBjb25zdCB1cGRhdGVkU3BlYzogUmVnaXN0ZXJUYXNrRGVmaW5pdGlvblJlcXVlc3QgPSB7XG4gICAgICAuLi5PYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHByZXZUYXNrRGVmaW5pdGlvbikuZmlsdGVyKFxuICAgICAgICAgIChba2V5XSkgPT4gIWV4Y2x1ZGUuaW5jbHVkZXMoa2V5KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgICBjb250YWluZXJEZWZpbml0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4ucHJldlRhc2tEZWZpbml0aW9uLmNvbnRhaW5lckRlZmluaXRpb25zIVswXSxcbiAgICAgICAgICBpbWFnZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSBhcyBSZWdpc3RlclRhc2tEZWZpbml0aW9uUmVxdWVzdFxuXG4gICAgY29uc3QgdXBkYXRlZFRhc2tEZWZpbml0aW9uID0gKFxuICAgICAgYXdhaXQgZWNzLnJlZ2lzdGVyVGFza0RlZmluaXRpb24odXBkYXRlZFNwZWMpLnByb21pc2UoKVxuICAgICkudGFza0RlZmluaXRpb24hXG5cbiAgICBhd2FpdCBlY3NcbiAgICAgIC51cGRhdGVTZXJ2aWNlKHtcbiAgICAgICAgY2x1c3RlcjogY2x1c3Rlck5hbWUsXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VOYW1lLFxuICAgICAgICB0YXNrRGVmaW5pdGlvbjogdXBkYXRlZFRhc2tEZWZpbml0aW9uLnRhc2tEZWZpbml0aW9uQXJuLFxuICAgICAgfSlcbiAgICAgIC5wcm9taXNlKClcblxuICAgIGNvbnNvbGUubG9nKFwiU2VydmljZSBpcyB1cGRhdGVkXCIpXG4gIH1cblxuICBjb25zdCBjbHVzdGVyTmFtZSA9IHJlcXVpcmVFbnYoXCJDTFVTVEVSX05BTUVcIilcbiAgY29uc3Qgc2VydmljZU5hbWUgPSByZXF1aXJlRW52KFwiU0VSVklDRV9OQU1FXCIpXG4gIGNvbnN0IHJlcG9zaXRvcnlVcmwgPSByZXF1aXJlRW52KFwiUkVQT1NJVE9SWV9VUkxcIilcbiAgY29uc3QgZWNyVGFnU2VjcmV0QXJuID0gcmVxdWlyZUVudihcIkVDUl9UQUdfU0VDUkVUX0FSTlwiKVxuXG4gIC8vIFZhbGlkYXRlIHRoZSBpbnB1dC5cbiAgaWYgKHR5cGVvZiBldmVudC50YWcgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBpbnZhbGlkOiBcIiArIEpTT04uc3RyaW5naWZ5KGV2ZW50LCB1bmRlZmluZWQsIFwiICBcIikpXG4gIH1cblxuICAvLyBSZWdpc3RlciB0YWcgYXMgY3VycmVudCB0YXJnZXQuXG4gIC8vIFRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgQ2xvdWRGb3JtYXRpb24gZGVwbG95bWVudHMsIGUuZy5cbiAgLy8gdXBkYXRlcyB0byB0aGUgVGFzayBEZWZpbml0aW9uLCB3aWxsIHVzZSB0aGUgc2FtZSBpbWFnZS5cbiAgYXdhaXQgc21cbiAgICAudXBkYXRlU2VjcmV0KHtcbiAgICAgIFNlY3JldElkOiBlY3JUYWdTZWNyZXRBcm4sXG4gICAgICBTZWNyZXRTdHJpbmc6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdGFnOiBldmVudC50YWcsXG4gICAgICB9KSxcbiAgICB9KVxuICAgIC5wcm9taXNlKClcblxuICAvLyBVcGRhdGUgdGhlIHNlcnZpY2UgaWYgd2Uga25vdyB0aGUgc2VydmljZSBuYW1lLiBUaGlzIGlzIHVua25vd25cbiAgLy8gZHVyaW5nIGluaXRpYWwgZGVwbG95bWVudCBvZiB0aGUgc3RhY2suXG4gIGlmIChzZXJ2aWNlTmFtZSAhPT0gXCJcIikge1xuICAgIGNvbnN0IGltYWdlID0gYCR7cmVwb3NpdG9yeVVybH06JHtldmVudC50YWd9YFxuICAgIGF3YWl0IHVwZGF0ZVNlcnZpY2VUb0ltYWdlKGNsdXN0ZXJOYW1lLCBzZXJ2aWNlTmFtZSwgaW1hZ2UpXG4gIH1cblxuICByZXR1cm4ge31cbn1cbiJdfQ==
@@ -1,11 +0,0 @@
1
- import type { Handler } from "aws-lambda";
2
- interface Response {
3
- /**
4
- * The tag is unknown when the stack is not yet fully set up
5
- * during initial account/service deployment.
6
- */
7
- currentTag: string | null;
8
- stabilized: boolean;
9
- }
10
- export declare const statusHandler: Handler<unknown, Response>;
11
- export {};