@cloudsnorkel/cdk-github-runners 0.14.18 β†’ 0.14.20

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 (49) hide show
  1. package/.jsii +741 -230
  2. package/API.md +499 -41
  3. package/README.md +34 -4
  4. package/assets/providers/ami-root-device.lambda/index.js +11 -0
  5. package/lib/access.js +1 -1
  6. package/lib/image-builders/api.js +1 -1
  7. package/lib/image-builders/aws-image-builder/ami.d.ts +3 -2
  8. package/lib/image-builders/aws-image-builder/ami.js +9 -34
  9. package/lib/image-builders/aws-image-builder/base-image.d.ts +118 -0
  10. package/lib/image-builders/aws-image-builder/base-image.js +130 -0
  11. package/lib/image-builders/aws-image-builder/builder.js +17 -5
  12. package/lib/image-builders/aws-image-builder/container.d.ts +2 -1
  13. package/lib/image-builders/aws-image-builder/container.js +7 -6
  14. package/lib/image-builders/aws-image-builder/deprecated/ami.js +1 -1
  15. package/lib/image-builders/aws-image-builder/deprecated/container.js +1 -1
  16. package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +1 -1
  17. package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
  18. package/lib/image-builders/aws-image-builder/index.d.ts +1 -0
  19. package/lib/image-builders/aws-image-builder/index.js +2 -1
  20. package/lib/image-builders/codebuild-deprecated.js +1 -1
  21. package/lib/image-builders/codebuild.d.ts +10 -0
  22. package/lib/image-builders/codebuild.js +15 -4
  23. package/lib/image-builders/common.d.ts +22 -3
  24. package/lib/image-builders/common.js +1 -1
  25. package/lib/image-builders/components.d.ts +1 -1
  26. package/lib/image-builders/components.js +31 -21
  27. package/lib/image-builders/static.js +4 -3
  28. package/lib/providers/ami-root-device.lambda.js +12 -1
  29. package/lib/providers/codebuild.d.ts +12 -0
  30. package/lib/providers/codebuild.js +4 -4
  31. package/lib/providers/common.js +3 -3
  32. package/lib/providers/composite.js +18 -33
  33. package/lib/providers/ec2.js +5 -5
  34. package/lib/providers/ecs.d.ts +3 -1
  35. package/lib/providers/ecs.js +3 -3
  36. package/lib/providers/fargate.d.ts +14 -0
  37. package/lib/providers/fargate.js +4 -4
  38. package/lib/providers/lambda.d.ts +2 -0
  39. package/lib/providers/lambda.js +4 -4
  40. package/lib/runner.d.ts +24 -5
  41. package/lib/runner.js +46 -9
  42. package/lib/secrets.js +1 -1
  43. package/lib/utils.d.ts +13 -0
  44. package/lib/utils.js +47 -1
  45. package/lib/webhook-redelivery.d.ts +11 -0
  46. package/lib/webhook-redelivery.js +3 -1
  47. package/lib/webhook.d.ts +10 -0
  48. package/lib/webhook.js +3 -1
  49. package/package.json +1 -1
package/.jsii CHANGED
@@ -3858,7 +3858,7 @@
3858
3858
  },
3859
3859
  "name": "@cloudsnorkel/cdk-github-runners",
