Actions Runner Controller release 0.14.0
GitHub Actions Runner Controller (ARC) 0.14.0 is now generally available. This release introduces multilabel support for runner scale sets, switches to the actions/scaleset library client, adds resource customization options, and improves listener pod scheduling. To get started, see the ARC documentation.
Multilabel support for runner scale sets
You can now assign multiple labels to a single runner scale set, enabling workflows to target runners based on combined attributes. Previously, ARC only supported one label per scale set, which meant creating separate scale sets for every combination of operating system, hardware tier, network configuration, or compliance zone. With multilabel support, you can define all of these attributes on a single scale set and use them together in your runs-on declarations.
Scaleset library client
ARC now uses the actions/scaleset library as its sole client for communicating with the GitHub Actions service APIs. This release removes the previous internal client in favor of this standalone, publicly available Go package. This gives platform teams and infrastructure providers the ability to build custom autoscaling solutions using the same client that powers ARC.
Custom labels and annotations on internal resources
You can now apply custom Kubernetes labels and annotations to the resources that ARC manages internally, including roles, role bindings, service accounts, and listener pods. Both the gha-runner-scale-set and gha-runner-scale-set-controller Helm charts expose a resource configuration interface for this purpose. You can set metadata globally across all resources using resource.all.metadata or target individual resources for fine-grained control.
Experimental Helm charts
This release introduces experimental rewrites of both the gha-runner-scale-set and gha-runner-scale-set-controller Helm charts. These charts offer a cleaner template structure, a unified interface for annotating and labeling internal resources, and improved configuration for Docker-based runner setups. The experimental charts are available alongside the existing charts for early feedback.
Autoscaling stops for outdated runner sets
ARC can now fully stop autoscaling for a runner set when the runner configuration is outdated. When a runner exits with exit code 7, the controller switches off autoscaling for that runner set, preventing stale runners from provisioning while a new configuration rolls out. This reduces the risk of jobs running in inconsistent environments.
This capability depends on a runner change (exit code 7) that will ship in the next runner release. Due to the runner version support policy, this feature won’t become fully effective until two releases after the runner change ships.
Listener pod defaults to Linux nodes
The listener pod now includes a default nodeSelector of kubernetes.io/os: linux. In mixed-OS clusters, this prevents the listener from accidentally scheduling on a Windows node, where it would fail due to platform incompatibility. You can still override or remove this default through the listenerTemplate configuration.