@cloudsnorkel/cdk-github-runners 0.13.4 → 0.14.1

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 (47) hide show
  1. package/.jsii +100 -100
  2. package/API.md +5 -9
  3. package/README.md +51 -6
  4. package/assets/image-builders/aws-image-builder/delete-resources.lambda/index.js +209 -0
  5. package/assets/image-builders/build-image.lambda/index.js +0 -24
  6. package/assets/providers/lambda-bootstrap.sh +21 -0
  7. package/assets/providers/lambda-runner.sh +37 -0
  8. package/lib/access.js +1 -1
  9. package/lib/image-builders/api.js +1 -1
  10. package/lib/image-builders/aws-image-builder/ami.d.ts +8 -0
  11. package/lib/image-builders/aws-image-builder/ami.js +3 -1
  12. package/lib/image-builders/aws-image-builder/builder.d.ts +2 -0
  13. package/lib/image-builders/aws-image-builder/builder.js +108 -68
  14. package/lib/image-builders/aws-image-builder/common.js +1 -1
  15. package/lib/image-builders/aws-image-builder/container.d.ts +6 -0
  16. package/lib/image-builders/aws-image-builder/container.js +3 -1
  17. package/lib/image-builders/aws-image-builder/delete-resources-function.d.ts +13 -0
  18. package/lib/image-builders/aws-image-builder/delete-resources-function.js +23 -0
  19. package/lib/image-builders/aws-image-builder/delete-resources.lambda.d.ts +9 -0
  20. package/lib/image-builders/aws-image-builder/delete-resources.lambda.js +159 -0
  21. package/lib/image-builders/aws-image-builder/deprecated/ami.d.ts +2 -2
  22. package/lib/image-builders/aws-image-builder/deprecated/ami.js +18 -37
  23. package/lib/image-builders/aws-image-builder/deprecated/container.js +13 -35
  24. package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +1 -1
  25. package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
  26. package/lib/image-builders/aws-image-builder/workflow.js +2 -1
  27. package/lib/image-builders/build-image.lambda.d.ts +1 -3
  28. package/lib/image-builders/build-image.lambda.js +1 -25
  29. package/lib/image-builders/codebuild-deprecated.js +3 -3
  30. package/lib/image-builders/codebuild.js +2 -2
  31. package/lib/image-builders/components.js +8 -9
  32. package/lib/image-builders/static.js +1 -1
  33. package/lib/providers/codebuild.js +2 -2
  34. package/lib/providers/common.js +5 -4
  35. package/lib/providers/ec2.js +19 -3
  36. package/lib/providers/ecs.js +1 -1
  37. package/lib/providers/fargate.js +2 -2
  38. package/lib/providers/lambda.d.ts +1 -3
  39. package/lib/providers/lambda.js +5 -16
  40. package/lib/runner.js +1 -1
  41. package/lib/secrets.js +1 -1
  42. package/package.json +22 -21
  43. package/assets/image-builders/aws-image-builder/delete-ami.lambda/index.js +0 -129
  44. package/lib/image-builders/aws-image-builder/delete-ami-function.d.ts +0 -13
  45. package/lib/image-builders/aws-image-builder/delete-ami-function.js +0 -23
  46. package/lib/image-builders/aws-image-builder/delete-ami.lambda.d.ts +0 -2
  47. package/lib/image-builders/aws-image-builder/delete-ami.lambda.js +0 -70
package/API.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  An AMI builder that uses AWS Image Builder to build AMIs pre-baked with all the GitHub Actions runner requirements.
10
10
 
11
- Builders can be used with {@link Ec2Runner }.
11
+ Builders can be used with {@link Ec2RunnerProvider }.
12
12
 
13
13
  Each builder re-runs automatically at a set interval to make sure the AMIs contain the latest versions of everything.
14
14
 
@@ -197,7 +197,7 @@ Any object.
197
197
 
198
198
  ##### ~~`node`~~<sup>Required</sup> <a name="node" id="@cloudsnorkel/cdk-github-runners.AmiBuilder.property.node"></a>
199
199
 
200
- - *Deprecated:* use RunnerImageBuilder
200
+ - *Deprecated:* use RunnerImageBuilder, e.g. with Ec2RunnerProvider.imageBuilder()
201
201
 
202
202
  ```typescript
203
203
  public readonly node: Node;
@@ -211,7 +211,7 @@ The tree node.
211
211
 
212
212
  ##### ~~`connections`~~<sup>Required</sup> <a name="connections" id="@cloudsnorkel/cdk-github-runners.AmiBuilder.property.connections"></a>
213
213
 
214
- - *Deprecated:* use RunnerImageBuilder
214
+ - *Deprecated:* use RunnerImageBuilder, e.g. with Ec2RunnerProvider.imageBuilder()
215
215
 
216
216
  ```typescript
217
217
  public readonly connections: Connections;
@@ -3876,7 +3876,7 @@ You can customize the OS, architecture, VPC, subnet, security groups, etc. by pa
3876
3876
 
3877
3877
  You can add components to the image builder by calling `imageBuilder.addComponent()`.
3878
3878
 
3879
- The default OS is Amazon Linux 2 running on x64 architecture.
3879
+ The default OS is Amazon Linux 2023 running on x64 architecture.
3880
3880
 
3881
3881
  Included components:
3882
3882
  * `RunnerImageComponent.requiredPackages()`
@@ -3887,8 +3887,6 @@ Included components:
3887
3887
  * `RunnerImageComponent.githubRunner()`
3888
3888
  * `RunnerImageComponent.lambdaEntrypoint()`
3889
3889
 
3890
- Base Docker image: `public.ecr.aws/lambda/nodejs:20-x86_64` or `public.ecr.aws/lambda/nodejs:20-arm64`
3891
-
3892
3890
  ###### `scope`<sup>Required</sup> <a name="scope" id="@cloudsnorkel/cdk-github-runners.LambdaRunner.imageBuilder.parameter.scope"></a>
3893
3891
 
3894
3892
  - *Type:* constructs.Construct
@@ -4242,7 +4240,7 @@ You can customize the OS, architecture, VPC, subnet, security groups, etc. by pa
4242
4240
 
4243
4241
  You can add components to the image builder by calling `imageBuilder.addComponent()`.
4244
4242
 