3860
3860
  "readme": {
3861
- "markdown": "# GitHub Self-Hosted Runners CDK Constructs\n\n[![NPM](https://img.shields.io/npm/v/@cloudsnorkel/cdk-github-runners?label=npm&logo=npm)][7]\n[![PyPI](https://img.shields.io/pypi/v/cloudsnorkel.cdk-github-runners?label=pypi&logo=pypi)][6]\n[![Maven Central](https://img.shields.io/maven-central/v/com.cloudsnorkel/cdk.github.runners.svg?label=Maven%20Central&logo=apachemaven)][8]\n[![Go](https://img.shields.io/github/v/tag/CloudSnorkel/cdk-github-runners?color=red&label=go&logo=go)][11]\n[![Nuget](https://img.shields.io/nuget/v/CloudSnorkel.Cdk.Github.Runners?color=red&&logo=nuget)][12]\n[![Release](https://github.com/CloudSnorkel/cdk-github-runners/actions/workflows/release.yml/badge.svg)](https://github.com/CloudSnorkel/cdk-github-runners/actions/workflows/release.yml)\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue)](https://github.com/CloudSnorkel/cdk-github-runners/blob/main/LICENSE)\n\nUse this CDK construct to create ephemeral [self-hosted GitHub runners][1] on-demand inside your AWS account.\n\n* 🧩 Easy to configure GitHub integration with a web-based interface\n* 🧠 Customizable runners with decent defaults\n* πŸƒπŸ» Multiple runner configurations controlled by labels\n* πŸ” Everything fully hosted in your account\n* πŸ”ƒ Automatically updated build environment with latest runner version\n\nSelf-hosted runners in AWS are useful when:\n\n* You need easy access to internal resources in your actions\n* You want to pre-install some software for your actions\n* You want to provide some basic AWS API access (but [aws-actions/configure-aws-credentials][2] has more security controls)\n* You are using GitHub Enterprise Server\n\nEphemeral (or on-demand) runners are the [recommended way by GitHub][14] for auto-scaling, and they make sure all jobs run with a clean image. Runners are started on-demand. You don't pay unless a job is running.\n\n## API\n\nThe best way to browse API documentation is on [Constructs Hub][13]. It is available in all supported programming languages.\n\n## Providers\n\nA runner provider creates compute resources on-demand and uses [actions/runner][5] to start a runner.\n\n| | EC2 | CodeBuild | Fargate | ECS | Lambda |\n|------------------|-------------------|----------------------------|----------------|----------------|---------------|\n| **Time limit** | Unlimited | 8 hours | Unlimited | Unlimited | 15 minutes |\n| **vCPUs** | Unlimited | 2, 4, 8, or 72 | 0.25 to 4 | Unlimited | 1 to 6 |\n| **RAM** | Unlimited | 3gb, 7gb, 15gb, or 145gb | 512mb to 30gb | Unlimited | 128mb to 10gb |\n| **Storage** | Unlimited | 50gb to 824gb | 20gb to 200gb | Unlimited | Up to 10gb |\n| **Architecture** | x86_64, ARM64 | x86_64, ARM64 | x86_64, ARM64 | x86_64, ARM64 | x86_64, ARM64 |\n| **sudo** | βœ” | βœ” | βœ” | βœ” | ❌ |\n| **Docker** | βœ” | βœ” (Linux only) | ❌ | βœ” | ❌ |\n| **Spot pricing** | βœ” | ❌ | βœ” | βœ” | ❌ |\n| **OS** | Linux, Windows | Linux, Windows | Linux, Windows | Linux, Windows | Linux |\n\nThe best provider to use mostly depends on your current infrastructure. When in doubt, CodeBuild is always a good choice. Execution history and logs are easy to view, and it has no restrictive limits unless you need to run for more than 8 hours.\n\n* EC2 is useful when you want runners to have complete access to the host\n* ECS is useful when you want to control the infrastructure, like leaving the runner host running for faster startups\n* Lambda is useful for short jobs that can work within time, size and readonly system constraints\n\nYou can also create your own provider by implementing `IRunnerProvider`.\n\n## Installation\n\n1. Install and use the appropriate package\n <details><summary>Python</summary>\n\n ### Install\n Available on [PyPI][6].\n ```bash\n pip install cloudsnorkel.cdk-github-runners\n ```\n ### Use\n ```python\n from aws_cdk import App, Stack\n from cloudsnorkel.cdk_github_runners import GitHubRunners\n\n app = App()\n stack = Stack(app, \"github-runners\")\n GitHubRunners(stack, \"runners\")\n\n app.synth()\n ```\n </details>\n <details><summary>TypeScript or JavaScript</summary>\n\n ### Install\n Available on [npm][7].\n ```bash\n npm i @cloudsnorkel/cdk-github-runners\n ```\n ### Use\n ```typescript\n import { App, Stack } from 'aws-cdk-lib';\n import { GitHubRunners } from '@cloudsnorkel/cdk-github-runners';\n\n const app = new App();\n const stack = new Stack(app, 'github-runners');\n new GitHubRunners(stack, 'runners');\n\n app.synth();\n ```\n </details>\n <details><summary>Java</summary>\n\n ### Install\n Available on [Maven][8].\n ```xml\n <dependency>\n <groupId>com.cloudsnorkel</groupId>\n <artifactId>cdk.github.runners</artifactId>\n </dependency>\n ```\n ### Use\n ```java\n import software.amazon.awscdk.App;\n import software.amazon.awscdk.Stack;\n import com.cloudsnorkel.cdk.github.runners.GitHubRunners;\n\n public class Example {\n public static void main(String[] args){\n App app = new App();\n Stack stack = new Stack(app, \"github-runners\");\n GitHubRunners.Builder.create(stack, \"runners\").build();\n\n app.synth();\n }\n }\n ```\n </details>\n <details><summary>Go</summary>\n\n ### Install\n Available on [GitHub][11].\n ```bash\n go get github.com/CloudSnorkel/cdk-github-runners-go/cloudsnorkelcdkgithubrunners\n ```\n ### Use\n ```go\n package main\n\n import (\n \"github.com/CloudSnorkel/cdk-github-runners-go/cloudsnorkelcdkgithubrunners\"\n \"github.com/aws/aws-cdk-go/awscdk/v2\"\n \"github.com/aws/jsii-runtime-go\"\n )\n\n func main() {\n app := awscdk.NewApp(nil)\n stack := awscdk.NewStack(app, jsii.String(\"github-runners\"), &awscdk.StackProps{})\n cloudsnorkelcdkgithubrunners.NewGitHubRunners(stack, jsii.String(\"runners\"), &cloudsnorkelcdkgithubrunners.GitHubRunnersProps{})\n\n app.Synth(nil)\n }\n ```\n </details>\n <details><summary>.NET</summary>\n\n ### Install\n Available on [Nuget][12].\n ```bash\n dotnet add package CloudSnorkel.Cdk.Github.Runners\n ```\n ### Use\n ```csharp\n using Amazon.CDK;\n using CloudSnorkel;\n\n namespace Example\n {\n sealed class Program\n {\n public static void Main(string[] args)\n {\n var app = new App();\n var stack = new Stack(app, \"github-runners\");\n new GitHubRunners(stack, \"runners\");\n app.Synth();\n }\n }\n }\n ```\n </details>\n2. Use `GitHubRunners` construct in your code (starting with default arguments is fine)\n3. Deploy your stack\n4. Look for the status command output similar to `aws --region us-east-1 lambda invoke --function-name status-XYZ123 status.json`\n ```\n βœ… github-runners-test\n\n ✨ Deployment time: 260.01s\n\n Outputs:\n github-runners-test.runnersstatuscommand4A30F0F5 = aws --region us-east-1 lambda invoke --function-name github-runners-test-runnersstatus1A5771C0-mvttg8oPQnQS status.json\n ```\n5. Execute the status command (you may need to specify `--profile` too) and open the resulting `status.json` file\n6. Open the URL in `github.setup.url` from `status.json` or [manually setup GitHub](SETUP_GITHUB.md) integration as an app or with personal access token\n7. Run status command again to confirm `github.auth.status` and `github.webhook.status` are OK\n8. Trigger a GitHub action that has a `self-hosted` label with `runs-on: [self-hosted, codebuild]` (or non-default labels you set in step 2)\n9. If the action is not successful, see [troubleshooting](#Troubleshooting)\n\n[![Demo](demo-thumbnail.jpg)](https://youtu.be/wlyv_3V8lIw)\n\n## Customizing\n\nThe default providers configured by `GitHubRunners` are useful for testing but probably not too much for actual production work. They run in the default VPC or no VPC and have no added IAM permissions. You would usually want to configure the providers yourself.\n\nFor example:\n\n```typescript\nlet vpc: ec2.Vpc;\nlet runnerSg: ec2.SecurityGroup;\nlet dbSg: ec2.SecurityGroup;\nlet bucket: s3.Bucket;\n\n// create a custom CodeBuild provider\nconst myProvider = new CodeBuildRunnerProvider(this, 'codebuild runner', {\n labels: ['my-codebuild'],\n vpc: vpc,\n securityGroups: [runnerSg],\n});\n// grant some permissions to the provider\nbucket.grantReadWrite(myProvider);\ndbSg.connections.allowFrom(runnerSg, ec2.Port.tcp(3306), 'allow runners to connect to MySQL database');\n\n// create the runner infrastructure\nnew GitHubRunners(this, 'runners', {\n providers: [myProvider],\n});\n```\n\nAnother way to customize runners is by modifying the image used to spin them up. The image contains the [runner][5], any required dependencies, and integration code with the provider. You may choose to customize this image by adding more packages, for example.\n\n```typescript\nconst myBuilder = FargateRunnerProvider.imageBuilder(this, 'image builder');\nmyBuilder.addComponent(\n RunnerImageComponent.custom({ commands: ['apt install -y nginx xz-utils'] }),\n);\n\nconst myProvider = new FargateRunnerProvider(this, 'fargate runner', {\n labels: ['customized-fargate'],\n imageBuilder: myBuilder,\n});\n\n// create the runner infrastructure\nnew GitHubRunners(this, 'runners', {\n providers: [myProvider],\n});\n```\n\nYour workflow will then look like:\n\n```yaml\nname: self-hosted example\non: push\njobs:\n self-hosted:\n runs-on: [self-hosted, customized-fargate]\n steps:\n - run: echo hello world\n```\n\nWindows images can also be customized the same way.\n\n```typescript\nconst myWindowsBuilder = FargateRunnerProvider.imageBuilder(this, 'Windows image builder', {\n architecture: Architecture.X86_64,\n os: Os.WINDOWS,\n});\nmyWindowsBuilder.addComponent(\n RunnerImageComponent.custom({\n name: 'Ninja',\n commands: [\n 'Invoke-WebRequest -UseBasicParsing -Uri \"https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip\" -OutFile ninja.zip',\n 'Expand-Archive ninja.zip -DestinationPath C:\\\\actions',\n 'del ninja.zip',\n ],\n }),\n);\n\nconst myProvider = new FargateRunnerProvider(this, 'fargate runner', {\n labels: ['customized-windows-fargate'],\n imageBuilder: myWindowsBuilder,\n});\n\nnew GitHubRunners(this, 'runners', {\n providers: [myProvider],\n});\n```\n\nThe runner OS and architecture is determined by the image it is set to use. For example, to create a Fargate runner provider for ARM64 set the `architecture` property for the image builder to `Architecture.ARM64` in the image builder properties.\n\n```typescript\nnew GitHubRunners(this, 'runners', {\n providers: [\n new FargateRunnerProvider(this, 'fargate runner', {\n labels: ['arm64', 'fargate'],\n imageBuilder: FargateRunnerProvider.imageBuilder(this, 'image builder', {\n architecture: Architecture.ARM64,\n os: Os.LINUX_UBUNTU,\n }),\n }),\n ],\n});\n```\n\n### Composite Providers\n\nComposite providers allow you to combine multiple runner providers with different strategies. There are two types:\n\n**Fallback Strategy**: Try providers in order until one succeeds. Useful for trying spot instances first, then falling back to on-demand if spot capacity is unavailable.\n\n```typescript\n// Try spot instances first, fall back to on-demand if spot is unavailable\nconst ecsFallback = CompositeProvider.fallback(this, 'ECS Fallback', [\n new EcsRunnerProvider(this, 'ECS Spot', {\n labels: ['ecs', 'linux', 'x64'],\n spot: true,\n // ... other config\n }),\n new EcsRunnerProvider(this, 'ECS On-Demand', {\n labels: ['ecs', 'linux', 'x64'],\n spot: false,\n // ... other config\n }),\n]);\n\nnew GitHubRunners(this, 'runners', {\n providers: [ecsFallback],\n});\n```\n\n**Weighted Distribution Strategy**: Randomly select a provider based on weights. Useful for distributing load across multiple availability zones or instance types.\n\n```typescript\n// Distribute 60% of traffic to AZ-1, 40% to AZ-2\nconst distributedProvider = CompositeProvider.distribute(this, 'Fargate Distribution', [\n {\n weight: 3, // 3/(3+2) = 60%\n provider: new FargateRunnerProvider(this, 'Fargate AZ-1', {\n labels: ['fargate', 'linux', 'x64'],\n subnetSelection: vpc.selectSubnets({\n availabilityZones: [vpc.availabilityZones[0]],\n }),\n // ... other config\n }),\n },\n {\n weight: 2, // 2/(3+2) = 40%\n provider: new FargateRunnerProvider(this, 'Fargate AZ-2', {\n labels: ['fargate', 'linux', 'x64'],\n subnetSelection: vpc.selectSubnets({\n availabilityZones: [vpc.availabilityZones[1]],\n }),\n // ... other config\n }),\n },\n]);\n\nnew GitHubRunners(this, 'runners', {\n providers: [distributedProvider],\n});\n```\n\n**Important**: All providers in a composite must have the exact same labels. This ensures any provisioned runner can match the labels requested by the GitHub workflow job.\n\n### Custom Provider Selection\n\nBy default, providers are selected based on label matching: the first provider that has all the labels requested by the job is selected. You can customize this behavior using a provider selector Lambda function to:\n\n* Filter out certain jobs (prevent runner provisioning)\n* Dynamically select a provider based on job characteristics (repository, branch, time of day, etc.)\n* Customize labels for the runner (add, remove, or modify labels dynamically)\n\nThe selector function receives the full GitHub webhook payload, a map of all available providers and their labels, and the default provider/labels that would have been selected. It returns the provider to use (or `undefined` to skip runner creation) and the labels to assign to the runner.\n\n**Example: Route jobs to different providers based on repository**\n\n```typescript\nimport { ComputeType } from 'aws-cdk-lib/aws-codebuild';\nimport { Function, Code, Runtime } from 'aws-cdk-lib/aws-lambda';\nimport { GitHubRunners, CodeBuildRunnerProvider } from '@cloudsnorkel/cdk-github-runners';\n\nconst defaultProvider = new CodeBuildRunnerProvider(this, 'default', {\n labels: ['custom-runner', 'default'],\n});\nconst productionProvider = new CodeBuildRunnerProvider(this, 'production', {\n labels: ['custom-runner', 'production'],\n computeType: ComputeType.LARGE,\n});\n\nconst providerSelector = new Function(this, 'provider-selector', {\n runtime: Runtime.NODEJS_LATEST,\n handler: 'index.handler',\n code: Code.fromInline(`\n exports.handler = async (event) => {\n const { payload, providers, defaultProvider, defaultLabels } = event;\n\n // Route production repos to dedicated provider\n if (payload.repository.name.includes('prod')) {\n return {\n provider: '${productionProvider.node.path}',\n labels: ['custom-runner', 'production', 'modified-via-selector'],\n };\n }\n\n // Filter out draft PRs\n if (payload.workflow_job.head_branch?.startsWith('draft/')) {\n return { provider: undefined }; // Skip runner provisioning\n }\n\n // Use default for everything else\n return {\n provider: defaultProvider,\n labels: defaultLabels,\n };\n };\n `),\n});\n\nnew GitHubRunners(this, 'runners', {\n providers: [defaultProvider, productionProvider],\n providerSelector: providerSelector,\n});\n```\n\n**Example: Add dynamic labels based on job metadata**\n\n```typescript\nconst providerSelector = new Function(this, 'provider-selector', {\n runtime: Runtime.NODEJS_LATEST,\n handler: 'index.handler',\n code: Code.fromInline(`\n exports.handler = async (event) => {\n const { payload, defaultProvider, defaultLabels } = event;\n\n // Add branch name as a label\n const branch = payload.workflow_job.head_branch || 'unknown';\n const labels = [...(defaultLabels || []), 'branch:' + branch];\n\n return {\n provider: defaultProvider,\n labels: labels,\n };\n };\n `),\n});\n```\n\n**Important considerations:**\n\n* ⚠️ **Label matching responsibility**: You are responsible for ensuring the selected provider's labels match what the job requires. If labels don't match, the runner will be provisioned but GitHub Actions won't assign the job to it.\n* ⚠️ **No guarantee of assignment**: Provider selection only determines which provider will provision a runner. GitHub Actions may still route the job to any available runner with matching labels. For reliable provider assignment, consider repo-level runner registration (the default).\n* ⚑ **Performance**: The selector runs synchronously during webhook processing. Keep it fast and efficientβ€”the webhook has a 30-second timeout total.\n\n## Examples\n\nBeyond the code snippets above, the fullest example available is the [integration test](test/default.integ.ts).\n\nIf you have more to share, please open a PR adding them to the `examples` folder.\n\n## Architecture\n\n![Architecture diagram](architecture.svg)\n\n## Troubleshooting\n\nRunners are started in response to a webhook coming in from GitHub. If there are any issues starting the runner like missing capacity or transient API issues, the provider will keep retrying for 24 hours. Configuration issue related errors like pointing to a missing AMI will not be retried. GitHub itself will cancel the job if it can't find a runner for 24 hours. If your jobs don't start, follow the steps below to examine all parts of this workflow.\n\n1. Always start with the status function, make sure no errors are reported, and confirm all status codes are OK\n2. Make sure `runs-on` in the workflow matches the expected labels set in the runner provider\n3. Diagnose relevant executions of the orchestrator step function by visiting the URL in `troubleshooting.stepFunctionUrl` from `status.json`\n 1. If the execution failed, check your runner provider configuration for errors\n 2. If the execution is still running for a long time, check the execution events to see why runner starting is being retried\n 3. If there are no relevant executions, move to the next step\n4. Confirm the webhook Lambda was called by visiting the URL in `troubleshooting.webhookHandlerUrl` from `status.json`\n 1. If it's not called or logs errors, confirm the webhook settings on the GitHub side\n 2. If you see too many errors, make sure you're only sending `workflow_job` events\n5. When using GitHub app, make sure there are active installations in `github.auth.app.installations`\n\nAll logs are saved in CloudWatch.\n* Log group names can be found in `status.json` for each provider, image builder, and other parts of the system\n* Some useful Logs Insights queries can be enabled with `GitHubRunners.createLogsInsightsQueries()`\n\nTo get `status.json`, check out the CloudFormation stack output for a command that generates it. The command looks like:\n\n```\naws --region us-east-1 lambda invoke --function-name status-XYZ123 status.json\n```\n\n## Monitoring\n\nThere are two important ways to monitor your runners:\n\n1. Make sure runners don't fail to start. When that happens, jobs may sit and wait. Use `GitHubRunners.metricFailed()` to get a metric for the number of failed runner starts. You should use this metric to trigger an alarm.\n2. Make sure runner images don't fail to build. Failed runner image builds mean you will get stuck with out-of-date software on your runners. It may lead to security vulnerabilities, or it may lead to slower runner start-ups as the runner software itself needs to be updated. Use `GitHubRunners.failedImageBuildsTopic()` to get SNS topic that gets notified of failed runner image builds. You should subscribe to this topic.\n\nOther useful metrics to track:\n\n1. Use `GitHubRunners.metricJobCompleted()` to get a metric for the number of completed jobs broken down by labels and job success.\n2. Use `GitHubRunners.metricTime()` to get a metric for the total time a runner is running. This includes the overhead of starting the runner.\n\n## Contributing\n\nIf you use and love this project, please consider contributing.\n\n1. πŸͺ³ If you see something, say something. [Issues][16] help improve the quality of the project.\n * Include relevant logs and package versions for bugs.\n * When possible, describe the use-case behind feature requests.\n1. πŸ› οΈ [Pull requests][17] are welcome.\n * Run `npm run build` before submitting to make sure all tests pass.\n * Allow edits from maintainers so small adjustments can be made easily.\n1. πŸ’΅ Consider [sponsoring][15] the project to show your support and optionally get your name listed below.\n\n## Other Options\n\n1. [philips-labs/terraform-aws-github-runner][3] if you're using Terraform\n2. [actions/actions-runner-controller][4] if you're using Kubernetes\n\n\n[1]: https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners\n[2]: https://github.com/marketplace/actions/configure-aws-credentials-action-for-github-actions\n[3]: https://github.com/philips-labs/terraform-aws-github-runner\n[4]: https://github.com/actions/actions-runner-controller\n[5]: https://github.com/actions/runner\n[6]: https://pypi.org/project/cloudsnorkel.cdk-github-runners\n[7]: https://www.npmjs.com/package/@cloudsnorkel/cdk-github-runners\n[8]: https://central.sonatype.com/artifact/com.cloudsnorkel/cdk.github.runners/\n[9]: https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps\n[10]: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token\n[11]: https://pkg.go.dev/github.com/CloudSnorkel/cdk-github-runners-go/cloudsnorkelcdkgithubrunners\n[12]: https://www.nuget.org/packages/CloudSnorkel.Cdk.Github.Runners/\n[13]: https://constructs.dev/packages/@cloudsnorkel/cdk-github-runners/\n[14]: https://docs.github.com/en/actions/hosting-your-own-runners/autoscaling-with-self-hosted-runners#using-ephemeral-runners-for-autoscaling\n[15]: https://github.com/sponsors/CloudSnorkel\n[16]: https://github.com/CloudSnorkel/cdk-github-runners/issues\n[17]: https://github.com/CloudSnorkel/cdk-github-runners/pulls\n"
3861
+ "markdown": "# GitHub Self-Hosted Runners CDK Constructs\n\n[![NPM](https://img.shields.io/npm/v/@cloudsnorkel/cdk-github-runners?label=npm&logo=npm)][7]\n[![PyPI](https://img.shields.io/pypi/v/cloudsnorkel.cdk-github-runners?label=pypi&logo=pypi)][6]\n[![Maven Central](https://img.shields.io/maven-central/v/com.cloudsnorkel/cdk.github.runners.svg?label=Maven%20Central&logo=apachemaven)][8]\n[![Go](https://img.shields.io/github/v/tag/CloudSnorkel/cdk-github-runners?color=red&label=go&logo=go)][11]\n[![Nuget](https://img.shields.io/nuget/v/CloudSnorkel.Cdk.Github.Runners?color=red&&logo=nuget)][12]\n[![Release](https://github.com/CloudSnorkel/cdk-github-runners/actions/workflows/release.yml/badge.svg)](https://github.com/CloudSnorkel/cdk-github-runners/actions/workflows/release.yml)\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue)](https://github.com/CloudSnorkel/cdk-github-runners/blob/main/LICENSE)\n\nUse this CDK construct to create ephemeral [self-hosted GitHub runners][1] on-demand inside your AWS account.\n\n* 🧩 Easy to configure GitHub integration with a web-based interface\n* 🧠 Customizable runners with decent defaults\n* πŸƒπŸ» Multiple runner configurations controlled by labels\n* πŸ” Everything fully hosted in your account\n* πŸ”ƒ Automatically updated build environment with latest runner version\n\nSelf-hosted runners in AWS are useful when:\n\n* You need easy access to internal resources in your actions\n* You want to pre-install some software for your actions\n* You want to provide some basic AWS API access (but [aws-actions/configure-aws-credentials][2] has more security controls)\n* You are using GitHub Enterprise Server\n\nEphemeral (or on-demand) runners are the [recommended way by GitHub][14] for auto-scaling, and they make sure all jobs run with a clean image. Runners are started on-demand. You don't pay unless a job is running.\n\n## API\n\nThe best way to browse API documentation is on [Constructs Hub][13]. It is available in all supported programming languages.\n\n## Providers\n\nA runner provider creates compute resources on-demand and uses [actions/runner][5] to start a runner.\n\n| | EC2 | CodeBuild | Fargate | ECS | Lambda |\n|------------------|-------------------|----------------------------|----------------|----------------|---------------|\n| **Time limit** | Unlimited | 8 hours | Unlimited | Unlimited | 15 minutes |\n| **vCPUs** | Unlimited | 2, 4, 8, or 72 | 0.25 to 4 | Unlimited | 1 to 6 |\n| **RAM** | Unlimited | 3gb, 7gb, 15gb, or 145gb | 512mb to 30gb | Unlimited | 128mb to 10gb |\n| **Storage** | Unlimited | 50gb to 824gb | 20gb to 200gb | Unlimited | Up to 10gb |\n| **Architecture** | x86_64, ARM64 | x86_64, ARM64 | x86_64, ARM64 | x86_64, ARM64 | x86_64, ARM64 |\n| **sudo** | βœ” | βœ” | βœ” | βœ” | ❌ |\n| **Docker** | βœ” | βœ” (Linux only) | ❌ | βœ” | ❌ |\n| **Spot pricing** | βœ” | ❌ | βœ” | βœ” | ❌ |\n| **OS** | Linux, Windows | Linux, Windows | Linux, Windows | Linux, Windows | Linux |\n\nThe best provider to use mostly depends on your current infrastructure. When in doubt, CodeBuild is always a good choice. Execution history and logs are easy to view, and it has no restrictive limits unless you need to run for more than 8 hours.\n\n* EC2 is useful when you want runners to have complete access to the host\n* ECS is useful when you want to control the infrastructure, like leaving the runner host running for faster startups\n* Lambda is useful for short jobs that can work within time, size and readonly system constraints\n\nYou can also create your own provider by implementing `IRunnerProvider`.\n\n## Installation\n\n1. Install and use the appropriate package\n <details><summary>Python</summary>\n\n ### Install\n Available on [PyPI][6].\n ```bash\n pip install cloudsnorkel.cdk-github-runners\n ```\n ### Use\n ```python\n from aws_cdk import App, Stack\n from cloudsnorkel.cdk_github_runners import GitHubRunners\n\n app = App()\n stack = Stack(app, \"github-runners\")\n GitHubRunners(stack, \"runners\")\n\n app.synth()\n ```\n </details>\n <details><summary>TypeScript or JavaScript</summary>\n\n ### Install\n Available on [npm][7].\n ```bash\n npm i @cloudsnorkel/cdk-github-runners\n ```\n ### Use\n ```typescript\n import { App, Stack } from 'aws-cdk-lib';\n import { GitHubRunners } from '@cloudsnorkel/cdk-github-runners';\n\n const app = new App();\n const stack = new Stack(app, 'github-runners');\n new GitHubRunners(stack, 'runners');\n\n app.synth();\n ```\n </details>\n <details><summary>Java</summary>\n\n ### Install\n Available on [Maven][8].\n ```xml\n <dependency>\n <groupId>com.cloudsnorkel</groupId>\n <artifactId>cdk.github.runners</artifactId>\n </dependency>\n ```\n ### Use\n ```java\n import software.amazon.awscdk.App;\n import software.amazon.awscdk.Stack;\n import com.cloudsnorkel.cdk.github.runners.GitHubRunners;\n\n public class Example {\n public static void main(String[] args){\n App app = new App();\n Stack stack = new Stack(app, \"github-runners\");\n GitHubRunners.Builder.create(stack, \"runners\").build();\n\n app.synth();\n }\n }\n ```\n </details>\n <details><summary>Go</summary>\n\n ### Install\n Available on [GitHub][11].\n ```bash\n go get github.com/CloudSnorkel/cdk-github-runners-go/cloudsnorkelcdkgithubrunners\n ```\n ### Use\n ```go\n package main\n\n import (\n \"github.com/CloudSnorkel/cdk-github-runners-go/cloudsnorkelcdkgithubrunners\"\n \"github.com/aws/aws-cdk-go/awscdk/v2\"\n \"github.com/aws/jsii-runtime-go\"\n )\n\n func main() {\n app := awscdk.NewApp(nil)\n stack := awscdk.NewStack(app, jsii.String(\"github-runners\"), &awscdk.StackProps{})\n cloudsnorkelcdkgithubrunners.NewGitHubRunners(stack, jsii.String(\"runners\"), &cloudsnorkelcdkgithubrunners.GitHubRunnersProps{})\n\n app.Synth(nil)\n }\n ```\n </details>\n <details><summary>.NET</summary>\n\n ### Install\n Available on [Nuget][12].\n ```bash\n dotnet add package CloudSnorkel.Cdk.Github.Runners\n ```\n ### Use\n ```csharp\n using Amazon.CDK;\n using CloudSnorkel;\n\n namespace Example\n {\n sealed class Program\n {\n public static void Main(string[] args)\n {\n var app = new App();\n var stack = new Stack(app, \"github-runners\");\n new GitHubRunners(stack, \"runners\");\n app.Synth();\n }\n }\n }\n ```\n </details>\n2. Use `GitHubRunners` construct in your code (starting with default arguments is fine)\n3. Deploy your stack\n4. Look for the status command output similar to `aws --region us-east-1 lambda invoke --function-name status-XYZ123 status.json`\n ```\n βœ… github-runners-test\n\n ✨ Deployment time: 260.01s\n\n Outputs:\n github-runners-test.runnersstatuscommand4A30F0F5 = aws --region us-east-1 lambda invoke --function-name github-runners-test-runnersstatus1A5771C0-mvttg8oPQnQS status.json\n ```\n5. Execute the status command (you may need to specify `--profile` too) and open the resulting `status.json` file\n6. Open the URL in `github.setup.url` from `status.json` or [manually setup GitHub](SETUP_GITHUB.md) integration as an app or with personal access token\n7. Run status command again to confirm `github.auth.status` and `github.webhook.status` are OK\n8. Trigger a GitHub action that has a `self-hosted` label with `runs-on: [self-hosted, codebuild]` (or non-default labels you set in step 2)\n9. If the action is not successful, see [troubleshooting](#Troubleshooting)\n\n[![Demo](demo-thumbnail.jpg)](https://youtu.be/wlyv_3V8lIw)\n\n## Customizing\n\nThe default providers configured by `GitHubRunners` are useful for testing but probably not too much for actual production work. They run in the default VPC or no VPC and have no added IAM permissions. You would usually want to configure the providers yourself.\n\nFor example:\n\n```typescript\nlet vpc: ec2.Vpc;\nlet runnerSg: ec2.SecurityGroup;\nlet dbSg: ec2.SecurityGroup;\nlet bucket: s3.Bucket;\n\n// create a custom CodeBuild provider\nconst myProvider = new CodeBuildRunnerProvider(this, 'codebuild runner', {\n labels: ['my-codebuild'],\n vpc: vpc,\n securityGroups: [runnerSg],\n});\n// grant some permissions to the provider\nbucket.grantReadWrite(myProvider);\ndbSg.connections.allowFrom(runnerSg, ec2.Port.tcp(3306), 'allow runners to connect to MySQL database');\n\n// create the runner infrastructure\nnew GitHubRunners(this, 'runners', {\n providers: [myProvider],\n});\n```\n\nAnother way to customize runners is by modifying the image used to spin them up. The image contains the [runner][5], any required dependencies, and integration code with the provider. You may choose to customize this image by adding more packages, for example.\n\n```typescript\nconst myBuilder = FargateRunnerProvider.imageBuilder(this, 'image builder');\nmyBuilder.addComponent(\n RunnerImageComponent.custom({ commands: ['apt install -y nginx xz-utils'] }),\n);\n\nconst myProvider = new FargateRunnerProvider(this, 'fargate runner', {\n labels: ['customized-fargate'],\n imageBuilder: myBuilder,\n});\n\n// create the runner infrastructure\nnew GitHubRunners(this, 'runners', {\n providers: [myProvider],\n});\n```\n\nYour workflow will then look like:\n\n```yaml\nname: self-hosted example\non: push\njobs:\n self-hosted:\n runs-on: [self-hosted, customized-fargate]\n steps:\n - run: echo hello world\n```\n\nWindows images can also be customized the same way.\n\n```typescript\nconst myWindowsBuilder = FargateRunnerProvider.imageBuilder(this, 'Windows image builder', {\n architecture: Architecture.X86_64,\n os: Os.WINDOWS,\n});\nmyWindowsBuilder.addComponent(\n RunnerImageComponent.custom({\n name: 'Ninja',\n commands: [\n 'Invoke-WebRequest -UseBasicParsing -Uri \"https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip\" -OutFile ninja.zip',\n 'Expand-Archive ninja.zip -DestinationPath C:\\\\actions',\n 'del ninja.zip',\n ],\n }),\n);\n\nconst myProvider = new FargateRunnerProvider(this, 'fargate runner', {\n labels: ['customized-windows-fargate'],\n imageBuilder: myWindowsBuilder,\n});\n\nnew GitHubRunners(this, 'runners', {\n providers: [myProvider],\n});\n```\n\nThe runner OS and architecture is determined by the image it is set to use. For example, to create a Fargate runner provider for ARM64 set the `architecture` property for the image builder to `Architecture.ARM64` in the image builder properties.\n\n```typescript\nnew GitHubRunners(this, 'runners', {\n providers: [\n new FargateRunnerProvider(this, 'fargate runner', {\n labels: ['arm64', 'fargate'],\n imageBuilder: FargateRunnerProvider.imageBuilder(this, 'image builder', {\n architecture: Architecture.ARM64,\n os: Os.LINUX_UBUNTU,\n }),\n }),\n ],\n});\n```\n\n### Composite Providers\n\nComposite providers allow you to combine multiple runner providers with different strategies. There are two types:\n\n**Fallback Strategy**: Try providers in order until one succeeds. Useful for trying spot instances first, then falling back to on-demand if spot capacity is unavailable.\n\n```typescript\n// Try spot instances first, fall back to on-demand if spot is unavailable\nconst ecsFallback = CompositeProvider.fallback(this, 'ECS Fallback', [\n new EcsRunnerProvider(this, 'ECS Spot', {\n labels: ['ecs', 'linux', 'x64'],\n spot: true,\n // ... other config\n }),\n new EcsRunnerProvider(this, 'ECS On-Demand', {\n labels: ['ecs', 'linux', 'x64'],\n spot: false,\n // ... other config\n }),\n]);\n\nnew GitHubRunners(this, 'runners', {\n providers: [ecsFallback],\n});\n```\n\n**Weighted Distribution Strategy**: Randomly select a provider based on weights. Useful for distributing load across multiple availability zones or instance types.\n\n```typescript\n// Distribute 60% of traffic to AZ-1, 40% to AZ-2\nconst distributedProvider = CompositeProvider.distribute(this, 'Fargate Distribution', [\n {\n weight: 3, // 3/(3+2) = 60%\n provider: new FargateRunnerProvider(this, 'Fargate AZ-1', {\n labels: ['fargate', 'linux', 'x64'],\n subnetSelection: vpc.selectSubnets({\n availabilityZones: [vpc.availabilityZones[0]],\n }),\n // ... other config\n }),\n },\n {\n weight: 2, // 2/(3+2) = 40%\n provider: new FargateRunnerProvider(this, 'Fargate AZ-2', {\n labels: ['fargate', 'linux', 'x64'],\n subnetSelection: vpc.selectSubnets({\n availabilityZones: [vpc.availabilityZones[1]],\n }),\n // ... other config\n }),\n },\n]);\n\nnew GitHubRunners(this, 'runners', {\n providers: [distributedProvider],\n});\n```\n\n**Important**: All providers in a composite must have the exact same labels. This ensures any provisioned runner can match the labels requested by the GitHub workflow job.\n\n### Custom Provider Selection\n\nBy default, providers are selected based on label matching: the first provider that has all the labels requested by the job is selected. You can customize this behavior using a provider selector Lambda function to:\n\n* Filter out certain jobs (prevent runner provisioning)\n* Dynamically select a provider based on job characteristics (repository, branch, time of day, etc.)\n* Customize labels for the runner (add, remove, or modify labels dynamically)\n\nThe selector function receives the full GitHub webhook payload, a map of all available providers and their labels, and the default provider/labels that would have been selected. It returns the provider to use (or `undefined` to skip runner creation) and the labels to assign to the runner.\n\n**Example: Route jobs to different providers based on repository**\n\n```typescript\nimport { ComputeType } from 'aws-cdk-lib/aws-codebuild';\nimport { Function, Code, Runtime } from 'aws-cdk-lib/aws-lambda';\nimport { GitHubRunners, CodeBuildRunnerProvider } from '@cloudsnorkel/cdk-github-runners';\n\nconst defaultProvider = new CodeBuildRunnerProvider(this, 'default', {\n labels: ['custom-runner', 'default'],\n});\nconst productionProvider = new CodeBuildRunnerProvider(this, 'production', {\n labels: ['custom-runner', 'production'],\n computeType: ComputeType.LARGE,\n});\n\nconst providerSelector = new Function(this, 'provider-selector', {\n runtime: Runtime.NODEJS_LATEST,\n handler: 'index.handler',\n code: Code.fromInline(`\n exports.handler = async (event) => {\n const { payload, providers, defaultProvider, defaultLabels } = event;\n\n // Route production repos to dedicated provider\n if (payload.repository.name.includes('prod')) {\n return {\n provider: '${productionProvider.node.path}',\n labels: ['custom-runner', 'production', 'modified-via-selector'],\n };\n }\n\n // Filter out draft PRs\n if (payload.workflow_job.head_branch?.startsWith('draft/')) {\n return { provider: undefined }; // Skip runner provisioning\n }\n\n // Use default for everything else\n return {\n provider: defaultProvider,\n labels: defaultLabels,\n };\n };\n `),\n});\n\nnew GitHubRunners(this, 'runners', {\n providers: [defaultProvider, productionProvider],\n providerSelector: providerSelector,\n});\n```\n\n**Example: Add dynamic labels based on job metadata**\n\n```typescript\nconst providerSelector = new Function(this, 'provider-selector', {\n runtime: Runtime.NODEJS_LATEST,\n handler: 'index.handler',\n code: Code.fromInline(`\n exports.handler = async (event) => {\n const { payload, defaultProvider, defaultLabels } = event;\n\n // Add branch name as a label\n const branch = payload.workflow_job.head_branch || 'unknown';\n const labels = [...(defaultLabels || []), 'branch:' + branch];\n\n return {\n provider: defaultProvider,\n labels: labels,\n };\n };\n `),\n});\n```\n\n**Important considerations:**\n\n* ⚠️ **Label matching responsibility**: You are responsible for ensuring the selected provider's labels match what the job requires. If labels don't match, the runner will be provisioned but GitHub Actions won't assign the job to it.\n* ⚠️ **No guarantee of assignment**: Provider selection only determines which provider will provision a runner. GitHub Actions may still route the job to any available runner with matching labels. For reliable provider assignment, consider repo-level runner registration (the default).\n* ⚑ **Performance**: The selector runs synchronously during webhook processing. Keep it fast and efficientβ€”the webhook has a 30-second timeout total.\n\n## Examples\n\nWe provide comprehensive examples in the [`examples/`](examples/) folder to help you get started quickly:\n\n### Getting Started\n- **[Simple CodeBuild](examples/typescript/simple-codebuild/)** - Basic setup with just a CodeBuild provider (also available in [Python](examples/python/simple-codebuild/))\n\n### Provider Configuration\n- **[Composite Provider](examples/typescript/composite-provider/)** - Fallback and weighted distribution strategies (also available in [Python](examples/python/composite-provider/))\n- **[Provider Selector](examples/typescript/provider-selector/)** - Custom provider selection with Lambda function (also available in [Python](examples/python/provider-selector/))\n- **[EC2 Windows Provider](examples/typescript/ec2-windows-provider/)** - EC2 configuration for Windows runners (also available in [Python](examples/python/ec2-windows-provider/))\n\n### Compute & Performance\n- **[Compute Options](examples/typescript/compute-options/)** - Configure CPU, memory, and instance types for different providers (also available in [Python](examples/python/compute-options/))\n- **[Spot Instances](examples/typescript/spot-instances/)** - Use spot instances for cost savings across EC2, Fargate, and ECS (also available in [Python](examples/python/spot-instances/))\n- **[Storage Options](examples/typescript/storage-options/)** - Custom EBS storage options for EC2 runners (also available in [Python](examples/python/storage-options/))\n- **[ECS Scaling](examples/typescript/ecs-scaling/)** - Custom autoscaling group scaling policies for ECS providers (also available in [Python](examples/python/ecs-scaling/))\n\n### Security & Access\n- **[IAM Permissions](examples/typescript/iam-permissions/)** - Grant AWS IAM permissions to runners (also available in [Python](examples/python/iam-permissions/))\n- **[Network Access](examples/typescript/network-access/)** - Configure network access with VPCs and security groups (also available in [Python](examples/python/network-access/))\n- **[Access Control](examples/typescript/access-control/)** - Configure access control for webhook and setup functions (also available in [Python](examples/python/access-control/))\n\n### Customization\n- **[Add Software](examples/typescript/add-software/)** - Add custom software to runner images (also available in [Python](examples/python/add-software/))\n\n### Enterprise & Monitoring\n- **[GHES](examples/typescript/ghes/)** - Configure runners for GitHub Enterprise Server (also available in [Python](examples/python/ghes/))\n- **[Monitoring](examples/typescript/monitoring/)** - Set up CloudWatch alarms and SNS notifications (also available in [Python](examples/python/monitoring/))\n\nEach example is self-contained with its own dependencies and README. Start with the simple examples and work your way up to more advanced configurations.\n\nAnother good and very full example is the [integration test](test/default.integ.ts).\n\nIf you have more to share, please open a PR adding examples to the `examples` folder.\n\n## Architecture\n\n![Architecture diagram](architecture.svg)\n\n## Troubleshooting\n\nRunners are started in response to a webhook coming in from GitHub. If there are any issues starting the runner like missing capacity or transient API issues, the provider will keep retrying for 24 hours. Configuration issue related errors like pointing to a missing AMI will not be retried. GitHub itself will cancel the job if it can't find a runner for 24 hours. If your jobs don't start, follow the steps below to examine all parts of this workflow.\n\n1. Always start with the status function, make sure no errors are reported, and confirm all status codes are OK\n2. Make sure `runs-on` in the workflow matches the expected labels set in the runner provider\n3. Diagnose relevant executions of the orchestrator step function by visiting the URL in `troubleshooting.stepFunctionUrl` from `status.json`\n 1. If the execution failed, check your runner provider configuration for errors\n 2. If the execution is still running for a long time, check the execution events to see why runner starting is being retried\n 3. If there are no relevant executions, move to the next step\n4. Confirm the webhook Lambda was called by visiting the URL in `troubleshooting.webhookHandlerUrl` from `status.json`\n 1. If it's not called or logs errors, confirm the webhook settings on the GitHub side\n 2. If you see too many errors, make sure you're only sending `workflow_job` events\n5. When using GitHub app, make sure there are active installations in `github.auth.app.installations`\n\nAll logs are saved in CloudWatch.\n* Log group names can be found in `status.json` for each provider, image builder, and other parts of the system\n* Some useful Logs Insights queries can be enabled with `GitHubRunners.createLogsInsightsQueries()`\n\nTo get `status.json`, check out the CloudFormation stack output for a command that generates it. The command looks like:\n\n```\naws --region us-east-1 lambda invoke --function-name status-XYZ123 status.json\n```\n\n## Monitoring\n\nThere are two important ways to monitor your runners:\n\n1. Make sure runners don't fail to start. When that happens, jobs may sit and wait. Use `GitHubRunners.metricFailed()` to get a metric for the number of failed runner starts. You should use this metric to trigger an alarm.\n2. Make sure runner images don't fail to build. Failed runner image builds mean you will get stuck with out-of-date software on your runners. It may lead to security vulnerabilities, or it may lead to slower runner start-ups as the runner software itself needs to be updated. Use `GitHubRunners.failedImageBuildsTopic()` to get SNS topic that gets notified of failed runner image builds. You should subscribe to this topic.\n\nOther useful metrics to track:\n\n1. Use `GitHubRunners.metricJobCompleted()` to get a metric for the number of completed jobs broken down by labels and job success.\n2. Use `GitHubRunners.metricTime()` to get a metric for the total time a runner is running. This includes the overhead of starting the runner.\n\n## Contributing\n\nIf you use and love this project, please consider contributing.\n\n1. πŸͺ³ If you see something, say something. [Issues][16] help improve the quality of the project.\n * Include relevant logs and package versions for bugs.\n * When possible, describe the use-case behind feature requests.\n1. πŸ› οΈ [Pull requests][17] are welcome.\n * Run `npm run build` before submitting to make sure all tests pass.\n * Allow edits from maintainers so small adjustments can be made easily.\n1. πŸ’΅ Consider [sponsoring][15] the project to show your support and optionally get your name listed below.\n\n## Other Options\n\n1. [github-aws-runners/terraform-aws-github-runner][3] if you're using Terraform\n2. [actions/actions-runner-controller][4] if you're using Kubernetes\n\n\n[1]: https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners\n[2]: https://github.com/marketplace/actions/configure-aws-credentials-action-for-github-actions\n[3]: https://github.com/github-aws-runners/terraform-aws-github-runner\n[4]: https://github.com/actions/actions-runner-controller\n[5]: https://github.com/actions/runner\n[6]: https://pypi.org/project/cloudsnorkel.cdk-github-runners\n[7]: https://www.npmjs.com/package/@cloudsnorkel/cdk-github-runners\n[8]: https://central.sonatype.com/artifact/com.cloudsnorkel/cdk.github.runners/\n[9]: https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps\n[10]: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token\n[11]: https://pkg.go.dev/github.com/CloudSnorkel/cdk-github-runners-go/cloudsnorkelcdkgithubrunners\n[12]: https://www.nuget.org/packages/CloudSnorkel.Cdk.Github.Runners/\n[13]: https://constructs.dev/packages/@cloudsnorkel/cdk-github-runners/\n[14]: https://docs.github.com/en/actions/hosting-your-own-runners/autoscaling-with-self-hosted-runners#using-ephemeral-runners-for-autoscaling\n[15]: https://github.com/sponsors/CloudSnorkel\n[16]: https://github.com/CloudSnorkel/cdk-github-runners/issues\n[17]: https://github.com/CloudSnorkel/cdk-github-runners/pulls\n"
3862
3862
  },
