@cloudsnorkel/cdk-github-runners 0.10.5 → 0.10.7

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 (45) hide show
  1. package/.jsii +120 -120
  2. package/README.md +1 -1
  3. package/assets/delete-failed-runner.lambda/index.js +2117 -972
  4. package/assets/docker-images/codebuild/linux-arm64/Dockerfile +1 -2
  5. package/assets/docker-images/codebuild/linux-x64/Dockerfile +1 -2
  6. package/assets/docker-images/fargate/linux-arm64/Dockerfile +1 -2
  7. package/assets/docker-images/fargate/linux-x64/Dockerfile +1 -2
  8. package/assets/idle-runner-repear.lambda/index.js +2113 -968
  9. package/assets/image-builders/aws-image-builder/versioner.lambda/index.js +118 -54
  10. package/assets/setup.lambda/index.html +13 -13
  11. package/assets/setup.lambda/index.js +1552 -616
  12. package/assets/status.lambda/index.js +704 -432
  13. package/assets/token-retriever.lambda/index.js +2115 -970
  14. package/assets/webhook-handler.lambda/index.js +10 -8
  15. package/lib/access.js +1 -1
  16. package/lib/image-builders/api.js +1 -1
  17. package/lib/image-builders/aws-image-builder/ami.d.ts +1 -1
  18. package/lib/image-builders/aws-image-builder/ami.js +9 -9
  19. package/lib/image-builders/aws-image-builder/builder.js +1 -1
  20. package/lib/image-builders/aws-image-builder/deprecated/ami.d.ts +1 -1
  21. package/lib/image-builders/aws-image-builder/deprecated/ami.js +9 -9
  22. package/lib/image-builders/aws-image-builder/deprecated/common.d.ts +1 -1
  23. package/lib/image-builders/aws-image-builder/deprecated/common.js +10 -10
  24. package/lib/image-builders/aws-image-builder/deprecated/container.js +1 -1
  25. package/lib/image-builders/aws-image-builder/deprecated/linux-components.d.ts +1 -1
  26. package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +11 -12
  27. package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
  28. package/lib/image-builders/codebuild-deprecated.js +1 -1
  29. package/lib/image-builders/components.js +3 -4
  30. package/lib/image-builders/static.js +1 -1
  31. package/lib/providers/codebuild.js +7 -5
  32. package/lib/providers/common.d.ts +2 -1
  33. package/lib/providers/common.js +5 -6
  34. package/lib/providers/ec2.d.ts +1 -0
  35. package/lib/providers/ec2.js +16 -11
  36. package/lib/providers/ecs.js +12 -5
  37. package/lib/providers/fargate.js +6 -3
  38. package/lib/providers/lambda.js +2 -2
  39. package/lib/runner.js +1 -1
  40. package/lib/secrets.js +1 -1
  41. package/lib/status.lambda.js +12 -7
  42. package/lib/utils.d.ts +19 -1
  43. package/lib/utils.js +48 -2
  44. package/lib/webhook-handler.lambda.js +11 -9
  45. package/package.json +12 -11
package/.jsii CHANGED
@@ -3114,7 +3114,7 @@
3114
3114
  "stability": "experimental"
3115
3115
  },
3116
3116
  "homepage": "https://github.com/CloudSnorkel/cdk-github-runners.git",
3117
- "jsiiVersion": "5.0.9 (build a2ff859)",
3117
+ "jsiiVersion": "5.0.12 (build 2e92b7a)",
3118
3118
  "keywords": [
3119
3119
  "aws",
3120
3120
  "aws-cdk",
@@ -3138,7 +3138,7 @@
3138
3138
  },
3139
3139
  "name": "@cloudsnorkel/cdk-github-runners",
3140
3140
  "readme": {
3141
- "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 cloudsnorkel.cdk_github_runners import GitHubRunners\n\n GitHubRunners(self, \"runners\")\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 { GitHubRunners } from '@cloudsnorkel/cdk-github-runners';\n\n new GitHubRunners(this, \"runners\");\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 com.cloudsnorkel.cdk.github.runners.GitHubRunners;\n\n GitHubRunners.Builder.create(this, \"runners\").build();\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 import \"github.com/CloudSnorkel/cdk-github-runners-go/cloudsnorkelcdkgithubrunners\"\n\n NewGitHubRunners(this, jsii.String(\"runners\"))\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 CloudSnorkel;\n\n new GitHubRunners(this, \"runners\");\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, linux, codebuild]` or similar\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 = CodeBuildRunnerProvider.imageBuilder(this, 'image builder', {\n dockerfilePath: FargateRunner.LINUX_X64_DOCKERFILE_PATH,\n runnerVersion: RunnerVersion.specific('2.291.0'),\n rebuildInterval: Duration.days(14),\n});\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 vpc: vpc,\n securityGroups: [runnerSg],\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 runnerVersion: RunnerVersion.specific('2.291.0'),\n rebuildInterval: Duration.days(14),\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 vpc: vpc,\n securityGroups: [runnerSg],\n imageBuidler: 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 imageBuidler: FargateRunnerProvider.imageBuilder(this, 'image builder', {\n architecture: Architecture.ARM64,\n os: Os.LINUX_UBUNTU,\n }),\n }),\n ],\n});\n```\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\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## 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"
3141
+ "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 cloudsnorkel.cdk_github_runners import GitHubRunners\n\n GitHubRunners(self, \"runners\")\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 { GitHubRunners } from '@cloudsnorkel/cdk-github-runners';\n\n new GitHubRunners(this, \"runners\");\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 com.cloudsnorkel.cdk.github.runners.GitHubRunners;\n\n GitHubRunners.Builder.create(this, \"runners\").build();\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 import \"github.com/CloudSnorkel/cdk-github-runners-go/cloudsnorkelcdkgithubrunners\"\n\n NewGitHubRunners(this, jsii.String(\"runners\"))\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 CloudSnorkel;\n\n new GitHubRunners(this, \"runners\");\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, linux, codebuild]` or similar\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 = CodeBuildRunnerProvider.imageBuilder(this, 'image builder', {\n dockerfilePath: FargateRunner.LINUX_X64_DOCKERFILE_PATH,\n runnerVersion: RunnerVersion.specific('2.291.0'),\n rebuildInterval: Duration.days(14),\n});\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 vpc: vpc,\n securityGroups: [runnerSg],\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 runnerVersion: RunnerVersion.specific('2.291.0'),\n rebuildInterval: Duration.days(14),\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 vpc: vpc,\n securityGroups: [runnerSg],\n imageBuidler: 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 imageBuidler: FargateRunnerProvider.imageBuilder(this, 'image builder', {\n architecture: Architecture.ARM64,\n os: Os.LINUX_UBUNTU,\n }),\n }),\n ],\n});\n```\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\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## 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-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"
3142
3142
  },
