@cloudsnorkel/cdk-github-runners 0.3.0 → 0.4.0

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 (48) hide show
  1. package/.gitattributes +3 -0
  2. package/.jsii +1488 -374
  3. package/API.md +1174 -86
  4. package/README.md +19 -17
  5. package/lib/index.d.ts +2 -1
  6. package/lib/index.js +4 -1
  7. package/lib/lambdas/aws-image-builder-versioner/index.js +2469 -0
  8. package/lib/lambdas/build-image/index.js +77 -43
  9. package/lib/lambdas/delete-runner/index.js +4276 -2096
  10. package/lib/lambdas/setup/index.html +37 -0
  11. package/lib/lambdas/setup/index.js +166 -266
  12. package/lib/lambdas/status/index.js +4311 -2101
  13. package/lib/lambdas/token-retriever/index.js +4276 -2096
  14. package/lib/lambdas/update-lambda/index.js +5 -2
  15. package/lib/lambdas/webhook-handler/index.js +11 -5
  16. package/lib/providers/codebuild.d.ts +5 -1
  17. package/lib/providers/codebuild.js +16 -6
  18. package/lib/providers/common.d.ts +28 -1
  19. package/lib/providers/common.js +4 -4
  20. package/lib/providers/docker-images/codebuild/linux-arm64/Dockerfile +5 -1
  21. package/lib/providers/docker-images/codebuild/linux-x64/Dockerfile +5 -1
  22. package/lib/providers/docker-images/fargate/linux-arm64/Dockerfile +5 -1
  23. package/lib/providers/docker-images/fargate/linux-x64/Dockerfile +5 -1
  24. package/lib/providers/docker-images/lambda/linux-arm64/Dockerfile +4 -0
  25. package/lib/providers/docker-images/lambda/linux-x64/Dockerfile +4 -0
  26. package/lib/providers/fargate.d.ts +5 -1
  27. package/lib/providers/fargate.js +3 -3
  28. package/lib/providers/image-builders/codebuild.d.ts +10 -2
  29. package/lib/providers/image-builders/codebuild.js +20 -5
  30. package/lib/providers/image-builders/container.d.ts +220 -0
  31. package/lib/providers/image-builders/container.js +508 -0
  32. package/lib/providers/image-builders/static.js +2 -3
  33. package/lib/providers/lambda.d.ts +5 -1
  34. package/lib/providers/lambda.js +19 -8
  35. package/lib/runner.d.ts +54 -7
  36. package/lib/runner.js +59 -21
  37. package/lib/secrets.js +1 -1
  38. package/lib/utils.js +2 -2
  39. package/package.json +34 -15
  40. package/setup/index.html +12 -0
  41. package/setup/src/App.svelte +291 -0
  42. package/setup/src/app.scss +15 -0
  43. package/setup/src/main.ts +8 -0
  44. package/setup/src/vite-env.d.ts +2 -0
  45. package/setup/svelte.config.mjs +7 -0
  46. package/setup/tsconfig.json +21 -0
  47. package/setup/tsconfig.node.json +8 -0
  48. package/setup/vite.config.ts +15 -0
@@ -17,7 +17,10 @@ var __copyProps = (to, from, except, desc) => {
17
17
  }
18
18
  return to;
19
19
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
21
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
25
 
23
26
  // src/lambdas/build-image/index.ts
@@ -26,17 +29,63 @@ __export(build_image_exports, {
26
29
  handler: () => handler
27
30
  });
28
31
  module.exports = __toCommonJS(build_image_exports);
32
+ var AWS2 = __toESM(require("aws-sdk"));
33
+
34
+ // src/lambdas/helpers.ts
29
35
  var AWS = __toESM(require("aws-sdk"));