3863
3863
  "repository": {
3864
3864
  "type": "git",
@@ -4813,7 +4813,7 @@
4813
4813
  "kind": "interface",
4814
4814
  "locationInModule": {
4815
4815
  "filename": "src/image-builders/aws-image-builder/builder.ts",
4816
- "line": 33
4816
+ "line": 34
4817
4817
  },
4818
4818
  "name": "AwsImageBuilderRunnerImageBuilderProps",
4819
4819
  "properties": [
@@ -4828,7 +4828,7 @@
4828
4828
  "immutable": true,
4829
4829
  "locationInModule": {
4830
4830
  "filename": "src/image-builders/aws-image-builder/builder.ts",
4831
- "line": 57
4831
+ "line": 58
4832
4832
  },
4833
4833
  "name": "fastLaunchOptions",
4834
4834
  "optional": true,
@@ -4837,44 +4837,512 @@
4837
4837
  }
4838
4838
  },
4839
4839
  {
4840
- "abstract": true,
4840
+ "abstract": true,
4841
+ "docs": {
4842
+ "default": "m6i.large",
4843
+ "stability": "experimental",
4844
+ "summary": "The instance type used to build the image."
4845
+ },
4846
+ "immutable": true,
4847
+ "locationInModule": {
4848
+ "filename": "src/image-builders/aws-image-builder/builder.ts",
4849
+ "line": 40
4850
+ },
4851
+ "name": "instanceType",
4852
+ "optional": true,
4853
+ "type": {
4854
+ "fqn": "aws-cdk-lib.aws_ec2.InstanceType"
4855
+ }
4856
+ },
4857
+ {
4858
+ "abstract": true,
4859
+ "docs": {
4860
+ "default": "default size for AMI (usually 30GB for Linux and 50GB for Windows)",
4861
+ "remarks": "Use this if you're building images with big components and need more space.",
4862
+ "stability": "experimental",
4863
+ "summary": "Size of volume available for builder instances. This modifies the boot volume size and doesn't add any additional volumes."
4864
+ },
4865
+ "immutable": true,
4866
+ "locationInModule": {
4867
+ "filename": "src/image-builders/aws-image-builder/builder.ts",
4868
+ "line": 49
4869
+ },
4870
+ "name": "storageSize",
4871
+ "optional": true,
4872
+ "type": {
4873
+ "fqn": "aws-cdk-lib.Size"
4874
+ }
4875
+ }
4876
+ ],
4877
+ "symbolId": "src/image-builders/aws-image-builder/builder:AwsImageBuilderRunnerImageBuilderProps"
4878
+ },
4879
+ "@cloudsnorkel/cdk-github-runners.BaseContainerImage": {
4880
+ "assembly": "@cloudsnorkel/cdk-github-runners",
4881
+ "docs": {
4882
+ "remarks": "This class is adapted from AWS CDK's BaseContainerImage class to support both string and object inputs.",
4883
+ "stability": "experimental",
4884
+ "summary": "Represents a base container image that is used to start from in EC2 Image Builder container builds."
4885
+ },
4886
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseContainerImage",
4887
+ "initializer": {
4888
+ "docs": {
4889
+ "stability": "experimental"
4890
+ },
4891
+ "locationInModule": {
4892
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
4893
+ "line": 163
4894
+ },
4895
+ "parameters": [
4896
+ {
4897
+ "name": "image",
4898
+ "type": {
4899
+ "primitive": "string"
4900
+ }
4901
+ },
4902
+ {
4903
+ "name": "ecrRepository",
4904
+ "optional": true,
4905
+ "type": {
4906
+ "fqn": "aws-cdk-lib.aws_ecr.IRepository"
4907
+ }
4908
+ }
4909
+ ],
4910
+ "protected": true
4911
+ },
4912
+ "kind": "class",
4913
+ "locationInModule": {
4914
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
4915
+ "line": 110
4916
+ },
4917
+ "methods": [
4918
+ {
4919
+ "docs": {
4920
+ "stability": "experimental",
4921
+ "summary": "The DockerHub image to use as the base image in a container recipe."
4922
+ },
4923
+ "locationInModule": {
4924
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
4925
+ "line": 117
4926
+ },
4927
+ "name": "fromDockerHub",
4928
+ "parameters": [
4929
+ {
4930
+ "docs": {
4931
+ "summary": "The DockerHub repository where the base image resides in."
4932
+ },
4933
+ "name": "repository",
4934
+ "type": {
4935
+ "primitive": "string"
4936
+ }
4937
+ },
4938
+ {
4939
+ "docs": {
4940
+ "summary": "The tag of the base image in the DockerHub repository."
4941
+ },
4942
+ "name": "tag",
4943
+ "type": {
4944
+ "primitive": "string"
4945
+ }
4946
+ }
4947
+ ],
4948
+ "returns": {
4949
+ "type": {
4950
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseContainerImage"
4951
+ }
4952
+ },
4953
+ "static": true
4954
+ },
4955
+ {
4956
+ "docs": {
4957
+ "stability": "experimental",
4958
+ "summary": "The ECR container image to use as the base image in a container recipe."
4959
+ },
4960
+ "locationInModule": {
4961
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
4962
+ "line": 127
4963
+ },
4964
+ "name": "fromEcr",
4965
+ "parameters": [
4966
+ {
4967
+ "docs": {
4968
+ "summary": "The ECR repository where the base image resides in."
4969
+ },
4970
+ "name": "repository",
4971
+ "type": {
4972
+ "fqn": "aws-cdk-lib.aws_ecr.IRepository"
4973
+ }
4974
+ },
4975
+ {
4976
+ "docs": {
4977
+ "summary": "The tag of the base image in the ECR repository."
4978
+ },
4979
+ "name": "tag",
4980
+ "type": {
4981
+ "primitive": "string"
4982
+ }
4983
+ }
4984
+ ],
4985
+ "returns": {
4986
+ "type": {
4987
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseContainerImage"
4988
+ }
4989
+ },
4990
+ "static": true
4991
+ },
4992
+ {
4993
+ "docs": {
4994
+ "stability": "experimental",
4995
+ "summary": "The ECR public container image to use as the base image in a container recipe."
4996
+ },
4997
+ "locationInModule": {
4998
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
4999
+ "line": 138
5000
+ },
5001
+ "name": "fromEcrPublic",
5002
+ "parameters": [
5003
+ {
5004
+ "docs": {
5005
+ "summary": "The alias of the ECR public registry where the base image resides in."
5006
+ },
5007
+ "name": "registryAlias",
5008
+ "type": {
5009
+ "primitive": "string"
5010
+ }
5011
+ },
5012
+ {
5013
+ "docs": {
5014
+ "summary": "The name of the ECR public repository, where the base image resides in."
5015
+ },
5016
+ "name": "repositoryName",
5017
+ "type": {
5018
+ "primitive": "string"
5019
+ }
5020
+ },
5021
+ {
5022
+ "docs": {
5023
+ "summary": "The tag of the base image in the ECR public repository."
5024
+ },
5025
+ "name": "tag",
5026
+ "type": {
5027
+ "primitive": "string"
5028
+ }
5029
+ }
5030
+ ],
5031
+ "returns": {
5032
+ "type": {
5033
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseContainerImage"
5034
+ }
5035
+ },
5036
+ "static": true
5037
+ },
5038
+ {
5039
+ "docs": {
5040
+ "remarks": "This can be an EC2 Image Builder image ARN,\nan ECR or ECR public image, or a container URI sourced from a third-party container registry such as DockerHub.",
5041
+ "stability": "experimental",
5042
+ "summary": "The string value of the base image to use in a container recipe."
5043
+ },
5044
+ "locationInModule": {
5045
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5046
+ "line": 148
5047
+ },
5048
+ "name": "fromString",
5049
+ "parameters": [
5050
+ {
5051
+ "docs": {
5052
+ "summary": "The base image as a direct string value."
5053
+ },
5054
+ "name": "baseContainerImageString",
5055
+ "type": {
5056
+ "primitive": "string"
5057
+ }
5058
+ }
5059
+ ],
5060
+ "returns": {
5061
+ "type": {
5062
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseContainerImage"
5063
+ }
5064
+ },
5065
+ "static": true
5066
+ }
5067
+ ],
5068
+ "name": "BaseContainerImage",
5069
+ "properties": [
5070
+ {
5071
+ "docs": {
5072
+ "stability": "experimental",
5073
+ "summary": "The rendered base image to use."
5074
+ },
5075
+ "immutable": true,
5076
+ "locationInModule": {
5077
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5078
+ "line": 155
5079
+ },
5080
+ "name": "image",
5081
+ "type": {
5082
+ "primitive": "string"
5083
+ }
5084
+ },
5085
+ {
5086
+ "docs": {
5087
+ "remarks": "This allows automatic permission granting for CodeBuild.",
5088
+ "stability": "experimental",
5089
+ "summary": "The ECR repository if this image was created from an ECR repository."
5090
+ },
5091
+ "immutable": true,
5092
+ "locationInModule": {
5093
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5094
+ "line": 161
5095
+ },
5096
+ "name": "ecrRepository",
5097
+ "optional": true,
5098
+ "type": {
5099
+ "fqn": "aws-cdk-lib.aws_ecr.IRepository"
5100
+ }
5101
+ }
5102
+ ],
5103
+ "symbolId": "src/image-builders/aws-image-builder/base-image:BaseContainerImage"
5104
+ },
5105
+ "@cloudsnorkel/cdk-github-runners.BaseImage": {
5106
+ "assembly": "@cloudsnorkel/cdk-github-runners",
5107
+ "docs": {
5108
+ "remarks": "This class is adapted from AWS CDK's BaseImage class to support both string and object inputs.",
5109
+ "stability": "experimental",
5110
+ "summary": "Represents a base image that is used to start from in EC2 Image Builder image builds."
5111
+ },
5112
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseImage",
5113
+ "initializer": {
5114
+ "docs": {
5115
+ "stability": "experimental"
5116
+ },
5117
+ "locationInModule": {
5118
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5119
+ "line": 91
5120
+ },
5121
+ "parameters": [
5122
+ {
5123
+ "name": "image",
5124
+ "type": {
5125
+ "primitive": "string"
5126
+ }
5127
+ }
5128
+ ],
5129
+ "protected": true
5130
+ },
5131
+ "kind": "class",
5132
+ "locationInModule": {
5133
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5134
+ "line": 20
5135
+ },
5136
+ "methods": [
5137
+ {
5138
+ "docs": {
5139
+ "stability": "experimental",
5140
+ "summary": "The AMI ID to use as a base image in an image recipe."
5141
+ },
5142
+ "locationInModule": {
5143
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5144
+ "line": 26
5145
+ },
5146
+ "name": "fromAmiId",
5147
+ "parameters": [
5148
+ {
5149
+ "docs": {
5150
+ "summary": "The AMI ID to use as the base image."
5151
+ },
5152
+ "name": "amiId",
5153
+ "type": {
5154
+ "primitive": "string"
5155
+ }
5156
+ }
5157
+ ],
5158
+ "returns": {
5159
+ "type": {
5160
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseImage"
5161
+ }
5162
+ },
5163
+ "static": true
5164
+ },
5165
+ {
5166
+ "docs": {
5167
+ "remarks": "This constructs an Image Builder ARN for AWS-provided images like `ubuntu-server-22-lts-x86/x.x.x`.",
5168
+ "stability": "experimental",
5169
+ "summary": "An AWS-provided EC2 Image Builder image to use as a base image in an image recipe."
5170
+ },
5171
+ "locationInModule": {
5172
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5173
+ "line": 39
5174
+ },
5175
+ "name": "fromImageBuilder",
5176
+ "parameters": [
5177
+ {
5178
+ "docs": {
5179
+ "summary": "The construct scope (used to determine the stack and region)."
5180
+ },
5181
+ "name": "scope",
5182
+ "type": {
5183
+ "fqn": "constructs.Construct"
5184
+ }
5185
+ },
5186
+ {
5187
+ "docs": {
5188
+ "summary": "The Image Builder resource name pattern (e.g., `ubuntu-server-22-lts-x86` or `ubuntu-server-22-lts-${arch}`)."
5189
+ },
5190
+ "name": "resourceName",
5191
+ "type": {
5192
+ "primitive": "string"
5193
+ }
5194
+ },
5195
+ {
5196
+ "docs": {
5197
+ "summary": "The version pattern (defaults to `x.x.x` to use the latest version)."
5198
+ },
5199
+ "name": "version",
5200
+ "optional": true,
5201
+ "type": {
5202
+ "primitive": "string"
5203
+ }
5204
+ }
5205
+ ],
5206
+ "returns": {
5207
+ "type": {
5208
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseImage"
5209
+ }
5210
+ },
5211
+ "static": true
5212
+ },
5213
+ {
5214
+ "docs": {
5215
+ "stability": "experimental",
5216
+ "summary": "The marketplace product ID for an AMI product to use as the base image in an image recipe."
5217
+ },
5218
+ "locationInModule": {
5219
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5220
+ "line": 54
5221
+ },
5222
+ "name": "fromMarketplaceProductId",
5223
+ "parameters": [
5224
+ {
5225
+ "docs": {
5226
+ "summary": "The Marketplace AMI product ID to use as the base image."
5227
+ },
5228
+ "name": "productId",
5229
+ "type": {
5230
+ "primitive": "string"
5231
+ }
5232
+ }
5233
+ ],
5234
+ "returns": {
5235
+ "type": {
5236
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseImage"
5237
+ }
5238
+ },
5239
+ "static": true
5240
+ },
5241
+ {
5242
+ "docs": {
5243
+ "stability": "experimental",
5244
+ "summary": "The SSM parameter to use as the base image in an image recipe."
5245
+ },
5246
+ "locationInModule": {
5247
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5248
+ "line": 63
5249
+ },
5250
+ "name": "fromSsmParameter",
5251
+ "parameters": [
5252
+ {
5253
+ "docs": {
5254
+ "summary": "The SSM parameter to use as the base image."
5255
+ },
5256
+ "name": "parameter",
5257
+ "type": {
5258
+ "fqn": "aws-cdk-lib.aws_ssm.IParameter"
5259
+ }
5260
+ }
5261
+ ],
5262
+ "returns": {
5263
+ "type": {
5264
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseImage"
5265
+ }
5266
+ },
5267
+ "static": true
5268
+ },
5269
+ {
5270
+ "docs": {
5271
+ "stability": "experimental",
5272
+ "summary": "The parameter name for the SSM parameter to use as the base image in an image recipe."
5273
+ },
5274
+ "locationInModule": {
5275
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5276
+ "line": 72
5277
+ },
5278
+ "name": "fromSsmParameterName",
5279
+ "parameters": [
5280
+ {
5281
+ "docs": {
5282
+ "summary": "The name of the SSM parameter to use as the base image."
5283
+ },
5284
+ "name": "parameterName",
5285
+ "type": {
5286
+ "primitive": "string"
5287
+ }
5288
+ }
5289
+ ],
5290
+ "returns": {
5291
+ "type": {
5292
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseImage"
5293
+ }
5294
+ },
5295
+ "static": true
5296
+ },
5297
+ {
4841
5298
  "docs": {
4842
- "default": "m6i.large",
5299
+ "remarks": "This can be an EC2 Image Builder image ARN,\nan SSM parameter, an AWS Marketplace product ID, or an AMI ID.",
4843
5300
  "stability": "experimental",
4844
- "summary": "The instance type used to build the image."
5301
+ "summary": "The direct string value of the base image to use in an image recipe."
4845
5302
  },
4846
- "immutable": true,
4847
5303
  "locationInModule": {
4848
- "filename": "src/image-builders/aws-image-builder/builder.ts",
4849
- "line": 39
5304
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5305
+ "line": 82
4850
5306
  },
4851
- "name": "instanceType",
4852
- "optional": true,
4853
- "type": {
4854
- "fqn": "aws-cdk-lib.aws_ec2.InstanceType"
4855
- }
4856
- },
5307
+ "name": "fromString",
5308
+ "parameters": [
5309
+ {
5310
+ "docs": {
5311
+ "summary": "The base image as a direct string value."
5312
+ },
5313
+ "name": "baseImageString",
5314
+ "type": {
5315
+ "primitive": "string"
5316
+ }
5317
+ }
5318
+ ],
5319
+ "returns": {
5320
+ "type": {
5321
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseImage"
5322
+ }
5323
+ },
5324
+ "static": true
5325
+ }
5326
+ ],
5327
+ "name": "BaseImage",
5328
+ "properties": [
4857
5329
  {
4858
- "abstract": true,
4859
5330
  "docs": {
4860
- "default": "default size for AMI (usually 30GB for Linux and 50GB for Windows)",
4861
- "remarks": "Use this if you're building images with big components and need more space.",
4862
5331
  "stability": "experimental",
4863
- "summary": "Size of volume available for builder instances. This modifies the boot volume size and doesn't add any additional volumes."
5332
+ "summary": "The rendered base image to use."
4864
5333
  },
4865
5334
  "immutable": true,
4866
5335
  "locationInModule": {
4867
- "filename": "src/image-builders/aws-image-builder/builder.ts",
4868
- "line": 48
5336
+ "filename": "src/image-builders/aws-image-builder/base-image.ts",
5337
+ "line": 89
4869
5338
  },
4870
- "name": "storageSize",
4871
- "optional": true,
5339
+ "name": "image",
4872
5340
  "type": {
4873
- "fqn": "aws-cdk-lib.Size"
5341
+ "primitive": "string"
4874
5342
  }
4875
5343
  }
4876
5344
  ],