3143
3143
  "repository": {
3144
3144
  "type": "git",
@@ -4685,7 +4685,7 @@
4685
4685
  "kind": "class",
4686
4686
  "locationInModule": {
4687
4687
  "filename": "src/providers/codebuild.ts",
4688
- "line": 419
4688
+ "line": 421
4689
4689
  },
4690
4690
  "name": "CodeBuildRunner",
4691
4691
  "symbolId": "src/providers/codebuild:CodeBuildRunner"
@@ -4859,7 +4859,7 @@
4859
4859
  },
4860
4860
  "locationInModule": {
4861
4861
  "filename": "src/providers/codebuild.ts",
4862
- "line": 348
4862
+ "line": 352
4863
4863
  },
4864
4864
  "name": "getStepFunctionTask",
4865
4865
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -4888,7 +4888,7 @@
4888
4888
  },
4889
4889
  "locationInModule": {
4890
4890
  "filename": "src/providers/codebuild.ts",
4891
- "line": 387
4891
+ "line": 389
4892
4892
  },
4893
4893
  "name": "grantStateMachine",
4894
4894
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -4957,7 +4957,7 @@
4957
4957
  },
4958
4958
  "locationInModule": {
4959
4959
  "filename": "src/providers/codebuild.ts",
4960
- "line": 390
4960
+ "line": 392
4961
4961
  },
4962
4962
  "name": "status",
4963
4963
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -5024,7 +5024,7 @@
5024
5024
  "immutable": true,
5025
5025
  "locationInModule": {
5026
5026
  "filename": "src/providers/codebuild.ts",
5027
- "line": 411
5027
+ "line": 413
5028
5028
  },
5029
5029
  "name": "connections",
5030
5030
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -6044,7 +6044,7 @@
6044
6044
  },
6045
6045
  "locationInModule": {
6046
6046
  "filename": "src/providers/ec2.ts",
6047
- "line": 298
6047
+ "line": 300
6048
6048
  },