4245
- The default OS is Amazon Linux 2 running on x64 architecture.
4243
+ The default OS is Amazon Linux 2023 running on x64 architecture.
4246
4244
 
4247
4245
  Included components:
4248
4246
  * `RunnerImageComponent.requiredPackages()`
@@ -4253,8 +4251,6 @@ Included components:
4253
4251
  * `RunnerImageComponent.githubRunner()`
4254
4252
  * `RunnerImageComponent.lambdaEntrypoint()`
4255
4253
 
4256
- Base Docker image: `public.ecr.aws/lambda/nodejs:20-x86_64` or `public.ecr.aws/lambda/nodejs:20-arm64`
4257
-
4258
4254
  ###### `scope`<sup>Required</sup> <a name="scope" id="@cloudsnorkel/cdk-github-runners.LambdaRunnerProvider.imageBuilder.parameter.scope"></a>
4259
4255
 
4260
4256
  - *Type:* constructs.Construct
package/README.md CHANGED
@@ -65,9 +65,14 @@ You can also create your own provider by implementing `IRunnerProvider`.
65
65
  ```
66
66
  ### Use
67
67
  ```python
68
+ from aws_cdk import App, Stack
68
69
  from cloudsnorkel.cdk_github_runners import GitHubRunners
69
70
 
70
- GitHubRunners(self, "runners")
71
+ app = App()
72
+ stack = Stack(app, "github-runners")
73
+ GitHubRunners(stack, "runners")
74
+
75
+ app.synth()
71
76
  ```
72
77
  </details>
73
78
  <details><summary>TypeScript or JavaScript</summary>
@@ -79,9 +84,14 @@ You can also create your own provider by implementing `IRunnerProvider`.
79
84
  ```
80
85
  ### Use
81
86
  ```typescript
87
+ import { App, Stack } from 'aws-cdk-lib';
82
88
  import { GitHubRunners } from '@cloudsnorkel/cdk-github-runners';
83
89
 
84
- new GitHubRunners(this, "runners");
90
+ const app = new App();
91
+ const stack = new Stack(app, 'github-runners');
92
+ new GitHubRunners(stack, 'runners');
93
+
94
+ app.synth();
85
95
  ```
86
96
  </details>
87
97
  <details><summary>Java</summary>
@@ -96,9 +106,19 @@ You can also create your own provider by implementing `IRunnerProvider`.
96
106
  ```
97
107
  ### Use
98
108
  ```java
109
+ import software.amazon.awscdk.App;
110
+ import software.amazon.awscdk.Stack;
99
111
  import com.cloudsnorkel.cdk.github.runners.GitHubRunners;
100
112
 
101
- GitHubRunners.Builder.create(this, "runners").build();
113
+ public class Example {
114
+ public static void main(String[] args){
115
+ App app = new App();
116
+ Stack stack = new Stack(app, "github-runners");
117
+ GitHubRunners.Builder.create(stack, "runners").build();
118
+
119
+ app.synth();
120
+ }
121
+ }
102
122
  ```
103
123
  </details>
104
124
  <details><summary>Go</summary>
@@ -110,9 +130,21 @@ You can also create your own provider by implementing `IRunnerProvider`.
110
130
  ```
111
131
  ### Use
112
132
  ```go
113
- import "github.com/CloudSnorkel/cdk-github-runners-go/cloudsnorkelcdkgithubrunners"
133
+ package main
134
+
135
+ import (
136
+ "github.com/CloudSnorkel/cdk-github-runners-go/cloudsnorkelcdkgithubrunners"
137
+ "github.com/aws/aws-cdk-go/awscdk/v2"
138
+ "github.com/aws/jsii-runtime-go"
139
+ )
140
+
141
+ func main() {
142
+ app := awscdk.NewApp(nil)
143
+ stack := awscdk.NewStack(app, jsii.String("github-runners"), &awscdk.StackProps{})
144
+ cloudsnorkelcdkgithubrunners.NewGitHubRunners(stack, jsii.String("runners"), &cloudsnorkelcdkgithubrunners.GitHubRunnersProps{})
114
145
 
115
- NewGitHubRunners(this, jsii.String("runners"))
146
+ app.Synth(nil)
147
+ }
116
148
  ```
117
149
  </details>
118
150
  <details><summary>.NET</summary>
@@ -124,9 +156,22 @@ You can also create your own provider by implementing `IRunnerProvider`.
124
156
  ```
125
157
  ### Use
126
158
  ```csharp
159
+ using Amazon.CDK;
127
160
  using CloudSnorkel;
128
161
 
