mirror of
https://github.com/actions-runner-controller/actions-runner-controller.git
synced 2026-09-30 04:11:57 +02:00
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>
213 lines
11 KiB
AMPL
213 lines
11 KiB
AMPL
module github.com/actions/actions-runner-controller
|
|
|
|
go 1.26.3
|
|
|
|
require (
|
|
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.22.0
|
|
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.14.0
|
|
github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.5.0
|
|
github.com/actions/scaleset v0.4.1-0.20260916214619-e6daac702355
|
|
github.com/bradleyfalzon/ghinstallation/v2 v2.19.0
|
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
|
|
github.com/evanphx/json-patch v5.9.11+incompatible
|
|
github.com/go-logr/logr v1.4.3
|
|
github.com/google/go-cmp v0.7.0
|
|
github.com/google/go-github/v52 v52.0.0
|
|
github.com/google/uuid v1.6.0
|
|
github.com/gorilla/mux v1.8.1
|
|
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79
|
|
github.com/gruntwork-io/terratest v1.0.0
|
|
github.com/hashicorp/go-retryablehttp v0.7.8
|
|
github.com/kelseyhightower/envconfig v1.4.0
|
|
github.com/onsi/ginkgo v1.16.5
|
|
github.com/onsi/ginkgo/v2 v2.31.0
|
|
github.com/onsi/gomega v1.42.0
|
|
github.com/prometheus/client_golang v1.23.2
|
|
github.com/prometheus/client_model v0.6.2
|
|
github.com/stretchr/testify v1.11.1
|
|
github.com/teambition/rrule-go v1.8.2
|
|
go.uber.org/multierr v1.11.0
|
|
go.uber.org/zap v1.28.0
|
|
golang.org/x/net v0.55.0
|
|
golang.org/x/oauth2 v0.36.0
|
|
golang.org/x/sync v0.21.0
|
|
gomodules.xyz/jsonpatch/v2 v2.5.0
|
|
gopkg.in/yaml.v2 v2.4.0
|
|
k8s.io/api v0.36.2
|
|
k8s.io/apimachinery v0.36.2
|
|
k8s.io/client-go v0.36.2
|
|
k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2
|
|
sigs.k8s.io/controller-runtime v0.24.1
|
|
sigs.k8s.io/yaml v1.6.0
|
|
)
|
|
|
|
require (
|
|
filippo.io/edwards25519 v1.2.0 // indirect
|
|
github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0 // indirect
|
|
github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.2.0 // indirect
|
|
github.com/AzureAD/microsoft-authentication-library-for-go v1.7.2 // indirect
|
|
github.com/BurntSushi/toml v1.6.0 // indirect
|
|
github.com/Masterminds/semver/v3 v3.4.0 // indirect
|
|
github.com/ProtonMail/go-crypto v1.4.0 // indirect
|
|
github.com/aws/aws-sdk-go-v2 v1.41.6 // indirect
|
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 // indirect
|
|
github.com/aws/aws-sdk-go-v2/config v1.32.16 // indirect
|
|
github.com/aws/aws-sdk-go-v2/credentials v1.19.15 // indirect
|
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22 // indirect
|
|
github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager v0.1.17 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/acm v1.38.2 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.66.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.69.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.57.2 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/ec2 v1.297.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/ecr v1.57.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/ecs v1.78.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/iam v1.53.8 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.11.22 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/kms v1.50.5 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/lambda v1.89.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/rds v1.118.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/route53 v1.62.6 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.99.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.41.6 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/signin v1.0.10 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/sns v1.39.16 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/sqs v1.42.26 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/ssm v1.68.5 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/sso v1.30.16 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/sts v1.42.0 // indirect
|
|
github.com/aws/smithy-go v1.25.0 // indirect
|
|
github.com/beorn7/perks v1.0.1 // indirect
|
|
github.com/boombuler/barcode v1.1.0 // indirect
|
|
github.com/brunoga/deep v1.2.4 // indirect
|
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
|
github.com/cloudflare/circl v1.6.3 // indirect
|
|
github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
|
|
github.com/emicklei/go-restful/v3 v3.13.0 // indirect
|
|
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
|
|
github.com/fatih/structs v1.1.0 // indirect
|
|
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
|
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
|
|
github.com/go-errors/errors v1.5.1 // indirect
|
|
github.com/go-logr/zapr v1.3.0 // indirect
|
|
github.com/go-openapi/jsonpointer v0.22.5 // indirect
|
|
github.com/go-openapi/jsonreference v0.21.5 // indirect
|
|
github.com/go-openapi/swag v0.25.5 // indirect
|
|
github.com/go-openapi/swag/cmdutils v0.25.5 // indirect
|
|
github.com/go-openapi/swag/conv v0.25.5 // indirect
|
|
github.com/go-openapi/swag/fileutils v0.25.5 // indirect
|
|
github.com/go-openapi/swag/jsonname v0.25.5 // indirect
|
|
github.com/go-openapi/swag/jsonutils v0.25.5 // indirect
|
|
github.com/go-openapi/swag/loading v0.25.5 // indirect
|
|
github.com/go-openapi/swag/mangling v0.25.5 // indirect
|
|
github.com/go-openapi/swag/netutils v0.25.5 // indirect
|
|
github.com/go-openapi/swag/stringutils v0.25.5 // indirect
|
|
github.com/go-openapi/swag/typeutils v0.25.5 // indirect
|
|
github.com/go-openapi/swag/yamlutils v0.25.5 // indirect
|
|
github.com/go-sql-driver/mysql v1.9.3 // indirect
|
|
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
|
|
github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
|
|
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
|
|
github.com/golang-jwt/jwt/v5 v5.3.1 // indirect
|
|
github.com/gonvenience/bunt v1.4.3 // indirect
|
|
github.com/gonvenience/idem v0.0.3 // indirect
|
|
github.com/gonvenience/neat v1.3.18 // indirect
|
|
github.com/gonvenience/term v1.0.5 // indirect
|
|
github.com/gonvenience/text v1.0.10 // indirect
|
|
github.com/gonvenience/ytbx v1.4.8 // indirect
|
|
github.com/google/gnostic-models v0.7.1 // indirect
|
|
github.com/google/go-github/v88 v88.0.0 // indirect
|
|
github.com/google/go-querystring v1.2.0 // indirect
|
|
github.com/google/pprof v0.0.0-20260402051712-545e8a4df936 // indirect
|
|
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect
|
|
github.com/gruntwork-io/go-commons v0.17.2 // indirect
|
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
|
github.com/homeport/dyff v1.11.2 // indirect
|
|
github.com/huandu/xstrings v1.5.0 // indirect
|
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
|
|
github.com/jackc/pgx/v5 v5.9.0 // indirect
|
|
github.com/jackc/puddle/v2 v2.2.2 // indirect
|
|
github.com/jedib0t/go-pretty/v6 v6.6.7 // indirect
|
|
github.com/json-iterator/go v1.1.12 // indirect
|
|
github.com/knadh/koanf/maps v0.1.2 // indirect
|
|
github.com/knadh/koanf/parsers/yaml v0.1.0 // indirect
|
|
github.com/knadh/koanf/providers/env v1.0.0 // indirect
|
|
github.com/knadh/koanf/providers/file v1.1.2 // indirect
|
|
github.com/knadh/koanf/providers/posflag v0.1.0 // indirect
|
|
github.com/knadh/koanf/providers/structs v0.1.0 // indirect
|
|
github.com/knadh/koanf/v2 v2.3.0 // indirect
|
|
github.com/kylelemons/godebug v1.1.0 // indirect
|
|
github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
|
|
github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 // indirect
|
|
github.com/mattn/go-colorable v0.1.14 // indirect
|
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
|
github.com/mattn/go-runewidth v0.0.16 // indirect
|
|
github.com/mattn/go-zglob v0.0.6 // indirect
|
|
github.com/mitchellh/copystructure v1.2.0 // indirect
|
|
github.com/mitchellh/go-ps v1.0.0 // indirect
|
|
github.com/mitchellh/hashstructure v1.1.0 // indirect
|
|
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
|
github.com/moby/spdystream v0.5.1 // indirect
|
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
|
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
|
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
|
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
|
github.com/pquerna/otp v1.5.0 // indirect
|
|
github.com/prometheus/common v0.67.5 // indirect
|
|
github.com/prometheus/procfs v0.20.1 // indirect
|
|
github.com/rivo/uniseg v0.4.7 // indirect
|
|
github.com/rs/zerolog v1.33.0 // indirect
|
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
|
github.com/sergi/go-diff v1.4.0 // indirect
|
|
github.com/spf13/cobra v1.10.2 // indirect
|
|
github.com/spf13/pflag v1.0.10 // indirect
|
|
github.com/stretchr/objx v0.5.3 // indirect
|
|
github.com/texttheater/golang-levenshtein v1.0.1 // indirect
|
|
github.com/urfave/cli/v2 v2.27.7 // indirect
|
|
github.com/vektra/mockery/v3 v3.6.1 // indirect
|
|
github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect
|
|
github.com/x448/float16 v0.8.4 // indirect
|
|
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
|
|
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
|
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
|
|
github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 // indirect
|
|
go.yaml.in/yaml/v2 v2.4.4 // indirect
|
|
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
|
golang.org/x/crypto v0.52.0 // indirect
|
|
golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect
|
|
golang.org/x/mod v0.35.0 // indirect
|
|
golang.org/x/sys v0.45.0 // indirect
|
|
golang.org/x/term v0.43.0 // indirect
|
|
golang.org/x/text v0.37.0 // indirect
|
|
golang.org/x/time v0.15.0 // indirect
|
|
golang.org/x/tools v0.44.0 // indirect
|
|
google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // indirect
|
|
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
|
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
|
k8s.io/apiextensions-apiserver v0.36.0 // indirect
|
|
k8s.io/klog/v2 v2.140.0 // indirect
|
|
k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a // indirect
|
|
k8s.io/streaming v0.36.2 // indirect
|
|
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
|
|
sigs.k8s.io/randfill v1.0.0 // indirect
|
|
sigs.k8s.io/structured-merge-diff/v6 v6.3.2 // indirect
|
|
)
|
|
|
|
tool github.com/vektra/mockery/v3
|
|
|
|
replace github.com/gregjones/httpcache => github.com/actions-runner-controller/httpcache v0.2.0
|