6049
6049
  "parameters": [
6050
6050
  {
@@ -6071,7 +6071,7 @@
6071
6071
  "kind": "class",
6072
6072
  "locationInModule": {
6073
6073
  "filename": "src/providers/ec2.ts",
6074
- "line": 508
6074
+ "line": 514
6075
6075
  },
6076
6076
  "name": "Ec2Runner",
6077
6077
  "symbolId": "src/providers/ec2:Ec2Runner"
@@ -6091,7 +6091,7 @@
6091
6091
  },
6092
6092
  "locationInModule": {
6093
6093
  "filename": "src/providers/ec2.ts",
6094
- "line": 298
6094
+ "line": 300
6095
6095
  },
6096
6096
  "parameters": [
6097
6097
  {
@@ -6121,7 +6121,7 @@
6121
6121
  "kind": "class",
6122
6122
  "locationInModule": {
6123
6123
  "filename": "src/providers/ec2.ts",
6124
- "line": 235
6124
+ "line": 236
6125
6125
  },
6126
6126
  "methods": [
6127
6127
  {
@@ -6132,7 +6132,7 @@
6132
6132
  },
6133
6133
  "locationInModule": {
6134
6134
  "filename": "src/providers/ec2.ts",
6135
- "line": 248
6135
+ "line": 249
6136
6136
  },
6137
6137
  "name": "imageBuilder",
6138
6138
  "parameters": [
@@ -6171,7 +6171,7 @@
6171
6171
  },
6172
6172
  "locationInModule": {
6173
6173
  "filename": "src/providers/ec2.ts",
6174
- "line": 350
6174
+ "line": 355
6175
6175
  },
6176
6176
  "name": "getStepFunctionTask",
6177
6177
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6200,7 +6200,7 @@
6200
6200
  },
6201
6201
  "locationInModule": {
6202
6202
  "filename": "src/providers/ec2.ts",
6203
- "line": 448
6203
+ "line": 454
6204
6204
  },
6205
6205
  "name": "grantStateMachine",
6206
6206
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6269,7 +6269,7 @@
6269
6269
  },
6270
6270
  "locationInModule": {
6271
6271
  "filename": "src/providers/ec2.ts",
6272
- "line": 478
6272
+ "line": 484
6273
6273
  },
6274
6274
  "name": "status",
6275
6275
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6298,7 +6298,7 @@
6298
6298
  "immutable": true,
6299
6299
  "locationInModule": {
6300
6300
  "filename": "src/providers/ec2.ts",
6301
- "line": 500
6301
+ "line": 506
6302
6302
  },
6303
6303
  "name": "connections",
6304
6304
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -6314,7 +6314,7 @@
6314
6314
  "immutable": true,
6315
6315
  "locationInModule": {
6316
6316
  "filename": "src/providers/ec2.ts",
6317
- "line": 274
6317
+ "line": 275
6318
6318
  },
6319
6319
  "name": "grantPrincipal",
6320
6320
  "overrides": "aws-cdk-lib.aws_iam.IGrantable",
@@ -6330,7 +6330,7 @@
6330
6330
  "immutable": true,
6331
6331
  "locationInModule": {
6332
6332
  "filename": "src/providers/ec2.ts",
6333
- "line": 269
6333
+ "line": 270
6334
6334
  },
6335
6335
  "name": "labels",
6336
6336
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6352,7 +6352,7 @@
6352
6352
  "immutable": true,
6353
6353
  "locationInModule": {
6354
6354
  "filename": "src/providers/ec2.ts",
6355
- "line": 281
6355
+ "line": 282
6356
6356
  },
6357
6357
  "name": "logGroup",
6358
6358
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6368,7 +6368,7 @@
6368
6368
  "immutable": true,
6369
6369
  "locationInModule": {
6370
6370
  "filename": "src/providers/ec2.ts",
6371
- "line": 283
6371
+ "line": 284
6372
6372
  },
6373
6373
  "name": "retryableErrors",
6374
6374
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6398,7 +6398,7 @@
6398
6398
  "kind": "interface",
6399
6399
  "locationInModule": {
6400
6400
  "filename": "src/providers/ec2.ts",
6401
- "line": 136
6401
+ "line": 137
6402
6402
  },
6403
6403
  "name": "Ec2RunnerProviderProps",
6404
6404
  "properties": [
@@ -6411,7 +6411,7 @@
6411
6411
  "immutable": true,
6412
6412
  "locationInModule": {
6413
6413
  "filename": "src/providers/ec2.ts",
6414
- "line": 149
6414
+ "line": 150
6415
6415
  },
6416
6416
  "name": "amiBuilder",
6417
6417
  "optional": true,
@@ -6430,7 +6430,7 @@
6430
6430
  "immutable": true,
6431
6431
  "locationInModule": {
6432
6432
  "filename": "src/providers/ec2.ts",
6433
- "line": 144
6433
+ "line": 145
6434
6434
  },
6435
6435
  "name": "imageBuilder",
6436
6436
  "optional": true,
@@ -6448,7 +6448,7 @@
6448
6448
  "immutable": true,
6449
6449
  "locationInModule": {
6450
6450
  "filename": "src/providers/ec2.ts",
6451
- "line": 167
6451
+ "line": 168
6452
6452
  },
6453
6453
  "name": "instanceType",
6454
6454
  "optional": true,
@@ -6467,7 +6467,7 @@
6467
6467
  "immutable": true,
6468
6468
  "locationInModule": {
6469
6469
  "filename": "src/providers/ec2.ts",
6470
- "line": 160
6470
+ "line": 161
6471
6471
  },
6472
6472
  "name": "labels",
6473
6473
  "optional": true,
@@ -6491,7 +6491,7 @@
6491
6491
  "immutable": true,
6492
6492
  "locationInModule": {
6493
6493
  "filename": "src/providers/ec2.ts",
6494
- "line": 183
6494
+ "line": 184
6495
6495
  },
6496
6496
  "name": "securityGroup",
6497
6497
  "optional": true,
@@ -6509,7 +6509,7 @@
6509
6509
  "immutable": true,
6510
6510
  "locationInModule": {
6511
6511
  "filename": "src/providers/ec2.ts",
6512
- "line": 190
6512
+ "line": 191
6513
6513
  },
6514
6514
  "name": "securityGroups",
6515
6515
  "optional": true,
@@ -6533,7 +6533,7 @@
6533
6533
  "immutable": true,
6534
6534
  "locationInModule": {
6535
6535
  "filename": "src/providers/ec2.ts",
6536
- "line": 220
6536
+ "line": 221
6537
6537
  },
6538
6538
  "name": "spot",
6539
6539
  "optional": true,
@@ -6551,7 +6551,7 @@
6551
6551
  "immutable": true,
6552
6552
  "locationInModule": {
6553
6553
  "filename": "src/providers/ec2.ts",
6554
- "line": 227
6554
+ "line": 228
6555
6555
  },
6556
6556
  "name": "spotMaxPrice",
6557
6557
  "optional": true,
@@ -6570,7 +6570,7 @@
6570
6570
  "immutable": true,
6571
6571
  "locationInModule": {
6572
6572
  "filename": "src/providers/ec2.ts",
6573
- "line": 174
6573
+ "line": 175
6574
6574
  },
6575
6575
  "name": "storageSize",
6576
6576
  "optional": true,
@@ -6589,7 +6589,7 @@
6589
6589
  "immutable": true,
6590
6590
  "locationInModule": {
6591
6591
  "filename": "src/providers/ec2.ts",
6592
- "line": 199
6592
+ "line": 200
6593
6593
  },
6594
6594
  "name": "subnet",
6595
6595
  "optional": true,
@@ -6608,7 +6608,7 @@
6608
6608
  "immutable": true,
6609
6609
  "locationInModule": {
6610
6610
  "filename": "src/providers/ec2.ts",
6611
- "line": 213
6611
+ "line": 214
6612
6612
  },
6613
6613
  "name": "subnetSelection",
6614
6614
  "optional": true,
@@ -6626,7 +6626,7 @@
6626
6626
  "immutable": true,
6627
6627
  "locationInModule": {
6628
6628
  "filename": "src/providers/ec2.ts",
6629
- "line": 206
6629
+ "line": 207
6630
6630
  },
6631
6631
  "name": "vpc",
6632
6632
  "optional": true,
@@ -6652,7 +6652,7 @@
6652
6652
  },
6653
6653
  "locationInModule": {
6654
6654
  "filename": "src/providers/ecs.ts",
6655
- "line": 311
6655
+ "line": 314
6656
6656
  },
6657
6657
  "parameters": [
6658
6658
  {
@@ -6682,7 +6682,7 @@
6682
6682
  "kind": "class",
6683
6683
  "locationInModule": {
6684
6684
  "filename": "src/providers/ecs.ts",
6685
- "line": 202
6685
+ "line": 205
6686
6686
  },
6687
6687
  "methods": [
6688
6688
  {
@@ -6693,7 +6693,7 @@
6693
6693
  },
6694
6694
  "locationInModule": {
6695
6695
  "filename": "src/providers/ecs.ts",
6696
- "line": 215
6696
+ "line": 218
6697
6697
  },
6698
6698
  "name": "imageBuilder",
6699
6699
  "parameters": [
@@ -6732,7 +6732,7 @@
6732
6732
  },
6733
6733
  "locationInModule": {
6734
6734
  "filename": "src/providers/ecs.ts",
6735
- "line": 512
6735
+ "line": 518
6736
6736
  },
6737
6737
  "name": "getStepFunctionTask",
6738
6738
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6761,7 +6761,7 @@
6761
6761
  },
6762
6762
  "locationInModule": {
6763
6763
  "filename": "src/providers/ecs.ts",
6764
- "line": 557
6764
+ "line": 566
6765
6765
  },
6766
6766
  "name": "grantStateMachine",
6767
6767
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6830,7 +6830,7 @@
6830
6830
  },
6831
6831
  "locationInModule": {
6832
6832
  "filename": "src/providers/ecs.ts",
6833
- "line": 560
6833
+ "line": 569
6834
6834
  },
6835
6835
  "name": "status",
6836
6836
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6859,7 +6859,7 @@
6859
6859
  "immutable": true,
6860
6860
  "locationInModule": {
6861
6861
  "filename": "src/providers/ecs.ts",
6862
- "line": 280
6862
+ "line": 283
6863
6863
  },
6864
6864
  "name": "connections",
6865
6865
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -6875,7 +6875,7 @@
6875
6875
  "immutable": true,
6876
6876
  "locationInModule": {
6877
6877
  "filename": "src/providers/ecs.ts",
6878
- "line": 275
6878
+ "line": 278
6879
6879
  },
6880
6880
  "name": "grantPrincipal",
6881
6881
  "overrides": "aws-cdk-lib.aws_iam.IGrantable",
@@ -6891,7 +6891,7 @@
6891
6891
  "immutable": true,
6892
6892
  "locationInModule": {
6893
6893
  "filename": "src/providers/ecs.ts",
6894
- "line": 255
6894
+ "line": 258
6895
6895
  },
6896
6896
  "name": "labels",
6897
6897
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6913,7 +6913,7 @@
6913
6913
  "immutable": true,
6914
6914
  "locationInModule": {
6915
6915
  "filename": "src/providers/ecs.ts",
6916
- "line": 292
6916
+ "line": 295
6917
6917
  },
6918
6918
  "name": "logGroup",
6919
6919
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6929,7 +6929,7 @@
6929
6929
  "immutable": true,
6930
6930
  "locationInModule": {
6931
6931
  "filename": "src/providers/ecs.ts",
6932
- "line": 304
6932
+ "line": 307
6933
6933
  },
6934
6934
  "name": "retryableErrors",
6935
6935
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -6959,7 +6959,7 @@
6959
6959
  "kind": "interface",
6960
6960
  "locationInModule": {
6961
6961
  "filename": "src/providers/ecs.ts",
6962
- "line": 35
6962
+ "line": 36
6963
6963
  },
6964
6964
  "name": "EcsRunnerProviderProps",
6965
6965
  "properties": [
@@ -6974,7 +6974,7 @@
6974
6974
  "immutable": true,
6975
6975
  "locationInModule": {
6976
6976
  "filename": "src/providers/ecs.ts",
6977
- "line": 100
6977
+ "line": 101
6978
6978
  },
6979
6979
  "name": "assignPublicIp",
6980
6980
  "optional": true,
@@ -6993,7 +6993,7 @@
6993
6993
  "immutable": true,
6994
6994
  "locationInModule": {
6995
6995
  "filename": "src/providers/ecs.ts",
6996
- "line": 91
6996
+ "line": 92
6997
6997
  },
6998
6998
  "name": "capacityProvider",
6999
6999
  "optional": true,
@@ -7011,7 +7011,7 @@
7011
7011
  "immutable": true,
7012
7012
  "locationInModule": {
7013
7013
  "filename": "src/providers/ecs.ts",
7014
- "line": 82
7014
+ "line": 83
7015
7015
  },
7016
7016
  "name": "cluster",
7017
7017
  "optional": true,
@@ -7030,7 +7030,7 @@
7030
7030
  "immutable": true,
7031
7031
  "locationInModule": {
7032
7032
  "filename": "src/providers/ecs.ts",
7033
- "line": 107
7033
+ "line": 108
7034
7034
  },
7035
7035
  "name": "cpu",
7036
7036
  "optional": true,
@@ -7049,7 +7049,7 @@
7049
7049
  "immutable": true,
7050
7050
  "locationInModule": {
7051
7051
  "filename": "src/providers/ecs.ts",
7052
- "line": 152
7052
+ "line": 153
7053
7053
  },
7054
7054
  "name": "dockerInDocker",
7055
7055
  "optional": true,
@@ -7068,7 +7068,7 @@
7068
7068
  "immutable": true,
7069
7069
  "locationInModule": {
7070
7070
  "filename": "src/providers/ecs.ts",
7071
- "line": 43
7071
+ "line": 44
7072
7072
  },
7073
7073
  "name": "imageBuilder",
7074
7074
  "optional": true,
@@ -7087,7 +7087,7 @@
7087
7087
  "immutable": true,
7088
7088
  "locationInModule": {
7089
7089
  "filename": "src/providers/ecs.ts",
7090
- "line": 121
7090
+ "line": 122
7091
7091
  },
7092
7092
  "name": "instanceType",
7093
7093
  "optional": true,
@@ -7106,7 +7106,7 @@
7106
7106
  "immutable": true,
7107
7107
  "locationInModule": {
7108
7108
  "filename": "src/providers/ecs.ts",
7109
- "line": 54
7109
+ "line": 55
7110
7110
  },
7111
7111
  "name": "labels",
7112
7112
  "optional": true,
@@ -7130,7 +7130,7 @@
7130
7130
  "immutable": true,
7131
7131
  "locationInModule": {
7132
7132
  "filename": "src/providers/ecs.ts",
7133
- "line": 135
7133
+ "line": 136
7134
7134
  },
7135
7135
  "name": "maxInstances",
7136
7136
  "optional": true,
@@ -7148,7 +7148,7 @@
7148
7148
  "immutable": true,
7149
7149
  "locationInModule": {
7150
7150
  "filename": "src/providers/ecs.ts",
7151
- "line": 114
7151
+ "line": 115
7152
7152
  },
7153
7153
  "name": "memoryLimitMiB",
7154
7154
  "optional": true,
@@ -7167,7 +7167,7 @@
7167
7167
  "immutable": true,
7168
7168
  "locationInModule": {
7169
7169
  "filename": "src/providers/ecs.ts",
7170
- "line": 128
7170
+ "line": 129
7171
7171
  },
7172
7172
  "name": "minInstances",
7173
7173
  "optional": true,
@@ -7185,7 +7185,7 @@
7185
7185
  "immutable": true,
7186
7186
  "locationInModule": {
7187
7187
  "filename": "src/providers/ecs.ts",
7188
- "line": 75
7188
+ "line": 76
7189
7189
  },
7190
7190
  "name": "securityGroups",
7191
7191
  "optional": true,
@@ -7208,7 +7208,7 @@
7208
7208
  "immutable": true,
7209
7209
  "locationInModule": {
7210
7210
  "filename": "src/providers/ecs.ts",
7211
- "line": 159
7211
+ "line": 160
7212
7212
  },
7213
7213
  "name": "spot",
7214
7214
  "optional": true,
@@ -7225,7 +7225,7 @@
7225
7225
  "immutable": true,
7226
7226
  "locationInModule": {
7227
7227
  "filename": "src/providers/ecs.ts",
7228
- "line": 164
7228
+ "line": 165
7229
7229
  },
7230
7230
  "name": "spotMaxPrice",
7231
7231
  "optional": true,
@@ -7244,7 +7244,7 @@
7244
7244
  "immutable": true,
7245
7245
  "locationInModule": {
7246
7246
  "filename": "src/providers/ecs.ts",
7247
- "line": 144
7247
+ "line": 145
7248
7248
  },
7249
7249
  "name": "storageSize",
7250
7250
  "optional": true,
@@ -7262,7 +7262,7 @@
7262
7262
  "immutable": true,
7263
7263
  "locationInModule": {
7264
7264
  "filename": "src/providers/ecs.ts",
7265
- "line": 68
7265
+ "line": 69
7266
7266
  },
7267
7267
  "name": "subnetSelection",
7268
7268
  "optional": true,
@@ -7280,7 +7280,7 @@
7280
7280
  "immutable": true,
7281
7281
  "locationInModule": {
7282
7282
  "filename": "src/providers/ecs.ts",
7283
- "line": 61
7283
+ "line": 62
7284
7284
  },
7285
7285
  "name": "vpc",
7286
7286
  "optional": true,
@@ -7305,7 +7305,7 @@
7305
7305
  },
7306
7306
  "locationInModule": {
7307
7307
  "filename": "src/providers/fargate.ts",
7308
- "line": 363
7308
+ "line": 364
7309
7309
  },
7310
7310
  "parameters": [
7311
7311
  {
@@ -7332,7 +7332,7 @@
7332
7332
  "kind": "class",
7333
7333
  "locationInModule": {
7334
7334
  "filename": "src/providers/fargate.ts",
7335
- "line": 524
7335
+ "line": 528
7336
7336
  },
7337
7337
  "name": "FargateRunner",
7338
7338
  "symbolId": "src/providers/fargate:FargateRunner"
@@ -7352,7 +7352,7 @@
7352
7352
  },
7353
7353
  "locationInModule": {
7354
7354
  "filename": "src/providers/fargate.ts",
7355
- "line": 363
7355
+ "line": 364
7356
7356
  },
7357
7357
  "parameters": [
7358
7358
  {
@@ -7382,7 +7382,7 @@
7382
7382
  "kind": "class",
7383
7383
  "locationInModule": {
7384
7384
  "filename": "src/providers/fargate.ts",
7385
- "line": 243
7385
+ "line": 244
7386
7386
  },
7387
7387
  "methods": [
7388
7388
  {
@@ -7393,7 +7393,7 @@
7393
7393
  },
7394
7394
  "locationInModule": {
7395
7395
  "filename": "src/providers/fargate.ts",
7396
- "line": 277
7396
+ "line": 278
7397
7397
  },
7398
7398
  "name": "imageBuilder",
7399
7399
  "parameters": [
@@ -7432,7 +7432,7 @@
7432
7432
  },
7433
7433
  "locationInModule": {
7434
7434
  "filename": "src/providers/fargate.ts",
7435
- "line": 447
7435
+ "line": 451
7436
7436
  },
7437
7437
  "name": "getStepFunctionTask",
7438
7438
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -7461,7 +7461,7 @@
7461
7461
  },
7462
7462
  "locationInModule": {
7463
7463
  "filename": "src/providers/fargate.ts",
7464
- "line": 499
7464
+ "line": 503
7465
7465
  },
7466
7466
  "name": "grantStateMachine",
7467
7467
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -7530,7 +7530,7 @@
7530
7530
  },
7531
7531
  "locationInModule": {
7532
7532
  "filename": "src/providers/fargate.ts",
7533
- "line": 502
7533
+ "line": 506
7534
7534
  },
7535
7535
  "name": "status",
7536
7536
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -7562,7 +7562,7 @@
7562
7562
  "immutable": true,
7563
7563
  "locationInModule": {
7564
7564
  "filename": "src/providers/fargate.ts",
7565
- "line": 264
7565
+ "line": 265
7566
7566
  },
7567
7567
  "name": "LINUX_ARM64_DOCKERFILE_PATH",
7568
7568
  "static": true,
@@ -7581,7 +7581,7 @@
7581
7581
  "immutable": true,
7582
7582
  "locationInModule": {
7583
7583
  "filename": "src/providers/fargate.ts",
7584
- "line": 253
7584
+ "line": 254
7585
7585
  },
7586
7586
  "name": "LINUX_X64_DOCKERFILE_PATH",
7587
7587
  "static": true,
@@ -7597,7 +7597,7 @@
7597
7597
  "immutable": true,
7598
7598
  "locationInModule": {
7599
7599
  "filename": "src/providers/fargate.ts",
7600
- "line": 326
7600
+ "line": 327
7601
7601
  },
7602
7602
  "name": "assignPublicIp",
7603
7603
  "type": {
@@ -7612,7 +7612,7 @@
7612
7612
  "immutable": true,
7613
7613
  "locationInModule": {
7614
7614
  "filename": "src/providers/fargate.ts",
7615
- "line": 296
7615
+ "line": 297
7616
7616
  },
7617
7617
  "name": "cluster",
7618
7618
  "type": {
@@ -7627,7 +7627,7 @@
7627
7627
  "immutable": true,
7628
7628
  "locationInModule": {
7629
7629
  "filename": "src/providers/fargate.ts",
7630
- "line": 336
7630
+ "line": 337
7631
7631
  },
7632
7632
  "name": "connections",
7633
7633
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -7643,7 +7643,7 @@
7643
7643
  "immutable": true,
7644
7644
  "locationInModule": {
7645
7645
  "filename": "src/providers/fargate.ts",
7646
- "line": 306
7646
+ "line": 307
7647
7647
  },
7648
7648
  "name": "container",
7649
7649
  "type": {
@@ -7658,7 +7658,7 @@
7658
7658
  "immutable": true,
7659
7659
  "locationInModule": {
7660
7660
  "filename": "src/providers/fargate.ts",
7661
- "line": 331
7661
+ "line": 332
7662
7662
  },
7663
7663
  "name": "grantPrincipal",
7664
7664
  "overrides": "aws-cdk-lib.aws_iam.IGrantable",
@@ -7675,7 +7675,7 @@
7675
7675
  "immutable": true,
7676
7676
  "locationInModule": {
7677
7677
  "filename": "src/providers/fargate.ts",
7678
- "line": 346
7678
+ "line": 347
7679
7679
  },
7680
7680
  "name": "image",
7681
7681
  "type": {
@@ -7690,7 +7690,7 @@
7690
7690
  "immutable": true,
7691
7691
  "locationInModule": {
7692
7692
  "filename": "src/providers/fargate.ts",
7693
- "line": 311
7693
+ "line": 312
7694
7694
  },
7695
7695
  "name": "labels",
7696
7696
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -7712,7 +7712,7 @@
7712
7712
  "immutable": true,
7713
7713
  "locationInModule": {
7714
7714
  "filename": "src/providers/fargate.ts",
7715
- "line": 353
7715
+ "line": 354
7716
7716
  },
7717
7717
  "name": "logGroup",
7718
7718
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -7728,7 +7728,7 @@
7728
7728
  "immutable": true,
7729
7729
  "locationInModule": {
7730
7730
  "filename": "src/providers/fargate.ts",
7731
- "line": 355
7731
+ "line": 356
7732
7732
  },
7733
7733
  "name": "retryableErrors",
7734
7734
  "overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
@@ -7749,7 +7749,7 @@
7749
7749
  "immutable": true,
7750
7750
  "locationInModule": {
7751
7751
  "filename": "src/providers/fargate.ts",
7752
- "line": 341
7752
+ "line": 342
7753
7753
  },
7754
7754
  "name": "spot",
7755
7755
  "type": {
@@ -7764,7 +7764,7 @@
7764
7764
  "immutable": true,
7765
7765
  "locationInModule": {
7766
7766
  "filename": "src/providers/fargate.ts",
7767
- "line": 301
7767
+ "line": 302
7768
7768
  },
7769
7769
  "name": "task",
7770
7770
  "type": {
@@ -7779,7 +7779,7 @@
7779
7779
  "immutable": true,
7780
7780
  "locationInModule": {
7781
7781
  "filename": "src/providers/fargate.ts",
7782
- "line": 321
7782
+ "line": 322
7783
7783
  },
7784
7784
  "name": "subnetSelection",
7785
7785
  "optional": true,
@@ -7795,7 +7795,7 @@
7795
7795
  "immutable": true,
7796
7796
  "locationInModule": {
7797
7797
  "filename": "src/providers/fargate.ts",
7798
- "line": 316
7798
+ "line": 317
7799
7799
  },
7800
7800
  "name": "vpc",
7801
7801
  "optional": true,
@@ -7820,7 +7820,7 @@
7820
7820
  "kind": "interface",
7821
7821
  "locationInModule": {
7822
7822
  "filename": "src/providers/fargate.ts",
7823
- "line": 30
7823
+ "line": 31
7824
7824
  },
7825
7825
  "name": "FargateRunnerProviderProps",
7826
7826
  "properties": [
@@ -7835,7 +7835,7 @@
7835
7835
  "immutable": true,
7836
7836
  "locationInModule": {
7837
7837
  "filename": "src/providers/fargate.ts",
7838
- "line": 103
7838
+ "line": 104
7839
7839
  },
7840
7840
  "name": "assignPublicIp",
7841
7841
  "optional": true,
@@ -7853,7 +7853,7 @@
7853
7853
  "immutable": true,
7854
7854
  "locationInModule": {
7855
7855
  "filename": "src/providers/fargate.ts",
7856
- "line": 94
7856
+ "line": 95
7857
7857
  },
7858
7858
  "name": "cluster",
7859
7859
  "optional": true,
@@ -7872,7 +7872,7 @@
7872
7872
  "immutable": true,
7873
7873
  "locationInModule": {
7874
7874
  "filename": "src/providers/fargate.ts",
7875
- "line": 122
7875
+ "line": 123
7876
7876
  },
7877
7877
  "name": "cpu",
7878
7878
  "optional": true,
@@ -7891,7 +7891,7 @@
7891
7891
  "immutable": true,
7892
7892
  "locationInModule": {
7893
7893
  "filename": "src/providers/fargate.ts",
7894
- "line": 149
7894
+ "line": 150
7895
7895
  },
7896
7896
  "name": "ephemeralStorageGiB",
7897
7897
  "optional": true,
@@ -7910,7 +7910,7 @@
7910
7910
  "immutable": true,
7911
7911
  "locationInModule": {
7912
7912
  "filename": "src/providers/fargate.ts",
7913
- "line": 38
7913
+ "line": 39
7914
7914
  },
7915
7915
  "name": "imageBuilder",
7916
7916
  "optional": true,
@@ -7929,7 +7929,7 @@
7929
7929
  "immutable": true,
7930
7930
  "locationInModule": {
7931
7931
  "filename": "src/providers/fargate.ts",
7932
- "line": 46
7932
+ "line": 47
7933
7933
  },
7934
7934
  "name": "label",
7935
7935
  "optional": true,
@@ -7948,7 +7948,7 @@
7948
7948
  "immutable": true,
7949
7949
  "locationInModule": {
7950
7950
  "filename": "src/providers/fargate.ts",
7951
- "line": 57
7951
+ "line": 58
7952
7952
  },
7953
7953
  "name": "labels",
7954
7954
  "optional": true,
@@ -7972,7 +7972,7 @@
7972
7972
  "immutable": true,
7973
7973
  "locationInModule": {
7974
7974
  "filename": "src/providers/fargate.ts",
7975
- "line": 140
7975
+ "line": 141
7976
7976
  },
7977
7977
  "name": "memoryLimitMiB",
7978
7978
  "optional": true,
@@ -7991,7 +7991,7 @@
7991
7991
  "immutable": true,
7992
7992
  "locationInModule": {
7993
7993
  "filename": "src/providers/fargate.ts",
7994
- "line": 80
7994
+ "line": 81
7995
7995
  },
7996
7996
  "name": "securityGroup",
7997
7997
  "optional": true,
@@ -8009,7 +8009,7 @@
8009
8009
  "immutable": true,
8010
8010
  "locationInModule": {
8011
8011
  "filename": "src/providers/fargate.ts",
8012
- "line": 87
8012
+ "line": 88
8013
8013
  },
8014
8014
  "name": "securityGroups",
8015
8015
  "optional": true,
@@ -8033,7 +8033,7 @@
8033
8033
  "immutable": true,
8034
8034
  "locationInModule": {
8035
8035
  "filename": "src/providers/fargate.ts",
8036
- "line": 159
8036
+ "line": 160
8037
8037
  },
8038
8038
  "name": "spot",
8039
8039
  "optional": true,
@@ -8051,7 +8051,7 @@
8051
8051
  "immutable": true,
8052
8052
  "locationInModule": {
8053
8053
  "filename": "src/providers/fargate.ts",
8054
- "line": 71
8054
+ "line": 72
8055
8055
  },
8056
8056
  "name": "subnetSelection",
8057
8057
  "optional": true,
@@ -8069,7 +8069,7 @@
8069
8069
  "immutable": true,
8070
8070
  "locationInModule": {
8071
8071
  "filename": "src/providers/fargate.ts",
8072
- "line": 64
8072
+ "line": 65
8073
8073
  },
8074
8074
  "name": "vpc",
8075
8075
  "optional": true,
@@ -10258,7 +10258,7 @@
10258
10258
  },
10259
10259
  "locationInModule": {
10260
10260
  "filename": "src/image-builders/aws-image-builder/deprecated/linux-components.ts",
10261
- "line": 51
10261
+ "line": 50
10262
10262
  },
10263
10263
  "name": "awsCli",
10264
10264
  "parameters": [
@@ -10294,7 +10294,7 @@
10294
10294
  },
10295
10295
  "locationInModule": {
10296
10296
  "filename": "src/image-builders/aws-image-builder/deprecated/linux-components.ts",
10297
- "line": 134
10297
+ "line": 133
10298
10298
  },
10299
10299
  "name": "docker",
10300
10300
  "parameters": [
@@ -10330,7 +10330,7 @@
10330
10330
  },
10331
10331
  "locationInModule": {
10332
10332
  "filename": "src/image-builders/aws-image-builder/deprecated/linux-components.ts",
10333
- "line": 152
10333
+ "line": 151
10334
10334
  },
10335
10335
  "name": "extraCertificates",
10336
10336
  "parameters": [
@@ -10366,7 +10366,7 @@
10366
10366
  },
10367
10367
  "locationInModule": {
10368
10368
  "filename": "src/image-builders/aws-image-builder/deprecated/linux-components.ts",
10369
- "line": 89
10369
+ "line": 88
10370
10370
  },
10371
10371
  "name": "git",
10372
10372
  "parameters": [
@@ -10402,7 +10402,7 @@
10402
10402
  },
10403
10403
  "locationInModule": {
10404
10404
  "filename": "src/image-builders/aws-image-builder/deprecated/linux-components.ts",
10405
- "line": 74
10405
+ "line": 73
10406
10406
  },
10407
10407
  "name": "githubCli",
10408
10408
  "parameters": [
@@ -10438,7 +10438,7 @@
10438
10438
  },
10439
10439
  "locationInModule": {
10440
10440
  "filename": "src/image-builders/aws-image-builder/deprecated/linux-components.ts",
10441
- "line": 102
10441
+ "line": 101
10442
10442
  },
10443
10443
  "name": "githubRunner",
10444
10444
  "parameters": [
@@ -11753,7 +11753,7 @@
11753
11753
  },
11754
11754
  "locationInModule": {
11755
11755
  "filename": "src/image-builders/components.ts",
11756
- "line": 149
11756
+ "line": 148
11757
11757
  },
11758
11758
  "name": "awsCli",
11759
11759
  "returns": {
@@ -11797,7 +11797,7 @@
11797
11797
  },
11798
11798
  "locationInModule": {
11799
11799
  "filename": "src/image-builders/components.ts",
11800
- "line": 336
11800
+ "line": 335
11801
11801
  },
11802
11802
  "name": "docker",
11803
11803
  "returns": {
@@ -11814,7 +11814,7 @@
11814
11814
  },
11815
11815
  "locationInModule": {
11816
11816
  "filename": "src/image-builders/components.ts",
11817
- "line": 398
11817
+ "line": 397
11818
11818
  },
11819
11819
  "name": "dockerInDocker",
11820
11820
  "returns": {
@@ -11832,7 +11832,7 @@
11832
11832
  },
11833
11833
  "locationInModule": {
11834
11834
  "filename": "src/image-builders/components.ts",
11835
- "line": 446
11835
+ "line": 445
11836
11836
  },
11837
11837
  "name": "extraCertificates",
11838
11838
  "parameters": [
@@ -11869,7 +11869,7 @@
11869
11869
  },
11870
11870
  "locationInModule": {
11871
11871
  "filename": "src/image-builders/components.ts",
11872
- "line": 223
11872
+ "line": 222
11873
11873
  },
11874
11874
  "name": "git",
11875
11875
  "returns": {
@@ -11886,7 +11886,7 @@
11886
11886
  },
11887
11887
  "locationInModule": {
11888
11888
  "filename": "src/image-builders/components.ts",
11889
- "line": 185
11889
+ "line": 184
11890
11890
  },
11891
11891
  "name": "githubCli",
11892
11892
  "returns": {
@@ -11904,7 +11904,7 @@
11904
11904
  },
11905
11905
  "locationInModule": {
11906
11906
  "filename": "src/image-builders/components.ts",
11907
- "line": 263
11907
+ "line": 262
11908
11908
  },
11909
11909
  "name": "githubRunner",
11910
11910
  "parameters": [
@@ -11933,7 +11933,7 @@
11933
11933
  },
11934
11934
  "locationInModule": {
11935
11935
  "filename": "src/image-builders/components.ts",
11936
- "line": 496
11936
+ "line": 495
11937
11937
  },
11938
11938
  "name": "lambdaEntrypoint",
11939
11939
  "returns": {
@@ -11985,7 +11985,7 @@
11985
11985
  },
11986
11986
  "locationInModule": {
11987
11987
  "filename": "src/image-builders/components.ts",
11988
- "line": 545
11988
+ "line": 544
11989
11989
  },
11990
11990
  "name": "getAssets",
11991
11991
  "parameters": [
@@ -12022,7 +12022,7 @@
12022
12022
  },
12023
12023
  "locationInModule": {
12024
12024
  "filename": "src/image-builders/components.ts",
12025
- "line": 540
12025
+ "line": 539
12026
12026
  },
12027
12027
  "name": "getCommands",
12028
12028
  "parameters": [
@@ -12058,7 +12058,7 @@
12058
12058
  },
12059
12059
  "locationInModule": {
12060
12060
  "filename": "src/image-builders/components.ts",
12061
- "line": 554
12061
+ "line": 553
12062
12062
  },
12063
12063
  "name": "getDockerCommands",
12064
12064
  "parameters": [
@@ -12093,7 +12093,7 @@
12093
12093
  },
12094
12094
  "locationInModule": {
12095
12095
  "filename": "src/image-builders/components.ts",
12096
- "line": 561
12096
+ "line": 560
12097
12097
  },
12098
12098
  "name": "shouldReboot",
12099
12099
  "parameters": [
@@ -12129,7 +12129,7 @@
12129
12129
  "immutable": true,
12130
12130
  "locationInModule": {
12131
12131
  "filename": "src/image-builders/components.ts",
12132
- "line": 535
12132
+ "line": 534
12133
12133
  },
12134
12134
  "name": "name",
12135
12135
  "type": {
@@ -13013,6 +13013,6 @@
13013
13013
  "symbolId": "src/image-builders/aws-image-builder/deprecated/windows-components:WindowsComponents"
13014
13014
  }
13015
13015
  },
13016
- "version": "0.10.5",
13017
- "fingerprint": "1KE/jJUTDM7Ylmv7UyWMw1Rxss5Z4fTZZXn6NDFHalM="
13016
+ "version": "0.10.7",
13017
+ "fingerprint": "fdbasf1Ljiaowj6qGaYSW5QyZYhAHm1xzVSLTF7eeSk="
13018
13018
  }