129
- new GitHubRunners(this, "runners");
162
+ namespace Example
163
+ {
164
+ sealed class Program
165
+ {
166
+ public static void Main(string[] args)
167
+ {
168
+ var app = new App();
169
+ var stack = new Stack(app, "github-runners");
170
+ new GitHubRunners(stack, "runners");
171
+ app.Synth();
172
+ }
173
+ }
174
+ }
130
175
  ```
131
176
  </details>
132
177
  2. Use `GitHubRunners` construct in your code (starting with default arguments is fine)
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/image-builders/aws-image-builder/delete-resources.lambda.ts
21
+ var delete_resources_lambda_exports = {};
22
+ __export(delete_resources_lambda_exports, {
23
+ handler: () => handler
24
+ });
25
+ module.exports = __toCommonJS(delete_resources_lambda_exports);
26
+ var import_client_ec2 = require("@aws-sdk/client-ec2");
27
+ var import_client_ecr = require("@aws-sdk/client-ecr");
28
+ var import_client_imagebuilder = require("@aws-sdk/client-imagebuilder");
29
+
30
+ // src/lambda-helpers.ts
31
+ var import_client_secrets_manager = require("@aws-sdk/client-secrets-manager");
32
+ var sm = new import_client_secrets_manager.SecretsManagerClient();
33
+ async function customResourceRespond(event, responseStatus, reason, physicalResourceId, data) {
34
+ const responseBody = JSON.stringify({
35
+ Status: responseStatus,
36
+ Reason: reason,
37
+ PhysicalResourceId: physicalResourceId,
38
+ StackId: event.StackId,
39
+ RequestId: event.RequestId,
40
+ LogicalResourceId: event.LogicalResourceId,
41
+ NoEcho: false,
42
+ Data: data
43
+ });
44
+ console.log("Responding", responseBody);
45
+ const parsedUrl = require("url").parse(event.ResponseURL);
46
+ const requestOptions = {
47
+ hostname: parsedUrl.hostname,
48
+ path: parsedUrl.path,
49
+ method: "PUT",
50
+ headers: {
51
+ "content-type": "",
52
+ "content-length": responseBody.length
53
+ }
54
+ };
55
+ return new Promise((resolve, reject) => {
56
+ try {
57
+ const request = require("https").request(requestOptions, resolve);
58
+ request.on("error", reject);
59
+ request.write(responseBody);
60
+ request.end();
61
+ } catch (e) {
62
+ reject(e);
63
+ }
64
+ });
65
+ }
66
+
67
+ // src/image-builders/aws-image-builder/delete-resources.lambda.ts
68
+ var ec2 = new import_client_ec2.EC2Client();
69
+ var ecr = new import_client_ecr.ECRClient();
70
+ var ib = new import_client_imagebuilder.ImagebuilderClient();
71
+ async function deleteResources(props) {
72
+ const buildsToDelete = [];
73
+ const amisToDelete = [];
74
+ const dockerImagesToDelete = [];
75
+ let result = {};
76
+ do {
77
+ result = await ib.send(new import_client_imagebuilder.ListImageBuildVersionsCommand({
78
+ imageVersionArn: props.ImageVersionArn,
79
+ nextToken: result.nextToken
80
+ }));
81
+ if (result.imageSummaryList) {
82
+ for (const image of result.imageSummaryList) {
83
+ if (image.arn) {
84
+ buildsToDelete.push(image.arn);
85
+ }
86
+ for (const output of image.outputResources?.amis ?? []) {
87
+ if (output.image) {
88
+ amisToDelete.push(output.image);
89
+ }
90
+ }
91
+ for (const output of image.outputResources?.containers ?? []) {
92
+ if (output.imageUris) {
93
+ dockerImagesToDelete.push(...output.imageUris);
94
+ }
95
+ }
96
+ }
97
+ }
98
+ } while (result.nextToken);
99
+ for (const imageId of amisToDelete) {
100
+ try {
101
+ console.log({
102
+ notice: "Deleting AMI",
103
+ image: imageId
104
+ });
105
+ const imageDesc = await ec2.send(new import_client_ec2.DescribeImagesCommand({
106
+ Owners: ["self"],
107
+ ImageIds: [imageId]
108
+ }));
109
+ if (imageDesc.Images?.length !== 1) {
110
+ console.warn({
111
+ notice: "Unable to find AMI",
112
+ image: imageId
113
+ });
114
+ continue;
115
+ }
116
+ await ec2.send(new import_client_ec2.DeregisterImageCommand({
117
+ ImageId: imageId
118
+ }));
119
+ for (const blockMapping of imageDesc.Images[0].BlockDeviceMappings ?? []) {
120
+ if (blockMapping.Ebs?.SnapshotId) {
121
+ console.log({
122
+ notice: "Deleting EBS snapshot",
123
+ image: imageId,
124
+ snapshot: blockMapping.Ebs.SnapshotId
125
+ });
126
+ await ec2.send(new import_client_ec2.DeleteSnapshotCommand({
127
+ SnapshotId: blockMapping.Ebs.SnapshotId
128
+ }));
129
+ }
130
+ }
131
+ } catch (e) {
132
+ console.warn({
133
+ notice: "Failed to delete AMI",
134
+ image: imageId,
135
+ error: e
136
+ });
137
+ }
138
+ }
139
+ for (const image of dockerImagesToDelete) {
140
+ try {
141
+ console.log({
142
+ notice: "Deleting Docker Image",
143
+ image
144
+ });
145
+ const parts = image.split("/")[1].split(":");
146
+ const repo = parts[0];
147
+ const tag = parts[1];
148
+ await ecr.send(new import_client_ecr.BatchDeleteImageCommand({
149
+ repositoryName: repo,
150
+ imageIds: [
151
+ {
152
+ imageTag: tag
153
+ }
154
+ ]
155
+ }));
156
+ } catch (e) {
157
+ console.warn({
158
+ notice: "Failed to delete docker image",
159
+ image,
160
+ error: e
161
+ });
162
+ }
163
+ }
164
+ for (const build of buildsToDelete) {
165
+ try {
166
+ console.log({
167
+ notice: "Deleting Image Build",
168
+ build
169
+ });
170
+ await ib.send(new import_client_imagebuilder.DeleteImageCommand({
171
+ imageBuildVersionArn: build
172
+ }));
173
+ } catch (e) {
174
+ console.warn({
175
+ notice: "Failed to delete image version build",
176
+ build,
177
+ error: e
178
+ });
179
+ }
180
+ }
181
+ }
182
+ async function handler(event, _context) {
183
+ try {
184
+ console.log({
185
+ ...event,
186
+ ResponseURL: "..."
187
+ });
188
+ const props = event.ResourceProperties;
189
+ switch (event.RequestType) {
190
+ case "Create":
191
+ case "Update":
192
+ await customResourceRespond(event, "SUCCESS", "OK", props.ImageVersionArn, {});
193
+ break;
194
+ case "Delete":
195
+ if (event.PhysicalResourceId != "FAIL") {
196
+ await deleteResources(props);
197
+ }
198
+ await customResourceRespond(event, "SUCCESS", "OK", event.PhysicalResourceId, {});
199
+ break;
200
+ }
201
+ } catch (e) {
202
+ console.error(e);
203
+ await customResourceRespond(event, "FAILED", e.message || "Internal Error", "FAIL", {});
204
+ }
205
+ }
206
+ // Annotate the CommonJS export names for ESM import in node:
207
+ 0 && (module.exports = {
208
+ handler
209
+ });
@@ -24,7 +24,6 @@ __export(build_image_lambda_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(build_image_lambda_exports);
26
26
  var import_client_codebuild = require("@aws-sdk/client-codebuild");
27
- var import_client_imagebuilder = require("@aws-sdk/client-imagebuilder");
28
27
 
29
28
  // src/lambda-helpers.ts
30
29
  var import_client_secrets_manager = require("@aws-sdk/client-secrets-manager");
@@ -65,7 +64,6 @@ async function customResourceRespond(event, responseStatus, reason, physicalReso
65
64
 
66
65
  // src/image-builders/build-image.lambda.ts
67
66
  var codebuild = new import_client_codebuild.CodeBuildClient();
68
- var ib = new import_client_imagebuilder.ImagebuilderClient();
69
67
  async function handler(event, context) {
70
68
  try {
71
69
  console.log({ ...event, ResponseURL: "..." });
@@ -73,10 +71,6 @@ async function handler(event, context) {
73
71
  switch (event.RequestType) {
74
72
  case "Create":
75
73
  case "Update":
76
- if (props.DeleteOnly) {
77
- await customResourceRespond(event, "SUCCESS", "OK", "Deleter", {});
78
- break;
79
- }
80
74
  console.log(`Starting CodeBuild project ${props.ProjectName}`);
81
75
  const cbRes = await codebuild.send(new import_client_codebuild.StartBuildCommand({
82
76
  projectName: props.ProjectName,
@@ -91,24 +85,6 @@ async function handler(event, context) {
91
85
  await customResourceRespond(event, "SUCCESS", "OK", cbRes.build?.id ?? "build", {});
92
86
  break;
93
87
  case "Delete":
94
- if (props.ImageBuilderName) {
95
- const ibImages = await ib.send(new import_client_imagebuilder.ListImagesCommand({ filters: [{ name: "name", values: [props.ImageBuilderName] }] }));
96
- if (ibImages.imageVersionList) {
97
- for (const v of ibImages.imageVersionList) {
98
- if (v.arn) {
99
- const ibImageVersions = await ib.send(new import_client_imagebuilder.ListImageBuildVersionsCommand({ imageVersionArn: v.arn }));
100
- if (ibImageVersions.imageSummaryList) {
101
- for (const vs of ibImageVersions.imageSummaryList) {
102
- if (vs.arn) {
103
- console.log(`Deleting ${vs.arn}`);
104
- await ib.send(new import_client_imagebuilder.DeleteImageCommand({ imageBuildVersionArn: vs.arn }));
105
- }
106
- }
107
- }
108
- }
109
- }
110
- }
111
- }
112
88
  await customResourceRespond(event, "SUCCESS", "OK", event.PhysicalResourceId, {});
113
89
  break;
114
90
  }
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+
3
+ set -euo pipefail
4
+
5
+ while true
6
+ do
7
+ # get data from lambda
8
+ HEADERS="$(mktemp)"
9
+ EVENT_DATA=$(curl -sS -LD "$HEADERS" "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/next")
10
+ REQUEST_ID=$(grep -Fi Lambda-Runtime-Aws-Request-Id "$HEADERS" | tr -d '[:space:]' | cut -d: -f2)
11
+
12
+ # execute runner and respond
13
+ if bash /runner.sh "$EVENT_DATA"; then
14
+ curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQUEST_ID/response" -d ""
15
+ else
16
+ curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQUEST_ID/error" -d "{\"errorMessage\": \"Runner failed with exit code $?\", \"errorType\": \"Error\", \"stackTrace\": []}"
17
+ fi
18
+
19
+ # cleanup
20
+ find /tmp -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
21
+ done
@@ -0,0 +1,37 @@
1
+ #!/bin/bash
2
+
3
+ set -euo pipefail
4
+
5
+ # workaround for "Cannot get required symbol EVP_rc2_cbc from libssl"
6
+ # lambda docker image for node.js comes with stripped down libssl.so pushed in LD_LIBRARY_PATH
7
+ if [ -f /var/lang/lib/libssl.so ]; then
8
+ export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH
9
+ fi
10
+
11
+ # extract parameters
12
+ OWNER=$(echo "$1" | jq -r .owner)
13
+ REPO=$(echo "$1" | jq -r .repo)
14
+ GITHUB_DOMAIN=$(echo "$1" | jq -r .githubDomain)
15
+ RUNNER_TOKEN=$(echo "$1" | jq -r .token)
16
+ RUNNER_NAME=$(echo "$1" | jq -r .runnerName)
17
+ RUNNER_LABEL=$(echo "$1" | jq -r .label)
18
+ REGISTRATION_URL=$(echo "$1" | jq -r .registrationUrl)
19
+
20
+ # copy runner code (it needs a writable directory)
21
+ cp -r /home/runner /tmp/
22
+ cd /tmp/runner
23
+
24
+ # setup home directory
25
+ mkdir /tmp/home
26
+ export HOME=/tmp/home
27
+
28
+ # start runner
29
+ if [ "${RUNNER_VERSION}" = "latest" ]; then RUNNER_FLAGS=""; else RUNNER_FLAGS="--disableupdate"; fi
30
+ ./config.sh --unattended --url "${REGISTRATION_URL}" --token "${RUNNER_TOKEN}" --ephemeral --work _work --labels "${RUNNER_LABEL},cdkghr:started:`date +%s`" --name "${RUNNER_NAME}" ${RUNNER_FLAGS}
31
+ echo Config done
32
+ ./run.sh
33
+ echo Run done
34
+
35
+ # print status for metrics
36
+ STATUS=$(grep -Phors "finish job request for job [0-9a-f\-]+ with result: \K.*" _diag/ | tail -n1)
37
+ [ -n "$STATUS" ] && echo CDKGHA JOB DONE "$RUNNER_LABEL" "$STATUS"
package/lib/access.js CHANGED
@@ -59,7 +59,7 @@ class LambdaAccess {
59
59
  }
60
60
  exports.LambdaAccess = LambdaAccess;
61
61
  _a = JSII_RTTI_SYMBOL_1;
62
- LambdaAccess[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.LambdaAccess", version: "0.13.4" };
62
+ LambdaAccess[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.LambdaAccess", version: "0.14.1" };
63
63
  /**
64
64
  * @internal
65
65
  */
@@ -43,5 +43,5 @@ class RunnerImageBuilder extends common_1.RunnerImageBuilderBase {
43
43
  }
44
44
  exports.RunnerImageBuilder = RunnerImageBuilder;
45
45
  _a = JSII_RTTI_SYMBOL_1;
46
- RunnerImageBuilder[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.RunnerImageBuilder", version: "0.13.4" };
46
+ RunnerImageBuilder[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.RunnerImageBuilder", version: "0.14.1" };
47
47
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltYWdlLWJ1aWxkZXJzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUEwQztBQUUxQywyREFBd0U7QUFDeEUsMkNBQTBEO0FBQzFELHFDQUFvSTtBQUNwSSw0Q0FBa0M7QUFFbEM7Ozs7OztHQU1HO0FBQ0gsTUFBc0Isa0JBQW1CLFNBQVEsK0JBQXNCO0lBQ3JFOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN0RSxJQUFJLEtBQUssRUFBRSxVQUFVLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdDLHlCQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxrSEFBa0gsQ0FBQyxDQUFDO1FBQ3ZKLENBQUM7UUFFRCxJQUFJLEtBQUssRUFBRSxXQUFXLEtBQUssK0JBQXNCLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0QsT0FBTyxJQUFJLHVDQUEyQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLElBQUksS0FBSyxFQUFFLFdBQVcsS0FBSywrQkFBc0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNFLE9BQU8sSUFBSSxxREFBaUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxJQUFJLGNBQUUsQ0FBQyxZQUFZLENBQUM7UUFDeEMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLHVDQUEyQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxjQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUkscURBQWlDLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDOztBQXZCSCxnREF3QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbm5vdGF0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXdzSW1hZ2VCdWlsZGVyUnVubmVySW1hZ2VCdWlsZGVyIH0gZnJvbSAnLi9hd3MtaW1hZ2UtYnVpbGRlcic7XG5pbXBvcnQgeyBDb2RlQnVpbGRSdW5uZXJJbWFnZUJ1aWxkZXIgfSBmcm9tICcuL2NvZGVidWlsZCc7XG5pbXBvcnQgeyBJQ29uZmlndXJhYmxlUnVubmVySW1hZ2VCdWlsZGVyLCBSdW5uZXJJbWFnZUJ1aWxkZXJCYXNlLCBSdW5uZXJJbWFnZUJ1aWxkZXJQcm9wcywgUnVubmVySW1hZ2VCdWlsZGVyVHlwZSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IE9zIH0gZnJvbSAnLi4vcHJvdmlkZXJzJztcblxuLyoqXG4gKiBHaXRIdWIgUnVubmVyIGltYWdlIGJ1aWxkZXIuIEJ1aWxkcyBhIERvY2tlciBpbWFnZSBvciBBTUkgd2l0aCBHaXRIdWIgUnVubmVyIGFuZCBvdGhlciByZXF1aXJlbWVudHMgaW5zdGFsbGVkLlxuICpcbiAqIEltYWdlcyBjYW4gYmUgY3VzdG9taXplZCBiZWZvcmUgcGFzc2VkIGludG8gdGhlIHByb3ZpZGVyIGJ5IGFkZGluZyBvciByZW1vdmluZyBjb21wb25lbnRzIHRvIGJlIGluc3RhbGxlZC5cbiAqXG4gKiBJbWFnZXMgYXJlIHJlYnVpbHQgZXZlcnkgd2VlayBieSBkZWZhdWx0IHRvIGVuc3VyZSB0aGF0IHRoZSBsYXRlc3Qgc2VjdXJpdHkgcGF0Y2hlcyBhcmUgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJ1bm5lckltYWdlQnVpbGRlciBleHRlbmRzIFJ1bm5lckltYWdlQnVpbGRlckJhc2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGltYWdlIGJ1aWxkZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHByb3BlcnRpZXMuIFRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGRpZmZlciBiYXNlZCBvbiB0aGUgT1MsIGFyY2hpdGVjdHVyZSwgYW5kIHJlcXVlc3RlZCBidWlsZGVyIHR5cGUuXG4gICAqL1xuICBzdGF0aWMgbmV3KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogUnVubmVySW1hZ2VCdWlsZGVyUHJvcHMpOiBJQ29uZmlndXJhYmxlUnVubmVySW1hZ2VCdWlsZGVyIHtcbiAgICBpZiAocHJvcHM/LmNvbXBvbmVudHMgJiYgcHJvcHMucnVubmVyVmVyc2lvbikge1xuICAgICAgQW5ub3RhdGlvbnMub2Yoc2NvcGUpLmFkZFdhcm5pbmcoJ3J1bm5lclZlcnNpb24gaXMgaWdub3JlZCB3aGVuIGNvbXBvbmVudHMgYXJlIHNwZWNpZmllZC4gVGhlIHJ1bm5lciB2ZXJzaW9uIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29tcG9uZW50cy4nKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHM/LmJ1aWxkZXJUeXBlID09PSBSdW5uZXJJbWFnZUJ1aWxkZXJUeXBlLkNPREVfQlVJTEQpIHtcbiAgICAgIHJldHVybiBuZXcgQ29kZUJ1aWxkUnVubmVySW1hZ2VCdWlsZGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIH0gZWxzZSBpZiAocHJvcHM/LmJ1aWxkZXJUeXBlID09PSBSdW5uZXJJbWFnZUJ1aWxkZXJUeXBlLkFXU19JTUFHRV9CVUlMREVSKSB7XG4gICAgICByZXR1cm4gbmV3IEF3c0ltYWdlQnVpbGRlclJ1bm5lckltYWdlQnVpbGRlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcyA9IHByb3BzPy5vcyA/PyBPcy5MSU5VWF9VQlVOVFU7XG4gICAgaWYgKG9zLmlzSW4oT3MuX0FMTF9MSU5VWF9WRVJTSU9OUykpIHtcbiAgICAgIHJldHVybiBuZXcgQ29kZUJ1aWxkUnVubmVySW1hZ2VCdWlsZGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIH0gZWxzZSBpZiAob3MuaXMoT3MuV0lORE9XUykpIHtcbiAgICAgIHJldHVybiBuZXcgQXdzSW1hZ2VCdWlsZGVyUnVubmVySW1hZ2VCdWlsZGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIHJ1bm5lciBpbWFnZSBidWlsZGVyIGltcGxlbWVudGF0aW9uIGZvciAke29zLm5hbWV9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -4,6 +4,8 @@ import { ImageBuilderObjectBase } from './common';
4
4
  import { Architecture, Os } from '../../providers';
5
5
  /**
6
6
  * Properties for AmiRecipe construct.
7
+ *
8
+ * @internal
7
9
  */
8
10
  interface AmiRecipeProperties {
9
11
  /**
@@ -22,6 +24,12 @@ interface AmiRecipeProperties {
22
24
  * Components to add to target container image.
23
25
  */
24
26
  readonly components: ImageBuilderComponent[];
27
+ /**
28
+ * Tags to apply to the recipe and image.
29
+ */
30
+ readonly tags: {
31
+ [key: string]: string;
32
+ };
25
33
  }
26
34
  /**
27
35
  * Image builder recipe for Amazon Machine Image (AMI).
@@ -24,6 +24,7 @@ class AmiRecipe extends common_1.ImageBuilderObjectBase {
24
24
  platform: props.platform,
25
25
  components,
26
26
  parentAmi: props.baseAmi,
27
+ tags: props.tags,
27
28
  });
28
29
  let workingDirectory;
29
30
  if (props.platform == 'Linux') {
@@ -41,6 +42,7 @@ class AmiRecipe extends common_1.ImageBuilderObjectBase {
41
42
  parentImage: props.baseAmi,
42
43
  components,
43
44
  workingDirectory,
45
+ tags: props.tags,
44
46
  });
45
47
  this.arn = recipe.attrArn;
46
48
  }
@@ -98,4 +100,4 @@ function defaultBaseAmi(scope, os, architecture) {
98
100
  throw new Error(`OS ${os.name} not supported for AMI runner image`);
99
101
  }
100
102
  exports.defaultBaseAmi = defaultBaseAmi;
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1pLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ltYWdlLWJ1aWxkZXJzL2F3cy1pbWFnZS1idWlsZGVyL2FtaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsNkNBQStEO0FBRy9ELHFDQUFrRDtBQUNsRCwrQ0FBbUQ7QUFDbkQsc0NBQW1EO0FBMkJuRDs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsK0JBQXNCO0lBS25ELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNoRCxPQUFPO2dCQUNMLFlBQVksRUFBRSxTQUFTLENBQUMsR0FBRzthQUM1QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUEsK0JBQXNCLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzVELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixVQUFVO1lBQ1YsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksZ0JBQWdCLENBQUM7UUFDckIsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzlCLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLHlIQUF5SDtRQUNySixDQUFDO2FBQU0sQ0FBQztZQUNO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JztcbmltcG9ydCB7IGF3c19pbWFnZWJ1aWxkZXIgYXMgaW1hZ2VidWlsZGVyIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJbWFnZUJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuL2J1aWxkZXInO1xuaW1wb3J0IHsgSW1hZ2VCdWlsZGVyT2JqZWN0QmFzZSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IEFyY2hpdGVjdHVyZSwgT3MgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMnO1xuaW1wb3J0IHsgdW5pcXVlSW1hZ2VCdWlsZGVyTmFtZSB9IGZyb20gJy4uL2NvbW1vbic7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgQW1pUmVjaXBlIGNvbnN0cnVjdC5cbiAqL1xuaW50ZXJmYWNlIEFtaVJlY2lwZVByb3BlcnRpZXMge1xuICAvKipcbiAgICogVGFyZ2V0IHBsYXRmb3JtLiBNdXN0IG1hdGNoIGJ1aWxkZXIgcGxhdGZvcm0uXG4gICAqL1xuICByZWFkb25seSBwbGF0Zm9ybTogJ0xpbnV4JyB8ICdXaW5kb3dzJztcblxuICAvKipcbiAgICogVGFyZ2V0IGFyY2hpdGVjdHVyZS4gTXVzdCBtYXRjaCBidWlsZGVyIHBsYXRmb3JtLlxuICAgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmU7XG5cbiAgLyoqXG4gICAqIEJhc2UgQU1JIHRvIHVzZSBmb3IgdGhlIG5ldyBydW5uZXIgQU1JLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUFtaTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnRzIHRvIGFkZCB0byB0YXJnZXQgY29udGFpbmVyIGltYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50czogSW1hZ2VCdWlsZGVyQ29tcG9uZW50W107XG59XG5cbi8qKlxuICogSW1hZ2UgYnVpbGRlciByZWNpcGUgZm9yIEFtYXpvbiBNYWNoaW5lIEltYWdlIChBTUkpLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgQW1pUmVjaXBlIGV4dGVuZHMgSW1hZ2VCdWlsZGVyT2JqZWN0QmFzZSB7XG4gIHB1YmxpYyByZWFkb25seSBhcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQW1pUmVjaXBlUHJvcGVydGllcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBsZXQgY29tcG9uZW50cyA9IHByb3BzLmNvbXBvbmVudHMubWFwKGNvbXBvbmVudCA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wb25lbnRBcm46IGNvbXBvbmVudC5hcm4sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lID0gdW5pcXVlSW1hZ2VCdWlsZGVyTmFtZSh0aGlzKTtcbiAgICB0aGlzLnZlcnNpb24gPSB0aGlzLmdlbmVyYXRlVmVyc2lvbignSW1hZ2VSZWNpcGUnLCB0aGlzLm5hbWUsIHtcbiAgICAgIHBsYXRmb3JtOiBwcm9wcy5wbGF0Zm9ybSxcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBwYXJlbnRBbWk6IHByb3BzLmJhc2VBbWksXG4gICAgfSk7XG5cbiAgICBsZXQgd29ya2luZ0RpcmVjdG9yeTtcbiAgICBpZiAocHJvcHMucGxhdGZvcm0gPT0gJ0xpbnV4Jykge1xuICAgICAgd29ya2luZ0RpcmVjdG9yeSA9ICcvaG9tZS9ydW5uZXInO1xuICAgIH0gZWxzZSBpZiAocHJvcHMucGxhdGZvcm0gPT0gJ1dpbmRvd3MnKSB7XG4gICAgICB3b3JraW5nRGlyZWN0b3J5ID0gJ0M6Lyc7IC8vIG11c3QgZXhpc3Qgb3IgSW1hZ2UgQnVpbGRlciBmYWlscyBhbmQgbXVzdCBub3QgYmUgZW1wdHkgb3IgZ2l0IHdpbGwgc3RhbGwgaW5zdGFsbGluZyBmcm9tIHRoZSBkZWZhdWx0IHdpbmRvd3NcXHN5c3RlbTMyXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgQU1JIHJlY2lwZSBwbGF0Zm9ybTogJHtwcm9wcy5wbGF0Zm9ybX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGUgPSBuZXcgaW1hZ2VidWlsZGVyLkNmbkltYWdlUmVjaXBlKHRoaXMsICdSZWNpcGUnLCB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICBwYXJlbnRJbWFnZTogcHJvcHMuYmFzZUFtaSxcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICB3b3JraW5nRGlyZWN0b3J5LFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcm4gPSByZWNpcGUuYXR0ckFybjtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgYmFzZSBBTUkgZm9yIGdpdmVuIE9TIGFuZCBhcmNoaXRlY3R1cmUuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0QmFzZUFtaShzY29wZTogQ29uc3RydWN0LCBvczogT3MsIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlKSB7XG4gIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKHNjb3BlKTtcblxuICBsZXQgYXJjaDtcbiAgaWYgKGFyY2hpdGVjdHVyZS5pcyhBcmNoaXRlY3R1cmUuWDg2XzY0KSkge1xuICAgIGFyY2ggPSAneDg2JztcbiAgfSBlbHNlIGlmIChhcmNoaXRlY3R1cmUuaXMoQXJjaGl0ZWN0dXJlLkFSTTY0KSkge1xuICAgIGFyY2ggPSAnYXJtNjQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIGZvciBiYXNlIEFNSTogJHthcmNoaXRlY3R1cmUubmFtZX1gKTtcbiAgfVxuXG4gIGlmIChvcy5pcyhPcy5MSU5VWF9VQlVOVFUpIHx8IG9zLmlzKE9zLkxJTlVYKSkge1xuICAgIHJldHVybiBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2ltYWdlJyxcbiAgICAgIGFjY291bnQ6ICdhd3MnLFxuICAgICAgcmVzb3VyY2VOYW1lOiBgdWJ1bnR1LXNlcnZlci0yMi1sdHMtJHthcmNofS94LngueGAsXG4gICAgfSk7XG4gIH1cblxuICBpZiAob3MuaXMoT3MuTElOVVhfQU1BWk9OXzIpKSB7XG4gICAgcmV0dXJuIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnaW1hZ2UnLFxuICAgICAgYWNjb3VudDogJ2F3cycsXG4gICAgICByZXNvdXJjZU5hbWU6IGBhbWF6b24tbGludXgtMi0ke2FyY2h9L3gueC54YCxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChvcy5pcyhPcy5MSU5VWF9BTUFaT05fMjAyMykpIHtcbiAgICByZXR1cm4gc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgcmVzb3VyY2U6ICdpbWFnZScsXG4gICAgICBhY2NvdW50OiAnYXdzJyxcbiAgICAgIHJlc291cmNlTmFtZTogYGFtYXpvbi1saW51eC0yMDIzLSR7YXJjaH0veC54LnhgLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9zLmlzKE9zLldJTkRPV1MpKSB7XG4gICAgcmV0dXJuIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnaW1hZ2UnLFxuICAgICAgYWNjb3VudDogJ2F3cycsXG4gICAgICByZXNvdXJjZU5hbWU6IGB3aW5kb3dzLXNlcnZlci0yMDIyLWVuZ2xpc2gtZnVsbC1iYXNlLSR7YXJjaH0veC54LnhgLFxuICAgIH0pO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBPUyAke29zLm5hbWV9IG5vdCBzdXBwb3J0ZWQgZm9yIEFNSSBydW5uZXIgaW1hZ2VgKTtcbn1cblxuIl19
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1pLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ltYWdlLWJ1aWxkZXJzL2F3cy1pbWFnZS1idWlsZGVyL2FtaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsNkNBQStEO0FBRy9ELHFDQUFrRDtBQUNsRCwrQ0FBbUQ7QUFDbkQsc0NBQW1EO0FBa0NuRDs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsK0JBQXNCO0lBS25ELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNoRCxPQUFPO2dCQUNMLFlBQVksRUFBRSxTQUFTLENBQUMsR0FBRzthQUM1QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUEsK0JBQXNCLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzVELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixVQUFVO1lBQ1YsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFFSCxJQUFJLGdCQUFnQixDQUFDO1FBQ3JCLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM5QixnQkFBZ0IsR0FBRyxjQUFjLENBQUM7UUFDcEMsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN2QyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyx5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RCx3Q0FpREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgYXdzX2ltYWdlYnVpbGRlciBhcyBpbWFnZWJ1aWxkZXIgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEltYWdlQnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4vYnVpbGRlcic7XG5pbXBvcnQgeyBJbWFnZUJ1aWxkZXJPYmplY3RCYXNlIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgQXJjaGl0ZWN0dXJlLCBPcyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyB1bmlxdWVJbWFnZUJ1aWxkZXJOYW1lIH0gZnJvbSAnLi4vY29tbW9uJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBBbWlSZWNpcGUgY29uc3RydWN0LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgQW1pUmVjaXBlUHJvcGVydGllcyB7XG4gIC8qKlxuICAgKiBUYXJnZXQgcGxhdGZvcm0uIE11c3QgbWF0Y2ggYnVpbGRlciBwbGF0Zm9ybS5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiAnTGludXgnIHwgJ1dpbmRvd3MnO1xuXG4gIC8qKlxuICAgKiBUYXJnZXQgYXJjaGl0ZWN0dXJlLiBNdXN0IG1hdGNoIGJ1aWxkZXIgcGxhdGZvcm0uXG4gICAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZTtcblxuICAvKipcbiAgICogQmFzZSBBTUkgdG8gdXNlIGZvciB0aGUgbmV3IHJ1bm5lciBBTUkuXG4gICAqL1xuICByZWFkb25seSBiYXNlQW1pOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudHMgdG8gYWRkIHRvIHRhcmdldCBjb250YWluZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRzOiBJbWFnZUJ1aWxkZXJDb21wb25lbnRbXTtcblxuICAvKipcbiAgICogVGFncyB0byBhcHBseSB0byB0aGUgcmVjaXBlIGFuZCBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogSW1hZ2UgYnVpbGRlciByZWNpcGUgZm9yIEFtYXpvbiBNYWNoaW5lIEltYWdlIChBTUkpLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgQW1pUmVjaXBlIGV4dGVuZHMgSW1hZ2VCdWlsZGVyT2JqZWN0QmFzZSB7XG4gIHB1YmxpYyByZWFkb25seSBhcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQW1pUmVjaXBlUHJvcGVydGllcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBsZXQgY29tcG9uZW50cyA9IHByb3BzLmNvbXBvbmVudHMubWFwKGNvbXBvbmVudCA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wb25lbnRBcm46IGNvbXBvbmVudC5hcm4sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lID0gdW5pcXVlSW1hZ2VCdWlsZGVyTmFtZSh0aGlzKTtcbiAgICB0aGlzLnZlcnNpb24gPSB0aGlzLmdlbmVyYXRlVmVyc2lvbignSW1hZ2VSZWNpcGUnLCB0aGlzLm5hbWUsIHtcbiAgICAgIHBsYXRmb3JtOiBwcm9wcy5wbGF0Zm9ybSxcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBwYXJlbnRBbWk6IHByb3BzLmJhc2VBbWksXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgIH0pO1xuXG4gICAgbGV0IHdvcmtpbmdEaXJlY3Rvcnk7XG4gICAgaWYgKHByb3BzLnBsYXRmb3JtID09ICdMaW51eCcpIHtcbiAgICAgIHdvcmtpbmdEaXJlY3RvcnkgPSAnL2hvbWUvcnVubmVyJztcbiAgICB9IGVsc2UgaWYgKHByb3BzLnBsYXRmb3JtID09ICdXaW5kb3dzJykge1xuICAgICAgd29ya2luZ0RpcmVjdG9yeSA9ICdDOi8nOyAvLyBtdXN0IGV4aXN0IG9yIEltYWdlIEJ1aWxkZXIgZmFpbHMgYW5kIG11c3Qgbm90IGJlIGVtcHR5IG9yIGdpdCB3aWxsIHN0YWxsIGluc3RhbGxpbmcgZnJvbSB0aGUgZGVmYXVsdCB3aW5kb3dzXFxzeXN0ZW0zMlxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFNSSByZWNpcGUgcGxhdGZvcm06ICR7cHJvcHMucGxhdGZvcm19YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjaXBlID0gbmV3IGltYWdlYnVpbGRlci5DZm5JbWFnZVJlY2lwZSh0aGlzLCAnUmVjaXBlJywge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgcGFyZW50SW1hZ2U6IHByb3BzLmJhc2VBbWksXG4gICAgICBjb21wb25lbnRzLFxuICAgICAgd29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLmFybiA9IHJlY2lwZS5hdHRyQXJuO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBiYXNlIEFNSSBmb3IgZ2l2ZW4gT1MgYW5kIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRCYXNlQW1pKHNjb3BlOiBDb25zdHJ1Y3QsIG9zOiBPcywgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUpIHtcbiAgY29uc3Qgc3RhY2sgPSBjZGsuU3RhY2sub2Yoc2NvcGUpO1xuXG4gIGxldCBhcmNoO1xuICBpZiAoYXJjaGl0ZWN0dXJlLmlzKEFyY2hpdGVjdHVyZS5YODZfNjQpKSB7XG4gICAgYXJjaCA9ICd4ODYnO1xuICB9IGVsc2UgaWYgKGFyY2hpdGVjdHVyZS5pcyhBcmNoaXRlY3R1cmUuQVJNNjQpKSB7XG4gICAgYXJjaCA9ICdhcm02NCc7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUgZm9yIGJhc2UgQU1JOiAke2FyY2hpdGVjdHVyZS5uYW1lfWApO1xuICB9XG5cbiAgaWYgKG9zLmlzKE9zLkxJTlVYX1VCVU5UVSkgfHwgb3MuaXMoT3MuTElOVVgpKSB7XG4gICAgcmV0dXJuIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnaW1hZ2UnLFxuICAgICAgYWNjb3VudDogJ2F3cycsXG4gICAgICByZXNvdXJjZU5hbWU6IGB1YnVudHUtc2VydmVyLTIyLWx0cy0ke2FyY2h9L3gueC54YCxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChvcy5pcyhPcy5MSU5VWF9BTUFaT05fMikpIHtcbiAgICByZXR1cm4gc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgcmVzb3VyY2U6ICdpbWFnZScsXG4gICAgICBhY2NvdW50OiAnYXdzJyxcbiAgICAgIHJlc291cmNlTmFtZTogYGFtYXpvbi1saW51eC0yLSR7YXJjaH0veC54LnhgLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9zLmlzKE9zLkxJTlVYX0FNQVpPTl8yMDIzKSkge1xuICAgIHJldHVybiBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2ltYWdlJyxcbiAgICAgIGFjY291bnQ6ICdhd3MnLFxuICAgICAgcmVzb3VyY2VOYW1lOiBgYW1hem9uLWxpbnV4LTIwMjMtJHthcmNofS94LngueGAsXG4gICAgfSk7XG4gIH1cblxuICBpZiAob3MuaXMoT3MuV0lORE9XUykpIHtcbiAgICByZXR1cm4gc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgcmVzb3VyY2U6ICdpbWFnZScsXG4gICAgICBhY2NvdW50OiAnYXdzJyxcbiAgICAgIHJlc291cmNlTmFtZTogYHdpbmRvd3Mtc2VydmVyLTIwMjItZW5nbGlzaC1mdWxsLWJhc2UtJHthcmNofS94LngueGAsXG4gICAgfSk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYE9TICR7b3MubmFtZX0gbm90IHN1cHBvcnRlZCBmb3IgQU1JIHJ1bm5lciBpbWFnZWApO1xufVxuXG4iXX0=
@@ -157,6 +157,7 @@ export declare class AwsImageBuilderRunnerImageBuilder extends RunnerImageBuilde
157
157
  private readonly fastLaunchOptions?;
158
158
  private readonly waitOnDeploy;
159
159
  private readonly dockerSetupCommands;
160
+ private readonly tags;
160
161
  constructor(scope: Construct, id: string, props?: RunnerImageBuilderProps);
161
162
  private platform;
162
163
  /**
@@ -177,6 +178,7 @@ export declare class AwsImageBuilderRunnerImageBuilder extends RunnerImageBuilde
177
178
  bindAmi(): RunnerAmi;
178
179
  private amiCleaner;
179
180
  private bindComponents;
181
+ private imageCleaner;
180
182
  }
181
183
  /**
182
184
  * @internal