@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.
- package/.gitattributes +3 -0
- package/.jsii +1488 -374
- package/API.md +1174 -86
- package/README.md +19 -17
- package/lib/index.d.ts +2 -1
- package/lib/index.js +4 -1
- package/lib/lambdas/aws-image-builder-versioner/index.js +2469 -0
- package/lib/lambdas/build-image/index.js +77 -43
- package/lib/lambdas/delete-runner/index.js +4276 -2096
- package/lib/lambdas/setup/index.html +37 -0
- package/lib/lambdas/setup/index.js +166 -266
- package/lib/lambdas/status/index.js +4311 -2101
- package/lib/lambdas/token-retriever/index.js +4276 -2096
- package/lib/lambdas/update-lambda/index.js +5 -2
- package/lib/lambdas/webhook-handler/index.js +11 -5
- package/lib/providers/codebuild.d.ts +5 -1
- package/lib/providers/codebuild.js +16 -6
- package/lib/providers/common.d.ts +28 -1
- package/lib/providers/common.js +4 -4
- package/lib/providers/docker-images/codebuild/linux-arm64/Dockerfile +5 -1
- package/lib/providers/docker-images/codebuild/linux-x64/Dockerfile +5 -1
- package/lib/providers/docker-images/fargate/linux-arm64/Dockerfile +5 -1
- package/lib/providers/docker-images/fargate/linux-x64/Dockerfile +5 -1
- package/lib/providers/docker-images/lambda/linux-arm64/Dockerfile +4 -0
- package/lib/providers/docker-images/lambda/linux-x64/Dockerfile +4 -0
- package/lib/providers/fargate.d.ts +5 -1
- package/lib/providers/fargate.js +3 -3
- package/lib/providers/image-builders/codebuild.d.ts +10 -2
- package/lib/providers/image-builders/codebuild.js +20 -5
- package/lib/providers/image-builders/container.d.ts +220 -0
- package/lib/providers/image-builders/container.js +508 -0
- package/lib/providers/image-builders/static.js +2 -3
- package/lib/providers/lambda.d.ts +5 -1
- package/lib/providers/lambda.js +19 -8
- package/lib/runner.d.ts +54 -7
- package/lib/runner.js +59 -21
- package/lib/secrets.js +1 -1
- package/lib/utils.js +2 -2
- package/package.json +34 -15
- package/setup/index.html +12 -0
- package/setup/src/App.svelte +291 -0
- package/setup/src/app.scss +15 -0
- package/setup/src/main.ts +8 -0
- package/setup/src/vite-env.d.ts +2 -0
- package/setup/svelte.config.mjs +7 -0
- package/setup/tsconfig.json +21 -0
- package/setup/tsconfig.node.json +8 -0
- 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(
|
|
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
|
|
31
|
-
|
|
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
|
|
69
|
-
if (
|
|
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:
|
|
120
|
+
imageIds: ecrImages.imageIds.map((i) => {
|
|
72
121
|
return { imageDigest: i.imageDigest };
|
|
73
122
|
}),
|
|
74
123
|
repositoryName: repoName
|
|
75
124
|
}).promise();
|
|
76
125
|
}
|
|
77
|
-
|
|
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.
|
|
82
|
-
await
|
|
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:
|