Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,11 +142,12 @@ Join our discord community via [this invite link](https://discord.gg/bxgXW8jJGh)
| <a name="input_github_app"></a> [github\_app](#input\_github\_app) | GitHub app parameters, see your github app.<br/> You can optionally create the SSM parameters yourself and provide the ARN and name here, through the `*_ssm` attributes.<br/> If you chose to provide the configuration values directly here,<br/> please ensure the key is the base64-encoded `.pem` file (the output of `base64 app.private-key.pem`, not the content of `private-key.pem`).<br/> Note: the provided SSM parameters arn and name have a precedence over the actual value (i.e `key_base64_ssm` has a precedence over `key_base64` etc). | <pre>object({<br/> key_base64 = optional(string)<br/> key_base64_ssm = optional(object({<br/> arn = string<br/> name = string<br/> }))<br/> id = optional(string)<br/> id_ssm = optional(object({<br/> arn = string<br/> name = string<br/> }))<br/> webhook_secret = optional(string)<br/> webhook_secret_ssm = optional(object({<br/> arn = string<br/> name = string<br/> }))<br/> })</pre> | n/a | yes |
| <a name="input_iam_overrides"></a> [iam\_overrides](#input\_iam\_overrides) | This map provides the possibility to override some IAM defaults. Note that when using this variable, you are responsible for ensuring the role has necessary permissions to access required resources. `override_instance_profile`: When set to true, uses the instance profile name specified in `instance_profile_name` instead of creating a new instance profile. `override_runner_role`: When set to true, uses the role ARN specified in `runner_role_arn` instead of creating a new IAM role. | <pre>object({<br/> override_instance_profile = optional(bool, null)<br/> instance_profile_name = optional(string, null)<br/> override_runner_role = optional(bool, null)<br/> runner_role_arn = optional(string, null)<br/> })</pre> | <pre>{<br/> "instance_profile_name": null,<br/> "override_instance_profile": false,<br/> "override_runner_role": false,<br/> "runner_role_arn": null<br/>}</pre> | no |
| <a name="input_idle_config"></a> [idle\_config](#input\_idle\_config) | List of time periods, defined as a cron expression, to keep a minimum amount of runners active instead of scaling down to 0. By defining this list you can ensure that in time periods that match the cron expression within 5 seconds a runner is kept idle. | <pre>list(object({<br/> cron = string<br/> timeZone = string<br/> idleCount = number<br/> evictionStrategy = optional(string, "oldest_first")<br/> }))</pre> | `[]` | no |
| <a name="input_instance_allocation_strategy"></a> [instance\_allocation\_strategy](#input\_instance\_allocation\_strategy) | The allocation strategy for spot instances. AWS recommends using `price-capacity-optimized` however the AWS default is `lowest-price`. | `string` | `"lowest-price"` | no |
| <a name="input_instance_allocation_strategy"></a> [instance\_allocation\_strategy](#input\_instance\_allocation\_strategy) | The allocation strategy for creating instances. For spot, AWS recommends `price-capacity-optimized`; for on-demand, use `lowest-price` or `prioritized`. The AWS default is `lowest-price`. | `string` | `"lowest-price"` | no |
| <a name="input_instance_max_spot_price"></a> [instance\_max\_spot\_price](#input\_instance\_max\_spot\_price) | Max price price for spot instances per hour. This variable will be passed to the create fleet as max spot price for the fleet. | `string` | `null` | no |
| <a name="input_instance_profile_path"></a> [instance\_profile\_path](#input\_instance\_profile\_path) | The path that will be added to the instance\_profile, if not set the environment name will be used. | `string` | `null` | no |
| <a name="input_instance_target_capacity_type"></a> [instance\_target\_capacity\_type](#input\_instance\_target\_capacity\_type) | Default lifecycle used for runner instances, can be either `spot` or `on-demand`. | `string` | `"spot"` | no |
| <a name="input_instance_termination_watcher"></a> [instance\_termination\_watcher](#input\_instance\_termination\_watcher) | Configuration for the instance termination watcher. This feature is Beta, changes will not trigger a major release as long in beta.<br/><br/>`enable`: Enable or disable the spot termination watcher.<br/>'features': Enable or disable features of the termination watcher.<br/>`enable_runner_deregistration`: Enable or disable deregistering the runner from GitHub when its EC2 instance is terminated.<br/>`memory_size`: Memory size limit in MB of the lambda.<br/>`s3_key`: S3 key for syncer lambda function. Required if using S3 bucket to specify lambdas.<br/>`s3_object_version`: S3 object version for syncer lambda function. Useful if S3 versioning is enabled on source bucket.<br/>`timeout`: Time out of the lambda in seconds.<br/>`zip`: File location of the lambda zip file. | <pre>object({<br/> enable = optional(bool, false)<br/> features = optional(object({<br/> enable_spot_termination_handler = optional(bool, true)<br/> enable_spot_termination_notification_watcher = optional(bool, true)<br/> }), {})<br/> enable_runner_deregistration = optional(bool, true)<br/> memory_size = optional(number, null)<br/> s3_key = optional(string, null)<br/> s3_object_version = optional(string, null)<br/> timeout = optional(number, null)<br/> zip = optional(string, null)<br/> })</pre> | `{}` | no |
| <a name="input_instance_type_priorities"></a> [instance\_type\_priorities](#input\_instance\_type\_priorities) | A map of instance type to priority for the `prioritized` and `capacity-optimized-prioritized` allocation strategies. Lower numbers mean higher priority. If not provided, priorities are assigned based on the order of `instance_types`. | `map(number)` | `null` | no |
| <a name="input_instance_types"></a> [instance\_types](#input\_instance\_types) | List of instance types for the action runner. Defaults are based on runner\_os (al2023 for linux, macOS Sequoia for osx, Windows Server Core for win). | `list(string)` | <pre>[<br/> "m5.large",<br/> "c5.large"<br/>]</pre> | no |
| <a name="input_job_queue_retention_in_seconds"></a> [job\_queue\_retention\_in\_seconds](#input\_job\_queue\_retention\_in\_seconds) | The number of seconds the job is held in the queue before it is purged. | `number` | `86400` | no |
| <a name="input_job_retry"></a> [job\_retry](#input\_job\_retry) | Experimental! Can be removed / changed without trigger a major release.Configure job retries. The configuration enables job retries (for ephemeral runners). After creating the instances a message will be published to a job retry queue. The job retry check lambda is checking after a delay if the job is queued. If not the message will be published again on the scale-up (build queue). Using this feature can impact the rate limit of the GitHub app.<br/><br/>`enable`: Enable or disable the job retry feature.<br/>`delay_in_seconds`: The delay in seconds before the job retry check lambda will check the job status.<br/>`delay_backoff`: The backoff factor for the delay.<br/>`lambda_memory_size`: Memory size limit in MB for the job retry check lambda.<br/>`lambda_timeout`: Time out of the job retry check lambda in seconds.<br/>`max_attempts`: The maximum number of attempts to retry the job. | <pre>object({<br/> enable = optional(bool, false)<br/> delay_in_seconds = optional(number, 300)<br/> delay_backoff = optional(number, 2)<br/> lambda_memory_size = optional(number, 256)<br/> lambda_timeout = optional(number, 30)<br/> max_attempts = optional(number, 1)<br/> })</pre> | `{}` | no |
Expand Down
2 changes: 1 addition & 1 deletion lambdas/functions/control-plane/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
"@middy/core": "^6.4.5",
"@octokit/auth-app": "8.2.0",
"@octokit/core": "7.0.6",
"@octokit/plugin-retry": "8.0.3",
"@octokit/plugin-retry": "8.1.0",
"@octokit/plugin-throttling": "11.0.3",
"@octokit/rest": "22.0.1",
"cron-parser": "^5.4.0"
Expand Down
2 changes: 1 addition & 1 deletion lambdas/functions/termination-watcher/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"@octokit/auth-app": "8.2.0",
"@octokit/core": "7.0.6",
"@octokit/plugin-throttling": "11.0.3",
"@octokit/request": "^9.2.2",
"@octokit/request": "^10.0.11",
"@octokit/rest": "22.0.1"
},
"nx": {
Expand Down
87 changes: 43 additions & 44 deletions lambdas/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ __metadata:
"@middy/core": "npm:^6.4.5"
"@octokit/auth-app": "npm:8.2.0"
"@octokit/core": "npm:7.0.6"
"@octokit/plugin-retry": "npm:8.0.3"
"@octokit/plugin-retry": "npm:8.1.0"
"@octokit/plugin-throttling": "npm:11.0.3"
"@octokit/rest": "npm:22.0.1"
"@octokit/types": "npm:^16.0.0"
Expand Down Expand Up @@ -205,7 +205,7 @@ __metadata:
"@octokit/auth-app": "npm:8.2.0"
"@octokit/core": "npm:7.0.6"
"@octokit/plugin-throttling": "npm:11.0.3"
"@octokit/request": "npm:^9.2.2"
"@octokit/request": "npm:^10.0.11"
"@octokit/rest": "npm:22.0.1"
"@types/aws-lambda": "npm:^8.10.159"
"@types/node": "npm:^22.19.3"
Expand Down Expand Up @@ -3564,23 +3564,23 @@ __metadata:
languageName: node
linkType: hard

"@octokit/endpoint@npm:^10.1.4":
version: 10.1.4
resolution: "@octokit/endpoint@npm:10.1.4"
"@octokit/endpoint@npm:^11.0.2":
version: 11.0.2
resolution: "@octokit/endpoint@npm:11.0.2"
dependencies:
"@octokit/types": "npm:^14.0.0"
"@octokit/types": "npm:^16.0.0"
universal-user-agent: "npm:^7.0.2"
checksum: 10c0/bf7cca71a05dc4751df658588e32642e59c98768e7509521226b997ea4837e2d16efd35c391231c76d888226f4daf80e6a9f347dee01a69f490253654dada581
checksum: 10c0/878ac12fbccff772968689b4744590677c5a3f12bebe31544832c84761bf1c6be521e8a3af07abffc9455a74dd4d1f350d714fc46fd7ce14a0a2b5f2d4e3a84c
languageName: node
linkType: hard

"@octokit/endpoint@npm:^11.0.2":
version: 11.0.2
resolution: "@octokit/endpoint@npm:11.0.2"
"@octokit/endpoint@npm:^11.0.3":
version: 11.0.3
resolution: "@octokit/endpoint@npm:11.0.3"
dependencies:
"@octokit/types": "npm:^16.0.0"
universal-user-agent: "npm:^7.0.2"
checksum: 10c0/878ac12fbccff772968689b4744590677c5a3f12bebe31544832c84761bf1c6be521e8a3af07abffc9455a74dd4d1f350d714fc46fd7ce14a0a2b5f2d4e3a84c
checksum: 10c0/3f9b67e6923ece5009aebb0dcbae5837fb574bc422561424049a43ead7fea6f132234edb72239d6ec067cf734937a608e4081af81c109de2cb754528f0d00520
languageName: node
linkType: hard

Expand Down Expand Up @@ -3659,16 +3659,16 @@ __metadata:
languageName: node
linkType: hard

"@octokit/plugin-retry@npm:8.0.3":
version: 8.0.3
resolution: "@octokit/plugin-retry@npm:8.0.3"
"@octokit/plugin-retry@npm:8.1.0":
version: 8.1.0
resolution: "@octokit/plugin-retry@npm:8.1.0"
dependencies:
"@octokit/request-error": "npm:^7.0.2"
"@octokit/types": "npm:^16.0.0"
bottleneck: "npm:^2.15.3"
peerDependencies:
"@octokit/core": ">=7"
checksum: 10c0/24d35d85f750f9e3e52f63b8ddd8fc8aa7bdd946c77b9ea4d6894d026c5c2c69109e8de3880a9970c906f624eb777c7d0c0a2072e6d41dadc7b36cce104b978c
checksum: 10c0/9e10676d29ce642eff8e4f7f9aa2fe6d8c5bebdc5ed107d2e6183be5d50699680b4e1d01a6096d4bec959d2337baf38fd5a39e9d541e9b1a28baf648bc0fefaa
languageName: node
linkType: hard

Expand All @@ -3684,15 +3684,6 @@ __metadata:
languageName: node
linkType: hard

"@octokit/request-error@npm:^6.1.8":
version: 6.1.8
resolution: "@octokit/request-error@npm:6.1.8"
dependencies:
"@octokit/types": "npm:^14.0.0"
checksum: 10c0/02aa5bfebb5b1b9e152558b4a6f4f7dcb149b41538778ffe0fce3395fd0da5c0862311a78e94723435667581b2a58a7cefa458cf7aa19ae2948ae419276f7ee1
languageName: node
linkType: hard

"@octokit/request-error@npm:^7.0.0, @octokit/request-error@npm:^7.0.2":
version: 7.0.2
resolution: "@octokit/request-error@npm:7.0.2"
Expand All @@ -3702,6 +3693,20 @@ __metadata:
languageName: node
linkType: hard

"@octokit/request@npm:^10.0.11":
version: 10.0.11
resolution: "@octokit/request@npm:10.0.11"
dependencies:
"@octokit/endpoint": "npm:^11.0.3"
"@octokit/request-error": "npm:^7.0.2"
"@octokit/types": "npm:^16.0.0"
content-type: "npm:^2.0.0"
json-with-bigint: "npm:^3.5.3"
universal-user-agent: "npm:^7.0.2"
checksum: 10c0/ee9782d77faa8e1d8ac2505ff7b18b29e7f9eac6b4a844a5806b478ab2298e8add05d9707079ffb83b8fcfe48b39a9b4af3d6e5188ff77e854b55465ead9db97
languageName: node
linkType: hard

"@octokit/request@npm:^10.0.6":
version: 10.0.6
resolution: "@octokit/request@npm:10.0.6"
Expand All @@ -3715,19 +3720,6 @@ __metadata:
languageName: node
linkType: hard

"@octokit/request@npm:^9.2.2":
version: 9.2.4
resolution: "@octokit/request@npm:9.2.4"
dependencies:
"@octokit/endpoint": "npm:^10.1.4"
"@octokit/request-error": "npm:^6.1.8"
"@octokit/types": "npm:^14.0.0"
fast-content-type-parse: "npm:^2.0.0"
universal-user-agent: "npm:^7.0.2"
checksum: 10c0/783ddf004e89e9738a6b4196c38fc377f166196a9f39a4956c50d675310113cf7a8e1ed1ed3842ae1d222d990231d1361fc8cf96adea2740e7e4caad216f19ab
languageName: node
linkType: hard

"@octokit/rest@npm:22.0.1":
version: 22.0.1
resolution: "@octokit/rest@npm:22.0.1"
Expand Down Expand Up @@ -6552,6 +6544,13 @@ __metadata:
languageName: node
linkType: hard

"content-type@npm:^2.0.0":
version: 2.0.0
resolution: "content-type@npm:2.0.0"
checksum: 10c0/491539fff707d7594b0ca4fabcc084bef2a31ffa754ff0a4f80c4377e3963cff0394317f9271c24087596c97fa675bc123d61fa34ffe65b4904e7d3d3098de72
languageName: node
linkType: hard

"convert-source-map@npm:^2.0.0":
version: 2.0.0
resolution: "convert-source-map@npm:2.0.0"
Expand Down Expand Up @@ -7258,13 +7257,6 @@ __metadata:
languageName: node
linkType: hard

"fast-content-type-parse@npm:^2.0.0":
version: 2.0.1
resolution: "fast-content-type-parse@npm:2.0.1"
checksum: 10c0/e5ff87d75a35ae4cf377df1dca46ec49e7abbdc8513689676ecdef548b94900b50e66e516e64470035d79b9f7010ef15d98c24d8ae803a881363cc59e0715e19
languageName: node
linkType: hard

"fast-content-type-parse@npm:^3.0.0":
version: 3.0.0
resolution: "fast-content-type-parse@npm:3.0.0"
Expand Down Expand Up @@ -8271,6 +8263,13 @@ __metadata:
languageName: node
linkType: hard

"json-with-bigint@npm:^3.5.3":
version: 3.5.8
resolution: "json-with-bigint@npm:3.5.8"
checksum: 10c0/a0c4e37626d74a9a493539f9f9a94855933fa15ea2f028859a787229a42c5f11803db6f94f1ce7b1d89756c1e80a7c1f11006bac266ec7ce819b75701765ca0a
languageName: node
linkType: hard

"json5@npm:^2.2.2, json5@npm:^2.2.3":
version: 2.2.3
resolution: "json5@npm:2.2.3"
Expand Down
2 changes: 1 addition & 1 deletion modules/multi-runner/README.md

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion modules/runners/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,10 +165,11 @@ yarn run dist
| <a name="input_github_app_parameters"></a> [github\_app\_parameters](#input\_github\_app\_parameters) | Parameter Store for GitHub App Parameters. | <pre>object({<br/> key_base64 = map(string)<br/> id = map(string)<br/> })</pre> | n/a | yes |
| <a name="input_iam_overrides"></a> [iam\_overrides](#input\_iam\_overrides) | This map provides the possibility to override some IAM defaults. The following attributes are supported: `instance_profile_name` overrides the instance profile name used in the launch template. `runner_role_arn` overrides the IAM role ARN used for the runner instances. | <pre>object({<br/> override_instance_profile = optional(bool, null)<br/> instance_profile_name = optional(string, null)<br/> override_runner_role = optional(bool, null)<br/> runner_role_arn = optional(string, null)<br/> })</pre> | <pre>{<br/> "instance_profile_name": null,<br/> "override_instance_profile": false,<br/> "override_runner_role": false,<br/> "runner_role_arn": null<br/>}</pre> | no |
| <a name="input_idle_config"></a> [idle\_config](#input\_idle\_config) | List of time period that can be defined as cron expression to keep a minimum amount of runners active instead of scaling down to 0. By defining this list you can ensure that in time periods that match the cron expression within 5 seconds a runner is kept idle. | <pre>list(object({<br/> cron = string<br/> timeZone = string<br/> idleCount = number<br/> evictionStrategy = optional(string, "oldest_first")<br/> }))</pre> | `[]` | no |
| <a name="input_instance_allocation_strategy"></a> [instance\_allocation\_strategy](#input\_instance\_allocation\_strategy) | The allocation strategy for spot instances. AWS recommends to use `capacity-optimized` however the AWS default is `lowest-price`. | `string` | `"lowest-price"` | no |
| <a name="input_instance_allocation_strategy"></a> [instance\_allocation\_strategy](#input\_instance\_allocation\_strategy) | The allocation strategy for creating instances. For spot, AWS recommends `price-capacity-optimized`; for on-demand, use `lowest-price` or `prioritized`. The AWS default is `lowest-price`. | `string` | `"lowest-price"` | no |
| <a name="input_instance_max_spot_price"></a> [instance\_max\_spot\_price](#input\_instance\_max\_spot\_price) | Max price price for spot instances per hour. This variable will be passed to the create fleet as max spot price for the fleet. | `string` | `null` | no |
| <a name="input_instance_profile_path"></a> [instance\_profile\_path](#input\_instance\_profile\_path) | The path that will be added to the instance\_profile, if not set the prefix will be used. | `string` | `null` | no |
| <a name="input_instance_target_capacity_type"></a> [instance\_target\_capacity\_type](#input\_instance\_target\_capacity\_type) | Default lifecycle used runner instances, can be either `spot` or `on-demand`. | `string` | `"spot"` | no |
| <a name="input_instance_type_priorities"></a> [instance\_type\_priorities](#input\_instance\_type\_priorities) | A map of instance type to priority for the `prioritized` and `capacity-optimized-prioritized` allocation strategies. Lower numbers mean higher priority. If not provided, priorities are assigned based on the order of `instance_types`. | `map(number)` | `null` | no |
| <a name="input_instance_types"></a> [instance\_types](#input\_instance\_types) | List of instance types for the action runner. Defaults are based on runner\_os (al2023 for linux, macOS Sequoia for osx, Windows Server Core for win). | `list(string)` | `null` | no |
| <a name="input_job_retry"></a> [job\_retry](#input\_job\_retry) | Configure job retries. The configuration enables job retries (for ephemeral runners). After creating the instances a message will be published to a job retry queue. The job retry check lambda is checking after a delay if the job is queued. If not the message will be published again on the scale-up (build queue). Using this feature can impact the rate limit of the GitHub app.<br/><br/>`enable`: Enable or disable the job retry feature.<br/>`delay_in_seconds`: The delay in seconds before the job retry check lambda will check the job status.<br/>`delay_backoff`: The backoff factor for the delay.<br/>`lambda_memory_size`: Memory size limit in MB for the job retry check lambda.<br/>'lambda\_reserved\_concurrent\_executions': Amount of reserved concurrent executions for the job retry check lambda function. A value of 0 disables lambda from being triggered and -1 removes any concurrency limitations.<br/>`lambda_timeout`: Time out of the job retry check lambda in seconds.<br/>`max_attempts`: The maximum number of attempts to retry the job. | <pre>object({<br/> enable = optional(bool, false)<br/> delay_in_seconds = optional(number, 300)<br/> delay_backoff = optional(number, 2)<br/> lambda_memory_size = optional(number, 256)<br/> lambda_reserved_concurrent_executions = optional(number, 1)<br/><br/> lambda_timeout = optional(number, 30)<br/><br/> max_attempts = optional(number, 1)<br/> })</pre> | `{}` | no |
| <a name="input_key_name"></a> [key\_name](#input\_key\_name) | Key pair name | `string` | `null` | no |
Expand Down
Loading