Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
e0c42a3
fix(runner-config): allow optional GitHub App installation IDs
edersonbrilhante Sep 9, 2026
cdaf2e2
docs: auto update terraform docs
github-actions[bot] Sep 9, 2026
5f14d25
test(multi-runner): isolate config selector fixtures
edersonbrilhante Sep 3, 2026
5faa6d4
refactor(multi-runner): derive binary targets from resolved config
edersonbrilhante Sep 3, 2026
52ed8de
fix(scale-set): align provider configuration contracts
edersonbrilhante Sep 4, 2026
13422fd
docs: auto update terraform docs
github-actions[bot] Sep 4, 2026
840f5a5
docs: auto update terraform docs
github-actions[bot] Sep 4, 2026
f934f6a
docs: auto update terraform docs
github-actions[bot] Sep 8, 2026
a09e2b4
docs: auto update terraform docs
github-actions[bot] Sep 8, 2026
1b62023
docs: auto update terraform docs
github-actions[bot] Sep 8, 2026
6699077
feat(examples): demonstrate scale-set orchestration
edersonbrilhante Sep 4, 2026
1f8f42c
ci(terraform): test scale-set example
edersonbrilhante Sep 4, 2026
503a9fd
test(ministack): add scale-set example lane
edersonbrilhante Sep 8, 2026
027bba2
fix(examples): add Linux provider lock hashes
edersonbrilhante Sep 8, 2026
6786db1
test(multi-runner): use scale-set lane without matcher
edersonbrilhante Sep 8, 2026
4e8fa2a
fix(ministack): configure scale-set AMI fixtures
edersonbrilhante Sep 9, 2026
5c20988
fix(scale-set): support Terraform 1.4 validations
edersonbrilhante Sep 9, 2026
d438ecc
fix(ministack): disable v2 runner binary fixtures
edersonbrilhante Sep 9, 2026
b1fcb39
fix(ministack): use API AMI fixtures for multi-runner examples
edersonbrilhante Sep 9, 2026
533dbc4
docs: auto update terraform docs
github-actions[bot] Sep 9, 2026
187bb1e
docs: auto update terraform docs
github-actions[bot] Sep 10, 2026
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
1 change: 1 addition & 0 deletions .github/workflows/ministack.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ jobs:
- ephemeral
- multi-runner
- multi-runner-v2
- multi-runner-scale-set
- termination-watcher
terraform:
- "1.4.0"
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/terraform.yml
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,8 @@ jobs:
"termination-watcher",
"multi-runner",
"multi-runner-v2",
"external-managed-ssm-secrets"
"external-managed-ssm-secrets",
"multi-runner-scale-set"
]
defaults:
run:
Expand Down
93 changes: 93 additions & 0 deletions examples/multi-runner-scale-set/.terraform.lock.hcl

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

85 changes: 85 additions & 0 deletions examples/multi-runner-scale-set/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Multi-runner scale-set example

This example demonstrates the experimental multi-runner v2 interface. Shared
defaults are configured with `global_config*` variables, while
each runner lane uses `multi_runner_config` for its matcher,
runner lifecycle, and compute-provider settings.

The example creates four lanes from one deployment:

- Linux ARM64 Amazon Linux runners.
- Ephemeral Linux x64 Amazon Linux runners with job retry enabled.
- Linux x64 runners managed by a GitHub Actions scale set.
- Windows x64 Server Core 2022 runners.

The v2 interface keeps provider-owned settings inside the selected provider
configuration. For example, VPC and subnet settings are under
`global_config_compute_provider.aws.ec2`, while the per-lane
instance types and AMI filter are under each lane's compute provider block.

The scale-set lane uses `orchestration_provider.scale_set`. Its controller
network is configured under the global scale-set block and its GitHub
installation ID is read from the SSM parameter described by `var.scale_set`.

Configure the GitHub App variables before applying:

```bash
terraform init
terraform apply \
-var='github_app={id="123456",key_base64="..."}' \
-var='scale_set={config_url="https://github.com/example" installation_id_ssm={name="/github/scale-set/installation-id",arn="arn:aws:ssm:eu-west-1:123456789012:parameter/github/scale-set/installation-id"} name="linux-scale-set" id=123}'
```

The `github_app` value is sensitive and should be supplied through a secure
variable source in real deployments rather than committed to configuration.
The scale-set installation ID must already exist in the referenced SSM
parameter and the GitHub App must be installed for the configured URL.

<!-- BEGIN_TF_DOCS -->
## Requirements

| Name | Version |
|------|---------|
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.4.0 |
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 6.33 |
| <a name="requirement_local"></a> [local](#requirement\_local) | ~> 2.0 |
| <a name="requirement_random"></a> [random](#requirement\_random) | ~> 3.0 |

## Providers

| Name | Version |
|------|---------|
| <a name="provider_random"></a> [random](#provider\_random) | 3.9.0 |

## Modules

| Name | Source | Version |
|------|--------|---------|
| <a name="module_base"></a> [base](#module\_base) | ../base | n/a |
| <a name="module_runners"></a> [runners](#module\_runners) | ../../modules/multi-runner | n/a |
| <a name="module_webhook_github_app"></a> [webhook\_github\_app](#module\_webhook\_github\_app) | ../../modules/webhook-github-app | n/a |

## Resources

| Name | Type |
|------|------|
| [random_id.random](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/id) | resource |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_ami"></a> [ami](#input\_ami) | Optional AMI configuration keyed by runner lane. | <pre>map(object({<br/> filter = optional(map(list(string)), { state = ["available"] })<br/> owners = optional(list(string), ["amazon"])<br/> id_ssm_parameter = optional(object({<br/> arn = string<br/> }), null)<br/> kms_key = optional(object({<br/> arn = string<br/> }), null)<br/> }))</pre> | `{}` | no |
| <a name="input_aws_region"></a> [aws\_region](#input\_aws\_region) | AWS region to deploy to. | `string` | `"eu-west-1"` | no |
| <a name="input_environment"></a> [environment](#input\_environment) | Environment name, used as prefix. | `string` | `null` | no |
| <a name="input_github_app"></a> [github\_app](#input\_github\_app) | GitHub App ID and base64-encoded private key. | <pre>object({<br/> id = string<br/> key_base64 = string<br/> })</pre> | n/a | yes |
| <a name="input_runner_binaries_enabled"></a> [runner\_binaries\_enabled](#input\_runner\_binaries\_enabled) | Whether runner binary synchronization is enabled. | `bool` | `true` | no |
| <a name="input_scale_set"></a> [scale\_set](#input\_scale\_set) | GitHub Actions scale-set configuration. | <pre>object({<br/> config_url = string<br/> installation_id_ssm = object({<br/> arn = string<br/> name = string<br/> })<br/> name = string<br/> id = number<br/> runner_group_id = optional(number)<br/> })</pre> | n/a | yes |

## Outputs

| Name | Description |
|------|-------------|
| <a name="output_webhook_endpoint"></a> [webhook\_endpoint](#output\_webhook\_endpoint) | n/a |
| <a name="output_webhook_secret"></a> [webhook\_secret](#output\_webhook\_secret) | n/a |
<!-- END_TF_DOCS -->
Loading
Loading