Nikola Jokic and Copilot App
7833438dd7
Handle scale set messages with parallel workers in the listener
...
The scaleset listener no longer dissects the message it polls. It owns
session management, polling and acking, and hands the whole message to a
single Scale call, so acquiring jobs and recording metrics move to the
only component that still reads them.
That handover is what makes the work parallelisable. The listener used to
replay a message one API call at a time, in a fixed order: every job
started patch, then every job completed, then the scale patch. The job
events touch distinct EphemeralRunners and carry no ordering between
them, so they now run across a bounded worker pool, with the worker that
patches the EphemeralRunnerSet running alongside them.
The one ordering that does matter is kept. deleteIdleEphemeralRunners
skips a runner only once it carries a job request ID, so a patch that
lowers the replica count could offer up a runner that just picked up a
job if it were published while job started patches were still in flight.
The scaling worker therefore waits for the event workers on a scale down,
and only then. A patch that scales up or holds cannot delete anything.
Kubernetes has no bulk write: get, create, update, patch and delete are
single-resource verbs, and deletecollection is the only collection-scoped
mutating verb there is, so N events cannot be collapsed into fewer
requests. Server side apply is a PATCH on one object URI and does not
change that. Issuing the N patches concurrently over the one HTTP/2
connection is the available win; the alternative is writing fewer
objects, which trades N cheap independent writes for one contended,
watch-amplifying, size-bounded write.
The pool size is configurable through listenerConfig.scaler.workers,
alongside the existing qps and burst, and defaults to 10: two calls per
event keeps a full pool well inside the default QPS budget.
Statistics are now cached by the scaler. The listener stopped tracking
them, and a long poll that times out carries no message at all, so
without the cache an idle scale set would stop converging.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
2026-09-18 15:05:54 +02:00
dc12c2d417
Keep the outdated phase until the runner spec itself changes ( #4660 )
...
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com >
2026-09-17 17:03:21 +02:00
9ce3169df3
Let the listener own the EphemeralRunner Running phase transition ( #4646 )
...
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com >
2026-09-15 13:46:40 +02:00
484564e6d6
Defer scale up until the listener publishes a state that accounts for finished runners ( #4642 )
...
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com >
2026-09-11 15:29:02 +02:00
6f89d057c0
Track runner spec updates with an actionable revision ( #4638 )
...
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com >
2026-09-11 12:44:03 +00:00
Nikola Jokic and Copilot App
5581cd0c54
Track AutoscalingRunnerSet updates with metadata.generation ( #4636 )
...
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
2026-09-11 14:38:30 +02:00
Nikola Jokic
7c68e1d318
Set listener qps and burst ( #4558 )
2026-09-08 15:49:58 +02:00
Nikola Jokic
f6a3d738de
Use metrics to display runner statuses instead of status field for EphemeralRunnerSet and AutoscalingRunnerSet ( #4557 )
2026-07-14 19:31:11 +02:00
Nikola Jokic
2fa72b510f
Tag fields with optional allowing patches without issues ( #4528 )
2026-07-10 12:28:10 +02:00
Nikola Jokic
9c50514160
Fix typo and rename status to phase ( #4506 )
2026-06-15 12:51:13 +02:00
Nikola Jokic
767e58e4b1
Upgrade resources in-place, causing 1-1 mapping between autoscaling runner set and ephemeral runner set ( #4516 )
2026-06-09 13:52:37 +02:00
dependabot[bot] and Jiaren Wu
0dc5f8a0c2
Bump the gomod group across 1 directory with 9 updates ( #4508 )
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jiaren Wu <jiaren-wu@github.com >
2026-05-30 00:55:53 +02:00
Nikola Jokic
8ecfbc63bf
Revert "Fix typo and rename status to phase" ( #4505 )
2026-05-22 11:58:48 +02:00
Nikola Jokic
8eb6cbe79f
Fix typo and rename status to phase ( #4466 )
2026-05-13 00:17:08 +02:00
Junya Okabe
053b8f9ae5
Add health and readiness probes to controller manager ( #4459 )
2026-04-29 18:08:46 +02:00
Nikola Jokic
802dc28d38
Add multi-label support to scalesets ( #4408 )
2026-03-19 15:29:40 +01:00
Nikola Jokic and Copilot Autofix powered by AI
9bc1c9e53e
Shutdown the scaleset when runner is deprecated ( #4404 )
...
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com >
2026-03-19 13:30:20 +01:00
Nikola Jokic
276717a04b
Manually bump dependencies since it needs fixes related to the controller runtime API ( #4406 )
2026-03-16 10:09:36 +01:00
Nikola Jokic
1d9f626c53
Allow users to apply labels and annotations to internal resources ( #4400 )
2026-03-12 10:32:54 +01:00
Nikola Jokic
634e42c916
Bump all dependencies ( #4266 )
2025-10-14 13:24:25 +02:00
Nikola Jokic
088e2a3a90
Remove ephemeral runner when exit code != 0 and is patched with the job ( #4239 )
2025-09-17 21:40:37 +02:00
Nikola Jokic
c27541140a
Remove JIT config from ephemeral runner status field ( #4191 )
2025-08-04 12:35:04 +02:00
Alex Hatzenbuhler
a07dce28bb
Remove deprecated preserveUnknownFields from CRDs ( #4135 )
2025-07-24 08:47:34 +02:00
Nikola Jokic
e46c929241
Azure Key Vault integration to resolve secrets ( #4090 )
2025-06-11 15:53:33 +02:00
Nikola Jokic
cae7efa2c6
Create backoff mechanism for failed runners and allow re-creation of failed ephemeral runners ( #4059 )
2025-05-14 15:38:50 +02:00
Nikola Jokic
5a960b5ebb
Create configurable metrics ( #3975 )
2025-03-24 15:27:42 +01:00
Nikola Jokic
fb9b96bf75
Update all dependencies, conforming to the new controller-runtime API ( #3949 )
2025-03-11 15:52:52 +01:00
Nikola Jokic and Francesco Renzi
7a643a5107
Fix overscaling when the controller is much faster then the listener ( #3371 )
...
Co-authored-by: Francesco Renzi <rentziass@gmail.com >
2024-03-20 15:36:12 +01:00
Nikola Jokic
f225fef921
Bump Go version to 1.22.1 ( #3290 )
2024-03-18 12:46:30 +01:00
Nikola Jokic
65fd04540c
Bump go version and all direct dependencies to newest for k8s compatibility ( #2947 )
2023-11-14 16:19:43 +01:00
Yusuke Kuoka
f14dbd68f1
Bump Kubernetes client to 1.26.4 ( #2991 )
2023-10-16 15:45:25 +02:00
Nikola Jokic
2ae39828b2
Ignore summerwind resources in go test until controller version is the same ( #2920 )
2023-09-22 12:35:34 +02:00
Nikola Jokic and Bassem Dghaidi
ea2fb32e20
Extend and generate crds allowing listener pod spec change ( #2758 )
...
Co-authored-by: Bassem Dghaidi <568794+Link-@users.noreply.github.com >
2023-09-14 15:33:29 +02:00
Daniel Hobley
90ea691e72
feat: allow for modifying var-run mount maximum size limit ( #2624 )
2023-05-27 11:47:23 +09:00
Armin Becher and Yusuke Kuoka
34909f0cf1
Fix typo in HorizontalRunnerAutoscaler ( #2563 )
...
Co-authored-by: Yusuke Kuoka <ykuoka@gmail.com >
2023-05-27 11:22:44 +09:00
Sam Greening
a4cf626410
Revert actions-runner-controller image tag in kustomization to latest ( #2522 )
2023-04-21 10:59:34 +09:00
Nikola Jokic
b86af190f7
Extend manager roles to accept ephemeralrunnerset/finalizers ( #2493 )
2023-04-10 08:49:32 +02:00
Nikola Jokic
a804bf8b00
Add ImagePullPolicy to the AutoscalingListener, configurable through Manager env ( #2477 )
2023-04-04 19:07:20 +02:00
cskinfill and Yusuke Kuoka
362fa5d52e
crd: Add enterprise, organization, repository, and runner labels to runnerdeployments print columns ( #2310 )
...
Co-authored-by: Yusuke Kuoka <ykuoka@gmail.com >
2023-03-28 08:43:01 +09:00
Nikola Jokic
babbfc77d5
Surface EphemeralRunnerSet stats to AutoscalingRunnerSet ( #2382 )
2023-03-13 16:16:28 +01:00
Nikola Jokic
a5f98dea75
Refactor main.go and introduce make run-scaleset to be able to run manager locally ( #2337 )
2023-03-10 18:05:51 +01:00
c569304271
Add support for self-signed CA certificates ( #2268 )
...
Co-authored-by: Bassem Dghaidi <568794+Link-@users.noreply.github.com >
Co-authored-by: Nikola Jokic <jokicnikola07@gmail.com >
Co-authored-by: Tingluo Huang <tingluohuang@github.com >
2023-03-09 17:23:32 +00:00
Chris Patterson and TingluoHuang
41f2ca3ed9
Adding parameter to configure the runner set name. ( #2279 )
...
Co-authored-by: TingluoHuang <TingluoHuang@github.com >
2023-03-03 08:36:14 -05:00
6b4250ca90
Add support for proxy ( #2286 )
...
Co-authored-by: Nikola Jokic <jokicnikola07@gmail.com >
Co-authored-by: Tingluo Huang <tingluohuang@github.com >
Co-authored-by: Ferenc Hammerl <fhammerl@github.com >
2023-02-21 17:33:48 +00:00
Tingluo Huang
facae69e0b
Remove un-required permissions for the manager-role of the new AutoScalingRunnerSet ( #2260 )
2023-02-07 12:37:09 -05:00
dependabot[bot] and Yusuke Kuoka
219ba5b477
chore(deps): bump sigs.k8s.io/controller-runtime from 0.13.1 to 0.14.1 ( #2132 )
...
Signed-off-by: dependabot[bot] <support@github.com >
Signed-off-by: Yusuke Kuoka <ykuoka@gmail.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yusuke Kuoka <ykuoka@gmail.com >
2023-01-27 09:23:28 +09:00
Stephane Moser and Yusuke Kuoka
606ed1b28e
Add Repository information to Runner Status ( #2093 )
...
Co-authored-by: Yusuke Kuoka <ykuoka@gmail.com >
2023-01-18 09:09:45 +09:00
622eaa34f8
Introduce new preview auto-scaling mode for ARC. ( #2153 )
...
Co-authored-by: Cory Miller <cory-miller@github.com >
Co-authored-by: Nikola Jokic <nikola-jokic@github.com >
Co-authored-by: Ava Stancu <AvaStancu@github.com >
Co-authored-by: Ferenc Hammerl <fhammerl@github.com >
Co-authored-by: Francesco Renzi <rentziass@github.com >
Co-authored-by: Bassem Dghaidi <Link-@github.com >
2023-01-17 12:06:20 -05:00
Nikola Jokic and Yusuke Kuoka
aa6dab5a9a
Changes to folder structure to allow multigroups and changed go mod name ( #2105 )
...
* Changed folder structure to allow multi group registration
* included actions.github.com directory for resources and controllers
* updated go module to actions/actions-runner-controller
* publish arc packages under actions-runner-controller
* Update charts/actions-runner-controller/docs/UPGRADING.md
Co-authored-by: Yusuke Kuoka <ykuoka@gmail.com >
2022-12-28 09:38:34 +09:00
Nicholas Farley
a389292478
Allow RunnerDeployments to configure dnsPolicy for runners ( #1892 )
...
* Add DnsPolicy field to RunnerPodSpec struct
* Ensure the runnerSpec's DNSPolicy is mirrored to the pod.Spec
* Run `make manifests`
2022-10-05 08:16:11 +09:00