4877
- "symbolId": "src/image-builders/aws-image-builder/builder:AwsImageBuilderRunnerImageBuilderProps"
5345
+ "symbolId": "src/image-builders/aws-image-builder/base-image:BaseImage"
4878
5346
  },
4879
5347
  "@cloudsnorkel/cdk-github-runners.CodeBuildImageBuilder": {
4880
5348
  "assembly": "@cloudsnorkel/cdk-github-runners",
@@ -5416,7 +5884,7 @@
5416
5884
  },
5417
5885
  "locationInModule": {
5418
5886
  "filename": "src/providers/codebuild.ts",
5419
- "line": 244
5887
+ "line": 256
5420
5888
  },
5421
5889
  "parameters": [
5422
5890
  {
@@ -5443,7 +5911,7 @@
5443
5911
  "kind": "class",
5444
5912
  "locationInModule": {
5445
5913
  "filename": "src/providers/codebuild.ts",
5446
- "line": 481
5914
+ "line": 493
5447
5915
  },
5448
5916
  "name": "CodeBuildRunner",
5449
5917
  "symbolId": "src/providers/codebuild:CodeBuildRunner"
@@ -5458,7 +5926,7 @@
5458
5926
  "kind": "interface",
5459
5927
  "locationInModule": {
5460
5928
  "filename": "src/image-builders/codebuild.ts",
5461
- "line": 32
5929
+ "line": 33
5462
5930
  },
5463
5931
  "name": "CodeBuildRunnerImageBuilderProps",
5464
5932
  "properties": [
@@ -5473,7 +5941,7 @@
5473
5941
  "immutable": true,
5474
5942
  "locationInModule": {
5475
5943
  "filename": "src/image-builders/codebuild.ts",
5476
- "line": 48
5944
+ "line": 59
5477
5945
  },
5478
5946
  "name": "buildImage",
5479
5947
  "optional": true,
@@ -5485,14 +5953,14 @@
5485
5953
  "abstract": true,
5486
5954
  "docs": {
5487
5955
  "default": "{@link ComputeType#SMALL }",
5488
- "remarks": "See the {@link ComputeType} enum for the possible values.",
5956
+ "remarks": "The compute type determines CPU, memory, and disk space:\n- SMALL: 2 vCPU, 3 GB RAM, 64 GB disk\n- MEDIUM: 4 vCPU, 7 GB RAM, 128 GB disk\n- LARGE: 8 vCPU, 15 GB RAM, 128 GB disk\n- X2_LARGE: 72 vCPU, 145 GB RAM, 256 GB disk (Linux) or 824 GB disk (Windows)\n\nUse a larger compute type when you need more disk space for building larger Docker images.\n\nFor more details, see https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment.types",
5489
5957
  "stability": "experimental",
5490
- "summary": "The type of compute to use for this build."
5958
+ "summary": "The type of compute to use for this build. See the {@link ComputeType} enum for the possible values."
5491
5959
  },
5492
5960
  "immutable": true,
5493
5961
  "locationInModule": {
5494
5962
  "filename": "src/image-builders/codebuild.ts",
5495
- "line": 39
5963
+ "line": 50
5496
5964
  },
5497
5965
  "name": "computeType",
5498
5966
  "optional": true,
@@ -5511,7 +5979,7 @@
5511
5979
  "immutable": true,
5512
5980
  "locationInModule": {
5513
5981
  "filename": "src/image-builders/codebuild.ts",
5514
- "line": 57
5982
+ "line": 68
5515
5983
  },
5516
5984
  "name": "timeout",
5517
5985
  "optional": true,
@@ -5537,7 +6005,7 @@
5537
6005
  },
5538
6006
  "locationInModule": {
5539
6007
  "filename": "src/providers/codebuild.ts",
5540
- "line": 244
6008
+ "line": 256
5541
6009
  },
5542
6010
  "parameters": [
5543
6011
  {
@@ -5567,7 +6035,7 @@
5567
6035
  "kind": "class",
5568
6036
  "locationInModule": {
5569
6037
  "filename": "src/providers/codebuild.ts",
5570
- "line": 140
6038
+ "line": 150
5571
6039
  },
5572
6040
  "methods": [
5573
6041
  {
@@ -5578,7 +6046,7 @@
5578
6046
  },
5579
6047
  "locationInModule": {
5580
6048
  "filename": "src/providers/codebuild.ts",
5581
- "line": 189
6049
+ "line": 199
5582
6050
  },
5583
6051
  "name": "imageBuilder",
5584
6052
  "parameters": [
@@ -5617,7 +6085,7 @@
5617
6085
  },
5618
6086
  "locationInModule": {
5619
6087
  "filename": "src/providers/codebuild.ts",
5620
- "line": 394
6088
+ "line": 406
5621
6089
  },
5622
6090
  "name": "getStepFunctionTask",
5623
6091
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -5646,7 +6114,7 @@
5646
6114
  },
5647
6115
  "locationInModule": {
5648
6116
  "filename": "src/providers/codebuild.ts",
5649
- "line": 448
6117
+ "line": 460
5650
6118
  },
5651
6119
  "name": "grantStateMachine",
5652
6120
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -5715,7 +6183,7 @@
5715
6183
  },
5716
6184
  "locationInModule": {
5717
6185
  "filename": "src/providers/codebuild.ts",
5718
- "line": 451
6186
+ "line": 463
5719
6187
  },
5720
6188
  "name": "status",
5721
6189
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -5747,7 +6215,7 @@
5747
6215
  "immutable": true,
5748
6216
  "locationInModule": {
5749
6217
  "filename": "src/providers/codebuild.ts",
5750
- "line": 169
6218
+ "line": 179
5751
6219
  },
5752
6220
  "name": "LINUX_ARM64_DOCKERFILE_PATH",
5753
6221
  "static": true,
@@ -5766,7 +6234,7 @@
5766
6234
  "immutable": true,
5767
6235
  "locationInModule": {
5768
6236
  "filename": "src/providers/codebuild.ts",
5769
- "line": 154
6237
+ "line": 164
5770
6238
  },
5771
6239
  "name": "LINUX_X64_DOCKERFILE_PATH",
5772
6240
  "static": true,
@@ -5782,7 +6250,7 @@
5782
6250
  "immutable": true,
5783
6251
  "locationInModule": {
5784
6252
  "filename": "src/providers/codebuild.ts",
5785
- "line": 473
6253
+ "line": 485
5786
6254
  },
5787
6255
  "name": "connections",
5788
6256
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -5798,7 +6266,7 @@
5798
6266
  "immutable": true,
5799
6267
  "locationInModule": {
5800
6268
  "filename": "src/providers/codebuild.ts",
5801
- "line": 219
6269
+ "line": 229
5802
6270
  },
5803
6271
  "name": "grantPrincipal",
5804
6272
  "overrides": "aws-cdk-lib.aws_iam.IGrantable",
@@ -5808,14 +6276,15 @@
5808
6276
  },
5809
6277
  {
5810
6278
  "docs": {
6279
+ "deprecated": "This field is internal and should not be accessed directly.",
5811
6280
  "remarks": "The image is built by an image builder and is specific to CodeBuild.",
5812
- "stability": "experimental",
6281
+ "stability": "deprecated",
5813
6282
  "summary": "Docker image loaded with GitHub Actions Runner and its prerequisites."
5814
6283
  },
5815
6284
  "immutable": true,
5816
6285
  "locationInModule": {
5817
6286
  "filename": "src/providers/codebuild.ts",
5818
- "line": 224
6287
+ "line": 236
5819
6288
  },
5820
6289
  "name": "image",
5821
6290
  "type": {
@@ -5830,7 +6299,7 @@
5830
6299
  "immutable": true,
5831
6300
  "locationInModule": {
5832
6301
  "filename": "src/providers/codebuild.ts",
5833
- "line": 214
6302
+ "line": 224
5834
6303
  },
5835
6304
  "name": "labels",
5836
6305
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -5852,7 +6321,7 @@
5852
6321
  "immutable": true,
5853
6322
  "locationInModule": {
5854
6323
  "filename": "src/providers/codebuild.ts",
5855
- "line": 231
6324
+ "line": 243
5856
6325
  },
5857
6326
  "name": "logGroup",
5858
6327
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -5868,7 +6337,7 @@
5868
6337
  "immutable": true,
5869
6338
  "locationInModule": {
5870
6339
  "filename": "src/providers/codebuild.ts",
5871
- "line": 209
6340
+ "line": 219
5872
6341
  },
5873
6342
  "name": "project",
5874
6343
  "type": {
@@ -5883,7 +6352,7 @@
5883
6352
  "immutable": true,
5884
6353
  "locationInModule": {
5885
6354
  "filename": "src/providers/codebuild.ts",
5886
- "line": 233
6355
+ "line": 245
5887
6356
  },
5888
6357
  "name": "retryableErrors",
5889
6358
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -5920,14 +6389,14 @@
5920
6389
  "abstract": true,
5921
6390
  "docs": {
5922
6391
  "default": "{@link ComputeType#SMALL }",
5923
- "remarks": "See the {@link ComputeType} enum for the possible values.",
6392
+ "remarks": "The compute type determines CPU, memory, and disk space:\n- SMALL: 2 vCPU, 3 GB RAM, 64 GB disk\n- MEDIUM: 4 vCPU, 7 GB RAM, 128 GB disk\n- LARGE: 8 vCPU, 15 GB RAM, 128 GB disk\n- X2_LARGE: 72 vCPU, 145 GB RAM, 256 GB disk (Linux) or 824 GB disk (Windows)\n\nUse a larger compute type when you need more disk space for building larger Docker images.\n\nFor more details, see https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment.types",
5924
6393
  "stability": "experimental",
5925
- "summary": "The type of compute to use for this build."
6394
+ "summary": "The type of compute to use for this build. See the {@link ComputeType} enum for the possible values."
5926
6395
  },
5927
6396
  "immutable": true,
5928
6397
  "locationInModule": {
5929
6398
  "filename": "src/providers/codebuild.ts",
5930
- "line": 113
6399
+ "line": 123
5931
6400
  },
5932
6401
  "name": "computeType",
5933
6402
  "optional": true,
@@ -5946,7 +6415,7 @@
5946
6415
  "immutable": true,
5947
6416
  "locationInModule": {
5948
6417
  "filename": "src/providers/codebuild.ts",
5949
- "line": 130
6418
+ "line": 140
5950
6419
  },
5951
6420
  "name": "dockerInDocker",
5952
6421
  "optional": true,
@@ -6106,7 +6575,7 @@
6106
6575
  "immutable": true,
6107
6576
  "locationInModule": {
6108
6577
  "filename": "src/providers/codebuild.ts",
6109
- "line": 122
6578
+ "line": 132
6110
6579
  },
6111
6580
  "name": "timeout",
6112
6581
  "optional": true,
@@ -7591,7 +8060,7 @@
7591
8060
  },
7592
8061
  "locationInModule": {
7593
8062
  "filename": "src/providers/ecs.ts",
7594
- "line": 395
8063
+ "line": 397
7595
8064
  },
7596
8065
  "parameters": [
7597
8066
  {
@@ -7671,7 +8140,7 @@
7671
8140
  },
7672
8141
  "locationInModule": {
7673
8142
  "filename": "src/providers/ecs.ts",
7674
- "line": 619
8143
+ "line": 621
7675
8144
  },
7676
8145
  "name": "getStepFunctionTask",
7677
8146
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -7700,7 +8169,7 @@
7700
8169
  },
7701
8170
  "locationInModule": {
7702
8171
  "filename": "src/providers/ecs.ts",
7703
- "line": 686
8172
+ "line": 688
7704
8173
  },
7705
8174
  "name": "grantStateMachine",
7706
8175
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -7769,7 +8238,7 @@
7769
8238
  },
7770
8239
  "locationInModule": {
7771
8240
  "filename": "src/providers/ecs.ts",
7772
- "line": 689
8241
+ "line": 691
7773
8242
  },
7774
8243
  "name": "status",
7775
8244
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -7790,6 +8259,22 @@
7790
8259
  ],
7791
8260
  "name": "EcsRunnerProvider",
7792
8261
  "properties": [
8262
+ {
8263
+ "docs": {
8264
+ "remarks": "Use capacityProvider.autoScalingGroup to access the auto scaling group. This can help set up custom scaling policies.",
8265
+ "stability": "experimental",
8266
+ "summary": "Capacity provider used to scale the cluster."
8267
+ },
8268
+ "immutable": true,
8269
+ "locationInModule": {
8270
+ "filename": "src/providers/ecs.ts",
8271
+ "line": 306
8272
+ },
8273
+ "name": "capacityProvider",
8274
+ "type": {
8275
+ "fqn": "aws-cdk-lib.aws_ecs.AsgCapacityProvider"
8276
+ }
8277
+ },
7793
8278
  {
7794
8279
  "docs": {
7795
8280
  "stability": "experimental",
@@ -7798,7 +8283,7 @@
7798
8283
  "immutable": true,
7799
8284
  "locationInModule": {
7800
8285
  "filename": "src/providers/ecs.ts",
7801
- "line": 344
8286
+ "line": 346
7802
8287
  },
7803
8288
  "name": "connections",
7804
8289
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -7814,7 +8299,7 @@
7814
8299
  "immutable": true,
7815
8300
  "locationInModule": {
7816
8301
  "filename": "src/providers/ecs.ts",
7817
- "line": 339
8302
+ "line": 341
7818
8303
  },
7819
8304
  "name": "grantPrincipal",
7820
8305
  "overrides": "aws-cdk-lib.aws_iam.IGrantable",
@@ -7830,7 +8315,7 @@
7830
8315
  "immutable": true,
7831
8316
  "locationInModule": {
7832
8317
  "filename": "src/providers/ecs.ts",
7833
- "line": 319
8318
+ "line": 321
7834
8319
  },
7835
8320
  "name": "labels",
7836
8321
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -7852,7 +8337,7 @@
7852
8337
  "immutable": true,
7853
8338
  "locationInModule": {
7854
8339
  "filename": "src/providers/ecs.ts",
7855
- "line": 356
8340
+ "line": 358
7856
8341
  },
7857
8342
  "name": "logGroup",
7858
8343
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -7868,7 +8353,7 @@
7868
8353
  "immutable": true,
7869
8354
  "locationInModule": {
7870
8355
  "filename": "src/providers/ecs.ts",
7871
- "line": 388
8356
+ "line": 390
7872
8357
  },
7873
8358
  "name": "retryableErrors",
7874
8359
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -8346,7 +8831,7 @@
8346
8831
  },
8347
8832
  "locationInModule": {
8348
8833
  "filename": "src/providers/fargate.ts",
8349
- "line": 385
8834
+ "line": 399
8350
8835
  },
8351
8836
  "parameters": [
8352
8837
  {
@@ -8373,7 +8858,7 @@
8373
8858
  "kind": "class",
8374
8859
  "locationInModule": {
8375
8860
  "filename": "src/providers/fargate.ts",
8376
- "line": 567
8861
+ "line": 581
8377
8862
  },
8378
8863
  "name": "FargateRunner",
8379
8864
  "symbolId": "src/providers/fargate:FargateRunner"
@@ -8393,7 +8878,7 @@
8393
8878
  },
8394
8879
  "locationInModule": {
8395
8880
  "filename": "src/providers/fargate.ts",
8396
- "line": 385
8881
+ "line": 399
8397
8882
  },
8398
8883
  "parameters": [
8399
8884
  {
@@ -8473,7 +8958,7 @@
8473
8958
  },
8474
8959
  "locationInModule": {
8475
8960
  "filename": "src/providers/fargate.ts",
8476
- "line": 474
8961
+ "line": 488
8477
8962
  },
8478
8963
  "name": "getStepFunctionTask",
8479
8964
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -8502,7 +8987,7 @@
8502
8987
  },
8503
8988
  "locationInModule": {
8504
8989
  "filename": "src/providers/fargate.ts",
8505
- "line": 541
8990
+ "line": 555
8506
8991
  },
8507
8992
  "name": "grantStateMachine",
8508
8993
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -8571,7 +9056,7 @@
8571
9056
  },
8572
9057
  "locationInModule": {
8573
9058
  "filename": "src/providers/fargate.ts",
8574
- "line": 544
9059
+ "line": 558
8575
9060
  },
8576
9061
  "name": "status",
8577
9062
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -8632,13 +9117,14 @@
8632
9117
  },
8633
9118
  {
8634
9119
  "docs": {
8635
- "stability": "experimental",
9120
+ "deprecated": "This field is internal and should not be accessed directly.",
9121
+ "stability": "deprecated",
8636
9122
  "summary": "Whether runner task will have a public IP."
8637
9123
  },
8638
9124
  "immutable": true,
8639
9125
  "locationInModule": {
8640
9126
  "filename": "src/providers/fargate.ts",
8641
- "line": 346
9127
+ "line": 356
8642
9128
  },
8643
9129
  "name": "assignPublicIp",
8644
9130
  "type": {
@@ -8668,7 +9154,7 @@
8668
9154
  "immutable": true,
8669
9155
  "locationInModule": {
8670
9156
  "filename": "src/providers/fargate.ts",
8671
- "line": 356
9157
+ "line": 366
8672
9158
  },
8673
9159
  "name": "connections",
8674
9160
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -8678,13 +9164,14 @@
8678
9164
  },
8679
9165
  {
8680
9166
  "docs": {
8681
- "stability": "experimental",
9167
+ "deprecated": "This field is internal and should not be accessed directly.",
9168
+ "stability": "deprecated",
8682
9169
  "summary": "Container definition hosting the runner."
8683
9170
  },
8684
9171
  "immutable": true,
8685
9172
  "locationInModule": {
8686
9173
  "filename": "src/providers/fargate.ts",
8687
- "line": 326
9174
+ "line": 330
8688
9175
  },
8689
9176
  "name": "container",
8690
9177
  "type": {
@@ -8699,7 +9186,7 @@
8699
9186
  "immutable": true,
8700
9187
  "locationInModule": {
8701
9188
  "filename": "src/providers/fargate.ts",
8702
- "line": 351
9189
+ "line": 361
8703
9190
  },
8704
9191
  "name": "grantPrincipal",
8705
9192
  "overrides": "aws-cdk-lib.aws_iam.IGrantable",
@@ -8709,14 +9196,15 @@
8709
9196
  },
8710
9197
  {
8711
9198
  "docs": {
9199
+ "deprecated": "This field is internal and should not be accessed directly.",
8712
9200
  "remarks": "The image is built by an image builder and is specific to Fargate tasks.",
8713
- "stability": "experimental",
9201
+ "stability": "deprecated",
8714
9202
  "summary": "Docker image loaded with GitHub Actions Runner and its prerequisites."
8715
9203
  },
8716
9204
  "immutable": true,
8717
9205
  "locationInModule": {
8718
9206
  "filename": "src/providers/fargate.ts",
8719
- "line": 366
9207
+ "line": 380
8720
9208
  },
8721
9209
  "name": "image",
8722
9210
  "type": {
@@ -8731,7 +9219,7 @@
8731
9219
  "immutable": true,
8732
9220
  "locationInModule": {
8733
9221
  "filename": "src/providers/fargate.ts",
8734
- "line": 331
9222
+ "line": 335
8735
9223
  },
8736
9224
  "name": "labels",
8737
9225
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -8753,7 +9241,7 @@
8753
9241
  "immutable": true,
8754
9242
  "locationInModule": {
8755
9243
  "filename": "src/providers/fargate.ts",
8756
- "line": 373
9244
+ "line": 387
8757
9245
  },
8758
9246
  "name": "logGroup",
8759
9247
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -8769,7 +9257,7 @@
8769
9257
  "immutable": true,
8770
9258
  "locationInModule": {
8771
9259
  "filename": "src/providers/fargate.ts",
8772
- "line": 375
9260
+ "line": 389
8773
9261
  },
8774
9262
  "name": "retryableErrors",
8775
9263
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -8784,13 +9272,14 @@
8784
9272
  },
8785
9273
  {
8786
9274
  "docs": {
8787
- "stability": "experimental",
9275
+ "deprecated": "This field is internal and should not be accessed directly.",
9276
+ "stability": "deprecated",
8788
9277
  "summary": "Use spot pricing for Fargate tasks."
8789
9278
  },
8790
9279
  "immutable": true,
8791
9280
  "locationInModule": {
8792
9281
  "filename": "src/providers/fargate.ts",
8793
- "line": 361
9282
+ "line": 373
8794
9283
  },
8795
9284
  "name": "spot",
8796
9285
  "type": {
@@ -8799,13 +9288,14 @@
8799
9288
  },
8800
9289
  {
8801
9290
  "docs": {
8802
- "stability": "experimental",
9291
+ "deprecated": "This field is internal and should not be accessed directly.",
9292
+ "stability": "deprecated",
8803
9293
  "summary": "Fargate task hosting the runner."
8804
9294
  },
8805
9295
  "immutable": true,
8806
9296
  "locationInModule": {
8807
9297
  "filename": "src/providers/fargate.ts",
8808
- "line": 321
9298
+ "line": 323
8809
9299
  },
8810
9300
  "name": "task",
8811
9301
  "type": {
@@ -8814,13 +9304,14 @@
8814
9304
  },
8815
9305
  {
8816
9306
  "docs": {
8817
- "stability": "experimental",
9307
+ "deprecated": "This field is internal and should not be accessed directly.",
9308
+ "stability": "deprecated",
8818
9309
  "summary": "Subnets used for hosting the runner task."
8819
9310
  },
8820
9311
  "immutable": true,
8821
9312
  "locationInModule": {
8822
9313
  "filename": "src/providers/fargate.ts",
8823
- "line": 341
9314
+ "line": 349
8824
9315
  },
8825
9316
  "name": "subnetSelection",
8826
9317
  "optional": true,
@@ -8830,13 +9321,14 @@
8830
9321
  },
8831
9322
  {
8832
9323
  "docs": {
8833
- "stability": "experimental",
9324
+ "deprecated": "This field is internal and should not be accessed directly.",
9325
+ "stability": "deprecated",
8834
9326
  "summary": "VPC used for hosting the runner task."
8835
9327
  },
8836
9328
  "immutable": true,
8837
9329
  "locationInModule": {
8838
9330
  "filename": "src/providers/fargate.ts",
8839
- "line": 336
9331
+ "line": 342
8840
9332
  },
8841
9333
  "name": "vpc",
8842
9334
  "optional": true,
@@ -9151,7 +9643,7 @@
9151
9643
  "kind": "interface",
9152
9644
  "locationInModule": {
9153
9645
  "filename": "src/image-builders/aws-image-builder/builder.ts",
9154
- "line": 63
9646
+ "line": 64
9155
9647
  },
9156
9648
  "name": "FastLaunchOptions",
9157
9649
  "properties": [
@@ -9169,7 +9661,7 @@
9169
9661
  "immutable": true,
9170
9662
  "locationInModule": {
9171
9663
  "filename": "src/image-builders/aws-image-builder/builder.ts",
9172
- "line": 74
9664
+ "line": 75
9173
9665
  },
9174
9666
  "name": "enabled",
9175
9667
  "optional": true,
@@ -9188,7 +9680,7 @@
9188
9680
  "immutable": true,
9189
9681
  "locationInModule": {
9190
9682
  "filename": "src/image-builders/aws-image-builder/builder.ts",
9191
- "line": 83
9683
+ "line": 84
9192
9684
  },
9193
9685
  "name": "maxParallelLaunches",
9194
9686
  "optional": true,
@@ -9206,7 +9698,7 @@
9206
9698
  "immutable": true,
9207
9699
  "locationInModule": {
9208
9700
  "filename": "src/image-builders/aws-image-builder/builder.ts",
9209
- "line": 90
9701
+ "line": 91
9210
9702
  },
9211
9703
  "name": "targetResourceCount",
9212
9704
  "optional": true,
@@ -9232,7 +9724,7 @@
9232
9724
  },
9233
9725
  "locationInModule": {
9234
9726
  "filename": "src/runner.ts",
9235
- "line": 290
9727
+ "line": 308
9236
9728
  },
9237
9729
  "parameters": [
9238
9730
  {
@@ -9262,7 +9754,7 @@
9262
9754
  "kind": "class",
9263
9755
  "locationInModule": {
9264
9756
  "filename": "src/runner.ts",
9265
- "line": 263
9757
+ "line": 281
9266
9758
  },
9267
9759
  "methods": [
9268
9760
  {
@@ -9273,7 +9765,7 @@
9273
9765
  },
9274
9766
  "locationInModule": {
9275
9767
  "filename": "src/runner.ts",
9276
- "line": 842
9768
+ "line": 902
9277
9769
  },
9278
9770
  "name": "createLogsInsightsQueries"
9279
9771
  },
@@ -9285,7 +9777,7 @@
9285
9777
  },
9286
9778
  "locationInModule": {
9287
9779
  "filename": "src/runner.ts",
9288
- "line": 822
9780
+ "line": 882
9289
9781
  },
9290
9782
  "name": "failedImageBuildsTopic",
9291
9783
  "returns": {
@@ -9302,7 +9794,7 @@
9302
9794
  },
9303
9795
  "locationInModule": {
9304
9796
  "filename": "src/runner.ts",
9305
- "line": 804
9797
+ "line": 864
9306
9798
  },
9307
9799
  "name": "metricFailed",
9308
9800
  "parameters": [
@@ -9328,7 +9820,7 @@
9328
9820
  },
9329
9821
  "locationInModule": {
9330
9822
  "filename": "src/runner.ts",
9331
- "line": 748
9823
+ "line": 808
9332
9824
  },
9333
9825
  "name": "metricJobCompleted",
9334
9826
  "parameters": [
@@ -9354,7 +9846,7 @@
9354
9846
  },
9355
9847
  "locationInModule": {
9356
9848
  "filename": "src/runner.ts",
9357
- "line": 795
9849
+ "line": 855
9358
9850
  },
9359
9851
  "name": "metricSucceeded",
9360
9852
  "parameters": [
@@ -9380,7 +9872,7 @@
9380
9872
  },
9381
9873
  "locationInModule": {
9382
9874
  "filename": "src/runner.ts",
9383
- "line": 811
9875
+ "line": 871
9384
9876
  },
9385
9877
  "name": "metricTime",
9386
9878
  "parameters": [
@@ -9410,7 +9902,7 @@
9410
9902
  "immutable": true,
9411
9903
  "locationInModule": {
9412
9904
  "filename": "src/runner.ts",
9413
- "line": 279
9905
+ "line": 297
9414
9906
  },
9415
9907
  "name": "connections",
9416
9908
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -9426,7 +9918,7 @@
9426
9918
  "immutable": true,
9427
9919
  "locationInModule": {
9428
9920
  "filename": "src/runner.ts",
9429
- "line": 267
9921
+ "line": 285
9430
9922
  },
9431
9923
  "name": "providers",
9432
9924
  "type": {
@@ -9455,7 +9947,7 @@
9455
9947
  "immutable": true,
9456
9948
  "locationInModule": {
9457
9949
  "filename": "src/runner.ts",
9458
- "line": 272
9950
+ "line": 290
9459
9951
  },
9460
9952
  "name": "secrets",
9461
9953
  "type": {
@@ -9469,7 +9961,7 @@
9469
9961
  "immutable": true,
9470
9962
  "locationInModule": {
9471
9963
  "filename": "src/runner.ts",
9472
- "line": 290
9964
+ "line": 308
9473
9965
  },
9474
9966
  "name": "props",
9475
9967
  "optional": true,
@@ -9491,7 +9983,7 @@
9491
9983
  "kind": "interface",
9492
9984
  "locationInModule": {
9493
9985
  "filename": "src/runner.ts",
9494
- "line": 40
9986
+ "line": 43
9495
9987
  },
9496
9988
  "name": "GitHubRunnersProps",
9497
9989
  "properties": [
@@ -9499,14 +9991,14 @@
9499
9991
  "abstract": true,
9500
9992
  "docs": {
9501
9993
  "default": "false",
9502
- "remarks": "Lambda Functions in a public subnet can NOT access the internet.",
9994
+ "remarks": "**Note:** This only affects management functions that interact with GitHub. Lambda functions that help with runner image building and don't interact with GitHub are NOT affected by this setting.",
9503
9995
  "stability": "experimental",
9504
- "summary": "Allow management functions to run in public subnets."
9996
+ "summary": "Allow management functions to run in public subnets. Lambda Functions in a public subnet can NOT access the internet."
9505
9997
  },
9506
9998
  "immutable": true,
9507
9999
  "locationInModule": {
9508
10000
  "filename": "src/runner.ts",
9509
- "line": 81
10001
+ "line": 90
9510
10002
  },
9511
10003
  "name": "allowPublicSubnet",
9512
10004
  "optional": true,
@@ -9517,14 +10009,14 @@
9517
10009
  {
9518
10010
  "abstract": true,
9519
10011
  "docs": {
9520
- "remarks": "You may also want to use custom images for your runner providers that contain the same certificates. See {@link CodeBuildImageBuilder.addCertificates }.\n\n```typescript\nconst imageBuilder = CodeBuildRunnerProvider.imageBuilder(this, 'Image Builder with Certs');\nimageBuilder.addComponent(RunnerImageComponent.extraCertificates('path-to-my-extra-certs-folder/certs.pem', 'private-ca');\n\nconst provider = new CodeBuildRunnerProvider(this, 'CodeBuild', {\n imageBuilder: imageBuilder,\n});\n\nnew GitHubRunners(\n this,\n 'runners',\n {\n providers: [provider],\n extraCertificates: 'path-to-my-extra-certs-folder',\n }\n);\n```",
10012
+ "remarks": "If a directory is provided, all .pem and .crt files in that directory will be used. The certificates will be concatenated into a single file for use by Node.js.\n\nYou may also want to use custom images for your runner providers that contain the same certificates. See {@link RunnerImageComponent.extraCertificates }.\n\n```typescript\nconst selfSignedCertificates = 'certs/ghes.pem'; // or 'path-to-my-extra-certs-folder' for a directory\nconst imageBuilder = CodeBuildRunnerProvider.imageBuilder(this, 'Image Builder with Certs');\nimageBuilder.addComponent(RunnerImageComponent.extraCertificates(selfSignedCertificates, 'private-ca'));\n\nconst provider = new CodeBuildRunnerProvider(this, 'CodeBuild', {\n imageBuilder: imageBuilder,\n});\n\nnew GitHubRunners(\n this,\n 'runners',\n {\n providers: [provider],\n extraCertificates: selfSignedCertificates,\n }\n);\n```",
9521
10013
  "stability": "experimental",
9522
- "summary": "Path to a directory containing a file named certs.pem containing any additional certificates required to trust GitHub Enterprise Server. Use this when GitHub Enterprise Server certificates are self-signed."
10014
+ "summary": "Path to a certificate file (.pem or .crt) or a directory containing certificate files (.pem or .crt) required to trust GitHub Enterprise Server. Use this when GitHub Enterprise Server certificates are self-signed."
9523
10015
  },
9524
10016
  "immutable": true,
9525
10017
  "locationInModule": {
9526
10018
  "filename": "src/runner.ts",
9527
- "line": 118
10019
+ "line": 136
9528
10020
  },
9529
10021
  "name": "extraCertificates",
9530
10022
  "optional": true,
@@ -9543,7 +10035,7 @@
9543
10035
  "immutable": true,
9544
10036
  "locationInModule": {
9545
10037
  "filename": "src/runner.ts",
9546
- "line": 125
10038
+ "line": 143
9547
10039
  },
9548
10040
  "name": "idleTimeout",
9549
10041
  "optional": true,
@@ -9561,7 +10053,7 @@
9561
10053
  "immutable": true,
9562
10054
  "locationInModule": {
9563
10055
  "filename": "src/runner.ts",
9564
- "line": 132
10056
+ "line": 150
9565
10057
  },
9566
10058
  "name": "logOptions",
9567
10059
  "optional": true,
@@ -9580,7 +10072,7 @@
9580
10072
  "immutable": true,
9581
10073
  "locationInModule": {
9582
10074
  "filename": "src/runner.ts",
9583
- "line": 46
10075
+ "line": 49
9584
10076
  },
9585
10077
  "name": "providers",
9586
10078
  "optional": true,
@@ -9612,7 +10104,7 @@
9612
10104
  "immutable": true,
9613
10105
  "locationInModule": {
9614
10106
  "filename": "src/runner.ts",
9615
- "line": 187
10107
+ "line": 205
9616
10108
  },
9617
10109
  "name": "providerSelector",
9618
10110
  "optional": true,
@@ -9631,7 +10123,7 @@
9631
10123
  "immutable": true,
9632
10124
  "locationInModule": {
9633
10125
  "filename": "src/runner.ts",
9634
- "line": 55
10126
+ "line": 58
9635
10127
  },
9636
10128
  "name": "requireSelfHostedLabel",
9637
10129
  "optional": true,
@@ -9650,7 +10142,7 @@
9650
10142
  "immutable": true,
9651
10143
  "locationInModule": {
9652
10144
  "filename": "src/runner.ts",
9653
- "line": 169
10145
+ "line": 187
9654
10146
  },
9655
10147
  "name": "retryOptions",
9656
10148
  "optional": true,
@@ -9662,14 +10154,14 @@
9662
10154
  "abstract": true,
9663
10155
  "docs": {
9664
10156
  "deprecated": "use {@link securityGroups } instead",
9665
- "remarks": "Use this with to provide access to GitHub Enterprise Server hosted inside a VPC.",
10157
+ "remarks": "Use this with to provide access to GitHub Enterprise Server hosted inside a VPC.\n\n**Note:** This only affects management functions that interact with GitHub. Lambda functions that help with runner image building and don't interact with GitHub are NOT affected by this setting.",
9666
10158
  "stability": "deprecated",
9667
10159
  "summary": "Security group attached to all management functions."
9668
10160
  },
9669
10161
  "immutable": true,
9670
10162
  "locationInModule": {
9671
10163
  "filename": "src/runner.ts",
9672
- "line": 88
10164
+ "line": 99
9673
10165
  },
9674
10166
  "name": "securityGroup",
9675
10167
  "optional": true,
@@ -9680,14 +10172,14 @@
9680
10172
  {
9681
10173
  "abstract": true,
9682
10174
  "docs": {
9683
- "remarks": "Use this with to provide access to GitHub Enterprise Server hosted inside a VPC.",
10175
+ "remarks": "Use this to provide outbound access from management functions to GitHub Enterprise Server hosted inside a VPC.\n\n**Note:** This only affects management functions that interact with GitHub. Lambda functions that help with runner image building and don't interact with GitHub are NOT affected by this setting.\n\n**Note:** Defining inbound rules on this security group does nothing. This security group only controls outbound access FROM the management functions. To limit access TO the webhook or setup functions, use {@link webhookAccess} and {@link setupAccess} instead.",
9684
10176
  "stability": "experimental",
9685
10177
  "summary": "Security groups attached to all management functions."
9686
10178
  },
9687
10179
  "immutable": true,
9688
10180
  "locationInModule": {
9689
10181
  "filename": "src/runner.ts",
9690
- "line": 93
10182
+ "line": 108
9691
10183
  },
9692
10184
  "name": "securityGroups",
9693
10185
  "optional": true,
@@ -9711,7 +10203,7 @@
9711
10203
  "immutable": true,
9712
10204
  "locationInModule": {
9713
10205
  "filename": "src/runner.ts",
9714
- "line": 139
10206
+ "line": 157
9715
10207
  },
9716
10208
  "name": "setupAccess",
9717
10209
  "optional": true,
@@ -9730,7 +10222,7 @@
9730
10222
  "immutable": true,
9731
10223
  "locationInModule": {
9732
10224
  "filename": "src/runner.ts",
9733
- "line": 158
10225
+ "line": 176
9734
10226
  },
9735
10227
  "name": "statusAccess",
9736
10228
  "optional": true,
@@ -9741,14 +10233,14 @@
9741
10233
  {
9742
10234
  "abstract": true,
9743
10235
  "docs": {
9744
- "remarks": "Make sure the selected VPC and subnets have access to the following with either NAT Gateway or VPC Endpoints:\n* GitHub Enterprise Server\n* Secrets Manager\n* SQS\n* Step Functions\n* CloudFormation (status function only)\n* EC2 (status function only)\n* ECR (status function only)",
10236
+ "remarks": "**Note:** This only affects management functions that interact with GitHub. Lambda functions that help with runner image building and don't interact with GitHub are NOT affected by this setting and will run outside the VPC.\n\nMake sure the selected VPC and subnets have access to the following with either NAT Gateway or VPC Endpoints:\n* GitHub Enterprise Server\n* Secrets Manager\n* SQS\n* Step Functions\n* CloudFormation (status function only)\n* EC2 (status function only)\n* ECR (status function only)",
9745
10237
  "stability": "experimental",
9746
10238
  "summary": "VPC used for all management functions. Use this with GitHub Enterprise Server hosted that's inaccessible from outside the VPC."
9747
10239
  },
9748
10240
  "immutable": true,
9749
10241
  "locationInModule": {
9750
10242
  "filename": "src/runner.ts",
9751
- "line": 69
10243
+ "line": 74
9752
10244
  },
9753
10245
  "name": "vpc",
9754
10246
  "optional": true,
@@ -9759,14 +10251,14 @@
9759
10251
  {
9760
10252
  "abstract": true,
9761
10253
  "docs": {
9762
- "remarks": "Use this with GitHub Enterprise Server hosted that's inaccessible from outside the VPC.",
10254
+ "remarks": "Use this with GitHub Enterprise Server hosted that's inaccessible from outside the VPC.\n\n**Note:** This only affects management functions that interact with GitHub. Lambda functions that help with runner image building and don't interact with GitHub are NOT affected by this setting.",
9763
10255
  "stability": "experimental",
9764
10256
  "summary": "VPC subnets used for all management functions."
9765
10257
  },
9766
10258
  "immutable": true,
9767
10259
  "locationInModule": {
9768
10260
  "filename": "src/runner.ts",
9769
- "line": 74
10261
+ "line": 81
9770
10262
  },
9771
10263
  "name": "vpcSubnets",
9772
10264
  "optional": true,
@@ -9785,7 +10277,7 @@
9785
10277
  "immutable": true,
9786
10278
  "locationInModule": {
9787
10279
  "filename": "src/runner.ts",
9788
- "line": 151
10280
+ "line": 169
9789
10281
  },
9790
10282
  "name": "webhookAccess",
9791
10283
  "optional": true,
@@ -9966,7 +10458,7 @@
9966
10458
  "kind": "interface",
9967
10459
  "locationInModule": {
9968
10460
  "filename": "src/image-builders/common.ts",
9969
- "line": 308
10461
+ "line": 327
9970
10462
  },
9971
10463
  "methods": [
9972
10464
  {
@@ -9978,7 +10470,7 @@
9978
10470
  },
9979
10471
  "locationInModule": {
9980
10472
  "filename": "src/image-builders/common.ts",
9981
- "line": 314
10473
+ "line": 333
9982
10474
  },
9983
10475
  "name": "addComponent",
9984
10476
  "parameters": [
@@ -10002,7 +10494,7 @@
10002
10494
  },
10003
10495
  "locationInModule": {
10004
10496
  "filename": "src/image-builders/common.ts",
10005
- "line": 321
10497
+ "line": 340
10006
10498
  },
10007
10499
  "name": "removeComponent",
10008
10500
  "parameters": [
@@ -10082,7 +10574,7 @@
10082
10574
  "kind": "interface",
10083
10575
  "locationInModule": {
10084
10576
  "filename": "src/image-builders/common.ts",
10085
- "line": 281
10577
+ "line": 300
10086
10578
  },
10087
10579
  "methods": [
10088
10580
  {
@@ -10094,7 +10586,7 @@
10094
10586
  },
10095
10587
  "locationInModule": {
10096
10588
  "filename": "src/image-builders/common.ts",
10097
- "line": 300
10589
+ "line": 319
10098
10590
  },
10099
10591
  "name": "bindAmi",
10100
10592
  "returns": {
@@ -10112,7 +10604,7 @@
10112
10604
  },
10113
10605
  "locationInModule": {
10114
10606
  "filename": "src/image-builders/common.ts",
10115
- "line": 291
10607
+ "line": 310
10116
10608
  },
10117
10609
  "name": "bindDockerImage",
10118
10610
  "returns": {
@@ -10548,7 +11040,7 @@
10548
11040
  "kind": "interface",
10549
11041
  "locationInModule": {
10550
11042
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10551
- "line": 96
11043
+ "line": 97
10552
11044
  },
10553
11045
  "name": "ImageBuilderAsset",
10554
11046
  "properties": [
@@ -10561,7 +11053,7 @@
10561
11053
  "immutable": true,
10562
11054
  "locationInModule": {
10563
11055
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10564
- "line": 105
11056
+ "line": 106
10565
11057
  },
10566
11058
  "name": "asset",
10567
11059
  "type": {
@@ -10577,7 +11069,7 @@
10577
11069
  "immutable": true,
10578
11070
  "locationInModule": {
10579
11071
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10580
- "line": 100
11072
+ "line": 101
10581
11073
  },
10582
11074
  "name": "path",
10583
11075
  "type": {
@@ -10603,7 +11095,7 @@
10603
11095
  },
10604
11096
  "locationInModule": {
10605
11097
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10606
- "line": 179
11098
+ "line": 180
10607
11099
  },
10608
11100
  "parameters": [
10609
11101
  {
@@ -10629,7 +11121,7 @@
10629
11121
  "kind": "class",
10630
11122
  "locationInModule": {
10631
11123
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10632
- "line": 166
11124
+ "line": 167
10633
11125
  },
10634
11126
  "methods": [
10635
11127
  {
@@ -10639,7 +11131,7 @@
10639
11131
  },
10640
11132
  "locationInModule": {
10641
11133
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10642
- "line": 277
11134
+ "line": 278
10643
11135
  },
10644
11136
  "name": "grantAssetsRead",
10645
11137
  "parameters": [
@@ -10657,7 +11149,7 @@
10657
11149
  },
10658
11150
  "locationInModule": {
10659
11151
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10660
- "line": 283
11152
+ "line": 284
10661
11153
  },
10662
11154
  "name": "prefixCommandsWithErrorHandling",
10663
11155
  "parameters": [
@@ -10701,7 +11193,7 @@
10701
11193
  "immutable": true,
10702
11194
  "locationInModule": {
10703
11195
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10704
- "line": 170
11196
+ "line": 171
10705
11197
  },
10706
11198
  "name": "arn",
10707
11199
  "type": {
@@ -10716,7 +11208,7 @@
10716
11208
  "immutable": true,
10717
11209
  "locationInModule": {
10718
11210
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10719
- "line": 175
11211
+ "line": 176
10720
11212
  },
10721
11213
  "name": "platform",
10722
11214
  "type": {
@@ -10737,7 +11229,7 @@
10737
11229
  "kind": "interface",
10738
11230
  "locationInModule": {
10739
11231
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10740
- "line": 111
11232
+ "line": 112
10741
11233
  },
10742
11234
  "name": "ImageBuilderComponentProperties",
10743
11235
  "properties": [
@@ -10751,7 +11243,7 @@
10751
11243
  "immutable": true,
10752
11244
  "locationInModule": {
10753
11245
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10754
- "line": 132
11246
+ "line": 133
10755
11247
  },
10756
11248
  "name": "commands",
10757
11249
  "type": {
@@ -10772,7 +11264,7 @@
10772
11264
  "immutable": true,
10773
11265
  "locationInModule": {
10774
11266
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10775
- "line": 125
11267
+ "line": 126
10776
11268
  },
10777
11269
  "name": "description",
10778
11270
  "type": {
@@ -10788,7 +11280,7 @@
10788
11280
  "immutable": true,
10789
11281
  "locationInModule": {
10790
11282
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10791
- "line": 120
11283
+ "line": 121
10792
11284
  },
10793
11285
  "name": "displayName",
10794
11286
  "type": {
@@ -10805,7 +11297,7 @@
10805
11297
  "immutable": true,
10806
11298
  "locationInModule": {
10807
11299
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10808
- "line": 115
11300
+ "line": 116
10809
11301
  },
10810
11302
  "name": "platform",
10811
11303
  "type": {
@@ -10821,7 +11313,7 @@
10821
11313
  "immutable": true,
10822
11314
  "locationInModule": {
10823
11315
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10824
- "line": 137
11316
+ "line": 138
10825
11317
  },
10826
11318
  "name": "assets",
10827
11319
  "optional": true,
@@ -10844,7 +11336,7 @@
10844
11336
  "immutable": true,
10845
11337
  "locationInModule": {
10846
11338
  "filename": "src/image-builders/aws-image-builder/builder.ts",
10847
- "line": 144
11339
+ "line": 145
10848
11340
  },
10849
11341
  "name": "reboot",
10850
11342
  "optional": true,
@@ -11017,7 +11509,7 @@
11017
11509
  },
11018
11510
  "locationInModule": {
11019
11511
  "filename": "src/providers/lambda.ts",
11020
- "line": 239
11512
+ "line": 241
11021
11513
  },
11022
11514
  "parameters": [
11023
11515
  {
@@ -11044,7 +11536,7 @@
11044
11536
  "kind": "class",
11045
11537
  "locationInModule": {
11046
11538
  "filename": "src/providers/lambda.ts",
11047
- "line": 481
11539
+ "line": 483
11048
11540
  },
11049
11541
  "name": "LambdaRunner",
11050
11542
  "symbolId": "src/providers/lambda:LambdaRunner"
@@ -11064,7 +11556,7 @@
11064
11556
  },
11065
11557
  "locationInModule": {
11066
11558
  "filename": "src/providers/lambda.ts",
11067
- "line": 239
11559
+ "line": 241
11068
11560
  },
11069
11561
  "parameters": [
11070
11562
  {
@@ -11144,7 +11636,7 @@
11144
11636
  },
11145
11637
  "locationInModule": {
11146
11638
  "filename": "src/providers/lambda.ts",
11147
- "line": 333
11639
+ "line": 335
11148
11640
  },
11149
11641
  "name": "getStepFunctionTask",
11150
11642
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -11173,7 +11665,7 @@
11173
11665
  },
11174
11666
  "locationInModule": {
11175
11667
  "filename": "src/providers/lambda.ts",
11176
- "line": 397
11668
+ "line": 399
11177
11669
  },
11178
11670
  "name": "grantStateMachine",
11179
11671
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -11242,7 +11734,7 @@
11242
11734
  },
11243
11735
  "locationInModule": {
11244
11736
  "filename": "src/providers/lambda.ts",
11245
- "line": 400
11737
+ "line": 402
11246
11738
  },
11247
11739
  "name": "status",
11248
11740
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -11309,7 +11801,7 @@
11309
11801
  "immutable": true,
11310
11802
  "locationInModule": {
11311
11803
  "filename": "src/providers/lambda.ts",
11312
- "line": 322
11804
+ "line": 324
11313
11805
  },
11314
11806
  "name": "connections",
11315
11807
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -11350,14 +11842,15 @@
11350
11842
  },
11351
11843
  {
11352
11844
  "docs": {
11845
+ "deprecated": "This field is internal and should not be accessed directly.",
11353
11846
  "remarks": "The image is built by an image builder and is specific to Lambda.",
11354
- "stability": "experimental",
11847
+ "stability": "deprecated",
11355
11848
  "summary": "Docker image loaded with GitHub Actions Runner and its prerequisites."
11356
11849
  },
11357
11850
  "immutable": true,
11358
11851
  "locationInModule": {
11359
11852
  "filename": "src/providers/lambda.ts",
11360
- "line": 217
11853
+ "line": 219
11361
11854
  },
11362
11855
  "name": "image",
11363
11856
  "type": {
@@ -11394,7 +11887,7 @@
11394
11887
  "immutable": true,
11395
11888
  "locationInModule": {
11396
11889
  "filename": "src/providers/lambda.ts",
11397
- "line": 224
11890
+ "line": 226
11398
11891
  },
11399
11892
  "name": "logGroup",
11400
11893
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -11410,7 +11903,7 @@
11410
11903
  "immutable": true,
11411
11904
  "locationInModule": {
11412
11905
  "filename": "src/providers/lambda.ts",
11413
- "line": 226
11906
+ "line": 228
11414
11907
  },
11415
11908
  "name": "retryableErrors",
11416
11909
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -11990,7 +12483,7 @@
11990
12483
  "kind": "interface",
11991
12484
  "locationInModule": {
11992
12485
  "filename": "src/runner.ts",
11993
- "line": 193
12486
+ "line": 211
11994
12487
  },
11995
12488
  "name": "LogOptions",
11996
12489
  "properties": [
@@ -12004,7 +12497,7 @@
12004
12497
  "immutable": true,
12005
12498
  "locationInModule": {
12006
12499
  "filename": "src/runner.ts",
12007
- "line": 204
12500
+ "line": 222
12008
12501
  },
12009
12502
  "name": "includeExecutionData",
12010
12503
  "optional": true,
@@ -12022,7 +12515,7 @@
12022
12515
  "immutable": true,
12023
12516
  "locationInModule": {
12024
12517
  "filename": "src/runner.ts",
12025
- "line": 211
12518
+ "line": 229
12026
12519
  },
12027
12520
  "name": "level",
12028
12521
  "optional": true,
@@ -12039,7 +12532,7 @@
12039
12532
  "immutable": true,
12040
12533
  "locationInModule": {
12041
12534
  "filename": "src/runner.ts",
12042
- "line": 197
12535
+ "line": 215
12043
12536
  },
12044
12537
  "name": "logGroupName",
12045
12538
  "optional": true,
@@ -12058,7 +12551,7 @@
12058
12551
  "immutable": true,
12059
12552
  "locationInModule": {
12060
12553
  "filename": "src/runner.ts",
12061
- "line": 220
12554
+ "line": 238
12062
12555
  },
12063
12556
  "name": "logRetention",
12064
12557
  "optional": true,
@@ -12763,7 +13256,7 @@
12763
13256
  "kind": "interface",
12764
13257
  "locationInModule": {
12765
13258
  "filename": "src/image-builders/common.ts",
12766
- "line": 119
13259
+ "line": 120
12767
13260
  },
12768
13261
  "name": "RunnerImageAsset",
12769
13262
  "properties": [
@@ -12777,7 +13270,7 @@
12777
13270
  "immutable": true,
12778
13271
  "locationInModule": {
12779
13272
  "filename": "src/image-builders/common.ts",
12780
- "line": 123
13273
+ "line": 124
12781
13274
  },
12782
13275
  "name": "source",
12783
13276
  "type": {
@@ -12793,7 +13286,7 @@
12793
13286
  "immutable": true,
12794
13287
  "locationInModule": {
12795
13288
  "filename": "src/image-builders/common.ts",
12796
- "line": 128
13289
+ "line": 129
12797
13290
  },
12798
13291
  "name": "target",
12799
13292
  "type": {
@@ -12819,7 +13312,7 @@
12819
13312
  },
12820
13313
  "locationInModule": {
12821
13314
  "filename": "src/image-builders/common.ts",
12822
- "line": 330
13315
+ "line": 349
12823
13316
  },
12824
13317
  "parameters": [
12825
13318
  {
@@ -12900,7 +13393,7 @@
12900
13393
  },
12901
13394
  "locationInModule": {
12902
13395
  "filename": "src/image-builders/common.ts",
12903
- "line": 345
13396
+ "line": 364
12904
13397
  },
12905
13398
  "name": "addComponent",
12906
13399
  "overrides": "@cloudsnorkel/cdk-github-runners.IConfigurableRunnerImageBuilder",
@@ -12922,7 +13415,7 @@
12922
13415
  },
12923
13416
  "locationInModule": {
12924
13417
  "filename": "src/image-builders/common.ts",
12925
- "line": 340
13418
+ "line": 359
12926
13419
  },
12927
13420
  "name": "bindAmi",
12928
13421
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerImageBuilder",
@@ -12941,7 +13434,7 @@
12941
13434
  },
12942
13435
  "locationInModule": {
12943
13436
  "filename": "src/image-builders/common.ts",
12944
- "line": 338
13437
+ "line": 357
12945
13438
  },
12946
13439
  "name": "bindDockerImage",
12947
13440
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerImageBuilder",
@@ -12959,7 +13452,7 @@
12959
13452
  },
12960
13453
  "locationInModule": {
12961
13454
  "filename": "src/image-builders/common.ts",
12962
- "line": 349
13455
+ "line": 368
12963
13456
  },
12964
13457
  "name": "removeComponent",
12965
13458
  "overrides": "@cloudsnorkel/cdk-github-runners.IConfigurableRunnerImageBuilder",
@@ -12984,7 +13477,7 @@
12984
13477
  "immutable": true,
12985
13478
  "locationInModule": {
12986
13479
  "filename": "src/image-builders/common.ts",
12987
- "line": 342
13480
+ "line": 361
12988
13481
  },
12989
13482
  "name": "connections",
12990
13483
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -13001,7 +13494,7 @@
13001
13494
  "immutable": true,
13002
13495
  "locationInModule": {
13003
13496
  "filename": "src/image-builders/common.ts",
13004
- "line": 343
13497
+ "line": 362
13005
13498
  },
13006
13499
  "name": "grantPrincipal",
13007
13500
  "overrides": "aws-cdk-lib.aws_iam.IGrantable",
@@ -13015,7 +13508,7 @@
13015
13508
  },
13016
13509
  "locationInModule": {
13017
13510
  "filename": "src/image-builders/common.ts",
13018
- "line": 328
13511
+ "line": 347
13019
13512
  },
13020
13513
  "name": "components",
13021
13514
  "protected": true,
@@ -13041,7 +13534,7 @@
13041
13534
  "kind": "interface",
13042
13535
  "locationInModule": {
13043
13536
  "filename": "src/image-builders/common.ts",
13044
- "line": 131
13537
+ "line": 132
13045
13538
  },
13046
13539
  "name": "RunnerImageBuilderProps",
13047
13540
  "properties": [
@@ -13055,7 +13548,7 @@
13055
13548
  "immutable": true,
13056
13549
  "locationInModule": {
13057
13550
  "filename": "src/image-builders/common.ts",
13058
- "line": 137
13551
+ "line": 138
13059
13552
  },
13060
13553
  "name": "architecture",
13061
13554
  "optional": true,
@@ -13073,7 +13566,7 @@
13073
13566
  "immutable": true,
13074
13567
  "locationInModule": {
13075
13568
  "filename": "src/image-builders/common.ts",
13076
- "line": 246
13569
+ "line": 265
13077
13570
  },
13078
13571
  "name": "awsImageBuilderOptions",
13079
13572
  "optional": true,
@@ -13085,38 +13578,56 @@
13085
13578
  "abstract": true,
13086
13579
  "docs": {
13087
13580
  "default": "latest Ubuntu 22.04 AMI for Os.LINUX_UBUNTU and Os.LINUX_UBUNTU_2204, Ubuntu 24.04 AMI for Os.LINUX_UBUNTU_2404, latest Amazon Linux 2 AMI for Os.LINUX_AMAZON_2, latest Windows Server 2022 AMI for Os.WINDOWS",
13088
- "remarks": "This can be an actual AMI or an AWS Image Builder ARN that points to the latest AMI. For example `arn:aws:imagebuilder:us-east-1:aws:image/ubuntu-server-22-lts-x86/x.x.x` would always use the latest version of Ubuntu 22.04 in each build. If you want a specific version, you can replace `x.x.x` with that version.",
13581
+ "remarks": "This can be:\n- A string (AMI ID, Image Builder ARN, SSM parameter reference, or Marketplace product ID) - deprecated, use BaseImage static factory methods instead\n- A BaseImage instance created using static factory methods:\n - `BaseImage.fromAmiId('ami-12345')` - Use an AMI ID\n - `BaseImage.fromString('arn:aws:imagebuilder:...')` - Use any string (ARN, AMI ID, etc.)\n - `BaseImage.fromSsmParameter(parameter)` - Use an SSM parameter object\n - `BaseImage.fromSsmParameterName('/aws/service/ami/...')` - Use an SSM parameter by name\n - `BaseImage.fromMarketplaceProductId('product-id')` - Use a Marketplace product ID\n - `BaseImage.fromImageBuilder(scope, 'ubuntu-server-22-lts-x86')` - Use an AWS-provided Image Builder image\n\nFor example `BaseImage.fromImageBuilder(scope, 'ubuntu-server-22-lts-x86')` would always use the latest version of Ubuntu 22.04 in each build. If you want a specific version, you can pass the version as the third parameter.",
13089
13582
  "stability": "experimental",
13090
13583
  "summary": "Base AMI from which runner AMIs will be built."
13091
13584
  },
13092
13585
  "immutable": true,
13093
13586
  "locationInModule": {
13094
13587
  "filename": "src/image-builders/common.ts",
13095
- "line": 171
13588
+ "line": 190
13096
13589
  },
13097
13590
  "name": "baseAmi",
13098
13591
  "optional": true,
13099
13592
  "type": {
13100
- "primitive": "string"
13593
+ "union": {
13594
+ "types": [
13595
+ {
13596
+ "primitive": "string"
13597
+ },
13598
+ {
13599
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseImage"
13600
+ }
13601
+ ]
13602
+ }
13101
13603
  }
13102
13604
  },
13103
13605
  {
13104
13606
  "abstract": true,
13105
13607
  "docs": {
13106
13608
  "default": "public.ecr.aws/lts/ubuntu:22.04 for Os.LINUX_UBUNTU and Os.LINUX_UBUNTU_2204, public.ecr.aws/lts/ubuntu:24.04 for Os.LINUX_UBUNTU_2404, public.ecr.aws/amazonlinux/amazonlinux:2 for Os.LINUX_AMAZON_2, mcr.microsoft.com/windows/servercore:ltsc2019-amd64 for Os.WINDOWS",
13107
- "remarks": "When using private images from a different account or not on ECR, you may need to include additional setup commands with {@link dockerSetupCommands}.",
13609
+ "remarks": "This can be:\n- A string (ECR/ECR public image URI, DockerHub image, or Image Builder ARN) - deprecated, use BaseContainerImage static factory methods instead\n- A BaseContainerImage instance created using static factory methods:\n - `BaseContainerImage.fromDockerHub('ubuntu', '22.04')` - Use DockerHub\n - `BaseContainerImage.fromEcr(repo, 'latest')` - Use ECR (automatically grants permissions with CodeBuild)\n - `BaseContainerImage.fromEcrPublic('lts', 'ubuntu', '22.04')` - Use ECR Public\n - `BaseContainerImage.fromString('public.ecr.aws/lts/ubuntu:22.04')` - Use any string\n\nWhen using private images from a different account or not on ECR, you may need to include additional setup commands with {@link dockerSetupCommands}.",
13108
13610
  "stability": "experimental",
13109
13611
  "summary": "Base image from which Docker runner images will be built."
13110
13612
  },
13111
13613
  "immutable": true,
13112
13614
  "locationInModule": {
13113
13615
  "filename": "src/image-builders/common.ts",
13114
- "line": 153
13616
+ "line": 162
13115
13617
  },
13116
13618
  "name": "baseDockerImage",
13117
13619
  "optional": true,
13118
13620
  "type": {
13119
- "primitive": "string"
13621
+ "union": {
13622
+ "types": [
13623
+ {
13624
+ "primitive": "string"
13625
+ },
13626
+ {
13627
+ "fqn": "@cloudsnorkel/cdk-github-runners.BaseContainerImage"
13628
+ }
13629
+ ]
13630
+ }
13120
13631
  }
13121
13632
  },
13122
13633
  {
@@ -13128,7 +13639,7 @@
13128
13639
  "immutable": true,
13129
13640
  "locationInModule": {
13130
13641
  "filename": "src/image-builders/common.ts",
13131
- "line": 236
13642
+ "line": 255
13132
13643
  },
13133
13644
  "name": "builderType",
13134
13645
  "optional": true,
@@ -13146,7 +13657,7 @@
13146
13657
  "immutable": true,
13147
13658
  "locationInModule": {
13148
13659
  "filename": "src/image-builders/common.ts",
13149
- "line": 241
13660
+ "line": 260
13150
13661
  },
13151
13662
  "name": "codeBuildOptions",
13152
13663
  "optional": true,
@@ -13164,7 +13675,7 @@
13164
13675
  "immutable": true,
13165
13676
  "locationInModule": {
13166
13677
  "filename": "src/image-builders/common.ts",
13167
- "line": 185
13678
+ "line": 204
13168
13679
  },
13169
13680
  "name": "components",
13170
13681
  "optional": true,
@@ -13188,7 +13699,7 @@
13188
13699
  "immutable": true,
13189
13700
  "locationInModule": {
13190
13701
  "filename": "src/image-builders/common.ts",
13191
- "line": 162
13702
+ "line": 171
13192
13703
  },
13193
13704
  "name": "dockerSetupCommands",
13194
13705
  "optional": true,
@@ -13212,7 +13723,7 @@
13212
13723
  "immutable": true,
13213
13724
  "locationInModule": {
13214
13725
  "filename": "src/image-builders/common.ts",
13215
- "line": 231
13726
+ "line": 250
13216
13727
  },
13217
13728
  "name": "logRemovalPolicy",
13218
13729
  "optional": true,
@@ -13231,7 +13742,7 @@
13231
13742
  "immutable": true,
13232
13743
  "locationInModule": {
13233
13744
  "filename": "src/image-builders/common.ts",
13234
- "line": 222
13745
+ "line": 241
13235
13746
  },
13236
13747
  "name": "logRetention",
13237
13748
  "optional": true,
@@ -13249,7 +13760,7 @@
13249
13760
  "immutable": true,
13250
13761
  "locationInModule": {
13251
13762
  "filename": "src/image-builders/common.ts",
13252
- "line": 144
13763
+ "line": 145
13253
13764
  },
13254
13765
  "name": "os",
13255
13766
  "optional": true,
@@ -13268,7 +13779,7 @@
13268
13779
  "immutable": true,
13269
13780
  "locationInModule": {
13270
13781
  "filename": "src/image-builders/common.ts",
13271
- "line": 194
13782
+ "line": 213
13272
13783
  },
13273
13784
  "name": "rebuildInterval",
13274
13785
  "optional": true,
@@ -13286,7 +13797,7 @@
13286
13797
  "immutable": true,
13287
13798
  "locationInModule": {
13288
13799
  "filename": "src/image-builders/common.ts",
13289
- "line": 178
13800
+ "line": 197
13290
13801
  },
13291
13802
  "name": "runnerVersion",
13292
13803
  "optional": true,
@@ -13303,7 +13814,7 @@
13303
13814
  "immutable": true,
13304
13815
  "locationInModule": {
13305
13816
  "filename": "src/image-builders/common.ts",
13306
- "line": 206
13817
+ "line": 225
13307
13818
  },
13308
13819
  "name": "securityGroups",
13309
13820
  "optional": true,
@@ -13326,7 +13837,7 @@
13326
13837
  "immutable": true,
13327
13838
  "locationInModule": {
13328
13839
  "filename": "src/image-builders/common.ts",
13329
- "line": 213
13840
+ "line": 232
13330
13841
  },
13331
13842
  "name": "subnetSelection",
13332
13843
  "optional": true,
@@ -13344,7 +13855,7 @@
13344
13855
  "immutable": true,
13345
13856
  "locationInModule": {
13346
13857
  "filename": "src/image-builders/common.ts",
13347
- "line": 201
13858
+ "line": 220
13348
13859
  },
13349
13860
  "name": "vpc",
13350
13861
  "optional": true,
@@ -13363,7 +13874,7 @@
13363
13874
  "immutable": true,
13364
13875
  "locationInModule": {
13365
13876
  "filename": "src/image-builders/common.ts",
13366
- "line": 257
13877
+ "line": 276
13367
13878
  },
13368
13879
  "name": "waitOnDeploy",
13369
13880
  "optional": true,
@@ -13383,7 +13894,7 @@
13383
13894
  "kind": "enum",
13384
13895
  "locationInModule": {
13385
13896
  "filename": "src/image-builders/common.ts",
13386
- "line": 260
13897
+ "line": 279
13387
13898
  },
13388
13899
  "members": [
13389
13900
  {
@@ -13423,7 +13934,7 @@
13423
13934
  "kind": "class",
13424
13935
  "locationInModule": {
13425
13936
  "filename": "src/image-builders/components.ts",
13426
- "line": 39
13937
+ "line": 40
13427
13938
  },
13428
13939
  "methods": [
13429
13940
  {
@@ -13433,7 +13944,7 @@
13433
13944
  },
13434
13945
  "locationInModule": {
13435
13946
  "filename": "src/image-builders/components.ts",
13436
- "line": 181
13947
+ "line": 182
13437
13948
  },
13438
13949
  "name": "awsCli",
13439
13950
  "returns": {
@@ -13450,7 +13961,7 @@
13450
13961
  },
13451
13962
  "locationInModule": {
13452
13963
  "filename": "src/image-builders/components.ts",
13453
- "line": 107
13964
+ "line": 108
13454
13965
  },
13455
13966
  "name": "cloudWatchAgent",
13456
13967
  "returns": {
@@ -13468,7 +13979,7 @@
13468
13979
  },
13469
13980
  "locationInModule": {
13470
13981
  "filename": "src/image-builders/components.ts",
13471
- "line": 49
13982
+ "line": 50
13472
13983
  },
13473
13984
  "name": "custom",
13474
13985
  "parameters": [
@@ -13494,7 +14005,7 @@
13494
14005
  },
13495
14006
  "locationInModule": {
13496
14007
  "filename": "src/image-builders/components.ts",
13497
- "line": 399
14008
+ "line": 400
13498
14009
  },
13499
14010
  "name": "docker",
13500
14011
  "returns": {
@@ -13512,7 +14023,7 @@
13512
14023
  },
13513
14024
  "locationInModule": {
13514
14025
  "filename": "src/image-builders/components.ts",
13515
- "line": 477
14026
+ "line": 478
13516
14027
  },
13517
14028
  "name": "dockerInDocker",
13518
14029
  "returns": {
@@ -13530,7 +14041,7 @@
13530
14041
  },
13531
14042
  "locationInModule": {
13532
14043
  "filename": "src/image-builders/components.ts",
13533
- "line": 580
14044
+ "line": 595
13534
14045
  },
13535
14046
  "name": "environmentVariables",
13536
14047
  "parameters": [
@@ -13561,13 +14072,13 @@
13561
14072
  },
13562
14073
  "locationInModule": {
13563
14074
  "filename": "src/image-builders/components.ts",
13564
- "line": 487
14075
+ "line": 488
13565
14076
  },
13566
14077
  "name": "extraCertificates",
13567
14078
  "parameters": [
13568
14079
  {
13569
14080
  "docs": {
13570
- "summary": "path to certificate file in PEM format."
14081
+ "summary": "path to certificate file in PEM format, or a directory containing certificate files (.pem or .crt)."
13571
14082
  },
13572
14083
  "name": "source",
13573
14084
  "type": {
@@ -13598,7 +14109,7 @@
13598
14109
  },
13599
14110
  "locationInModule": {
13600
14111
  "filename": "src/image-builders/components.ts",
13601
- "line": 260
14112
+ "line": 261
13602
14113
  },
13603
14114
  "name": "git",
13604
14115
  "returns": {
@@ -13615,7 +14126,7 @@
13615
14126
  },
13616
14127
  "locationInModule": {
13617
14128
  "filename": "src/image-builders/components.ts",
13618
- "line": 217
14129
+ "line": 218
13619
14130
  },
13620
14131
  "name": "githubCli",
13621
14132
  "returns": {
@@ -13633,7 +14144,7 @@
13633
14144
  },
13634
14145
  "locationInModule": {
13635
14146
  "filename": "src/image-builders/components.ts",
13636
- "line": 304
14147
+ "line": 305
13637
14148
  },
13638
14149
  "name": "githubRunner",
13639
14150
  "parameters": [
@@ -13662,7 +14173,7 @@
13662
14173
  },
13663
14174
  "locationInModule": {
13664
14175
  "filename": "src/image-builders/components.ts",
13665
- "line": 537
14176
+ "line": 552
13666
14177
  },
13667
14178
  "name": "lambdaEntrypoint",
13668
14179
  "returns": {
@@ -13679,7 +14190,7 @@
13679
14190
  },
13680
14191
  "locationInModule": {
13681
14192
  "filename": "src/image-builders/components.ts",
13682
- "line": 74
14193
+ "line": 75
13683
14194
  },
13684
14195
  "name": "requiredPackages",
13685
14196
  "returns": {
@@ -13696,7 +14207,7 @@
13696
14207
  },
13697
14208
  "locationInModule": {
13698
14209
  "filename": "src/image-builders/components.ts",
13699
- "line": 150
14210
+ "line": 151
13700
14211
  },
13701
14212
  "name": "runnerUser",
13702
14213
  "returns": {
@@ -13714,7 +14225,7 @@
13714
14225
  },
13715
14226
  "locationInModule": {
13716
14227
  "filename": "src/image-builders/components.ts",
13717
- "line": 617
14228
+ "line": 632
13718
14229
  },
13719
14230
  "name": "getAssets",
13720
14231
  "parameters": [
@@ -13751,7 +14262,7 @@
13751
14262
  },
13752
14263
  "locationInModule": {
13753
14264
  "filename": "src/image-builders/components.ts",
13754
- "line": 612
14265
+ "line": 627
13755
14266
  },
13756
14267
  "name": "getCommands",
13757
14268
  "parameters": [
@@ -13787,7 +14298,7 @@
13787
14298
  },
13788
14299
  "locationInModule": {
13789
14300
  "filename": "src/image-builders/components.ts",
13790
- "line": 626
14301
+ "line": 641
13791
14302
  },
13792
14303
  "name": "getDockerCommands",
13793
14304
  "parameters": [
@@ -13822,7 +14333,7 @@
13822
14333
  },
13823
14334
  "locationInModule": {
13824
14335
  "filename": "src/image-builders/components.ts",
13825
- "line": 633
14336
+ "line": 648
13826
14337
  },
13827
14338
  "name": "shouldReboot",
13828
14339
  "parameters": [
@@ -13858,7 +14369,7 @@
13858
14369
  "immutable": true,
13859
14370
  "locationInModule": {
13860
14371
  "filename": "src/image-builders/components.ts",
13861
- "line": 607
14372
+ "line": 622
13862
14373
  },
13863
14374
  "name": "name",
13864
14375
  "type": {
@@ -13878,7 +14389,7 @@
13878
14389
  "kind": "interface",
13879
14390
  "locationInModule": {
13880
14391
  "filename": "src/image-builders/components.ts",
13881
- "line": 8
14392
+ "line": 9
13882
14393
  },
13883
14394
  "name": "RunnerImageComponentCustomProps",
13884
14395
  "properties": [
@@ -13891,7 +14402,7 @@
13891
14402
  "immutable": true,
13892
14403
  "locationInModule": {
13893
14404
  "filename": "src/image-builders/components.ts",
13894
- "line": 24
14405
+ "line": 25
13895
14406
  },
13896
14407
  "name": "assets",
13897
14408
  "optional": true,
@@ -13913,7 +14424,7 @@
13913
14424
  "immutable": true,
13914
14425
  "locationInModule": {
13915
14426
  "filename": "src/image-builders/components.ts",
13916
- "line": 19
14427
+ "line": 20
13917
14428
  },
13918
14429
  "name": "commands",
13919
14430
  "optional": true,
@@ -13936,7 +14447,7 @@
13936
14447
  "immutable": true,
13937
14448
  "locationInModule": {
13938
14449
  "filename": "src/image-builders/components.ts",
13939
- "line": 33
14450
+ "line": 34
13940
14451
  },
13941
14452
  "name": "dockerCommands",
13942
14453
  "optional": true,
@@ -13959,7 +14470,7 @@
13959
14470
  "immutable": true,
13960
14471
  "locationInModule": {
13961
14472
  "filename": "src/image-builders/components.ts",
13962
- "line": 14
14473
+ "line": 15
13963
14474
  },
13964
14475
  "name": "name",
13965
14476
  "optional": true,
@@ -14419,7 +14930,7 @@
14419
14930
  "kind": "class",
14420
14931
  "locationInModule": {
14421
14932
  "filename": "src/image-builders/static.ts",
14422
- "line": 10
14933
+ "line": 11
14423
14934
  },
14424
14935
  "methods": [
14425
14936
  {
@@ -14430,7 +14941,7 @@
14430
14941
  },
14431
14942
  "locationInModule": {
14432
14943
  "filename": "src/image-builders/static.ts",
14433
- "line": 49
14944
+ "line": 50
14434
14945
  },
14435
14946
  "name": "fromDockerHub",
14436
14947
  "parameters": [
@@ -14491,7 +15002,7 @@
14491
15002
  },
14492
15003
  "locationInModule": {
14493
15004
  "filename": "src/image-builders/static.ts",
14494
- "line": 19
15005
+ "line": 20
14495
15006
  },
14496
15007
  "name": "fromEcrRepository",
14497
15008
  "parameters": [
@@ -14920,6 +15431,6 @@
14920
15431
  "symbolId": "src/image-builders/aws-image-builder/deprecated/windows-components:WindowsComponents"
14921
15432
  }
14922
15433
  },
14923
- "version": "0.14.18",
14924
- "fingerprint": "78faIxcJg8nT4vHotUHZaPgQK8EkmIk1Pw2k6eNcPPg="
15434
+ "version": "0.14.20",
15435
+ "fingerprint": "jNhuwh6BSEpn806TlB8ApZ7QQE5V+Ljvf1mdWH43Ubw="
14925
15436
  }