@cloudsnorkel/cdk-github-runners 0.15.0 β 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +533 -327
- package/API.md +384 -174
- package/README.md +1 -1
- package/assets/delete-failed-runner.lambda/index.js +23 -6
- package/assets/idle-runner-repear.lambda/index.js +23 -6
- package/assets/setup.lambda/index.html +7 -7
- package/assets/setup.lambda/index.js +23 -6
- package/assets/status.lambda/index.js +23 -6
- package/assets/token-retriever.lambda/index.js +23 -6
- package/assets/warm-runner-manager.lambda/index.js +23 -6
- package/assets/webhook-handler.lambda/index.js +23 -6
- package/assets/webhook-redelivery.lambda/index.js +23 -6
- package/lib/access.js +1 -1
- package/lib/image-builders/api.js +1 -1
- package/lib/image-builders/aws-image-builder/base-image.js +2 -2
- package/lib/image-builders/aws-image-builder/builder.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/ami.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/container.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
- package/lib/image-builders/codebuild-deprecated.js +1 -1
- package/lib/image-builders/components.js +1 -1
- package/lib/image-builders/static.js +1 -1
- package/lib/providers/codebuild.d.ts +2 -2
- package/lib/providers/codebuild.js +3 -3
- package/lib/providers/common.d.ts +47 -3
- package/lib/providers/common.js +29 -5
- package/lib/providers/composite.js +14 -19
- package/lib/providers/ec2.d.ts +4 -2
- package/lib/providers/ec2.js +58 -30
- package/lib/providers/ecs.d.ts +2 -2
- package/lib/providers/ecs.js +8 -8
- package/lib/providers/fargate.d.ts +2 -2
- package/lib/providers/fargate.js +13 -8
- package/lib/providers/lambda.d.ts +2 -2
- package/lib/providers/lambda.js +3 -3
- package/lib/runner.d.ts +6 -1
- package/lib/runner.js +54 -31
- package/lib/secrets.js +1 -1
- package/lib/warm-runner.d.ts +15 -7
- package/lib/warm-runner.js +19 -12
- package/package.json +15 -15
package/.jsii
CHANGED
|
@@ -8501,7 +8501,7 @@
|
|
|
8501
8501
|
"stability": "experimental"
|
|
8502
8502
|
},
|
|
8503
8503
|
"homepage": "https://github.com/CloudSnorkel/cdk-github-runners.git",
|
|
8504
|
-
"jsiiVersion": "5.9.
|
|
8504
|
+
"jsiiVersion": "5.9.33 (build 8ebb533)",
|
|
8505
8505
|
"keywords": [
|
|
8506
8506
|
"aws",
|
|
8507
8507
|
"aws-cdk",
|
|
@@ -8525,7 +8525,7 @@
|
|
|
8525
8525
|
},
|
|
8526
8526
|
"name": "@cloudsnorkel/cdk-github-runners",
|
|
8527
8527
|
"readme": {
|
|
8528
|
-
"markdown": "# GitHub Self-Hosted Runners CDK Constructs\n\n[][7]\n[][6]\n[][8]\n[][11]\n[][12]\n[](https://github.com/CloudSnorkel/cdk-github-runners/actions/workflows/release.yml)\n[][20]\n[](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## Table of Contents\n\n- [API](#api)\n- [Providers](#providers)\n- [Installation](#installation)\n- [Customizing](#customizing)\n - [Composite Providers](#composite-providers)\n - [Custom Provider Selection](#custom-provider-selection)\n - [Warm Runners](#warm-runners)\n- [Examples](#examples)\n- [Architecture](#architecture)\n- [Troubleshooting](#troubleshooting)\n- [Monitoring](#monitoring)\n- [Getting Help](#getting-help)\n- [Contributing](#contributing)\n- [Sponsors](#sponsors)\n- [Other Options](#other-options)\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[](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### Warm Runners\n\nWarm runners are pre-provisioned and stay idle until a job arrives, reducing startup latency. Use `AlwaysOnWarmRunner` for 24/7 pools or `ScheduledWarmRunner` for time-windowed pools. You specify the provider directly.\n\n```typescript\nimport { AlwaysOnWarmRunner, CodeBuildRunnerProvider, GitHubRunners } from '@cloudsnorkel/cdk-github-runners';\n\nconst provider = new CodeBuildRunnerProvider(this, 'provider', { labels: ['codebuild', 'linux'] });\nconst runners = new GitHubRunners(this, 'runners', { providers: [provider] });\n\nnew AlwaysOnWarmRunner(this, 'warm', {\n runners,\n provider,\n count: 2,\n owner: 'my-org',\n repo: 'my-repo',\n});\n```\n\nWarm runner pools can be stacked. If you want 2 warm runners always available but 3 during peak work hours, you can create one pool with 2 runners always on and another pool with 1 runner during work hours.\n\n```typescript\nimport { aws_events as events, Duration } from 'aws-cdk-lib';\nimport { AlwaysOnWarmRunner, ScheduledWarmRunner, CodeBuildRunnerProvider, GitHubRunners } from '@cloudsnorkel/cdk-github-runners';\n\nconst provider = new CodeBuildRunnerProvider(this, 'provider', { labels: ['codebuild', 'linux'] });\nconst runners = new GitHubRunners(this, 'runners', { providers: [provider] });\n\nnew AlwaysOnWarmRunner(this, 'warm', {\n runners,\n provider,\n count: 2,\n owner: 'my-org',\n repo: 'my-repo',\n});\n\nnew ScheduledWarmRunner(this, 'work hours warm', {\n runners,\n provider,\n count: 1,\n owner: 'my-org',\n repo: 'my-repo',\n schedule: events.Schedule.cron({ hour: '13', minute: '0', weekDay: 'MON-FRI' }),\n duration: Duration.hours(2),\n});\n```\n\nSee the [warm-runners example](examples/typescript/warm-runners/) for a complete setup.\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- **[Warm Runners](examples/typescript/warm-runners/)** - Pre-provisioned runners for low-latency job starts (also available in [Python](examples/python/warm-runners/))\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- **[Split Stacks](examples/typescript/split-stacks/)** - Split image builders and providers across multiple stacks (also available in [Python](examples/python/split-stacks/))\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- **[GPU](examples/typescript/gpu/)** - GPU support with NVIDIA drivers across EC2, CodeBuild, and ECS (also available in [Python](examples/python/gpu/))\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\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## Getting Help\n\nNeed help? We're here for you!\n\n* π¬ **GitHub Discussions**: Ask questions, share ideas, or get help from the community by opening a [discussion][18]\n* π **GitHub Issues**: Report bugs or request features by opening an [issue][16]\n* π¬ **Discord**: Join our [Discord community][20] for real-time help and discussions\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## Sponsors\n\nThanks to our generous sponsors who helped make this project possible!\n\n<table>\n <tr>\n <td align=\"center\">\n <a href=\"https://github.com/threat-down\">\n <img src=\"https://github.com/threat-down.png?size=100\" width=\"100\" height=\"100\" alt=\"ThreatDown\" />\n <br />\n <sub><b>ThreatDown</b></sub>\n </a>\n </td>\n <td align=\"center\">\n <a href=\"https://github.com/magicbell\">\n <img src=\"https://github.com/magicbell.png?size=100\" width=\"100\" height=\"100\" alt=\"MagicBell\" />\n <br />\n <sub><b>MagicBell</b></sub>\n </a>\n </td>\n <td align=\"center\">\n <a href=\"https://github.com/fragment-dev\">\n <img src=\"https://github.com/fragment-dev.png?size=100\" width=\"100\" height=\"100\" alt=\"Fragment\" />\n <br />\n <sub><b>Fragment</b></sub>\n </a>\n </td>\n <td align=\"center\">\n <a href=\"https://github.com/andresionek91\">\n <img src=\"https://github.com/andresionek91.png?size=100\" width=\"100\" height=\"100\" alt=\"Andre Sionek\" />\n <br />\n <sub><b>Andre Sionek</b></sub>\n </a>\n </td>\n </tr>\n</table>\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[18]: https://github.com/CloudSnorkel/cdk-github-runners/discussions\n[20]: https://discord.gg/vdrTUTqQKv\n"
|
|
8528
|
+
"markdown": "# GitHub Self-Hosted Runners CDK Constructs\n\n[][7]\n[][6]\n[][8]\n[][11]\n[][12]\n[](https://github.com/CloudSnorkel/cdk-github-runners/actions/workflows/release.yml)\n[][20]\n[](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## Table of Contents\n\n- [API](#api)\n- [Providers](#providers)\n- [Installation](#installation)\n- [Customizing](#customizing)\n - [Composite Providers](#composite-providers)\n - [Custom Provider Selection](#custom-provider-selection)\n - [Warm Runners](#warm-runners)\n- [Examples](#examples)\n- [Architecture](#architecture)\n- [Troubleshooting](#troubleshooting)\n- [Monitoring](#monitoring)\n- [Getting Help](#getting-help)\n- [Contributing](#contributing)\n- [Sponsors](#sponsors)\n- [Other Options](#other-options)\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 | 36 hours (default 1 hour) | 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[](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### Warm Runners\n\nWarm runners are pre-provisioned and stay idle until a job arrives, reducing startup latency. Use `AlwaysOnWarmRunner` for 24/7 pools or `ScheduledWarmRunner` for time-windowed pools. You specify the provider directly.\n\n```typescript\nimport { AlwaysOnWarmRunner, CodeBuildRunnerProvider, GitHubRunners } from '@cloudsnorkel/cdk-github-runners';\n\nconst provider = new CodeBuildRunnerProvider(this, 'provider', { labels: ['codebuild', 'linux'] });\nconst runners = new GitHubRunners(this, 'runners', { providers: [provider] });\n\nnew AlwaysOnWarmRunner(this, 'warm', {\n runners,\n provider,\n count: 2,\n owner: 'my-org',\n repo: 'my-repo',\n});\n```\n\nWarm runner pools can be stacked. If you want 2 warm runners always available but 3 during peak work hours, you can create one pool with 2 runners always on and another pool with 1 runner during work hours.\n\n```typescript\nimport { aws_events as events, Duration } from 'aws-cdk-lib';\nimport { AlwaysOnWarmRunner, ScheduledWarmRunner, CodeBuildRunnerProvider, GitHubRunners } from '@cloudsnorkel/cdk-github-runners';\n\nconst provider = new CodeBuildRunnerProvider(this, 'provider', { labels: ['codebuild', 'linux'] });\nconst runners = new GitHubRunners(this, 'runners', { providers: [provider] });\n\nnew AlwaysOnWarmRunner(this, 'warm', {\n runners,\n provider,\n count: 2,\n owner: 'my-org',\n repo: 'my-repo',\n});\n\nnew ScheduledWarmRunner(this, 'work hours warm', {\n runners,\n provider,\n count: 1,\n owner: 'my-org',\n repo: 'my-repo',\n schedule: events.Schedule.cron({ hour: '13', minute: '0', weekDay: 'MON-FRI' }),\n duration: Duration.hours(2),\n});\n```\n\nSee the [warm-runners example](examples/typescript/warm-runners/) for a complete setup.\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- **[Warm Runners](examples/typescript/warm-runners/)** - Pre-provisioned runners for low-latency job starts (also available in [Python](examples/python/warm-runners/))\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- **[Split Stacks](examples/typescript/split-stacks/)** - Split image builders and providers across multiple stacks (also available in [Python](examples/python/split-stacks/))\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- **[GPU](examples/typescript/gpu/)** - GPU support with NVIDIA drivers across EC2, CodeBuild, and ECS (also available in [Python](examples/python/gpu/))\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\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## Getting Help\n\nNeed help? We're here for you!\n\n* π¬ **GitHub Discussions**: Ask questions, share ideas, or get help from the community by opening a [discussion][18]\n* π **GitHub Issues**: Report bugs or request features by opening an [issue][16]\n* π¬ **Discord**: Join our [Discord community][20] for real-time help and discussions\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## Sponsors\n\nThanks to our generous sponsors who helped make this project possible!\n\n<table>\n <tr>\n <td align=\"center\">\n <a href=\"https://github.com/threat-down\">\n <img src=\"https://github.com/threat-down.png?size=100\" width=\"100\" height=\"100\" alt=\"ThreatDown\" />\n <br />\n <sub><b>ThreatDown</b></sub>\n </a>\n </td>\n <td align=\"center\">\n <a href=\"https://github.com/magicbell\">\n <img src=\"https://github.com/magicbell.png?size=100\" width=\"100\" height=\"100\" alt=\"MagicBell\" />\n <br />\n <sub><b>MagicBell</b></sub>\n </a>\n </td>\n <td align=\"center\">\n <a href=\"https://github.com/fragment-dev\">\n <img src=\"https://github.com/fragment-dev.png?size=100\" width=\"100\" height=\"100\" alt=\"Fragment\" />\n <br />\n <sub><b>Fragment</b></sub>\n </a>\n </td>\n <td align=\"center\">\n <a href=\"https://github.com/andresionek91\">\n <img src=\"https://github.com/andresionek91.png?size=100\" width=\"100\" height=\"100\" alt=\"Andre Sionek\" />\n <br />\n <sub><b>Andre Sionek</b></sub>\n </a>\n </td>\n </tr>\n</table>\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[18]: https://github.com/CloudSnorkel/cdk-github-runners/discussions\n[20]: https://discord.gg/vdrTUTqQKv\n"
|
|
8529
8529
|
},
|
|
8530
8530
|
"repository": {
|
|
8531
8531
|
"type": "git",
|
|
@@ -8560,8 +8560,8 @@
|
|
|
8560
8560
|
"assembly": "@cloudsnorkel/cdk-github-runners",
|
|
8561
8561
|
"base": "constructs.Construct",
|
|
8562
8562
|
"docs": {
|
|
8563
|
-
"
|
|
8564
|
-
"
|
|
8563
|
+
"remarks": "Runners will be provisioned using the specified provider and registered in the specified repository or organization.\n\nRegistration level must match the one selected during setup.",
|
|
8564
|
+
"see": "https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md\n\n## Limitations\n\n- Jobs will still trigger provisioning of on-demand runners, even if a warm runner ends up being used.\n- You may briefly see more than `count` runners when changing config or at rotation.\n- To remove: set `count` to 0, deploy, wait for warm runners to stop, then remove and deploy again.\nIf you don't follow this procedure, warm runners may linger until they expire.\n- Provider failures or timeouts (like Lambda provider timing out after 15 minutes) will result in a\ngap in coverage until the retry succeeds. Current retry mechanism has built-in back-off rate and\ncan be tweaked using `retryOptions`. This will be improved in the future.\n\n```typescript\nnew AlwaysOnWarmRunner(stack, 'AlwaysOnLinux', {\nrunners,\nprovider: myProvider,\ncount: 3,\nowner: 'my-org',\nrepo: 'my-repo',\n});\n```",
|
|
8565
8565
|
"stability": "experimental",
|
|
8566
8566
|
"summary": "Warm runners that run 24/7. Fills at midnight UTC and each runner stays alive for 24 hours."
|
|
8567
8567
|
},
|
|
@@ -8572,7 +8572,7 @@
|
|
|
8572
8572
|
},
|
|
8573
8573
|
"locationInModule": {
|
|
8574
8574
|
"filename": "src/warm-runner.ts",
|
|
8575
|
-
"line":
|
|
8575
|
+
"line": 170
|
|
8576
8576
|
},
|
|
8577
8577
|
"parameters": [
|
|
8578
8578
|
{
|
|
@@ -8598,7 +8598,7 @@
|
|
|
8598
8598
|
"kind": "class",
|
|
8599
8599
|
"locationInModule": {
|
|
8600
8600
|
"filename": "src/warm-runner.ts",
|
|
8601
|
-
"line":
|
|
8601
|
+
"line": 163
|
|
8602
8602
|
},
|
|
8603
8603
|
"name": "AlwaysOnWarmRunner",
|
|
8604
8604
|
"symbolId": "src/warm-runner:AlwaysOnWarmRunner"
|
|
@@ -8614,7 +8614,7 @@
|
|
|
8614
8614
|
"kind": "interface",
|
|
8615
8615
|
"locationInModule": {
|
|
8616
8616
|
"filename": "src/warm-runner.ts",
|
|
8617
|
-
"line":
|
|
8617
|
+
"line": 59
|
|
8618
8618
|
},
|
|
8619
8619
|
"name": "AlwaysOnWarmRunnerProps",
|
|
8620
8620
|
"properties": [
|
|
@@ -8696,14 +8696,15 @@
|
|
|
8696
8696
|
"abstract": true,
|
|
8697
8697
|
"docs": {
|
|
8698
8698
|
"default": "'repo'",
|
|
8699
|
-
"remarks": "Choose\n'org' for org-wide runners, 'repo' for repo-level. See the setup wizard
|
|
8699
|
+
"remarks": "Choose\n'org' for org-wide runners, 'repo' for repo-level. See the setup wizard for choosing repo vs org.",
|
|
8700
|
+
"see": "https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md",
|
|
8700
8701
|
"stability": "experimental",
|
|
8701
8702
|
"summary": "Registration level β must match how your runners are set up in GitHub."
|
|
8702
8703
|
},
|
|
8703
8704
|
"immutable": true,
|
|
8704
8705
|
"locationInModule": {
|
|
8705
8706
|
"filename": "src/warm-runner.ts",
|
|
8706
|
-
"line":
|
|
8707
|
+
"line": 48
|
|
8707
8708
|
},
|
|
8708
8709
|
"name": "registrationLevel",
|
|
8709
8710
|
"optional": true,
|
|
@@ -8721,7 +8722,7 @@
|
|
|
8721
8722
|
"immutable": true,
|
|
8722
8723
|
"locationInModule": {
|
|
8723
8724
|
"filename": "src/warm-runner.ts",
|
|
8724
|
-
"line":
|
|
8725
|
+
"line": 53
|
|
8725
8726
|
},
|
|
8726
8727
|
"name": "repo",
|
|
8727
8728
|
"optional": true,
|
|
@@ -10980,7 +10981,7 @@
|
|
|
10980
10981
|
},
|
|
10981
10982
|
"name": "parameters",
|
|
10982
10983
|
"type": {
|
|
10983
|
-
"fqn": "@cloudsnorkel/cdk-github-runners.
|
|
10984
|
+
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerRuntimeParameters"
|
|
10984
10985
|
}
|
|
10985
10986
|
}
|
|
10986
10987
|
],
|
|
@@ -11017,7 +11018,7 @@
|
|
|
11017
11018
|
},
|
|
11018
11019
|
"locationInModule": {
|
|
11019
11020
|
"filename": "src/providers/common.ts",
|
|
11020
|
-
"line":
|
|
11021
|
+
"line": 677
|
|
11021
11022
|
},
|
|
11022
11023
|
"name": "labelsFromProperties",
|
|
11023
11024
|
"parameters": [
|
|
@@ -11084,6 +11085,28 @@
|
|
|
11084
11085
|
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerProviderStatus"
|
|
11085
11086
|
}
|
|
11086
11087
|
}
|
|
11088
|
+
},
|
|
11089
|
+
{
|
|
11090
|
+
"docs": {
|
|
11091
|
+
"stability": "experimental",
|
|
11092
|
+
"summary": "Override to inject static strings into `$.consts` on the orchestrator state machine."
|
|
11093
|
+
},
|
|
11094
|
+
"locationInModule": {
|
|
11095
|
+
"filename": "src/providers/common.ts",
|
|
11096
|
+
"line": 673
|
|
11097
|
+
},
|
|
11098
|
+
"name": "stepFunctionConstants",
|
|
11099
|
+
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
11100
|
+
"returns": {
|
|
11101
|
+
"type": {
|
|
11102
|
+
"collection": {
|
|
11103
|
+
"elementtype": {
|
|
11104
|
+
"primitive": "string"
|
|
11105
|
+
},
|
|
11106
|
+
"kind": "map"
|
|
11107
|
+
}
|
|
11108
|
+
}
|
|
11109
|
+
}
|
|
11087
11110
|
}
|
|
11088
11111
|
],
|
|
11089
11112
|
"name": "CodeBuildRunnerProvider",
|
|
@@ -11522,7 +11545,7 @@
|
|
|
11522
11545
|
"kind": "class",
|
|
11523
11546
|
"locationInModule": {
|
|
11524
11547
|
"filename": "src/providers/composite.ts",
|
|
11525
|
-
"line":
|
|
11548
|
+
"line": 31
|
|
11526
11549
|
},
|
|
11527
11550
|
"methods": [
|
|
11528
11551
|
{
|
|
@@ -11533,7 +11556,7 @@
|
|
|
11533
11556
|
},
|
|
11534
11557
|
"locationInModule": {
|
|
11535
11558
|
"filename": "src/providers/composite.ts",
|
|
11536
|
-
"line":
|
|
11559
|
+
"line": 73
|
|
11537
11560
|
},
|
|
11538
11561
|
"name": "distribute",
|
|
11539
11562
|
"parameters": [
|
|
@@ -11585,7 +11608,7 @@
|
|
|
11585
11608
|
},
|
|
11586
11609
|
"locationInModule": {
|
|
11587
11610
|
"filename": "src/providers/composite.ts",
|
|
11588
|
-
"line":
|
|
11611
|
+
"line": 48
|
|
11589
11612
|
},
|
|
11590
11613
|
"name": "fallback",
|
|
11591
11614
|
"parameters": [
|
|
@@ -12319,7 +12342,7 @@
|
|
|
12319
12342
|
},
|
|
12320
12343
|
"locationInModule": {
|
|
12321
12344
|
"filename": "src/providers/ec2.ts",
|
|
12322
|
-
"line":
|
|
12345
|
+
"line": 414
|
|
12323
12346
|
},
|
|
12324
12347
|
"parameters": [
|
|
12325
12348
|
{
|
|
@@ -12346,7 +12369,7 @@
|
|
|
12346
12369
|
"kind": "class",
|
|
12347
12370
|
"locationInModule": {
|
|
12348
12371
|
"filename": "src/providers/ec2.ts",
|
|
12349
|
-
"line":
|
|
12372
|
+
"line": 679
|
|
12350
12373
|
},
|
|
12351
12374
|
"name": "Ec2Runner",
|
|
12352
12375
|
"symbolId": "src/providers/ec2:Ec2Runner"
|
|
@@ -12366,7 +12389,7 @@
|
|
|
12366
12389
|
},
|
|
12367
12390
|
"locationInModule": {
|
|
12368
12391
|
"filename": "src/providers/ec2.ts",
|
|
12369
|
-
"line":
|
|
12392
|
+
"line": 414
|
|
12370
12393
|
},
|
|
12371
12394
|
"parameters": [
|
|
12372
12395
|
{
|
|
@@ -12396,7 +12419,7 @@
|
|
|
12396
12419
|
"kind": "class",
|
|
12397
12420
|
"locationInModule": {
|
|
12398
12421
|
"filename": "src/providers/ec2.ts",
|
|
12399
|
-
"line":
|
|
12422
|
+
"line": 339
|
|
12400
12423
|
},
|
|
12401
12424
|
"methods": [
|
|
12402
12425
|
{
|
|
@@ -12407,7 +12430,7 @@
|
|
|
12407
12430
|
},
|
|
12408
12431
|
"locationInModule": {
|
|
12409
12432
|
"filename": "src/providers/ec2.ts",
|
|
12410
|
-
"line":
|
|
12433
|
+
"line": 359
|
|
12411
12434
|
},
|
|
12412
12435
|
"name": "imageBuilder",
|
|
12413
12436
|
"parameters": [
|
|
@@ -12446,7 +12469,7 @@
|
|
|
12446
12469
|
},
|
|
12447
12470
|
"locationInModule": {
|
|
12448
12471
|
"filename": "src/providers/ec2.ts",
|
|
12449
|
-
"line":
|
|
12472
|
+
"line": 493
|
|
12450
12473
|
},
|
|
12451
12474
|
"name": "getStepFunctionTask",
|
|
12452
12475
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -12457,7 +12480,7 @@
|
|
|
12457
12480
|
},
|
|
12458
12481
|
"name": "parameters",
|
|
12459
12482
|
"type": {
|
|
12460
|
-
"fqn": "@cloudsnorkel/cdk-github-runners.
|
|
12483
|
+
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerRuntimeParameters"
|
|
12461
12484
|
}
|
|
12462
12485
|
}
|
|
12463
12486
|
],
|
|
@@ -12475,7 +12498,7 @@
|
|
|
12475
12498
|
},
|
|
12476
12499
|
"locationInModule": {
|
|
12477
12500
|
"filename": "src/providers/ec2.ts",
|
|
12478
|
-
"line":
|
|
12501
|
+
"line": 618
|
|
12479
12502
|
},
|
|
12480
12503
|
"name": "grantStateMachine",
|
|
12481
12504
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -12494,7 +12517,7 @@
|
|
|
12494
12517
|
},
|
|
12495
12518
|
"locationInModule": {
|
|
12496
12519
|
"filename": "src/providers/common.ts",
|
|
12497
|
-
"line":
|
|
12520
|
+
"line": 677
|
|
12498
12521
|
},
|
|
12499
12522
|
"name": "labelsFromProperties",
|
|
12500
12523
|
"parameters": [
|
|
@@ -12544,7 +12567,7 @@
|
|
|
12544
12567
|
},
|
|
12545
12568
|
"locationInModule": {
|
|
12546
12569
|
"filename": "src/providers/ec2.ts",
|
|
12547
|
-
"line":
|
|
12570
|
+
"line": 648
|
|
12548
12571
|
},
|
|
12549
12572
|
"name": "status",
|
|
12550
12573
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -12561,6 +12584,28 @@
|
|
|
12561
12584
|
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerProviderStatus"
|
|
12562
12585
|
}
|
|
12563
12586
|
}
|
|
12587
|
+
},
|
|
12588
|
+
{
|
|
12589
|
+
"docs": {
|
|
12590
|
+
"stability": "experimental",
|
|
12591
|
+
"summary": "Override to inject static strings into `$.consts` on the orchestrator state machine."
|
|
12592
|
+
},
|
|
12593
|
+
"locationInModule": {
|
|
12594
|
+
"filename": "src/providers/ec2.ts",
|
|
12595
|
+
"line": 481
|
|
12596
|
+
},
|
|
12597
|
+
"name": "stepFunctionConstants",
|
|
12598
|
+
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
12599
|
+
"returns": {
|
|
12600
|
+
"type": {
|
|
12601
|
+
"collection": {
|
|
12602
|
+
"elementtype": {
|
|
12603
|
+
"primitive": "string"
|
|
12604
|
+
},
|
|
12605
|
+
"kind": "map"
|
|
12606
|
+
}
|
|
12607
|
+
}
|
|
12608
|
+
}
|
|
12564
12609
|
}
|
|
12565
12610
|
],
|
|
12566
12611
|
"name": "Ec2RunnerProvider",
|
|
@@ -12573,7 +12618,7 @@
|
|
|
12573
12618
|
"immutable": true,
|
|
12574
12619
|
"locationInModule": {
|
|
12575
12620
|
"filename": "src/providers/ec2.ts",
|
|
12576
|
-
"line":
|
|
12621
|
+
"line": 671
|
|
12577
12622
|
},
|
|
12578
12623
|
"name": "connections",
|
|
12579
12624
|
"overrides": "aws-cdk-lib.aws_ec2.IConnectable",
|
|
@@ -12589,7 +12634,7 @@
|
|
|
12589
12634
|
"immutable": true,
|
|
12590
12635
|
"locationInModule": {
|
|
12591
12636
|
"filename": "src/providers/ec2.ts",
|
|
12592
|
-
"line":
|
|
12637
|
+
"line": 386
|
|
12593
12638
|
},
|
|
12594
12639
|
"name": "grantPrincipal",
|
|
12595
12640
|
"overrides": "aws-cdk-lib.aws_iam.IGrantable",
|
|
@@ -12605,7 +12650,7 @@
|
|
|
12605
12650
|
"immutable": true,
|
|
12606
12651
|
"locationInModule": {
|
|
12607
12652
|
"filename": "src/providers/ec2.ts",
|
|
12608
|
-
"line":
|
|
12653
|
+
"line": 381
|
|
12609
12654
|
},
|
|
12610
12655
|
"name": "labels",
|
|
12611
12656
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -12627,7 +12672,7 @@
|
|
|
12627
12672
|
"immutable": true,
|
|
12628
12673
|
"locationInModule": {
|
|
12629
12674
|
"filename": "src/providers/ec2.ts",
|
|
12630
|
-
"line":
|
|
12675
|
+
"line": 393
|
|
12631
12676
|
},
|
|
12632
12677
|
"name": "logGroup",
|
|
12633
12678
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -12643,7 +12688,7 @@
|
|
|
12643
12688
|
"immutable": true,
|
|
12644
12689
|
"locationInModule": {
|
|
12645
12690
|
"filename": "src/providers/ec2.ts",
|
|
12646
|
-
"line":
|
|
12691
|
+
"line": 395
|
|
12647
12692
|
},
|
|
12648
12693
|
"name": "retryableErrors",
|
|
12649
12694
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -12673,7 +12718,7 @@
|
|
|
12673
12718
|
"kind": "interface",
|
|
12674
12719
|
"locationInModule": {
|
|
12675
12720
|
"filename": "src/providers/ec2.ts",
|
|
12676
|
-
"line":
|
|
12721
|
+
"line": 216
|
|
12677
12722
|
},
|
|
12678
12723
|
"name": "Ec2RunnerProviderProps",
|
|
12679
12724
|
"properties": [
|
|
@@ -12686,7 +12731,7 @@
|
|
|
12686
12731
|
"immutable": true,
|
|
12687
12732
|
"locationInModule": {
|
|
12688
12733
|
"filename": "src/providers/ec2.ts",
|
|
12689
|
-
"line":
|
|
12734
|
+
"line": 229
|
|
12690
12735
|
},
|
|
12691
12736
|
"name": "amiBuilder",
|
|
12692
12737
|
"optional": true,
|
|
@@ -12705,7 +12750,7 @@
|
|
|
12705
12750
|
"immutable": true,
|
|
12706
12751
|
"locationInModule": {
|
|
12707
12752
|
"filename": "src/providers/ec2.ts",
|
|
12708
|
-
"line":
|
|
12753
|
+
"line": 254
|
|
12709
12754
|
},
|
|
12710
12755
|
"name": "group",
|
|
12711
12756
|
"optional": true,
|
|
@@ -12724,7 +12769,7 @@
|
|
|
12724
12769
|
"immutable": true,
|
|
12725
12770
|
"locationInModule": {
|
|
12726
12771
|
"filename": "src/providers/ec2.ts",
|
|
12727
|
-
"line":
|
|
12772
|
+
"line": 224
|
|
12728
12773
|
},
|
|
12729
12774
|
"name": "imageBuilder",
|
|
12730
12775
|
"optional": true,
|
|
@@ -12743,7 +12788,7 @@
|
|
|
12743
12788
|
"immutable": true,
|
|
12744
12789
|
"locationInModule": {
|
|
12745
12790
|
"filename": "src/providers/ec2.ts",
|
|
12746
|
-
"line":
|
|
12791
|
+
"line": 266
|
|
12747
12792
|
},
|
|
12748
12793
|
"name": "instanceType",
|
|
12749
12794
|
"optional": true,
|
|
@@ -12762,7 +12807,7 @@
|
|
|
12762
12807
|
"immutable": true,
|
|
12763
12808
|
"locationInModule": {
|
|
12764
12809
|
"filename": "src/providers/ec2.ts",
|
|
12765
|
-
"line":
|
|
12810
|
+
"line": 240
|
|
12766
12811
|
},
|
|
12767
12812
|
"name": "labels",
|
|
12768
12813
|
"optional": true,
|
|
@@ -12786,7 +12831,7 @@
|
|
|
12786
12831
|
"immutable": true,
|
|
12787
12832
|
"locationInModule": {
|
|
12788
12833
|
"filename": "src/providers/ec2.ts",
|
|
12789
|
-
"line":
|
|
12834
|
+
"line": 287
|
|
12790
12835
|
},
|
|
12791
12836
|
"name": "securityGroup",
|
|
12792
12837
|
"optional": true,
|
|
@@ -12804,7 +12849,7 @@
|
|
|
12804
12849
|
"immutable": true,
|
|
12805
12850
|
"locationInModule": {
|
|
12806
12851
|
"filename": "src/providers/ec2.ts",
|
|
12807
|
-
"line":
|
|
12852
|
+
"line": 294
|
|
12808
12853
|
},
|
|
12809
12854
|
"name": "securityGroups",
|
|
12810
12855
|
"optional": true,
|
|
@@ -12828,7 +12873,7 @@
|
|
|
12828
12873
|
"immutable": true,
|
|
12829
12874
|
"locationInModule": {
|
|
12830
12875
|
"filename": "src/providers/ec2.ts",
|
|
12831
|
-
"line":
|
|
12876
|
+
"line": 324
|
|
12832
12877
|
},
|
|
12833
12878
|
"name": "spot",
|
|
12834
12879
|
"optional": true,
|
|
@@ -12846,7 +12891,7 @@
|
|
|
12846
12891
|
"immutable": true,
|
|
12847
12892
|
"locationInModule": {
|
|
12848
12893
|
"filename": "src/providers/ec2.ts",
|
|
12849
|
-
"line":
|
|
12894
|
+
"line": 331
|
|
12850
12895
|
},
|
|
12851
12896
|
"name": "spotMaxPrice",
|
|
12852
12897
|
"optional": true,
|
|
@@ -12863,7 +12908,7 @@
|
|
|
12863
12908
|
"immutable": true,
|
|
12864
12909
|
"locationInModule": {
|
|
12865
12910
|
"filename": "src/providers/ec2.ts",
|
|
12866
|
-
"line":
|
|
12911
|
+
"line": 278
|
|
12867
12912
|
},
|
|
12868
12913
|
"name": "storageOptions",
|
|
12869
12914
|
"optional": true,
|
|
@@ -12882,7 +12927,7 @@
|
|
|
12882
12927
|
"immutable": true,
|
|
12883
12928
|
"locationInModule": {
|
|
12884
12929
|
"filename": "src/providers/ec2.ts",
|
|
12885
|
-
"line":
|
|
12930
|
+
"line": 273
|
|
12886
12931
|
},
|
|
12887
12932
|
"name": "storageSize",
|
|
12888
12933
|
"optional": true,
|
|
@@ -12901,7 +12946,7 @@
|
|
|
12901
12946
|
"immutable": true,
|
|
12902
12947
|
"locationInModule": {
|
|
12903
12948
|
"filename": "src/providers/ec2.ts",
|
|
12904
|
-
"line":
|
|
12949
|
+
"line": 303
|
|
12905
12950
|
},
|
|
12906
12951
|
"name": "subnet",
|
|
12907
12952
|
"optional": true,
|
|
@@ -12920,7 +12965,7 @@
|
|
|
12920
12965
|
"immutable": true,
|
|
12921
12966
|
"locationInModule": {
|
|
12922
12967
|
"filename": "src/providers/ec2.ts",
|
|
12923
|
-
"line":
|
|
12968
|
+
"line": 317
|
|
12924
12969
|
},
|
|
12925
12970
|
"name": "subnetSelection",
|
|
12926
12971
|
"optional": true,
|
|
@@ -12938,7 +12983,7 @@
|
|
|
12938
12983
|
"immutable": true,
|
|
12939
12984
|
"locationInModule": {
|
|
12940
12985
|
"filename": "src/providers/ec2.ts",
|
|
12941
|
-
"line":
|
|
12986
|
+
"line": 310
|
|
12942
12987
|
},
|
|
12943
12988
|
"name": "vpc",
|
|
12944
12989
|
"optional": true,
|
|
@@ -13055,7 +13100,7 @@
|
|
|
13055
13100
|
},
|
|
13056
13101
|
"name": "parameters",
|
|
13057
13102
|
"type": {
|
|
13058
|
-
"fqn": "@cloudsnorkel/cdk-github-runners.
|
|
13103
|
+
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerRuntimeParameters"
|
|
13059
13104
|
}
|
|
13060
13105
|
}
|
|
13061
13106
|
],
|
|
@@ -13092,7 +13137,7 @@
|
|
|
13092
13137
|
},
|
|
13093
13138
|
"locationInModule": {
|
|
13094
13139
|
"filename": "src/providers/common.ts",
|
|
13095
|
-
"line":
|
|
13140
|
+
"line": 677
|
|
13096
13141
|
},
|
|
13097
13142
|
"name": "labelsFromProperties",
|
|
13098
13143
|
"parameters": [
|
|
@@ -13159,6 +13204,28 @@
|
|
|
13159
13204
|
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerProviderStatus"
|
|
13160
13205
|
}
|
|
13161
13206
|
}
|
|
13207
|
+
},
|
|
13208
|
+
{
|
|
13209
|
+
"docs": {
|
|
13210
|
+
"stability": "experimental",
|
|
13211
|
+
"summary": "Override to inject static strings into `$.consts` on the orchestrator state machine."
|
|
13212
|
+
},
|
|
13213
|
+
"locationInModule": {
|
|
13214
|
+
"filename": "src/providers/common.ts",
|
|
13215
|
+
"line": 673
|
|
13216
|
+
},
|
|
13217
|
+
"name": "stepFunctionConstants",
|
|
13218
|
+
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
13219
|
+
"returns": {
|
|
13220
|
+
"type": {
|
|
13221
|
+
"collection": {
|
|
13222
|
+
"elementtype": {
|
|
13223
|
+
"primitive": "string"
|
|
13224
|
+
},
|
|
13225
|
+
"kind": "map"
|
|
13226
|
+
}
|
|
13227
|
+
}
|
|
13228
|
+
}
|
|
13162
13229
|
}
|
|
13163
13230
|
],
|
|
13164
13231
|
"name": "EcsRunnerProvider",
|
|
@@ -13754,7 +13821,7 @@
|
|
|
13754
13821
|
},
|
|
13755
13822
|
"locationInModule": {
|
|
13756
13823
|
"filename": "src/providers/fargate.ts",
|
|
13757
|
-
"line":
|
|
13824
|
+
"line": 364
|
|
13758
13825
|
},
|
|
13759
13826
|
"parameters": [
|
|
13760
13827
|
{
|
|
@@ -13781,7 +13848,7 @@
|
|
|
13781
13848
|
"kind": "class",
|
|
13782
13849
|
"locationInModule": {
|
|
13783
13850
|
"filename": "src/providers/fargate.ts",
|
|
13784
|
-
"line":
|
|
13851
|
+
"line": 554
|
|
13785
13852
|
},
|
|
13786
13853
|
"name": "FargateRunner",
|
|
13787
13854
|
"symbolId": "src/providers/fargate:FargateRunner"
|
|
@@ -13801,7 +13868,7 @@
|
|
|
13801
13868
|
},
|
|
13802
13869
|
"locationInModule": {
|
|
13803
13870
|
"filename": "src/providers/fargate.ts",
|
|
13804
|
-
"line":
|
|
13871
|
+
"line": 364
|
|
13805
13872
|
},
|
|
13806
13873
|
"parameters": [
|
|
13807
13874
|
{
|
|
@@ -13831,7 +13898,7 @@
|
|
|
13831
13898
|
"kind": "class",
|
|
13832
13899
|
"locationInModule": {
|
|
13833
13900
|
"filename": "src/providers/fargate.ts",
|
|
13834
|
-
"line":
|
|
13901
|
+
"line": 222
|
|
13835
13902
|
},
|
|
13836
13903
|
"methods": [
|
|
13837
13904
|
{
|
|
@@ -13842,7 +13909,7 @@
|
|
|
13842
13909
|
},
|
|
13843
13910
|
"locationInModule": {
|
|
13844
13911
|
"filename": "src/providers/fargate.ts",
|
|
13845
|
-
"line":
|
|
13912
|
+
"line": 262
|
|
13846
13913
|
},
|
|
13847
13914
|
"name": "imageBuilder",
|
|
13848
13915
|
"parameters": [
|
|
@@ -13881,7 +13948,7 @@
|
|
|
13881
13948
|
},
|
|
13882
13949
|
"locationInModule": {
|
|
13883
13950
|
"filename": "src/providers/fargate.ts",
|
|
13884
|
-
"line":
|
|
13951
|
+
"line": 457
|
|
13885
13952
|
},
|
|
13886
13953
|
"name": "getStepFunctionTask",
|
|
13887
13954
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -13892,7 +13959,7 @@
|
|
|
13892
13959
|
},
|
|
13893
13960
|
"name": "parameters",
|
|
13894
13961
|
"type": {
|
|
13895
|
-
"fqn": "@cloudsnorkel/cdk-github-runners.
|
|
13962
|
+
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerRuntimeParameters"
|
|
13896
13963
|
}
|
|
13897
13964
|
}
|
|
13898
13965
|
],
|
|
@@ -13910,7 +13977,7 @@
|
|
|
13910
13977
|
},
|
|
13911
13978
|
"locationInModule": {
|
|
13912
13979
|
"filename": "src/providers/fargate.ts",
|
|
13913
|
-
"line":
|
|
13980
|
+
"line": 528
|
|
13914
13981
|
},
|
|
13915
13982
|
"name": "grantStateMachine",
|
|
13916
13983
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -13929,7 +13996,7 @@
|
|
|
13929
13996
|
},
|
|
13930
13997
|
"locationInModule": {
|
|
13931
13998
|
"filename": "src/providers/common.ts",
|
|
13932
|
-
"line":
|
|
13999
|
+
"line": 677
|
|
13933
14000
|
},
|
|
13934
14001
|
"name": "labelsFromProperties",
|
|
13935
14002
|
"parameters": [
|
|
@@ -13979,7 +14046,7 @@
|
|
|
13979
14046
|
},
|
|
13980
14047
|
"locationInModule": {
|
|
13981
14048
|
"filename": "src/providers/fargate.ts",
|
|
13982
|
-
"line":
|
|
14049
|
+
"line": 531
|
|
13983
14050
|
},
|
|
13984
14051
|
"name": "status",
|
|
13985
14052
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -13996,6 +14063,28 @@
|
|
|
13996
14063
|
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerProviderStatus"
|
|
13997
14064
|
}
|
|
13998
14065
|
}
|
|
14066
|
+
},
|
|
14067
|
+
{
|
|
14068
|
+
"docs": {
|
|
14069
|
+
"stability": "experimental",
|
|
14070
|
+
"summary": "Override to inject static strings into `$.consts` on the orchestrator state machine."
|
|
14071
|
+
},
|
|
14072
|
+
"locationInModule": {
|
|
14073
|
+
"filename": "src/providers/common.ts",
|
|
14074
|
+
"line": 673
|
|
14075
|
+
},
|
|
14076
|
+
"name": "stepFunctionConstants",
|
|
14077
|
+
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
14078
|
+
"returns": {
|
|
14079
|
+
"type": {
|
|
14080
|
+
"collection": {
|
|
14081
|
+
"elementtype": {
|
|
14082
|
+
"primitive": "string"
|
|
14083
|
+
},
|
|
14084
|
+
"kind": "map"
|
|
14085
|
+
}
|
|
14086
|
+
}
|
|
14087
|
+
}
|
|
13999
14088
|
}
|
|
14000
14089
|
],
|
|
14001
14090
|
"name": "FargateRunnerProvider",
|
|
@@ -14011,7 +14100,7 @@
|
|
|
14011
14100
|
"immutable": true,
|
|
14012
14101
|
"locationInModule": {
|
|
14013
14102
|
"filename": "src/providers/fargate.ts",
|
|
14014
|
-
"line":
|
|
14103
|
+
"line": 243
|
|
14015
14104
|
},
|
|
14016
14105
|
"name": "LINUX_ARM64_DOCKERFILE_PATH",
|
|
14017
14106
|
"static": true,
|
|
@@ -14030,7 +14119,7 @@
|
|
|
14030
14119
|
"immutable": true,
|
|
14031
14120
|
"locationInModule": {
|
|
14032
14121
|
"filename": "src/providers/fargate.ts",
|
|
14033
|
-
"line":
|
|
14122
|
+
"line": 232
|
|
14034
14123
|
},
|
|
14035
14124
|
"name": "LINUX_X64_DOCKERFILE_PATH",
|
|
14036
14125
|
"static": true,
|
|
@@ -14047,7 +14136,7 @@
|
|
|
14047
14136
|
"immutable": true,
|
|
14048
14137
|
"locationInModule": {
|
|
14049
14138
|
"filename": "src/providers/fargate.ts",
|
|
14050
|
-
"line":
|
|
14139
|
+
"line": 321
|
|
14051
14140
|
},
|
|
14052
14141
|
"name": "assignPublicIp",
|
|
14053
14142
|
"type": {
|
|
@@ -14062,7 +14151,7 @@
|
|
|
14062
14151
|
"immutable": true,
|
|
14063
14152
|
"locationInModule": {
|
|
14064
14153
|
"filename": "src/providers/fargate.ts",
|
|
14065
|
-
"line":
|
|
14154
|
+
"line": 281
|
|
14066
14155
|
},
|
|
14067
14156
|
"name": "cluster",
|
|
14068
14157
|
"type": {
|
|
@@ -14077,7 +14166,7 @@
|
|
|
14077
14166
|
"immutable": true,
|
|
14078
14167
|
"locationInModule": {
|
|
14079
14168
|
"filename": "src/providers/fargate.ts",
|
|
14080
|
-
"line":
|
|
14169
|
+
"line": 331
|
|
14081
14170
|
},
|
|
14082
14171
|
"name": "connections",
|
|
14083
14172
|
"overrides": "aws-cdk-lib.aws_ec2.IConnectable",
|
|
@@ -14094,7 +14183,7 @@
|
|
|
14094
14183
|
"immutable": true,
|
|
14095
14184
|
"locationInModule": {
|
|
14096
14185
|
"filename": "src/providers/fargate.ts",
|
|
14097
|
-
"line":
|
|
14186
|
+
"line": 295
|
|
14098
14187
|
},
|
|
14099
14188
|
"name": "container",
|
|
14100
14189
|
"type": {
|
|
@@ -14109,7 +14198,7 @@
|
|
|
14109
14198
|
"immutable": true,
|
|
14110
14199
|
"locationInModule": {
|
|
14111
14200
|
"filename": "src/providers/fargate.ts",
|
|
14112
|
-
"line":
|
|
14201
|
+
"line": 326
|
|
14113
14202
|
},
|
|
14114
14203
|
"name": "grantPrincipal",
|
|
14115
14204
|
"overrides": "aws-cdk-lib.aws_iam.IGrantable",
|
|
@@ -14127,7 +14216,7 @@
|
|
|
14127
14216
|
"immutable": true,
|
|
14128
14217
|
"locationInModule": {
|
|
14129
14218
|
"filename": "src/providers/fargate.ts",
|
|
14130
|
-
"line":
|
|
14219
|
+
"line": 345
|
|
14131
14220
|
},
|
|
14132
14221
|
"name": "image",
|
|
14133
14222
|
"type": {
|
|
@@ -14142,7 +14231,7 @@
|
|
|
14142
14231
|
"immutable": true,
|
|
14143
14232
|
"locationInModule": {
|
|
14144
14233
|
"filename": "src/providers/fargate.ts",
|
|
14145
|
-
"line":
|
|
14234
|
+
"line": 300
|
|
14146
14235
|
},
|
|
14147
14236
|
"name": "labels",
|
|
14148
14237
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -14164,7 +14253,7 @@
|
|
|
14164
14253
|
"immutable": true,
|
|
14165
14254
|
"locationInModule": {
|
|
14166
14255
|
"filename": "src/providers/fargate.ts",
|
|
14167
|
-
"line":
|
|
14256
|
+
"line": 352
|
|
14168
14257
|
},
|
|
14169
14258
|
"name": "logGroup",
|
|
14170
14259
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -14180,7 +14269,7 @@
|
|
|
14180
14269
|
"immutable": true,
|
|
14181
14270
|
"locationInModule": {
|
|
14182
14271
|
"filename": "src/providers/fargate.ts",
|
|
14183
|
-
"line":
|
|
14272
|
+
"line": 354
|
|
14184
14273
|
},
|
|
14185
14274
|
"name": "retryableErrors",
|
|
14186
14275
|
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
@@ -14202,7 +14291,7 @@
|
|
|
14202
14291
|
"immutable": true,
|
|
14203
14292
|
"locationInModule": {
|
|
14204
14293
|
"filename": "src/providers/fargate.ts",
|
|
14205
|
-
"line":
|
|
14294
|
+
"line": 338
|
|
14206
14295
|
},
|
|
14207
14296
|
"name": "spot",
|
|
14208
14297
|
"type": {
|
|
@@ -14218,7 +14307,7 @@
|
|
|
14218
14307
|
"immutable": true,
|
|
14219
14308
|
"locationInModule": {
|
|
14220
14309
|
"filename": "src/providers/fargate.ts",
|
|
14221
|
-
"line":
|
|
14310
|
+
"line": 288
|
|
14222
14311
|
},
|
|
14223
14312
|
"name": "task",
|
|
14224
14313
|
"type": {
|
|
@@ -14234,7 +14323,7 @@
|
|
|
14234
14323
|
"immutable": true,
|
|
14235
14324
|
"locationInModule": {
|
|
14236
14325
|
"filename": "src/providers/fargate.ts",
|
|
14237
|
-
"line":
|
|
14326
|
+
"line": 314
|
|
14238
14327
|
},
|
|
14239
14328
|
"name": "subnetSelection",
|
|
14240
14329
|
"optional": true,
|
|
@@ -14251,7 +14340,7 @@
|
|
|
14251
14340
|
"immutable": true,
|
|
14252
14341
|
"locationInModule": {
|
|
14253
14342
|
"filename": "src/providers/fargate.ts",
|
|
14254
|
-
"line":
|
|
14343
|
+
"line": 307
|
|
14255
14344
|
},
|
|
14256
14345
|
"name": "vpc",
|
|
14257
14346
|
"optional": true,
|
|
@@ -14276,7 +14365,7 @@
|
|
|
14276
14365
|
"kind": "interface",
|
|
14277
14366
|
"locationInModule": {
|
|
14278
14367
|
"filename": "src/providers/fargate.ts",
|
|
14279
|
-
"line":
|
|
14368
|
+
"line": 33
|
|
14280
14369
|
},
|
|
14281
14370
|
"name": "FargateRunnerProviderProps",
|
|
14282
14371
|
"properties": [
|
|
@@ -14291,7 +14380,7 @@
|
|
|
14291
14380
|
"immutable": true,
|
|
14292
14381
|
"locationInModule": {
|
|
14293
14382
|
"filename": "src/providers/fargate.ts",
|
|
14294
|
-
"line":
|
|
14383
|
+
"line": 120
|
|
14295
14384
|
},
|
|
14296
14385
|
"name": "assignPublicIp",
|
|
14297
14386
|
"optional": true,
|
|
@@ -14309,7 +14398,7 @@
|
|
|
14309
14398
|
"immutable": true,
|
|
14310
14399
|
"locationInModule": {
|
|
14311
14400
|
"filename": "src/providers/fargate.ts",
|
|
14312
|
-
"line":
|
|
14401
|
+
"line": 111
|
|
14313
14402
|
},
|
|
14314
14403
|
"name": "cluster",
|
|
14315
14404
|
"optional": true,
|
|
@@ -14328,7 +14417,7 @@
|
|
|
14328
14417
|
"immutable": true,
|
|
14329
14418
|
"locationInModule": {
|
|
14330
14419
|
"filename": "src/providers/fargate.ts",
|
|
14331
|
-
"line":
|
|
14420
|
+
"line": 139
|
|
14332
14421
|
},
|
|
14333
14422
|
"name": "cpu",
|
|
14334
14423
|
"optional": true,
|
|
@@ -14347,7 +14436,7 @@
|
|
|
14347
14436
|
"immutable": true,
|
|
14348
14437
|
"locationInModule": {
|
|
14349
14438
|
"filename": "src/providers/fargate.ts",
|
|
14350
|
-
"line":
|
|
14439
|
+
"line": 166
|
|
14351
14440
|
},
|
|
14352
14441
|
"name": "ephemeralStorageGiB",
|
|
14353
14442
|
"optional": true,
|
|
@@ -14366,7 +14455,7 @@
|
|
|
14366
14455
|
"immutable": true,
|
|
14367
14456
|
"locationInModule": {
|
|
14368
14457
|
"filename": "src/providers/fargate.ts",
|
|
14369
|
-
"line":
|
|
14458
|
+
"line": 74
|
|
14370
14459
|
},
|
|
14371
14460
|
"name": "group",
|
|
14372
14461
|
"optional": true,
|
|
@@ -14385,7 +14474,7 @@
|
|
|
14385
14474
|
"immutable": true,
|
|
14386
14475
|
"locationInModule": {
|
|
14387
14476
|
"filename": "src/providers/fargate.ts",
|
|
14388
|
-
"line":
|
|
14477
|
+
"line": 41
|
|
14389
14478
|
},
|
|
14390
14479
|
"name": "imageBuilder",
|
|
14391
14480
|
"optional": true,
|
|
@@ -14404,7 +14493,7 @@
|
|
|
14404
14493
|
"immutable": true,
|
|
14405
14494
|
"locationInModule": {
|
|
14406
14495
|
"filename": "src/providers/fargate.ts",
|
|
14407
|
-
"line":
|
|
14496
|
+
"line": 49
|
|
14408
14497
|
},
|
|
14409
14498
|
"name": "label",
|
|
14410
14499
|
"optional": true,
|
|
@@ -14423,7 +14512,7 @@
|
|
|
14423
14512
|
"immutable": true,
|
|
14424
14513
|
"locationInModule": {
|
|
14425
14514
|
"filename": "src/providers/fargate.ts",
|
|
14426
|
-
"line":
|
|
14515
|
+
"line": 60
|
|
14427
14516
|
},
|
|
14428
14517
|
"name": "labels",
|
|
14429
14518
|
"optional": true,
|
|
@@ -14447,7 +14536,7 @@
|
|
|
14447
14536
|
"immutable": true,
|
|
14448
14537
|
"locationInModule": {
|
|
14449
14538
|
"filename": "src/providers/fargate.ts",
|
|
14450
|
-
"line":
|
|
14539
|
+
"line": 157
|
|
14451
14540
|
},
|
|
14452
14541
|
"name": "memoryLimitMiB",
|
|
14453
14542
|
"optional": true,
|
|
@@ -14466,7 +14555,7 @@
|
|
|
14466
14555
|
"immutable": true,
|
|
14467
14556
|
"locationInModule": {
|
|
14468
14557
|
"filename": "src/providers/fargate.ts",
|
|
14469
|
-
"line":
|
|
14558
|
+
"line": 97
|
|
14470
14559
|
},
|
|
14471
14560
|
"name": "securityGroup",
|
|
14472
14561
|
"optional": true,
|
|
@@ -14484,7 +14573,7 @@
|
|
|
14484
14573
|
"immutable": true,
|
|
14485
14574
|
"locationInModule": {
|
|
14486
14575
|
"filename": "src/providers/fargate.ts",
|
|
14487
|
-
"line":
|
|
14576
|
+
"line": 104
|
|
14488
14577
|
},
|
|
14489
14578
|
"name": "securityGroups",
|
|
14490
14579
|
"optional": true,
|
|
@@ -14508,7 +14597,7 @@
|
|
|
14508
14597
|
"immutable": true,
|
|
14509
14598
|
"locationInModule": {
|
|
14510
14599
|
"filename": "src/providers/fargate.ts",
|
|
14511
|
-
"line":
|
|
14600
|
+
"line": 176
|
|
14512
14601
|
},
|
|
14513
14602
|
"name": "spot",
|
|
14514
14603
|
"optional": true,
|
|
@@ -14526,7 +14615,7 @@
|
|
|
14526
14615
|
"immutable": true,
|
|
14527
14616
|
"locationInModule": {
|
|
14528
14617
|
"filename": "src/providers/fargate.ts",
|
|
14529
|
-
"line":
|
|
14618
|
+
"line": 88
|
|
14530
14619
|
},
|
|
14531
14620
|
"name": "subnetSelection",
|
|
14532
14621
|
"optional": true,
|
|
@@ -14544,7 +14633,7 @@
|
|
|
14544
14633
|
"immutable": true,
|
|
14545
14634
|
"locationInModule": {
|
|
14546
14635
|
"filename": "src/providers/fargate.ts",
|
|
14547
|
-
"line":
|
|
14636
|
+
"line": 81
|
|
14548
14637
|
},
|
|
14549
14638
|
"name": "vpc",
|
|
14550
14639
|
"optional": true,
|
|
@@ -14647,7 +14736,7 @@
|
|
|
14647
14736
|
},
|
|
14648
14737
|
"locationInModule": {
|
|
14649
14738
|
"filename": "src/runner.ts",
|
|
14650
|
-
"line":
|
|
14739
|
+
"line": 317
|
|
14651
14740
|
},
|
|
14652
14741
|
"parameters": [
|
|
14653
14742
|
{
|
|
@@ -14677,7 +14766,7 @@
|
|
|
14677
14766
|
"kind": "class",
|
|
14678
14767
|
"locationInModule": {
|
|
14679
14768
|
"filename": "src/runner.ts",
|
|
14680
|
-
"line":
|
|
14769
|
+
"line": 285
|
|
14681
14770
|
},
|
|
14682
14771
|
"methods": [
|
|
14683
14772
|
{
|
|
@@ -14688,7 +14777,7 @@
|
|
|
14688
14777
|
},
|
|
14689
14778
|
"locationInModule": {
|
|
14690
14779
|
"filename": "src/runner.ts",
|
|
14691
|
-
"line":
|
|
14780
|
+
"line": 945
|
|
14692
14781
|
},
|
|
14693
14782
|
"name": "createLogsInsightsQueries",
|
|
14694
14783
|
"parameters": [
|
|
@@ -14713,7 +14802,7 @@
|
|
|
14713
14802
|
},
|
|
14714
14803
|
"locationInModule": {
|
|
14715
14804
|
"filename": "src/runner.ts",
|
|
14716
|
-
"line":
|
|
14805
|
+
"line": 921
|
|
14717
14806
|
},
|
|
14718
14807
|
"name": "failedImageBuildsTopic",
|
|
14719
14808
|
"parameters": [
|
|
@@ -14742,7 +14831,7 @@
|
|
|
14742
14831
|
},
|
|
14743
14832
|
"locationInModule": {
|
|
14744
14833
|
"filename": "src/runner.ts",
|
|
14745
|
-
"line":
|
|
14834
|
+
"line": 897
|
|
14746
14835
|
},
|
|
14747
14836
|
"name": "metricFailed",
|
|
14748
14837
|
"parameters": [
|
|
@@ -14768,7 +14857,7 @@
|
|
|
14768
14857
|
},
|
|
14769
14858
|
"locationInModule": {
|
|
14770
14859
|
"filename": "src/runner.ts",
|
|
14771
|
-
"line":
|
|
14860
|
+
"line": 841
|
|
14772
14861
|
},
|
|
14773
14862
|
"name": "metricJobCompleted",
|
|
14774
14863
|
"parameters": [
|
|
@@ -14794,7 +14883,7 @@
|
|
|
14794
14883
|
},
|
|
14795
14884
|
"locationInModule": {
|
|
14796
14885
|
"filename": "src/runner.ts",
|
|
14797
|
-
"line":
|
|
14886
|
+
"line": 888
|
|
14798
14887
|
},
|
|
14799
14888
|
"name": "metricSucceeded",
|
|
14800
14889
|
"parameters": [
|
|
@@ -14820,7 +14909,7 @@
|
|
|
14820
14909
|
},
|
|
14821
14910
|
"locationInModule": {
|
|
14822
14911
|
"filename": "src/runner.ts",
|
|
14823
|
-
"line":
|
|
14912
|
+
"line": 904
|
|
14824
14913
|
},
|
|
14825
14914
|
"name": "metricTime",
|
|
14826
14915
|
"parameters": [
|
|
@@ -14850,7 +14939,7 @@
|
|
|
14850
14939
|
"immutable": true,
|
|
14851
14940
|
"locationInModule": {
|
|
14852
14941
|
"filename": "src/runner.ts",
|
|
14853
|
-
"line":
|
|
14942
|
+
"line": 301
|
|
14854
14943
|
},
|
|
14855
14944
|
"name": "connections",
|
|
14856
14945
|
"overrides": "aws-cdk-lib.aws_ec2.IConnectable",
|
|
@@ -14866,7 +14955,7 @@
|
|
|
14866
14955
|
"immutable": true,
|
|
14867
14956
|
"locationInModule": {
|
|
14868
14957
|
"filename": "src/runner.ts",
|
|
14869
|
-
"line":
|
|
14958
|
+
"line": 289
|
|
14870
14959
|
},
|
|
14871
14960
|
"name": "providers",
|
|
14872
14961
|
"type": {
|
|
@@ -14895,7 +14984,7 @@
|
|
|
14895
14984
|
"immutable": true,
|
|
14896
14985
|
"locationInModule": {
|
|
14897
14986
|
"filename": "src/runner.ts",
|
|
14898
|
-
"line":
|
|
14987
|
+
"line": 294
|
|
14899
14988
|
},
|
|
14900
14989
|
"name": "secrets",
|
|
14901
14990
|
"type": {
|
|
@@ -14909,7 +14998,7 @@
|
|
|
14909
14998
|
"immutable": true,
|
|
14910
14999
|
"locationInModule": {
|
|
14911
15000
|
"filename": "src/runner.ts",
|
|
14912
|
-
"line":
|
|
15001
|
+
"line": 317
|
|
14913
15002
|
},
|
|
14914
15003
|
"name": "props",
|
|
14915
15004
|
"optional": true,
|
|
@@ -14931,7 +15020,7 @@
|
|
|
14931
15020
|
"kind": "interface",
|
|
14932
15021
|
"locationInModule": {
|
|
14933
15022
|
"filename": "src/runner.ts",
|
|
14934
|
-
"line":
|
|
15023
|
+
"line": 45
|
|
14935
15024
|
},
|
|
14936
15025
|
"name": "GitHubRunnersProps",
|
|
14937
15026
|
"properties": [
|
|
@@ -14946,7 +15035,7 @@
|
|
|
14946
15035
|
"immutable": true,
|
|
14947
15036
|
"locationInModule": {
|
|
14948
15037
|
"filename": "src/runner.ts",
|
|
14949
|
-
"line":
|
|
15038
|
+
"line": 92
|
|
14950
15039
|
},
|
|
14951
15040
|
"name": "allowPublicSubnet",
|
|
14952
15041
|
"optional": true,
|
|
@@ -14964,7 +15053,7 @@
|
|
|
14964
15053
|
"immutable": true,
|
|
14965
15054
|
"locationInModule": {
|
|
14966
15055
|
"filename": "src/runner.ts",
|
|
14967
|
-
"line":
|
|
15056
|
+
"line": 138
|
|
14968
15057
|
},
|
|
14969
15058
|
"name": "extraCertificates",
|
|
14970
15059
|
"optional": true,
|
|
@@ -14983,7 +15072,7 @@
|
|
|
14983
15072
|
"immutable": true,
|
|
14984
15073
|
"locationInModule": {
|
|
14985
15074
|
"filename": "src/runner.ts",
|
|
14986
|
-
"line":
|
|
15075
|
+
"line": 145
|
|
14987
15076
|
},
|
|
14988
15077
|
"name": "idleTimeout",
|
|
14989
15078
|
"optional": true,
|
|
@@ -15001,7 +15090,7 @@
|
|
|
15001
15090
|
"immutable": true,
|
|
15002
15091
|
"locationInModule": {
|
|
15003
15092
|
"filename": "src/runner.ts",
|
|
15004
|
-
"line":
|
|
15093
|
+
"line": 152
|
|
15005
15094
|
},
|
|
15006
15095
|
"name": "logOptions",
|
|
15007
15096
|
"optional": true,
|
|
@@ -15020,7 +15109,7 @@
|
|
|
15020
15109
|
"immutable": true,
|
|
15021
15110
|
"locationInModule": {
|
|
15022
15111
|
"filename": "src/runner.ts",
|
|
15023
|
-
"line":
|
|
15112
|
+
"line": 51
|
|
15024
15113
|
},
|
|
15025
15114
|
"name": "providers",
|
|
15026
15115
|
"optional": true,
|
|
@@ -15045,14 +15134,15 @@
|
|
|
15045
15134
|
{
|
|
15046
15135
|
"abstract": true,
|
|
15047
15136
|
"docs": {
|
|
15048
|
-
"remarks": "* The function receives the webhook payload along with default provider and its labels as {@link ProviderSelectorInput }\n* The function returns a selected provider and its labels as {@link ProviderSelectorResult }\n* You can decline to provision a runner by returning undefined as the provider selector result\n* You can fully customize the labels for the about-to-be-provisioned runner (add, remove, modify, dynamic labels, etc.)\n* Labels don't have to match the labels originally configured for the provider, but see warnings below\n* This function will be called synchronously during webhook processing, so it should be fast and efficient (webhook limit is 30 seconds total)\n\n**WARNING: It is your responsibility to ensure the selected provider's labels match the job's required labels. If you return the wrong labels, the runner will be created but GitHub Actions will not assign the job to it.**\n\n**WARNING: Provider selection is not a guarantee that a specific provider will be assigned for the job. GitHub Actions may assign the job to any runner with matching labels. The provider selector only determines which provider's runner will be *created*, but GitHub Actions may route the job to any available runner with the required labels.**\n\n**For reliable provider assignment based on job characteristics, consider using repo-level runner registration where you can control which runners are available for specific repositories.
|
|
15137
|
+
"remarks": "* The function receives the webhook payload along with default provider and its labels as {@link ProviderSelectorInput }\n* The function returns a selected provider and its labels as {@link ProviderSelectorResult }\n* You can decline to provision a runner by returning undefined as the provider selector result\n* You can fully customize the labels for the about-to-be-provisioned runner (add, remove, modify, dynamic labels, etc.)\n* Labels don't have to match the labels originally configured for the provider, but see warnings below\n* This function will be called synchronously during webhook processing, so it should be fast and efficient (webhook limit is 30 seconds total)\n\n**WARNING: It is your responsibility to ensure the selected provider's labels match the job's required labels. If you return the wrong labels, the runner will be created but GitHub Actions will not assign the job to it.**\n\n**WARNING: Provider selection is not a guarantee that a specific provider will be assigned for the job. GitHub Actions may assign the job to any runner with matching labels. The provider selector only determines which provider's runner will be *created*, but GitHub Actions may route the job to any available runner with the required labels.**\n\n**For reliable provider assignment based on job characteristics, consider using repo-level runner registration where you can control which runners are available for specific repositories. This information is also available while using the setup wizard.",
|
|
15138
|
+
"see": "https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md",
|
|
15049
15139
|
"stability": "experimental",
|
|
15050
15140
|
"summary": "Optional Lambda function to customize provider selection logic and label assignment."
|
|
15051
15141
|
},
|
|
15052
15142
|
"immutable": true,
|
|
15053
15143
|
"locationInModule": {
|
|
15054
15144
|
"filename": "src/runner.ts",
|
|
15055
|
-
"line":
|
|
15145
|
+
"line": 209
|
|
15056
15146
|
},
|
|
15057
15147
|
"name": "providerSelector",
|
|
15058
15148
|
"optional": true,
|
|
@@ -15071,7 +15161,7 @@
|
|
|
15071
15161
|
"immutable": true,
|
|
15072
15162
|
"locationInModule": {
|
|
15073
15163
|
"filename": "src/runner.ts",
|
|
15074
|
-
"line":
|
|
15164
|
+
"line": 60
|
|
15075
15165
|
},
|
|
15076
15166
|
"name": "requireSelfHostedLabel",
|
|
15077
15167
|
"optional": true,
|
|
@@ -15090,7 +15180,7 @@
|
|
|
15090
15180
|
"immutable": true,
|
|
15091
15181
|
"locationInModule": {
|
|
15092
15182
|
"filename": "src/runner.ts",
|
|
15093
|
-
"line":
|
|
15183
|
+
"line": 189
|
|
15094
15184
|
},
|
|
15095
15185
|
"name": "retryOptions",
|
|
15096
15186
|
"optional": true,
|
|
@@ -15109,7 +15199,7 @@
|
|
|
15109
15199
|
"immutable": true,
|
|
15110
15200
|
"locationInModule": {
|
|
15111
15201
|
"filename": "src/runner.ts",
|
|
15112
|
-
"line":
|
|
15202
|
+
"line": 101
|
|
15113
15203
|
},
|
|
15114
15204
|
"name": "securityGroup",
|
|
15115
15205
|
"optional": true,
|
|
@@ -15127,7 +15217,7 @@
|
|
|
15127
15217
|
"immutable": true,
|
|
15128
15218
|
"locationInModule": {
|
|
15129
15219
|
"filename": "src/runner.ts",
|
|
15130
|
-
"line":
|
|
15220
|
+
"line": 110
|
|
15131
15221
|
},
|
|
15132
15222
|
"name": "securityGroups",
|
|
15133
15223
|
"optional": true,
|
|
@@ -15151,7 +15241,7 @@
|
|
|
15151
15241
|
"immutable": true,
|
|
15152
15242
|
"locationInModule": {
|
|
15153
15243
|
"filename": "src/runner.ts",
|
|
15154
|
-
"line":
|
|
15244
|
+
"line": 159
|
|
15155
15245
|
},
|
|
15156
15246
|
"name": "setupAccess",
|
|
15157
15247
|
"optional": true,
|
|
@@ -15170,7 +15260,7 @@
|
|
|
15170
15260
|
"immutable": true,
|
|
15171
15261
|
"locationInModule": {
|
|
15172
15262
|
"filename": "src/runner.ts",
|
|
15173
|
-
"line":
|
|
15263
|
+
"line": 178
|
|
15174
15264
|
},
|
|
15175
15265
|
"name": "statusAccess",
|
|
15176
15266
|
"optional": true,
|
|
@@ -15188,7 +15278,7 @@
|
|
|
15188
15278
|
"immutable": true,
|
|
15189
15279
|
"locationInModule": {
|
|
15190
15280
|
"filename": "src/runner.ts",
|
|
15191
|
-
"line":
|
|
15281
|
+
"line": 76
|
|
15192
15282
|
},
|
|
15193
15283
|
"name": "vpc",
|
|
15194
15284
|
"optional": true,
|
|
@@ -15206,7 +15296,7 @@
|
|
|
15206
15296
|
"immutable": true,
|
|
15207
15297
|
"locationInModule": {
|
|
15208
15298
|
"filename": "src/runner.ts",
|
|
15209
|
-
"line":
|
|
15299
|
+
"line": 83
|
|
15210
15300
|
},
|
|
15211
15301
|
"name": "vpcSubnets",
|
|
15212
15302
|
"optional": true,
|
|
@@ -15225,7 +15315,7 @@
|
|
|
15225
15315
|
"immutable": true,
|
|
15226
15316
|
"locationInModule": {
|
|
15227
15317
|
"filename": "src/runner.ts",
|
|
15228
|
-
"line":
|
|
15318
|
+
"line": 171
|
|
15229
15319
|
},
|
|
15230
15320
|
"name": "webhookAccess",
|
|
15231
15321
|
"optional": true,
|
|
@@ -15250,19 +15340,19 @@
|
|
|
15250
15340
|
"kind": "interface",
|
|
15251
15341
|
"locationInModule": {
|
|
15252
15342
|
"filename": "src/providers/common.ts",
|
|
15253
|
-
"line":
|
|
15343
|
+
"line": 553
|
|
15254
15344
|
},
|
|
15255
15345
|
"methods": [
|
|
15256
15346
|
{
|
|
15257
15347
|
"abstract": true,
|
|
15258
15348
|
"docs": {
|
|
15259
|
-
"remarks": "
|
|
15349
|
+
"remarks": "If the provider has multiple attempts, each attempt should be followed by a `Catch` that deletes the failed runner. Use\n{@link IRunnerRuntimeParameters.addCatchAndCleanUp} to add the catch.\n\nCalled by GithubRunners and shouldn't be called manually.",
|
|
15260
15350
|
"stability": "experimental",
|
|
15261
15351
|
"summary": "Generate step function tasks that execute the runner."
|
|
15262
15352
|
},
|
|
15263
15353
|
"locationInModule": {
|
|
15264
15354
|
"filename": "src/providers/common.ts",
|
|
15265
|
-
"line":
|
|
15355
|
+
"line": 579
|
|
15266
15356
|
},
|
|
15267
15357
|
"name": "getStepFunctionTask",
|
|
15268
15358
|
"parameters": [
|
|
@@ -15272,7 +15362,7 @@
|
|
|
15272
15362
|
},
|
|
15273
15363
|
"name": "parameters",
|
|
15274
15364
|
"type": {
|
|
15275
|
-
"fqn": "@cloudsnorkel/cdk-github-runners.
|
|
15365
|
+
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerRuntimeParameters"
|
|
15276
15366
|
}
|
|
15277
15367
|
}
|
|
15278
15368
|
],
|
|
@@ -15291,7 +15381,7 @@
|
|
|
15291
15381
|
},
|
|
15292
15382
|
"locationInModule": {
|
|
15293
15383
|
"filename": "src/providers/common.ts",
|
|
15294
|
-
"line":
|
|
15384
|
+
"line": 593
|
|
15295
15385
|
},
|
|
15296
15386
|
"name": "grantStateMachine",
|
|
15297
15387
|
"parameters": [
|
|
@@ -15315,7 +15405,7 @@
|
|
|
15315
15405
|
},
|
|
15316
15406
|
"locationInModule": {
|
|
15317
15407
|
"filename": "src/providers/common.ts",
|
|
15318
|
-
"line":
|
|
15408
|
+
"line": 600
|
|
15319
15409
|
},
|
|
15320
15410
|
"name": "status",
|
|
15321
15411
|
"parameters": [
|
|
@@ -15339,6 +15429,28 @@
|
|
|
15339
15429
|
}
|
|
15340
15430
|
}
|
|
15341
15431
|
}
|
|
15432
|
+
},
|
|
15433
|
+
{
|
|
15434
|
+
"abstract": true,
|
|
15435
|
+
"docs": {
|
|
15436
|
+
"stability": "experimental",
|
|
15437
|
+
"summary": "Merged constants from all sub-providers for the single orchestrator `$.consts` pass. Duplicate keys across sub-providers must be avoided."
|
|
15438
|
+
},
|
|
15439
|
+
"locationInModule": {
|
|
15440
|
+
"filename": "src/providers/common.ts",
|
|
15441
|
+
"line": 585
|
|
15442
|
+
},
|
|
15443
|
+
"name": "stepFunctionConstants",
|
|
15444
|
+
"returns": {
|
|
15445
|
+
"type": {
|
|
15446
|
+
"collection": {
|
|
15447
|
+
"elementtype": {
|
|
15448
|
+
"primitive": "string"
|
|
15449
|
+
},
|
|
15450
|
+
"kind": "map"
|
|
15451
|
+
}
|
|
15452
|
+
}
|
|
15453
|
+
}
|
|
15342
15454
|
}
|
|
15343
15455
|
],
|
|
15344
15456
|
"name": "ICompositeProvider",
|
|
@@ -15353,7 +15465,7 @@
|
|
|
15353
15465
|
"immutable": true,
|
|
15354
15466
|
"locationInModule": {
|
|
15355
15467
|
"filename": "src/providers/common.ts",
|
|
15356
|
-
"line":
|
|
15468
|
+
"line": 561
|
|
15357
15469
|
},
|
|
15358
15470
|
"name": "labels",
|
|
15359
15471
|
"type": {
|
|
@@ -15375,7 +15487,7 @@
|
|
|
15375
15487
|
"immutable": true,
|
|
15376
15488
|
"locationInModule": {
|
|
15377
15489
|
"filename": "src/providers/common.ts",
|
|
15378
|
-
"line":
|
|
15490
|
+
"line": 567
|
|
15379
15491
|
},
|
|
15380
15492
|
"name": "providers",
|
|
15381
15493
|
"type": {
|
|
@@ -15471,7 +15583,7 @@
|
|
|
15471
15583
|
"kind": "interface",
|
|
15472
15584
|
"locationInModule": {
|
|
15473
15585
|
"filename": "src/providers/common.ts",
|
|
15474
|
-
"line":
|
|
15586
|
+
"line": 422
|
|
15475
15587
|
},
|
|
15476
15588
|
"name": "IRunnerAmiStatus",
|
|
15477
15589
|
"properties": [
|
|
@@ -15484,7 +15596,7 @@
|
|
|
15484
15596
|
"immutable": true,
|
|
15485
15597
|
"locationInModule": {
|
|
15486
15598
|
"filename": "src/providers/common.ts",
|
|
15487
|
-
"line":
|
|
15599
|
+
"line": 426
|
|
15488
15600
|
},
|
|
15489
15601
|
"name": "launchTemplate",
|
|
15490
15602
|
"type": {
|
|
@@ -15500,7 +15612,7 @@
|
|
|
15500
15612
|
"immutable": true,
|
|
15501
15613
|
"locationInModule": {
|
|
15502
15614
|
"filename": "src/providers/common.ts",
|
|
15503
|
-
"line":
|
|
15615
|
+
"line": 431
|
|
15504
15616
|
},
|
|
15505
15617
|
"name": "amiBuilderLogGroup",
|
|
15506
15618
|
"optional": true,
|
|
@@ -15575,7 +15687,7 @@
|
|
|
15575
15687
|
"kind": "interface",
|
|
15576
15688
|
"locationInModule": {
|
|
15577
15689
|
"filename": "src/providers/common.ts",
|
|
15578
|
-
"line":
|
|
15690
|
+
"line": 402
|
|
15579
15691
|
},
|
|
15580
15692
|
"name": "IRunnerImageStatus",
|
|
15581
15693
|
"properties": [
|
|
@@ -15588,7 +15700,7 @@
|
|
|
15588
15700
|
"immutable": true,
|
|
15589
15701
|
"locationInModule": {
|
|
15590
15702
|
"filename": "src/providers/common.ts",
|
|
15591
|
-
"line":
|
|
15703
|
+
"line": 406
|
|
15592
15704
|
},
|
|
15593
15705
|
"name": "imageRepository",
|
|
15594
15706
|
"type": {
|
|
@@ -15604,7 +15716,7 @@
|
|
|
15604
15716
|
"immutable": true,
|
|
15605
15717
|
"locationInModule": {
|
|
15606
15718
|
"filename": "src/providers/common.ts",
|
|
15607
|
-
"line":
|
|
15719
|
+
"line": 411
|
|
15608
15720
|
},
|
|
15609
15721
|
"name": "imageTag",
|
|
15610
15722
|
"type": {
|
|
@@ -15620,7 +15732,7 @@
|
|
|
15620
15732
|
"immutable": true,
|
|
15621
15733
|
"locationInModule": {
|
|
15622
15734
|
"filename": "src/providers/common.ts",
|
|
15623
|
-
"line":
|
|
15735
|
+
"line": 416
|
|
15624
15736
|
},
|
|
15625
15737
|
"name": "imageBuilderLogGroup",
|
|
15626
15738
|
"optional": true,
|
|
@@ -15634,7 +15746,7 @@
|
|
|
15634
15746
|
"@cloudsnorkel/cdk-github-runners.IRunnerProvider": {
|
|
15635
15747
|
"assembly": "@cloudsnorkel/cdk-github-runners",
|
|
15636
15748
|
"docs": {
|
|
15637
|
-
"remarks": "Implementations create all required resources and return a step function task that starts those resources from {@link getStepFunctionTask}.",
|
|
15749
|
+
"remarks": "Implementations create all required resources and return a step function task that starts those resources from {@link getStepFunctionTask}.\n\nThis interface is not guaranteed to be stable. If you end up implementing your own provider, please let us know so we can consider changing that contract.",
|
|
15638
15750
|
"stability": "experimental",
|
|
15639
15751
|
"summary": "Interface for all runner providers."
|
|
15640
15752
|
},
|
|
@@ -15647,7 +15759,7 @@
|
|
|
15647
15759
|
"kind": "interface",
|
|
15648
15760
|
"locationInModule": {
|
|
15649
15761
|
"filename": "src/providers/common.ts",
|
|
15650
|
-
"line":
|
|
15762
|
+
"line": 489
|
|
15651
15763
|
},
|
|
15652
15764
|
"methods": [
|
|
15653
15765
|
{
|
|
@@ -15659,7 +15771,7 @@
|
|
|
15659
15771
|
},
|
|
15660
15772
|
"locationInModule": {
|
|
15661
15773
|
"filename": "src/providers/common.ts",
|
|
15662
|
-
"line":
|
|
15774
|
+
"line": 520
|
|
15663
15775
|
},
|
|
15664
15776
|
"name": "getStepFunctionTask",
|
|
15665
15777
|
"parameters": [
|
|
@@ -15669,7 +15781,7 @@
|
|
|
15669
15781
|
},
|
|
15670
15782
|
"name": "parameters",
|
|
15671
15783
|
"type": {
|
|
15672
|
-
"fqn": "@cloudsnorkel/cdk-github-runners.
|
|
15784
|
+
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerRuntimeParameters"
|
|
15673
15785
|
}
|
|
15674
15786
|
}
|
|
15675
15787
|
],
|
|
@@ -15688,7 +15800,7 @@
|
|
|
15688
15800
|
},
|
|
15689
15801
|
"locationInModule": {
|
|
15690
15802
|
"filename": "src/providers/common.ts",
|
|
15691
|
-
"line":
|
|
15803
|
+
"line": 538
|
|
15692
15804
|
},
|
|
15693
15805
|
"name": "grantStateMachine",
|
|
15694
15806
|
"parameters": [
|
|
@@ -15712,7 +15824,7 @@
|
|
|
15712
15824
|
},
|
|
15713
15825
|
"locationInModule": {
|
|
15714
15826
|
"filename": "src/providers/common.ts",
|
|
15715
|
-
"line":
|
|
15827
|
+
"line": 545
|
|
15716
15828
|
},
|
|
15717
15829
|
"name": "status",
|
|
15718
15830
|
"parameters": [
|
|
@@ -15731,6 +15843,30 @@
|
|
|
15731
15843
|
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerProviderStatus"
|
|
15732
15844
|
}
|
|
15733
15845
|
}
|
|
15846
|
+
},
|
|
15847
|
+
{
|
|
15848
|
+
"abstract": true,
|
|
15849
|
+
"docs": {
|
|
15850
|
+
"default": "`{}` β {@link BaseProvider } returns an empty object; override when needed (e.g. EC2 userdata template).",
|
|
15851
|
+
"remarks": "To use the constants in your provider, use `'$.consts.key'` as a path.",
|
|
15852
|
+
"stability": "experimental",
|
|
15853
|
+
"summary": "Static string constants injected once into the orchestrator execution input at `$.consts`. Use unique keys for dynamic values (e.g. include `this.node.path` in the key). Values must be plain strings known at synthesis time."
|
|
15854
|
+
},
|
|
15855
|
+
"locationInModule": {
|
|
15856
|
+
"filename": "src/providers/common.ts",
|
|
15857
|
+
"line": 530
|
|
15858
|
+
},
|
|
15859
|
+
"name": "stepFunctionConstants",
|
|
15860
|
+
"returns": {
|
|
15861
|
+
"type": {
|
|
15862
|
+
"collection": {
|
|
15863
|
+
"elementtype": {
|
|
15864
|
+
"primitive": "string"
|
|
15865
|
+
},
|
|
15866
|
+
"kind": "map"
|
|
15867
|
+
}
|
|
15868
|
+
}
|
|
15869
|
+
}
|
|
15734
15870
|
}
|
|
15735
15871
|
],
|
|
15736
15872
|
"name": "IRunnerProvider",
|
|
@@ -15745,7 +15881,7 @@
|
|
|
15745
15881
|
"immutable": true,
|
|
15746
15882
|
"locationInModule": {
|
|
15747
15883
|
"filename": "src/providers/common.ts",
|
|
15748
|
-
"line":
|
|
15884
|
+
"line": 497
|
|
15749
15885
|
},
|
|
15750
15886
|
"name": "labels",
|
|
15751
15887
|
"type": {
|
|
@@ -15767,7 +15903,7 @@
|
|
|
15767
15903
|
"immutable": true,
|
|
15768
15904
|
"locationInModule": {
|
|
15769
15905
|
"filename": "src/providers/common.ts",
|
|
15770
|
-
"line":
|
|
15906
|
+
"line": 504
|
|
15771
15907
|
},
|
|
15772
15908
|
"name": "logGroup",
|
|
15773
15909
|
"type": {
|
|
@@ -15784,7 +15920,7 @@
|
|
|
15784
15920
|
"immutable": true,
|
|
15785
15921
|
"locationInModule": {
|
|
15786
15922
|
"filename": "src/providers/common.ts",
|
|
15787
|
-
"line":
|
|
15923
|
+
"line": 511
|
|
15788
15924
|
},
|
|
15789
15925
|
"name": "retryableErrors",
|
|
15790
15926
|
"type": {
|
|
@@ -15809,7 +15945,7 @@
|
|
|
15809
15945
|
"kind": "interface",
|
|
15810
15946
|
"locationInModule": {
|
|
15811
15947
|
"filename": "src/providers/common.ts",
|
|
15812
|
-
"line":
|
|
15948
|
+
"line": 437
|
|
15813
15949
|
},
|
|
15814
15950
|
"name": "IRunnerProviderStatus",
|
|
15815
15951
|
"properties": [
|
|
@@ -15822,7 +15958,7 @@
|
|
|
15822
15958
|
"immutable": true,
|
|
15823
15959
|
"locationInModule": {
|
|
15824
15960
|
"filename": "src/providers/common.ts",
|
|
15825
|
-
"line":
|
|
15961
|
+
"line": 446
|
|
15826
15962
|
},
|
|
15827
15963
|
"name": "labels",
|
|
15828
15964
|
"type": {
|
|
@@ -15843,7 +15979,7 @@
|
|
|
15843
15979
|
"immutable": true,
|
|
15844
15980
|
"locationInModule": {
|
|
15845
15981
|
"filename": "src/providers/common.ts",
|
|
15846
|
-
"line":
|
|
15982
|
+
"line": 441
|
|
15847
15983
|
},
|
|
15848
15984
|
"name": "type",
|
|
15849
15985
|
"type": {
|
|
@@ -15859,7 +15995,7 @@
|
|
|
15859
15995
|
"immutable": true,
|
|
15860
15996
|
"locationInModule": {
|
|
15861
15997
|
"filename": "src/providers/common.ts",
|
|
15862
|
-
"line":
|
|
15998
|
+
"line": 476
|
|
15863
15999
|
},
|
|
15864
16000
|
"name": "ami",
|
|
15865
16001
|
"optional": true,
|
|
@@ -15876,7 +16012,7 @@
|
|
|
15876
16012
|
"immutable": true,
|
|
15877
16013
|
"locationInModule": {
|
|
15878
16014
|
"filename": "src/providers/common.ts",
|
|
15879
|
-
"line":
|
|
16015
|
+
"line": 451
|
|
15880
16016
|
},
|
|
15881
16017
|
"name": "constructPath",
|
|
15882
16018
|
"optional": true,
|
|
@@ -15893,7 +16029,7 @@
|
|
|
15893
16029
|
"immutable": true,
|
|
15894
16030
|
"locationInModule": {
|
|
15895
16031
|
"filename": "src/providers/common.ts",
|
|
15896
|
-
"line":
|
|
16032
|
+
"line": 471
|
|
15897
16033
|
},
|
|
15898
16034
|
"name": "image",
|
|
15899
16035
|
"optional": true,
|
|
@@ -15910,7 +16046,7 @@
|
|
|
15910
16046
|
"immutable": true,
|
|
15911
16047
|
"locationInModule": {
|
|
15912
16048
|
"filename": "src/providers/common.ts",
|
|
15913
|
-
"line":
|
|
16049
|
+
"line": 481
|
|
15914
16050
|
},
|
|
15915
16051
|
"name": "logGroup",
|
|
15916
16052
|
"optional": true,
|
|
@@ -15927,7 +16063,7 @@
|
|
|
15927
16063
|
"immutable": true,
|
|
15928
16064
|
"locationInModule": {
|
|
15929
16065
|
"filename": "src/providers/common.ts",
|
|
15930
|
-
"line":
|
|
16066
|
+
"line": 466
|
|
15931
16067
|
},
|
|
15932
16068
|
"name": "roleArn",
|
|
15933
16069
|
"optional": true,
|
|
@@ -15944,7 +16080,7 @@
|
|
|
15944
16080
|
"immutable": true,
|
|
15945
16081
|
"locationInModule": {
|
|
15946
16082
|
"filename": "src/providers/common.ts",
|
|
15947
|
-
"line":
|
|
16083
|
+
"line": 461
|
|
15948
16084
|
},
|
|
15949
16085
|
"name": "securityGroups",
|
|
15950
16086
|
"optional": true,
|
|
@@ -15966,7 +16102,7 @@
|
|
|
15966
16102
|
"immutable": true,
|
|
15967
16103
|
"locationInModule": {
|
|
15968
16104
|
"filename": "src/providers/common.ts",
|
|
15969
|
-
"line":
|
|
16105
|
+
"line": 456
|
|
15970
16106
|
},
|
|
15971
16107
|
"name": "vpcArn",
|
|
15972
16108
|
"optional": true,
|
|
@@ -15977,42 +16113,222 @@
|
|
|
15977
16113
|
],
|
|
15978
16114
|
"symbolId": "src/providers/common:IRunnerProviderStatus"
|
|
15979
16115
|
},
|
|
15980
|
-
"@cloudsnorkel/cdk-github-runners.
|
|
16116
|
+
"@cloudsnorkel/cdk-github-runners.IRunnerRuntimeParameters": {
|
|
15981
16117
|
"assembly": "@cloudsnorkel/cdk-github-runners",
|
|
15982
|
-
"datatype": true,
|
|
15983
16118
|
"docs": {
|
|
16119
|
+
"remarks": "```sh\n./config.sh --unattended --url \"{REGISTRATION_URL}\" --token \"${RUNNER_TOKEN}\" --ephemeral --work _work --labels \"${RUNNER_LABEL}\" --name \"${RUNNER_NAME}\" --disableupdate\n```\n\nAll parameters are specified as step function paths and therefore must be used only in step function task parameters.",
|
|
15984
16120
|
"stability": "experimental",
|
|
15985
|
-
"summary": "
|
|
16121
|
+
"summary": "Workflow job parameters as parsed from the webhook event. Pass these into your runner executor and run something like:."
|
|
15986
16122
|
},
|
|
15987
|
-
"fqn": "@cloudsnorkel/cdk-github-runners.
|
|
16123
|
+
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerRuntimeParameters",
|
|
15988
16124
|
"kind": "interface",
|
|
15989
16125
|
"locationInModule": {
|
|
15990
|
-
"filename": "src/
|
|
15991
|
-
"line":
|
|
16126
|
+
"filename": "src/providers/common.ts",
|
|
16127
|
+
"line": 345
|
|
15992
16128
|
},
|
|
15993
|
-
"
|
|
15994
|
-
"properties": [
|
|
16129
|
+
"methods": [
|
|
15995
16130
|
{
|
|
15996
16131
|
"abstract": true,
|
|
15997
16132
|
"docs": {
|
|
16133
|
+
"remarks": "It is important to fully clean up after any failed runner provisioning. GitHub\nwill fail booting a new runner if the previous one with the same name is not\nfully cleaned up.",
|
|
15998
16134
|
"stability": "experimental",
|
|
15999
|
-
"summary": "
|
|
16135
|
+
"summary": "Catches all errors and cleans up the failed runner from GitHub Actions."
|
|
16000
16136
|
},
|
|
16001
|
-
"immutable": true,
|
|
16002
16137
|
"locationInModule": {
|
|
16003
|
-
"filename": "src/
|
|
16004
|
-
"line":
|
|
16138
|
+
"filename": "src/providers/common.ts",
|
|
16139
|
+
"line": 391
|
|
16005
16140
|
},
|
|
16006
|
-
"name": "
|
|
16007
|
-
"
|
|
16008
|
-
|
|
16009
|
-
|
|
16010
|
-
|
|
16141
|
+
"name": "addCatchAndCleanUp",
|
|
16142
|
+
"parameters": [
|
|
16143
|
+
{
|
|
16144
|
+
"docs": {
|
|
16145
|
+
"summary": "state whose failures should trigger cleanup."
|
|
16146
|
+
},
|
|
16147
|
+
"name": "state",
|
|
16148
|
+
"type": {
|
|
16149
|
+
"union": {
|
|
16150
|
+
"types": [
|
|
16151
|
+
{
|
|
16152
|
+
"fqn": "aws-cdk-lib.aws_stepfunctions.TaskStateBase"
|
|
16153
|
+
},
|
|
16154
|
+
{
|
|
16155
|
+
"fqn": "aws-cdk-lib.aws_stepfunctions.Parallel"
|
|
16156
|
+
},
|
|
16157
|
+
{
|
|
16158
|
+
"fqn": "aws-cdk-lib.aws_stepfunctions.Map"
|
|
16159
|
+
}
|
|
16160
|
+
]
|
|
16161
|
+
}
|
|
16162
|
+
}
|
|
16163
|
+
},
|
|
16164
|
+
{
|
|
16165
|
+
"docs": {
|
|
16166
|
+
"summary": "optional subgraph to run after cleanup."
|
|
16167
|
+
},
|
|
16168
|
+
"name": "next",
|
|
16169
|
+
"optional": true,
|
|
16170
|
+
"type": {
|
|
16171
|
+
"fqn": "aws-cdk-lib.aws_stepfunctions.IChainable"
|
|
16172
|
+
}
|
|
16173
|
+
}
|
|
16174
|
+
]
|
|
16175
|
+
}
|
|
16176
|
+
],
|
|
16177
|
+
"name": "IRunnerRuntimeParameters",
|
|
16178
|
+
"properties": [
|
|
16011
16179
|
{
|
|
16012
16180
|
"abstract": true,
|
|
16013
16181
|
"docs": {
|
|
16182
|
+
"remarks": "Most of the time this will be github.com but for self-hosted GitHub instances, this will be different.",
|
|
16014
16183
|
"stability": "experimental",
|
|
16015
|
-
"summary": "Path to
|
|
16184
|
+
"summary": "Path to GitHub domain."
|
|
16185
|
+
},
|
|
16186
|
+
"immutable": true,
|
|
16187
|
+
"locationInModule": {
|
|
16188
|
+
"filename": "src/providers/common.ts",
|
|
16189
|
+
"line": 359
|
|
16190
|
+
},
|
|
16191
|
+
"name": "githubDomainPath",
|
|
16192
|
+
"type": {
|
|
16193
|
+
"primitive": "string"
|
|
16194
|
+
}
|
|
16195
|
+
},
|
|
16196
|
+
{
|
|
16197
|
+
"abstract": true,
|
|
16198
|
+
"docs": {
|
|
16199
|
+
"stability": "experimental",
|
|
16200
|
+
"summary": "Path to comma-separated labels string to use for runner."
|
|
16201
|
+
},
|
|
16202
|
+
"immutable": true,
|
|
16203
|
+
"locationInModule": {
|
|
16204
|
+
"filename": "src/providers/common.ts",
|
|
16205
|
+
"line": 379
|
|
16206
|
+
},
|
|
16207
|
+
"name": "labelsPath",
|
|
16208
|
+
"type": {
|
|
16209
|
+
"primitive": "string"
|
|
16210
|
+
}
|
|
16211
|
+
},
|
|
16212
|
+
{
|
|
16213
|
+
"abstract": true,
|
|
16214
|
+
"docs": {
|
|
16215
|
+
"stability": "experimental",
|
|
16216
|
+
"summary": "Path to repository owner name."
|
|
16217
|
+
},
|
|
16218
|
+
"immutable": true,
|
|
16219
|
+
"locationInModule": {
|
|
16220
|
+
"filename": "src/providers/common.ts",
|
|
16221
|
+
"line": 364
|
|
16222
|
+
},
|
|
16223
|
+
"name": "ownerPath",
|
|
16224
|
+
"type": {
|
|
16225
|
+
"primitive": "string"
|
|
16226
|
+
}
|
|
16227
|
+
},
|
|
16228
|
+
{
|
|
16229
|
+
"abstract": true,
|
|
16230
|
+
"docs": {
|
|
16231
|
+
"stability": "experimental",
|
|
16232
|
+
"summary": "Repository or organization URL to register runner at."
|
|
16233
|
+
},
|
|
16234
|
+
"immutable": true,
|
|
16235
|
+
"locationInModule": {
|
|
16236
|
+
"filename": "src/providers/common.ts",
|
|
16237
|
+
"line": 374
|
|
16238
|
+
},
|
|
16239
|
+
"name": "registrationUrl",
|
|
16240
|
+
"type": {
|
|
16241
|
+
"primitive": "string"
|
|
16242
|
+
}
|
|
16243
|
+
},
|
|
16244
|
+
{
|
|
16245
|
+
"abstract": true,
|
|
16246
|
+
"docs": {
|
|
16247
|
+
"stability": "experimental",
|
|
16248
|
+
"summary": "Path to repository name."
|
|
16249
|
+
},
|
|
16250
|
+
"immutable": true,
|
|
16251
|
+
"locationInModule": {
|
|
16252
|
+
"filename": "src/providers/common.ts",
|
|
16253
|
+
"line": 369
|
|
16254
|
+
},
|
|
16255
|
+
"name": "repoPath",
|
|
16256
|
+
"type": {
|
|
16257
|
+
"primitive": "string"
|
|
16258
|
+
}
|
|
16259
|
+
},
|
|
16260
|
+
{
|
|
16261
|
+
"abstract": true,
|
|
16262
|
+
"docs": {
|
|
16263
|
+
"remarks": "We specifically set the name to make troubleshooting easier.",
|
|
16264
|
+
"stability": "experimental",
|
|
16265
|
+
"summary": "Path to desired runner name."
|
|
16266
|
+
},
|
|
16267
|
+
"immutable": true,
|
|
16268
|
+
"locationInModule": {
|
|
16269
|
+
"filename": "src/providers/common.ts",
|
|
16270
|
+
"line": 354
|
|
16271
|
+
},
|
|
16272
|
+
"name": "runnerNamePath",
|
|
16273
|
+
"type": {
|
|
16274
|
+
"primitive": "string"
|
|
16275
|
+
}
|
|
16276
|
+
},
|
|
16277
|
+
{
|
|
16278
|
+
"abstract": true,
|
|
16279
|
+
"docs": {
|
|
16280
|
+
"stability": "experimental",
|
|
16281
|
+
"summary": "Path to runner token used to register token."
|
|
16282
|
+
},
|
|
16283
|
+
"immutable": true,
|
|
16284
|
+
"locationInModule": {
|
|
16285
|
+
"filename": "src/providers/common.ts",
|
|
16286
|
+
"line": 349
|
|
16287
|
+
},
|
|
16288
|
+
"name": "runnerTokenPath",
|
|
16289
|
+
"type": {
|
|
16290
|
+
"primitive": "string"
|
|
16291
|
+
}
|
|
16292
|
+
}
|
|
16293
|
+
],
|
|
16294
|
+
"symbolId": "src/providers/common:IRunnerRuntimeParameters"
|
|
16295
|
+
},
|
|
16296
|
+
"@cloudsnorkel/cdk-github-runners.ImageBuilderAsset": {
|
|
16297
|
+
"assembly": "@cloudsnorkel/cdk-github-runners",
|
|
16298
|
+
"datatype": true,
|
|
16299
|
+
"docs": {
|
|
16300
|
+
"stability": "experimental",
|
|
16301
|
+
"summary": "An asset including file or directory to place inside the built image."
|
|
16302
|
+
},
|
|
16303
|
+
"fqn": "@cloudsnorkel/cdk-github-runners.ImageBuilderAsset",
|
|
16304
|
+
"kind": "interface",
|
|
16305
|
+
"locationInModule": {
|
|
16306
|
+
"filename": "src/image-builders/aws-image-builder/builder.ts",
|
|
16307
|
+
"line": 97
|
|
16308
|
+
},
|
|
16309
|
+
"name": "ImageBuilderAsset",
|
|
16310
|
+
"properties": [
|
|
16311
|
+
{
|
|
16312
|
+
"abstract": true,
|
|
16313
|
+
"docs": {
|
|
16314
|
+
"stability": "experimental",
|
|
16315
|
+
"summary": "Asset to place in the image."
|
|
16316
|
+
},
|
|
16317
|
+
"immutable": true,
|
|
16318
|
+
"locationInModule": {
|
|
16319
|
+
"filename": "src/image-builders/aws-image-builder/builder.ts",
|
|
16320
|
+
"line": 106
|
|
16321
|
+
},
|
|
16322
|
+
"name": "asset",
|
|
16323
|
+
"type": {
|
|
16324
|
+
"fqn": "aws-cdk-lib.aws_s3_assets.Asset"
|
|
16325
|
+
}
|
|
16326
|
+
},
|
|
16327
|
+
{
|
|
16328
|
+
"abstract": true,
|
|
16329
|
+
"docs": {
|
|
16330
|
+
"stability": "experimental",
|
|
16331
|
+
"summary": "Path to place asset in the image."
|
|
16016
16332
|
},
|
|
16017
16333
|
"immutable": true,
|
|
16018
16334
|
"locationInModule": {
|
|
@@ -16595,7 +16911,7 @@
|
|
|
16595
16911
|
},
|
|
16596
16912
|
"name": "parameters",
|
|
16597
16913
|
"type": {
|
|
16598
|
-
"fqn": "@cloudsnorkel/cdk-github-runners.
|
|
16914
|
+
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerRuntimeParameters"
|
|
16599
16915
|
}
|
|
16600
16916
|
}
|
|
16601
16917
|
],
|
|
@@ -16632,7 +16948,7 @@
|
|
|
16632
16948
|
},
|
|
16633
16949
|
"locationInModule": {
|
|
16634
16950
|
"filename": "src/providers/common.ts",
|
|
16635
|
-
"line":
|
|
16951
|
+
"line": 677
|
|
16636
16952
|
},
|
|
16637
16953
|
"name": "labelsFromProperties",
|
|
16638
16954
|
"parameters": [
|
|
@@ -16699,6 +17015,28 @@
|
|
|
16699
17015
|
"fqn": "@cloudsnorkel/cdk-github-runners.IRunnerProviderStatus"
|
|
16700
17016
|
}
|
|
16701
17017
|
}
|
|
17018
|
+
},
|
|
17019
|
+
{
|
|
17020
|
+
"docs": {
|
|
17021
|
+
"stability": "experimental",
|
|
17022
|
+
"summary": "Override to inject static strings into `$.consts` on the orchestrator state machine."
|
|
17023
|
+
},
|
|
17024
|
+
"locationInModule": {
|
|
17025
|
+
"filename": "src/providers/common.ts",
|
|
17026
|
+
"line": 673
|
|
17027
|
+
},
|
|
17028
|
+
"name": "stepFunctionConstants",
|
|
17029
|
+
"overrides": "@cloudsnorkel/cdk-github-runners.IRunnerProvider",
|
|
17030
|
+
"returns": {
|
|
17031
|
+
"type": {
|
|
17032
|
+
"collection": {
|
|
17033
|
+
"elementtype": {
|
|
17034
|
+
"primitive": "string"
|
|
17035
|
+
},
|
|
17036
|
+
"kind": "map"
|
|
17037
|
+
}
|
|
17038
|
+
}
|
|
17039
|
+
}
|
|
16702
17040
|
}
|
|
16703
17041
|
],
|
|
16704
17042
|
"name": "LambdaRunnerProvider",
|
|
@@ -17431,7 +17769,7 @@
|
|
|
17431
17769
|
"kind": "interface",
|
|
17432
17770
|
"locationInModule": {
|
|
17433
17771
|
"filename": "src/runner.ts",
|
|
17434
|
-
"line":
|
|
17772
|
+
"line": 215
|
|
17435
17773
|
},
|
|
17436
17774
|
"name": "LogOptions",
|
|
17437
17775
|
"properties": [
|
|
@@ -17445,7 +17783,7 @@
|
|
|
17445
17783
|
"immutable": true,
|
|
17446
17784
|
"locationInModule": {
|
|
17447
17785
|
"filename": "src/runner.ts",
|
|
17448
|
-
"line":
|
|
17786
|
+
"line": 226
|
|
17449
17787
|
},
|
|
17450
17788
|
"name": "includeExecutionData",
|
|
17451
17789
|
"optional": true,
|
|
@@ -17463,7 +17801,7 @@
|
|
|
17463
17801
|
"immutable": true,
|
|
17464
17802
|
"locationInModule": {
|
|
17465
17803
|
"filename": "src/runner.ts",
|
|
17466
|
-
"line":
|
|
17804
|
+
"line": 233
|
|
17467
17805
|
},
|
|
17468
17806
|
"name": "level",
|
|
17469
17807
|
"optional": true,
|
|
@@ -17480,7 +17818,7 @@
|
|
|
17480
17818
|
"immutable": true,
|
|
17481
17819
|
"locationInModule": {
|
|
17482
17820
|
"filename": "src/runner.ts",
|
|
17483
|
-
"line":
|
|
17821
|
+
"line": 219
|
|
17484
17822
|
},
|
|
17485
17823
|
"name": "logGroupName",
|
|
17486
17824
|
"optional": true,
|
|
@@ -17499,7 +17837,7 @@
|
|
|
17499
17837
|
"immutable": true,
|
|
17500
17838
|
"locationInModule": {
|
|
17501
17839
|
"filename": "src/runner.ts",
|
|
17502
|
-
"line":
|
|
17840
|
+
"line": 242
|
|
17503
17841
|
},
|
|
17504
17842
|
"name": "logRetention",
|
|
17505
17843
|
"optional": true,
|
|
@@ -19562,139 +19900,6 @@
|
|
|
19562
19900
|
],
|
|
19563
19901
|
"symbolId": "src/providers/common:RunnerProviderProps"
|
|
19564
19902
|
},
|
|
19565
|
-
"@cloudsnorkel/cdk-github-runners.RunnerRuntimeParameters": {
|
|
19566
|
-
"assembly": "@cloudsnorkel/cdk-github-runners",
|
|
19567
|
-
"datatype": true,
|
|
19568
|
-
"docs": {
|
|
19569
|
-
"remarks": "```sh\n./config.sh --unattended --url \"{REGISTRATION_URL}\" --token \"${RUNNER_TOKEN}\" --ephemeral --work _work --labels \"${RUNNER_LABEL}\" --name \"${RUNNER_NAME}\" --disableupdate\n```\n\nAll parameters are specified as step function paths and therefore must be used only in step function task parameters.",
|
|
19570
|
-
"stability": "experimental",
|
|
19571
|
-
"summary": "Workflow job parameters as parsed from the webhook event. Pass these into your runner executor and run something like:."
|
|
19572
|
-
},
|
|
19573
|
-
"fqn": "@cloudsnorkel/cdk-github-runners.RunnerRuntimeParameters",
|
|
19574
|
-
"kind": "interface",
|
|
19575
|
-
"locationInModule": {
|
|
19576
|
-
"filename": "src/providers/common.ts",
|
|
19577
|
-
"line": 345
|
|
19578
|
-
},
|
|
19579
|
-
"name": "RunnerRuntimeParameters",
|
|
19580
|
-
"properties": [
|
|
19581
|
-
{
|
|
19582
|
-
"abstract": true,
|
|
19583
|
-
"docs": {
|
|
19584
|
-
"remarks": "Most of the time this will be github.com but for self-hosted GitHub instances, this will be different.",
|
|
19585
|
-
"stability": "experimental",
|
|
19586
|
-
"summary": "Path to GitHub domain."
|
|
19587
|
-
},
|
|
19588
|
-
"immutable": true,
|
|
19589
|
-
"locationInModule": {
|
|
19590
|
-
"filename": "src/providers/common.ts",
|
|
19591
|
-
"line": 359
|
|
19592
|
-
},
|
|
19593
|
-
"name": "githubDomainPath",
|
|
19594
|
-
"type": {
|
|
19595
|
-
"primitive": "string"
|
|
19596
|
-
}
|
|
19597
|
-
},
|
|
19598
|
-
{
|
|
19599
|
-
"abstract": true,
|
|
19600
|
-
"docs": {
|
|
19601
|
-
"stability": "experimental",
|
|
19602
|
-
"summary": "Path to comma-separated labels string to use for runner."
|
|
19603
|
-
},
|
|
19604
|
-
"immutable": true,
|
|
19605
|
-
"locationInModule": {
|
|
19606
|
-
"filename": "src/providers/common.ts",
|
|
19607
|
-
"line": 379
|
|
19608
|
-
},
|
|
19609
|
-
"name": "labelsPath",
|
|
19610
|
-
"type": {
|
|
19611
|
-
"primitive": "string"
|
|
19612
|
-
}
|
|
19613
|
-
},
|
|
19614
|
-
{
|
|
19615
|
-
"abstract": true,
|
|
19616
|
-
"docs": {
|
|
19617
|
-
"stability": "experimental",
|
|
19618
|
-
"summary": "Path to repository owner name."
|
|
19619
|
-
},
|
|
19620
|
-
"immutable": true,
|
|
19621
|
-
"locationInModule": {
|
|
19622
|
-
"filename": "src/providers/common.ts",
|
|
19623
|
-
"line": 364
|
|
19624
|
-
},
|
|
19625
|
-
"name": "ownerPath",
|
|
19626
|
-
"type": {
|
|
19627
|
-
"primitive": "string"
|
|
19628
|
-
}
|
|
19629
|
-
},
|
|
19630
|
-
{
|
|
19631
|
-
"abstract": true,
|
|
19632
|
-
"docs": {
|
|
19633
|
-
"stability": "experimental",
|
|
19634
|
-
"summary": "Repository or organization URL to register runner at."
|
|
19635
|
-
},
|
|
19636
|
-
"immutable": true,
|
|
19637
|
-
"locationInModule": {
|
|
19638
|
-
"filename": "src/providers/common.ts",
|
|
19639
|
-
"line": 374
|
|
19640
|
-
},
|
|
19641
|
-
"name": "registrationUrl",
|
|
19642
|
-
"type": {
|
|
19643
|
-
"primitive": "string"
|
|
19644
|
-
}
|
|
19645
|
-
},
|
|
19646
|
-
{
|
|
19647
|
-
"abstract": true,
|
|
19648
|
-
"docs": {
|
|
19649
|
-
"stability": "experimental",
|
|
19650
|
-
"summary": "Path to repository name."
|
|
19651
|
-
},
|
|
19652
|
-
"immutable": true,
|
|
19653
|
-
"locationInModule": {
|
|
19654
|
-
"filename": "src/providers/common.ts",
|
|
19655
|
-
"line": 369
|
|
19656
|
-
},
|
|
19657
|
-
"name": "repoPath",
|
|
19658
|
-
"type": {
|
|
19659
|
-
"primitive": "string"
|
|
19660
|
-
}
|
|
19661
|
-
},
|
|
19662
|
-
{
|
|
19663
|
-
"abstract": true,
|
|
19664
|
-
"docs": {
|
|
19665
|
-
"remarks": "We specifically set the name to make troubleshooting easier.",
|
|
19666
|
-
"stability": "experimental",
|
|
19667
|
-
"summary": "Path to desired runner name."
|
|
19668
|
-
},
|
|
19669
|
-
"immutable": true,
|
|
19670
|
-
"locationInModule": {
|
|
19671
|
-
"filename": "src/providers/common.ts",
|
|
19672
|
-
"line": 354
|
|
19673
|
-
},
|
|
19674
|
-
"name": "runnerNamePath",
|
|
19675
|
-
"type": {
|
|
19676
|
-
"primitive": "string"
|
|
19677
|
-
}
|
|
19678
|
-
},
|
|
19679
|
-
{
|
|
19680
|
-
"abstract": true,
|
|
19681
|
-
"docs": {
|
|
19682
|
-
"stability": "experimental",
|
|
19683
|
-
"summary": "Path to runner token used to register token."
|
|
19684
|
-
},
|
|
19685
|
-
"immutable": true,
|
|
19686
|
-
"locationInModule": {
|
|
19687
|
-
"filename": "src/providers/common.ts",
|
|
19688
|
-
"line": 349
|
|
19689
|
-
},
|
|
19690
|
-
"name": "runnerTokenPath",
|
|
19691
|
-
"type": {
|
|
19692
|
-
"primitive": "string"
|
|
19693
|
-
}
|
|
19694
|
-
}
|
|
19695
|
-
],
|
|
19696
|
-
"symbolId": "src/providers/common:RunnerRuntimeParameters"
|
|
19697
|
-
},
|
|
19698
19903
|
"@cloudsnorkel/cdk-github-runners.RunnerVersion": {
|
|
19699
19904
|
"assembly": "@cloudsnorkel/cdk-github-runners",
|
|
19700
19905
|
"docs": {
|
|
@@ -19823,8 +20028,8 @@
|
|
|
19823
20028
|
"assembly": "@cloudsnorkel/cdk-github-runners",
|
|
19824
20029
|
"base": "constructs.Construct",
|
|
19825
20030
|
"docs": {
|
|
19826
|
-
"
|
|
19827
|
-
"
|
|
20031
|
+
"remarks": "Runners will be provisioned using the specified provider and registered in the specified repository or organization.\n\nRegistration level must match the one selected during setup.",
|
|
20032
|
+
"see": "https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md\n\n## Limitations\n\n- **No deployment-fill**: Unlike `AlwaysOnWarmRunner`, scheduled warm runners do not get an initial\nfill on deploy. The first fill happens at the next schedule occurrence. If you deploy at 1pm for\na 2pm schedule, runners will not appear until 2pm.\n- Jobs will still trigger provisioning of on-demand runners, even if a warm runner ends up being used.\n- You may briefly see more than `count` runners when changing config or at rotation.\n- To remove: set `count` to 0, deploy, wait for warm runners to stop, then remove and deploy again.\nIf you don't follow this procedure, warm runners may linger until they expire.\n- Provider failures or timeouts (like Lambda provider timing out after 15 minutes) will result in a\ngap in coverage until the retry succeeds. Current retry mechanism has built-in back-off rate and\ncan be tweaked using `retryOptions`. This will be improved in the future.\n\n```typescript\n// Cron: fill at 1pm on weekdays\nnew ScheduledWarmRunner(stack, 'Business Hours', {\nrunners,\nprovider: myProvider,\ncount: 3,\nowner: 'my-org',\nrepo: 'my-repo',\nschedule: events.Schedule.cron({ hour: '13', minute: '0', weekDay: 'MON-FRI' }),\nduration: cdk.Duration.hours(2),\n});\n```\n\n```typescript\n// Rate: fill every 12 hours\nnew ScheduledWarmRunner(stack, 'Every 12 Hours', {\nrunners,\nprovider: myProvider,\ncount: 2,\nowner: 'my-org',\nrepo: 'my-repo',\nschedule: events.Schedule.rate(cdk.Duration.hours(5)),\nduration: cdk.Duration.hours(12),\n});\n```",
|
|
19828
20033
|
"stability": "experimental",
|
|
19829
20034
|
"summary": "Warm runners active during a time window specified by start time (`schedule`) and duration (`duration`)."
|
|
19830
20035
|
},
|
|
@@ -19835,7 +20040,7 @@
|
|
|
19835
20040
|
},
|
|
19836
20041
|
"locationInModule": {
|
|
19837
20042
|
"filename": "src/warm-runner.ts",
|
|
19838
|
-
"line":
|
|
20043
|
+
"line": 283
|
|
19839
20044
|
},
|
|
19840
20045
|
"parameters": [
|
|
19841
20046
|
{
|
|
@@ -19861,7 +20066,7 @@
|
|
|
19861
20066
|
"kind": "class",
|
|
19862
20067
|
"locationInModule": {
|
|
19863
20068
|
"filename": "src/warm-runner.ts",
|
|
19864
|
-
"line":
|
|
20069
|
+
"line": 276
|
|
19865
20070
|
},
|
|
19866
20071
|
"name": "ScheduledWarmRunner",
|
|
19867
20072
|
"symbolId": "src/warm-runner:ScheduledWarmRunner"
|
|
@@ -19877,7 +20082,7 @@
|
|
|
19877
20082
|
"kind": "interface",
|
|
19878
20083
|
"locationInModule": {
|
|
19879
20084
|
"filename": "src/warm-runner.ts",
|
|
19880
|
-
"line":
|
|
20085
|
+
"line": 64
|
|
19881
20086
|
},
|
|
19882
20087
|
"name": "ScheduledWarmRunnerProps",
|
|
19883
20088
|
"properties": [
|
|
@@ -19907,7 +20112,7 @@
|
|
|
19907
20112
|
"immutable": true,
|
|
19908
20113
|
"locationInModule": {
|
|
19909
20114
|
"filename": "src/warm-runner.ts",
|
|
19910
|
-
"line":
|
|
20115
|
+
"line": 74
|
|
19911
20116
|
},
|
|
19912
20117
|
"name": "duration",
|
|
19913
20118
|
"type": {
|
|
@@ -19981,7 +20186,7 @@
|
|
|
19981
20186
|
"immutable": true,
|
|
19982
20187
|
"locationInModule": {
|
|
19983
20188
|
"filename": "src/warm-runner.ts",
|
|
19984
|
-
"line":
|
|
20189
|
+
"line": 68
|
|
19985
20190
|
},
|
|
19986
20191
|
"name": "schedule",
|
|
19987
20192
|
"type": {
|
|
@@ -19992,14 +20197,15 @@
|
|
|
19992
20197
|
"abstract": true,
|
|
19993
20198
|
"docs": {
|
|
19994
20199
|
"default": "'repo'",
|
|
19995
|
-
"remarks": "Choose\n'org' for org-wide runners, 'repo' for repo-level. See the setup wizard
|
|
20200
|
+
"remarks": "Choose\n'org' for org-wide runners, 'repo' for repo-level. See the setup wizard for choosing repo vs org.",
|
|
20201
|
+
"see": "https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md",
|
|
19996
20202
|
"stability": "experimental",
|
|
19997
20203
|
"summary": "Registration level β must match how your runners are set up in GitHub."
|
|
19998
20204
|
},
|
|
19999
20205
|
"immutable": true,
|
|
20000
20206
|
"locationInModule": {
|
|
20001
20207
|
"filename": "src/warm-runner.ts",
|
|
20002
|
-
"line":
|
|
20208
|
+
"line": 48
|
|
20003
20209
|
},
|
|
20004
20210
|
"name": "registrationLevel",
|
|
20005
20211
|
"optional": true,
|
|
@@ -20017,7 +20223,7 @@
|
|
|
20017
20223
|
"immutable": true,
|
|
20018
20224
|
"locationInModule": {
|
|
20019
20225
|
"filename": "src/warm-runner.ts",
|
|
20020
|
-
"line":
|
|
20226
|
+
"line": 53
|
|
20021
20227
|
},
|
|
20022
20228
|
"name": "repo",
|
|
20023
20229
|
"optional": true,
|
|
@@ -20285,7 +20491,7 @@
|
|
|
20285
20491
|
"kind": "interface",
|
|
20286
20492
|
"locationInModule": {
|
|
20287
20493
|
"filename": "src/providers/common.ts",
|
|
20288
|
-
"line":
|
|
20494
|
+
"line": 626
|
|
20289
20495
|
},
|
|
20290
20496
|
"name": "StorageOptions",
|
|
20291
20497
|
"properties": [
|
|
@@ -20301,7 +20507,7 @@
|
|
|
20301
20507
|
"immutable": true,
|
|
20302
20508
|
"locationInModule": {
|
|
20303
20509
|
"filename": "src/providers/common.ts",
|
|
20304
|
-
"line":
|
|
20510
|
+
"line": 647
|
|
20305
20511
|
},
|
|
20306
20512
|
"name": "iops",
|
|
20307
20513
|
"optional": true,
|
|
@@ -20320,7 +20526,7 @@
|
|
|
20320
20526
|
"immutable": true,
|
|
20321
20527
|
"locationInModule": {
|
|
20322
20528
|
"filename": "src/providers/common.ts",
|
|
20323
|
-
"line":
|
|
20529
|
+
"line": 655
|
|
20324
20530
|
},
|
|
20325
20531
|
"name": "throughput",
|
|
20326
20532
|
"optional": true,
|
|
@@ -20339,7 +20545,7 @@
|
|
|
20339
20545
|
"immutable": true,
|
|
20340
20546
|
"locationInModule": {
|
|
20341
20547
|
"filename": "src/providers/common.ts",
|
|
20342
|
-
"line":
|
|
20548
|
+
"line": 633
|
|
20343
20549
|
},
|
|
20344
20550
|
"name": "volumeType",
|
|
20345
20551
|
"optional": true,
|
|
@@ -20361,7 +20567,7 @@
|
|
|
20361
20567
|
"kind": "interface",
|
|
20362
20568
|
"locationInModule": {
|
|
20363
20569
|
"filename": "src/providers/composite.ts",
|
|
20364
|
-
"line":
|
|
20570
|
+
"line": 15
|
|
20365
20571
|
},
|
|
20366
20572
|
"name": "WeightedRunnerProvider",
|
|
20367
20573
|
"properties": [
|
|
@@ -20374,7 +20580,7 @@
|
|
|
20374
20580
|
"immutable": true,
|
|
20375
20581
|
"locationInModule": {
|
|
20376
20582
|
"filename": "src/providers/composite.ts",
|
|
20377
|
-
"line":
|
|
20583
|
+
"line": 19
|
|
20378
20584
|
},
|
|
20379
20585
|
"name": "provider",
|
|
20380
20586
|
"type": {
|
|
@@ -20391,7 +20597,7 @@
|
|
|
20391
20597
|
"immutable": true,
|
|
20392
20598
|
"locationInModule": {
|
|
20393
20599
|
"filename": "src/providers/composite.ts",
|
|
20394
|
-
"line":
|
|
20600
|
+
"line": 25
|
|
20395
20601
|
},
|
|
20396
20602
|
"name": "weight",
|
|
20397
20603
|
"type": {
|
|
@@ -20648,6 +20854,6 @@
|
|
|
20648
20854
|
"symbolId": "src/image-builders/aws-image-builder/deprecated/windows-components:WindowsComponents"
|
|
20649
20855
|
}
|
|
20650
20856
|
},
|
|
20651
|
-
"version": "0.15.
|
|
20652
|
-
"fingerprint": "
|
|
20857
|
+
"version": "0.15.1",
|
|
20858
|
+
"fingerprint": "Lk71dLShH+PMTMKLmjAt9sGKRlpS0gynnpicSme5Dts="
|
|
20653
20859
|
}
|