30
- var codebuild = new AWS.CodeBuild();
31
- var ecr = new AWS.ECR();
36
+ var sm = new AWS.SecretsManager();
37
+ async function customResourceRespond(event, responseStatus, reason, physicalResourceId, data) {
38
+ const responseBody = JSON.stringify({
39
+ Status: responseStatus,
40
+ Reason: reason,
41
+ PhysicalResourceId: physicalResourceId,
42
+ StackId: event.StackId,
43
+ RequestId: event.RequestId,
44
+ LogicalResourceId: event.LogicalResourceId,
45
+ NoEcho: false,
46
+ Data: data
47
+ });
48
+ console.log("Responding", responseBody);
49
+ const parsedUrl = require("url").parse(event.ResponseURL);
50
+ const requestOptions = {
51
+ hostname: parsedUrl.hostname,
52
+ path: parsedUrl.path,
53
+ method: "PUT",
54
+ headers: {
55
+ "content-type": "",
56
+ "content-length": responseBody.length
57
+ }
58
+ };
59
+ return new Promise((resolve, reject) => {
60
+ try {
61
+ const request = require("https").request(requestOptions, resolve);
62
+ request.on("error", reject);
63
+ request.write(responseBody);
64
+ request.end();
65
+ } catch (e) {
66
+ reject(e);
67
+ }
68
+ });
69
+ }
70
+
71
+ // src/lambdas/build-image/index.ts
72
+ var codebuild = new AWS2.CodeBuild();
73
+ var ecr = new AWS2.ECR();
74
+ var ib = new AWS2.Imagebuilder();
32
75
  async function handler(event, context) {
33
76
  try {
34
- console.log(JSON.stringify(event));
77
+ console.log(JSON.stringify({ ...event, ResponseURL: "..." }));
78
+ const deleteOnly = event.ResourceProperties.DeleteOnly;
35
79
  const repoName = event.ResourceProperties.RepoName;
36
80
  const projectName = event.ResourceProperties.ProjectName;
81
+ const ibName = event.ResourceProperties.ImageBuilderName;
37
82
  switch (event.RequestType) {
38
83
  case "Create":
39
84
  case "Update":
85
+ if (deleteOnly) {
86
+ await customResourceRespond(event, "SUCCESS", "OK", "Deleter", {});
87
+ break;
88
+ }
40
89
  console.log(`Starting CodeBuild project ${projectName}`);
41
90
  await codebuild.startBuild({
42
91
  projectName,
@@ -65,54 +114,39 @@ async function handler(event, context) {
65
114
  }).promise();
66
115
  break;
67
116
  case "Delete":
68
- const images = await ecr.listImages({ repositoryName: repoName, maxResults: 100 }).promise();
69
- if (images.imageIds && images.imageIds.length > 0) {
117
+ const ecrImages = await ecr.listImages({ repositoryName: repoName, maxResults: 100 }).promise();
118
+ if (ecrImages.imageIds && ecrImages.imageIds.length > 0) {
70
119
  await ecr.batchDeleteImage({
71
- imageIds: images.imageIds.map((i) => {
120
+ imageIds: ecrImages.imageIds.map((i) => {
72
121
  return { imageDigest: i.imageDigest };
73
122
  }),
74
123
  repositoryName: repoName
75
124
  }).promise();
76
125
  }
77
- await respond("SUCCESS", "OK", event.PhysicalResourceId, {});
126
+ if (ibName) {
127
+ const ibImages = await ib.listImages({ filters: [{ name: "name", values: [ibName] }] }).promise();
128
+ if (ibImages.imageVersionList) {
129
+ for (const v of ibImages.imageVersionList) {
130
+ if (v.arn) {
131
+ const ibImageVersions = await ib.listImageBuildVersions({ imageVersionArn: v.arn }).promise();
132
+ if (ibImageVersions.imageSummaryList) {
133
+ for (const vs of ibImageVersions.imageSummaryList) {
134
+ if (vs.arn) {
135
+ console.log(`Deleting ${vs.arn}`);
136
+ await ib.deleteImage({ imageBuildVersionArn: vs.arn }).promise();
137
+ }
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ await customResourceRespond(event, "SUCCESS", "OK", event.PhysicalResourceId, {});
78
145
  break;
79
146
  }
80
147
  } catch (e) {
81
- console.log(e);
82
- await respond("FAILED", e.message || "Internal Error", context.logStreamName, {});
83
- }
84
- function respond(responseStatus, reason, physicalResourceId, data) {
85
- const responseBody = JSON.stringify({
86
- Status: responseStatus,
87
- Reason: reason,
88
- PhysicalResourceId: physicalResourceId,
89
- StackId: event.StackId,
90
- RequestId: event.RequestId,
91
- LogicalResourceId: event.LogicalResourceId,
92
- NoEcho: false,
93
- Data: data
94
- });
95
- console.log("Responding", responseBody);
96
- const parsedUrl = require("url").parse(event.ResponseURL);
97
- const requestOptions = {
98
- hostname: parsedUrl.hostname,
99
- path: parsedUrl.path,
100
- method: "PUT",
101
- headers: {
102
- "content-type": "",
103
- "content-length": responseBody.length
104
- }
105
- };
106
- return new Promise((resolve, reject) => {
107
- try {
108
- const request = require("https").request(requestOptions, resolve);
109
- request.on("error", reject);
110
- request.write(responseBody);
111
- request.end();
112
- } catch (e) {
113
- reject(e);
114
- }
115
- });
148
+ console.error(e);
149
+ await customResourceRespond(event, "FAILED", e.message || "Internal Error", context.logStreamName, {});
116
150
  }
117
151
  }
118
152
  // Annotate the CommonJS export names for ESM import in node: