@cloudsnorkel/cdk-github-runners 0.9.4 → 0.9.6

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 (99) hide show
  1. package/.gitattributes +5 -3
  2. package/.jsii +332 -284
  3. package/API.md +55 -19
  4. package/README.md +135 -65
  5. package/assets/{providers/image-builders → image-builders}/aws-image-builder/delete-ami.lambda/index.js +2 -2
  6. package/assets/{providers/image-builders → image-builders}/aws-image-builder/filter-failed-builds.lambda/index.js +1 -1
  7. package/assets/image-builders/aws-image-builder/reaper.lambda/index.js +163 -0
  8. package/assets/{providers/image-builders → image-builders}/aws-image-builder/versioner.lambda/index.js +2 -2
  9. package/cdk.json +10 -0
  10. package/lib/access.js +1 -1
  11. package/lib/image-builders/api.js +47 -0
  12. package/lib/{providers/image-builders → image-builders}/aws-image-builder/ami.d.ts +2 -3
  13. package/lib/image-builders/aws-image-builder/ami.js +93 -0
  14. package/lib/{providers/image-builders → image-builders}/aws-image-builder/builder.d.ts +10 -3
  15. package/lib/image-builders/aws-image-builder/builder.js +568 -0
  16. package/lib/image-builders/aws-image-builder/common.js +46 -0
  17. package/lib/{providers/image-builders → image-builders}/aws-image-builder/container.d.ts +1 -1
  18. package/lib/image-builders/aws-image-builder/container.js +63 -0
  19. package/lib/{providers/image-builders → image-builders}/aws-image-builder/delete-ami-function.d.ts +1 -1
  20. package/lib/image-builders/aws-image-builder/delete-ami-function.js +23 -0
  21. package/lib/image-builders/aws-image-builder/delete-ami.lambda.js +87 -0
  22. package/lib/{providers/image-builders → image-builders}/aws-image-builder/deprecated/ami.d.ts +4 -4
  23. package/lib/image-builders/aws-image-builder/deprecated/ami.js +240 -0
  24. package/lib/{providers/image-builders → image-builders}/aws-image-builder/deprecated/common.d.ts +1 -1
  25. package/lib/image-builders/aws-image-builder/deprecated/common.js +144 -0
  26. package/lib/{providers/image-builders → image-builders}/aws-image-builder/deprecated/container.d.ts +3 -3
  27. package/lib/image-builders/aws-image-builder/deprecated/container.js +222 -0
  28. package/lib/{providers/image-builders → image-builders}/aws-image-builder/deprecated/index.js +1 -1
  29. package/lib/{providers/image-builders → image-builders}/aws-image-builder/deprecated/linux-components.d.ts +1 -1
  30. package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +172 -0
  31. package/lib/{providers/image-builders → image-builders}/aws-image-builder/deprecated/windows-components.d.ts +1 -1
  32. package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +126 -0
  33. package/lib/{providers/image-builders → image-builders}/aws-image-builder/filter-failed-builds-function.d.ts +1 -1
  34. package/lib/image-builders/aws-image-builder/filter-failed-builds-function.js +23 -0
  35. package/lib/image-builders/aws-image-builder/filter-failed-builds.lambda.js +18 -0
  36. package/lib/{providers/image-builders → image-builders}/aws-image-builder/index.js +1 -1
  37. package/lib/image-builders/aws-image-builder/reaper-function.d.ts +13 -0
  38. package/lib/image-builders/aws-image-builder/reaper-function.js +23 -0
  39. package/lib/image-builders/aws-image-builder/reaper.lambda.d.ts +1 -0
  40. package/lib/image-builders/aws-image-builder/reaper.lambda.js +149 -0
  41. package/lib/{providers/image-builders → image-builders}/aws-image-builder/versioner-function.d.ts +1 -1
  42. package/lib/image-builders/aws-image-builder/versioner-function.js +23 -0
  43. package/lib/image-builders/aws-image-builder/versioner.lambda.js +96 -0
  44. package/lib/{providers/image-builders → image-builders}/codebuild-deprecated.d.ts +5 -5
  45. package/lib/image-builders/codebuild-deprecated.js +373 -0
  46. package/lib/{providers/image-builders → image-builders}/codebuild.d.ts +2 -2
  47. package/lib/image-builders/codebuild.js +289 -0
  48. package/lib/{providers/image-builders → image-builders}/common.d.ts +6 -4
  49. package/lib/{providers/image-builders → image-builders}/common.js +1 -1
  50. package/lib/{providers/image-builders → image-builders}/components.d.ts +8 -2
  51. package/lib/image-builders/components.js +568 -0
  52. package/lib/{providers/image-builders → image-builders}/index.js +1 -1
  53. package/lib/{providers/image-builders → image-builders}/static.d.ts +1 -1
  54. package/lib/image-builders/static.js +58 -0
  55. package/lib/providers/codebuild.d.ts +1 -1
  56. package/lib/providers/codebuild.js +4 -4
  57. package/lib/providers/common.js +3 -3
  58. package/lib/providers/ec2.d.ts +2 -2
  59. package/lib/providers/ec2.js +4 -4
  60. package/lib/providers/ecs.d.ts +1 -1
  61. package/lib/providers/ecs.js +3 -3
  62. package/lib/providers/fargate.d.ts +1 -1
  63. package/lib/providers/fargate.js +4 -4
  64. package/lib/providers/index.d.ts +1 -1
  65. package/lib/providers/index.js +2 -2
  66. package/lib/providers/lambda.d.ts +1 -1
  67. package/lib/providers/lambda.js +4 -4
  68. package/lib/runner.d.ts +3 -3
  69. package/lib/runner.js +5 -5
  70. package/lib/secrets.js +1 -1
  71. package/package.json +12 -10
  72. package/lib/providers/image-builders/api.js +0 -47
  73. package/lib/providers/image-builders/aws-image-builder/ami.js +0 -81
  74. package/lib/providers/image-builders/aws-image-builder/builder.js +0 -520
  75. package/lib/providers/image-builders/aws-image-builder/common.js +0 -46
  76. package/lib/providers/image-builders/aws-image-builder/container.js +0 -63
  77. package/lib/providers/image-builders/aws-image-builder/delete-ami-function.js +0 -23
  78. package/lib/providers/image-builders/aws-image-builder/delete-ami.lambda.js +0 -87
  79. package/lib/providers/image-builders/aws-image-builder/deprecated/ami.js +0 -240
  80. package/lib/providers/image-builders/aws-image-builder/deprecated/common.js +0 -144
  81. package/lib/providers/image-builders/aws-image-builder/deprecated/container.js +0 -222
  82. package/lib/providers/image-builders/aws-image-builder/deprecated/linux-components.js +0 -172
  83. package/lib/providers/image-builders/aws-image-builder/deprecated/windows-components.js +0 -129
  84. package/lib/providers/image-builders/aws-image-builder/filter-failed-builds-function.js +0 -23
  85. package/lib/providers/image-builders/aws-image-builder/filter-failed-builds.lambda.js +0 -18
  86. package/lib/providers/image-builders/aws-image-builder/versioner-function.js +0 -23
  87. package/lib/providers/image-builders/aws-image-builder/versioner.lambda.js +0 -96
  88. package/lib/providers/image-builders/codebuild-deprecated.js +0 -373
  89. package/lib/providers/image-builders/codebuild.js +0 -287
  90. package/lib/providers/image-builders/components.js +0 -535
  91. package/lib/providers/image-builders/static.js +0 -58
  92. /package/lib/{providers/image-builders → image-builders}/api.d.ts +0 -0
  93. /package/lib/{providers/image-builders → image-builders}/aws-image-builder/common.d.ts +0 -0
  94. /package/lib/{providers/image-builders → image-builders}/aws-image-builder/delete-ami.lambda.d.ts +0 -0
  95. /package/lib/{providers/image-builders → image-builders}/aws-image-builder/deprecated/index.d.ts +0 -0
  96. /package/lib/{providers/image-builders → image-builders}/aws-image-builder/filter-failed-builds.lambda.d.ts +0 -0
  97. /package/lib/{providers/image-builders → image-builders}/aws-image-builder/index.d.ts +0 -0
  98. /package/lib/{providers/image-builders → image-builders}/aws-image-builder/versioner.lambda.d.ts +0 -0
  99. /package/lib/{providers/image-builders → image-builders}/index.d.ts +0 -0
@@ -2432,7 +2432,7 @@ var require_semver2 = __commonJS({
2432
2432
  }
2433
2433
  });
2434
2434
 
2435
- // src/providers/image-builders/aws-image-builder/versioner.lambda.ts
2435
+ // src/image-builders/aws-image-builder/versioner.lambda.ts
2436
2436
  var versioner_lambda_exports = {};
2437
2437
  __export(versioner_lambda_exports, {
2438
2438
  handler: () => handler
@@ -2478,7 +2478,7 @@ async function customResourceRespond(event, responseStatus, reason, physicalReso
2478
2478
  });
2479
2479
  }
2480
2480
 
2481
- // src/providers/image-builders/aws-image-builder/versioner.lambda.ts
2481
+ // src/image-builders/aws-image-builder/versioner.lambda.ts
2482
2482
  var ib = new AWS2.Imagebuilder();
2483
2483
  async function handler(event, context) {
2484
2484
  console.log(JSON.stringify({ ...event, ResponseURL: "..." }));
package/cdk.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "build": "npm run bundle",
3
+ "watch": {
4
+ "include": [
5
+ "src/**/*.ts",
6
+ "test/**/*.integ.ts"
7
+ ]
8
+ },
9
+ "//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
10
+ }
package/lib/access.js CHANGED
@@ -56,7 +56,7 @@ class LambdaAccess {
56
56
  }
57
57
  }
58
58
  _a = JSII_RTTI_SYMBOL_1;
59
- LambdaAccess[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.LambdaAccess", version: "0.9.4" };
59
+ LambdaAccess[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.LambdaAccess", version: "0.9.6" };
60
60
  exports.LambdaAccess = LambdaAccess;
61
61
  /**
62
62
  * @internal
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RunnerImageBuilder = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const aws_image_builder_1 = require("./aws-image-builder");
8
+ const codebuild_1 = require("./codebuild");
9
+ const common_1 = require("./common");
10
+ const common_2 = require("../providers/common");
11
+ /**
12
+ * GitHub Runner image builder. Builds a Docker image or AMI with GitHub Runner and other requirements installed.
13
+ *
14
+ * Images can be customized before passed into the provider by adding or removing components to be installed.
15
+ *
16
+ * Images are rebuilt every week by default to ensure that the latest security patches are applied.
17
+ */
18
+ class RunnerImageBuilder extends common_1.RunnerImageBuilderBase {
19
+ /**
20
+ * Create a new image builder based on the provided properties. The implementation will differ based on the OS, architecture, and requested builder type.
21
+ */
22
+ static new(scope, id, props) {
23
+ if (props?.components && props.runnerVersion) {
24
+ aws_cdk_lib_1.Annotations.of(scope).addWarning('runnerVersion is ignored when components are specified. The runner version will be determined by the components.');
25
+ }
26
+ if (props?.builderType === common_1.RunnerImageBuilderType.CODE_BUILD) {
27
+ return new codebuild_1.CodeBuildRunnerImageBuilder(scope, id, props);
28
+ }
29
+ else if (props?.builderType === common_1.RunnerImageBuilderType.AWS_IMAGE_BUILDER) {
30
+ return new aws_image_builder_1.AwsImageBuilderRunnerImageBuilder(scope, id, props);
31
+ }
32
+ const os = props?.os ?? common_2.Os.LINUX_UBUNTU;
33
+ if (os.is(common_2.Os.LINUX_UBUNTU) || os.is(common_2.Os.LINUX_AMAZON_2)) {
34
+ return new codebuild_1.CodeBuildRunnerImageBuilder(scope, id, props);
35
+ }
36
+ else if (os.is(common_2.Os.WINDOWS)) {
37
+ return new aws_image_builder_1.AwsImageBuilderRunnerImageBuilder(scope, id, props);
38
+ }
39
+ else {
40
+ throw new Error(`Unable to find runner image builder implementation for ${os.name}`);
41
+ }
42
+ }
43
+ }
44
+ _a = JSII_RTTI_SYMBOL_1;
45
+ RunnerImageBuilder[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.RunnerImageBuilder", version: "0.9.6" };
46
+ exports.RunnerImageBuilder = RunnerImageBuilder;
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltYWdlLWJ1aWxkZXJzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUEwQztBQUUxQywyREFBd0U7QUFDeEUsMkNBQTBEO0FBQzFELHFDQUFtRztBQUNuRyxnREFBeUM7QUFFekM7Ozs7OztHQU1HO0FBQ0gsTUFBc0Isa0JBQW1CLFNBQVEsK0JBQXNCO0lBQ3JFOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN0RSxJQUFJLEtBQUssRUFBRSxVQUFVLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUM1Qyx5QkFBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsa0hBQWtILENBQUMsQ0FBQztTQUN0SjtRQUVELElBQUksS0FBSyxFQUFFLFdBQVcsS0FBSywrQkFBc0IsQ0FBQyxVQUFVLEVBQUU7WUFDNUQsT0FBTyxJQUFJLHVDQUEyQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDMUQ7YUFBTSxJQUFJLEtBQUssRUFBRSxXQUFXLEtBQUssK0JBQXNCLENBQUMsaUJBQWlCLEVBQUU7WUFDMUUsT0FBTyxJQUFJLHFEQUFpQyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDaEU7UUFFRCxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxJQUFJLFdBQUUsQ0FBQyxZQUFZLENBQUM7UUFDeEMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN0RCxPQUFPLElBQUksdUNBQTJCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMxRDthQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxJQUFJLHFEQUFpQyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDaEU7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3RGO0lBQ0gsQ0FBQzs7OztBQXZCbUIsZ0RBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5ub3RhdGlvbnMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEF3c0ltYWdlQnVpbGRlclJ1bm5lckltYWdlQnVpbGRlciB9IGZyb20gJy4vYXdzLWltYWdlLWJ1aWxkZXInO1xuaW1wb3J0IHsgQ29kZUJ1aWxkUnVubmVySW1hZ2VCdWlsZGVyIH0gZnJvbSAnLi9jb2RlYnVpbGQnO1xuaW1wb3J0IHsgUnVubmVySW1hZ2VCdWlsZGVyQmFzZSwgUnVubmVySW1hZ2VCdWlsZGVyUHJvcHMsIFJ1bm5lckltYWdlQnVpbGRlclR5cGUgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBPcyB9IGZyb20gJy4uL3Byb3ZpZGVycy9jb21tb24nO1xuXG4vKipcbiAqIEdpdEh1YiBSdW5uZXIgaW1hZ2UgYnVpbGRlci4gQnVpbGRzIGEgRG9ja2VyIGltYWdlIG9yIEFNSSB3aXRoIEdpdEh1YiBSdW5uZXIgYW5kIG90aGVyIHJlcXVpcmVtZW50cyBpbnN0YWxsZWQuXG4gKlxuICogSW1hZ2VzIGNhbiBiZSBjdXN0b21pemVkIGJlZm9yZSBwYXNzZWQgaW50byB0aGUgcHJvdmlkZXIgYnkgYWRkaW5nIG9yIHJlbW92aW5nIGNvbXBvbmVudHMgdG8gYmUgaW5zdGFsbGVkLlxuICpcbiAqIEltYWdlcyBhcmUgcmVidWlsdCBldmVyeSB3ZWVrIGJ5IGRlZmF1bHQgdG8gZW5zdXJlIHRoYXQgdGhlIGxhdGVzdCBzZWN1cml0eSBwYXRjaGVzIGFyZSBhcHBsaWVkLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUnVubmVySW1hZ2VCdWlsZGVyIGV4dGVuZHMgUnVubmVySW1hZ2VCdWlsZGVyQmFzZSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW1hZ2UgYnVpbGRlciBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcHJvcGVydGllcy4gVGhlIGltcGxlbWVudGF0aW9uIHdpbGwgZGlmZmVyIGJhc2VkIG9uIHRoZSBPUywgYXJjaGl0ZWN0dXJlLCBhbmQgcmVxdWVzdGVkIGJ1aWxkZXIgdHlwZS5cbiAgICovXG4gIHN0YXRpYyBuZXcoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBSdW5uZXJJbWFnZUJ1aWxkZXJQcm9wcyk6IFJ1bm5lckltYWdlQnVpbGRlciB7XG4gICAgaWYgKHByb3BzPy5jb21wb25lbnRzICYmIHByb3BzLnJ1bm5lclZlcnNpb24pIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHNjb3BlKS5hZGRXYXJuaW5nKCdydW5uZXJWZXJzaW9uIGlzIGlnbm9yZWQgd2hlbiBjb21wb25lbnRzIGFyZSBzcGVjaWZpZWQuIFRoZSBydW5uZXIgdmVyc2lvbiB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGNvbXBvbmVudHMuJyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzPy5idWlsZGVyVHlwZSA9PT0gUnVubmVySW1hZ2VCdWlsZGVyVHlwZS5DT0RFX0JVSUxEKSB7XG4gICAgICByZXR1cm4gbmV3IENvZGVCdWlsZFJ1bm5lckltYWdlQnVpbGRlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzPy5idWlsZGVyVHlwZSA9PT0gUnVubmVySW1hZ2VCdWlsZGVyVHlwZS5BV1NfSU1BR0VfQlVJTERFUikge1xuICAgICAgcmV0dXJuIG5ldyBBd3NJbWFnZUJ1aWxkZXJSdW5uZXJJbWFnZUJ1aWxkZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3MgPSBwcm9wcz8ub3MgPz8gT3MuTElOVVhfVUJVTlRVO1xuICAgIGlmIChvcy5pcyhPcy5MSU5VWF9VQlVOVFUpIHx8IG9zLmlzKE9zLkxJTlVYX0FNQVpPTl8yKSkge1xuICAgICAgcmV0dXJuIG5ldyBDb2RlQnVpbGRSdW5uZXJJbWFnZUJ1aWxkZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgfSBlbHNlIGlmIChvcy5pcyhPcy5XSU5ET1dTKSkge1xuICAgICAgcmV0dXJuIG5ldyBBd3NJbWFnZUJ1aWxkZXJSdW5uZXJJbWFnZUJ1aWxkZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgcnVubmVyIGltYWdlIGJ1aWxkZXIgaW1wbGVtZW50YXRpb24gZm9yICR7b3MubmFtZX1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,8 +1,7 @@
1
- import { aws_ec2 as ec2 } from 'aws-cdk-lib';
2
1
  import { Construct } from 'constructs';
3
2
  import { ImageBuilderComponent } from './builder';
4
3
  import { ImageBuilderObjectBase } from './common';
5
- import { Architecture, Os } from '../../common';
4
+ import { Architecture, Os } from '../../providers/common';
6
5
  /**
7
6
  * Properties for AmiRecipe construct.
8
7
  */
@@ -39,5 +38,5 @@ export declare class AmiRecipe extends ImageBuilderObjectBase {
39
38
  *
40
39
  * @internal
41
40
  */
42
- export declare function defaultBaseAmi(os: Os, architecture: Architecture): ec2.IMachineImage;
41
+ export declare function defaultBaseAmi(scope: Construct, os: Os, architecture: Architecture): string;
43
42
  export {};
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultBaseAmi = exports.AmiRecipe = void 0;
4
+ const cdk = require("aws-cdk-lib");
5
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ const common_1 = require("./common");
7
+ const common_2 = require("../../providers/common");
8
+ const common_3 = require("../common");
9
+ /**
10
+ * Image builder recipe for Amazon Machine Image (AMI).
11
+ *
12
+ * @internal
13
+ */
14
+ class AmiRecipe extends common_1.ImageBuilderObjectBase {
15
+ constructor(scope, id, props) {
16
+ super(scope, id);
17
+ const name = (0, common_3.uniqueImageBuilderName)(this);
18
+ let components = props.components.map(component => {
19
+ return {
20
+ componentArn: component.arn,
21
+ };
22
+ });
23
+ let workingDirectory;
24
+ if (props.platform == 'Linux') {
25
+ workingDirectory = '/home/runner';
26
+ }
27
+ else if (props.platform == 'Windows') {
28
+ workingDirectory = 'C:/'; // must exist or Image Builder fails and must not be empty or git will stall installing from the default windows\system32
29
+ }
30
+ else {
31
+ throw new Error(`Unsupported AMI recipe platform: ${props.platform}`);
32
+ }
33
+ const recipe = new aws_cdk_lib_1.aws_imagebuilder.CfnImageRecipe(this, 'Recipe', {
34
+ name: name,
35
+ version: this.version('ImageRecipe', name, {
36
+ platform: props.platform,
37
+ components,
38
+ parentAmi: props.baseAmi,
39
+ }),
40
+ parentImage: props.baseAmi,
41
+ components,
42
+ workingDirectory,
43
+ });
44
+ this.arn = recipe.attrArn;
45
+ this.name = name;
46
+ }
47
+ }
48
+ exports.AmiRecipe = AmiRecipe;
49
+ /**
50
+ * Default base AMI for given OS and architecture.
51
+ *
52
+ * @internal
53
+ */
54
+ function defaultBaseAmi(scope, os, architecture) {
55
+ const stack = cdk.Stack.of(scope);
56
+ let arch;
57
+ if (architecture.is(common_2.Architecture.X86_64)) {
58
+ arch = 'x86';
59
+ }
60
+ else if (architecture.is(common_2.Architecture.ARM64)) {
61
+ arch = 'arm64';
62
+ }
63
+ else {
64
+ throw new Error(`Unsupported architecture for base AMI: ${architecture.name}`);
65
+ }
66
+ if (os.is(common_2.Os.LINUX_UBUNTU) || os.is(common_2.Os.LINUX)) {
67
+ return stack.formatArn({
68
+ service: 'imagebuilder',
69
+ resource: 'image',
70
+ account: 'aws',
71
+ resourceName: `ubuntu-server-22-lts-${arch}/x.x.x`,
72
+ });
73
+ }
74
+ if (os.is(common_2.Os.LINUX_AMAZON_2)) {
75
+ return stack.formatArn({
76
+ service: 'imagebuilder',
77
+ resource: 'image',
78
+ account: 'aws',
79
+ resourceName: `amazon-linux-2-${arch}/x.x.x`,
80
+ });
81
+ }
82
+ if (os.is(common_2.Os.WINDOWS)) {
83
+ return stack.formatArn({
84
+ service: 'imagebuilder',
85
+ resource: 'image',
86
+ account: 'aws',
87
+ resourceName: `windows-server-2022-english-full-base-${arch}/x.x.x`,
88
+ });
89
+ }
90
+ throw new Error(`OS ${os.name} not supported for AMI runner image`);
91
+ }
92
+ exports.defaultBaseAmi = defaultBaseAmi;
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1pLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ltYWdlLWJ1aWxkZXJzL2F3cy1pbWFnZS1idWlsZGVyL2FtaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsNkNBQStEO0FBRy9ELHFDQUFrRDtBQUNsRCxtREFBMEQ7QUFDMUQsc0NBQW1EO0FBMkJuRDs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsK0JBQXNCO0lBSW5ELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLElBQUksR0FBRyxJQUFBLCtCQUFzQixFQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFDLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2hELE9BQU87Z0JBQ0wsWUFBWSxFQUFFLFNBQVMsQ0FBQyxHQUFHO2FBQzVCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksZ0JBQWdCLENBQUM7UUFDckIsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLE9BQU8sRUFBRTtZQUM3QixnQkFBZ0IsR0FBRyxjQUFjLENBQUM7U0FDbkM7YUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksU0FBUyxFQUFFO1lBQ3RDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLHlIQUF5SDtTQUNwSjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDdkU7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLDhCQUFZLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDN0QsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFO2dCQUN6QyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7Z0JBQ3hCLFVBQVU7Z0JBQ1YsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPO2FBQ3pCLENBQUM7WUFDRixXQUFXLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDMUIsVUFBVTtZQUNWLGdCQUFnQjtTQUNqQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBdkNELDhCQXVDQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBZ0IsRUFBRSxFQUFNLEVBQUUsWUFBMEI7SUFDakYsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbEMsSUFBSSxJQUFJLENBQUM7SUFDVCxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMscUJBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN4QyxJQUFJLEdBQUcsS0FBSyxDQUFDO0tBQ2Q7U0FBTSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMscUJBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUM5QyxJQUFJLEdBQUcsT0FBTyxDQUFDO0tBQ2hCO1NBQU07UUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUNoRjtJQUVELElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDN0MsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsWUFBWSxFQUFFLHdCQUF3QixJQUFJLFFBQVE7U0FDbkQsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQzVCLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUNyQixPQUFPLEVBQUUsY0FBYztZQUN2QixRQUFRLEVBQUUsT0FBTztZQUNqQixPQUFPLEVBQUUsS0FBSztZQUNkLFlBQVksRUFBRSxrQkFBa0IsSUFBSSxRQUFRO1NBQzdDLENBQUMsQ0FBQztLQUNKO0lBRUQsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNyQixPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDckIsT0FBTyxFQUFFLGNBQWM7WUFDdkIsUUFBUSxFQUFFLE9BQU87WUFDakIsT0FBTyxFQUFFLEtBQUs7WUFDZCxZQUFZLEVBQUUseUNBQXlDLElBQUksUUFBUTtTQUNwRSxDQUFDLENBQUM7S0FDSjtJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUF4Q0Qsd0NBd0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IGF3c19pbWFnZWJ1aWxkZXIgYXMgaW1hZ2VidWlsZGVyIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJbWFnZUJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuL2J1aWxkZXInO1xuaW1wb3J0IHsgSW1hZ2VCdWlsZGVyT2JqZWN0QmFzZSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IEFyY2hpdGVjdHVyZSwgT3MgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvY29tbW9uJztcbmltcG9ydCB7IHVuaXF1ZUltYWdlQnVpbGRlck5hbWUgfSBmcm9tICcuLi9jb21tb24nO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEFtaVJlY2lwZSBjb25zdHJ1Y3QuXG4gKi9cbmludGVyZmFjZSBBbWlSZWNpcGVQcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIFRhcmdldCBwbGF0Zm9ybS4gTXVzdCBtYXRjaCBidWlsZGVyIHBsYXRmb3JtLlxuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm06ICdMaW51eCcgfCAnV2luZG93cyc7XG5cbiAgLyoqXG4gICAqIFRhcmdldCBhcmNoaXRlY3R1cmUuIE11c3QgbWF0Y2ggYnVpbGRlciBwbGF0Zm9ybS5cbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlO1xuXG4gIC8qKlxuICAgKiBCYXNlIEFNSSB0byB1c2UgZm9yIHRoZSBuZXcgcnVubmVyIEFNSS5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VBbWk6IHN0cmluZztcblxuICAvKipcbiAgICogQ29tcG9uZW50cyB0byBhZGQgdG8gdGFyZ2V0IGNvbnRhaW5lciBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudHM6IEltYWdlQnVpbGRlckNvbXBvbmVudFtdO1xufVxuXG4vKipcbiAqIEltYWdlIGJ1aWxkZXIgcmVjaXBlIGZvciBBbWF6b24gTWFjaGluZSBJbWFnZSAoQU1JKS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIEFtaVJlY2lwZSBleHRlbmRzIEltYWdlQnVpbGRlck9iamVjdEJhc2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFtaVJlY2lwZVByb3BlcnRpZXMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgbmFtZSA9IHVuaXF1ZUltYWdlQnVpbGRlck5hbWUodGhpcyk7XG5cbiAgICBsZXQgY29tcG9uZW50cyA9IHByb3BzLmNvbXBvbmVudHMubWFwKGNvbXBvbmVudCA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wb25lbnRBcm46IGNvbXBvbmVudC5hcm4sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgbGV0IHdvcmtpbmdEaXJlY3Rvcnk7XG4gICAgaWYgKHByb3BzLnBsYXRmb3JtID09ICdMaW51eCcpIHtcbiAgICAgIHdvcmtpbmdEaXJlY3RvcnkgPSAnL2hvbWUvcnVubmVyJztcbiAgICB9IGVsc2UgaWYgKHByb3BzLnBsYXRmb3JtID09ICdXaW5kb3dzJykge1xuICAgICAgd29ya2luZ0RpcmVjdG9yeSA9ICdDOi8nOyAvLyBtdXN0IGV4aXN0IG9yIEltYWdlIEJ1aWxkZXIgZmFpbHMgYW5kIG11c3Qgbm90IGJlIGVtcHR5IG9yIGdpdCB3aWxsIHN0YWxsIGluc3RhbGxpbmcgZnJvbSB0aGUgZGVmYXVsdCB3aW5kb3dzXFxzeXN0ZW0zMlxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFNSSByZWNpcGUgcGxhdGZvcm06ICR7cHJvcHMucGxhdGZvcm19YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjaXBlID0gbmV3IGltYWdlYnVpbGRlci5DZm5JbWFnZVJlY2lwZSh0aGlzLCAnUmVjaXBlJywge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbignSW1hZ2VSZWNpcGUnLCBuYW1lLCB7XG4gICAgICAgIHBsYXRmb3JtOiBwcm9wcy5wbGF0Zm9ybSxcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgcGFyZW50QW1pOiBwcm9wcy5iYXNlQW1pLFxuICAgICAgfSksXG4gICAgICBwYXJlbnRJbWFnZTogcHJvcHMuYmFzZUFtaSxcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICB3b3JraW5nRGlyZWN0b3J5LFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcm4gPSByZWNpcGUuYXR0ckFybjtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBiYXNlIEFNSSBmb3IgZ2l2ZW4gT1MgYW5kIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRCYXNlQW1pKHNjb3BlOiBDb25zdHJ1Y3QsIG9zOiBPcywgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUpIHtcbiAgY29uc3Qgc3RhY2sgPSBjZGsuU3RhY2sub2Yoc2NvcGUpO1xuXG4gIGxldCBhcmNoO1xuICBpZiAoYXJjaGl0ZWN0dXJlLmlzKEFyY2hpdGVjdHVyZS5YODZfNjQpKSB7XG4gICAgYXJjaCA9ICd4ODYnO1xuICB9IGVsc2UgaWYgKGFyY2hpdGVjdHVyZS5pcyhBcmNoaXRlY3R1cmUuQVJNNjQpKSB7XG4gICAgYXJjaCA9ICdhcm02NCc7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUgZm9yIGJhc2UgQU1JOiAke2FyY2hpdGVjdHVyZS5uYW1lfWApO1xuICB9XG5cbiAgaWYgKG9zLmlzKE9zLkxJTlVYX1VCVU5UVSkgfHwgb3MuaXMoT3MuTElOVVgpKSB7XG4gICAgcmV0dXJuIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnaW1hZ2UnLFxuICAgICAgYWNjb3VudDogJ2F3cycsXG4gICAgICByZXNvdXJjZU5hbWU6IGB1YnVudHUtc2VydmVyLTIyLWx0cy0ke2FyY2h9L3gueC54YCxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChvcy5pcyhPcy5MSU5VWF9BTUFaT05fMikpIHtcbiAgICByZXR1cm4gc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgcmVzb3VyY2U6ICdpbWFnZScsXG4gICAgICBhY2NvdW50OiAnYXdzJyxcbiAgICAgIHJlc291cmNlTmFtZTogYGFtYXpvbi1saW51eC0yLSR7YXJjaH0veC54LnhgLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9zLmlzKE9zLldJTkRPV1MpKSB7XG4gICAgcmV0dXJuIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnaW1hZ2UnLFxuICAgICAgYWNjb3VudDogJ2F3cycsXG4gICAgICByZXNvdXJjZU5hbWU6IGB3aW5kb3dzLXNlcnZlci0yMDIyLWVuZ2xpc2gtZnVsbC1iYXNlLSR7YXJjaH0veC54LnhgLFxuICAgIH0pO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBPUyAke29zLm5hbWV9IG5vdCBzdXBwb3J0ZWQgZm9yIEFNSSBydW5uZXIgaW1hZ2VgKTtcbn1cblxuIl19
@@ -2,7 +2,7 @@ import * as cdk from 'aws-cdk-lib';
2
2
  import { aws_ec2 as ec2, aws_iam as iam, aws_imagebuilder as imagebuilder, aws_logs as logs, aws_s3_assets as s3_assets, aws_sns as sns } from 'aws-cdk-lib';
3
3
  import { Construct, IConstruct } from 'constructs';
4
4
  import { ImageBuilderObjectBase } from './common';
5
- import { RunnerAmi, RunnerImage } from '../../common';
5
+ import { RunnerAmi, RunnerImage } from '../../providers';
6
6
  import { RunnerImageBuilderBase, RunnerImageBuilderProps } from '../common';
7
7
  export interface AwsImageBuilderRunnerImageBuilderProps {
8
8
  /**
@@ -51,6 +51,12 @@ export interface ImageBuilderComponentProperties {
51
51
  * Optional assets to add to the built image.
52
52
  */
53
53
  readonly assets?: ImageBuilderAsset[];
54
+ /**
55
+ * Require a reboot after installing this component.
56
+ *
57
+ * @default false
58
+ */
59
+ readonly reboot?: boolean;
54
60
  }
55
61
  /**
56
62
  * Components are a set of commands to run and optional files to add to an image. Components are the building blocks of images built by Image Builder.
@@ -63,7 +69,8 @@ export interface ImageBuilderComponentProperties {
63
69
  * displayName: 'AWS CLI',
64
70
  * description: 'Install latest version of AWS CLI',
65
71
  * commands: [
66
- * 'Start-Process msiexec.exe -Wait -ArgumentList \'/i https://awscli.amazonaws.com/AWSCLIV2.msi /qn\'',
72
+ * '$p = Start-Process msiexec.exe -PassThru -Wait -ArgumentList \'/i https://awscli.amazonaws.com/AWSCLIV2.msi /qn\'',
73
+ * 'if ($p.ExitCode -ne 0) { throw "Exit code is $p.ExitCode" }',
67
74
  * ],
68
75
  * }
69
76
  * ```
@@ -103,7 +110,6 @@ export declare class AwsImageBuilderRunnerImageBuilder extends RunnerImageBuilde
103
110
  private readonly logRemovalPolicy;
104
111
  private readonly vpc;
105
112
  private readonly securityGroups;
106
- private readonly repository;
107
113
  private readonly subnetSelection;
108
114
  private readonly rebuildInterval;
109
115
  private readonly boundComponents;
@@ -130,6 +136,7 @@ export declare class AwsImageBuilderRunnerImageBuilder extends RunnerImageBuilde
130
136
  bindAmi(): RunnerAmi;
131
137
  private amiCleaner;
132
138
  private bindComponents;
139
+ private reaper;
133
140
  }
134
141
  /**
135
142
  * @internal