🔆 Highlights
- Client: Add subresource Apply support by @alvaroaleman in #3321
- Conversion: Enable implementation of conversion outside of API packages by @sbueringer in #3335
- Priorityqueue: Various improvements, bug fixes and now enabled per default
- Webhooks: Generic Validator and Defaulter by @alvaroaleman in #3360
⚠️ Breaking changes
- Dependencies: Update to k8s.io/* v1.35 by @alvaroaleman @dongjiang1989 @kannon92 (#3316, #3349, #3386, #3391, #3401)
- Client: Add subresource Apply support by @alvaroaleman in #3321
- Events: Migration to the new events API by @clebs in #3262
- Using the new
GetEventRecorderForrequires updating your rbac for events to use theevents.k8s.ioapiGroup rather than the `` (core) apiGroup
- Using the new
- Fakeclient: Set ResourceVersion for SSA Create by @alvaroaleman in #3311
- Webhooks: Generic Validator and Defaulter by @alvaroaleman in #3360
- Existing code of the form
builder.WebhookManagedBy(mgr).For(&corev1.Deployment{})has to be changed tobuilder.WebhookManagedBy(mgr, &appsv1.Deployment{}) - Existing webhook implementations have to be changed to take the concrete object rather than
runtime.Object, for example fromValidateCreate(ctx context.Context, obj runtime.Object) (admission.Warnings, error)toValidateCreate(ctx context.Context, obj *appsv1.Deployment) (admission.Warnings, error)
- Existing code of the form
✨ Features
- Cache: Allow fine-granular SyncPeriod configuration by @sbueringer in #3376
- Client: Add FieldOwner option to client.Options by @aerfio in #3389
- Client: Add FieldValidation option to client.Options by @aerfio in #3393
- Conversion: Enable implementation of conversion outside of API packages by @sbueringer in #3335
- Metrics: Add controller_runtime_reconcile_timeouts_total metric to track ReconciliationTimeout timeouts by @godwinpang in #3382
- Priorityqueue: Add optional Priority field to reconcile.Result by @sbueringer in #3333
- Priorityqueue: Enable per default by @sbueringer in #3332
- Priorityqueue: Use a buffer to optimize priority queue AddWithOpts performance by @zach593 in #3415
- Source/Kind: Delay reconciliation until handlers sync by @GonzaloLuminary in #3406
- Webhooks: Add WithContextFunc to WebhookBuilder by @dmvolod in #3324
🐛 Bugfixes
- Client: Allow SSA after normal resource creation by @filipcirtog in #3346
- Client: Fix List in namespaced client to list objects that are cluster scoped by @troy0820 in #3351 #3353
- Envtest: Respect pre-configured binary paths in ControlPlane by @mzhaom in #3372
- Fakeclient: Fix a number of bugs when updating through apply by @alvaroaleman in #3319
- FakeClient: Fix Apply with Unstructured ApplyConfiguration and resourceVersion unset by @sbueringer in #3403
- Fakeclient: Fix SSA after List with non-list kind by @sbueringer in #3364
- Fakeclient: Panic when trying to build more than one instance of fake.ClientBuilder by @troy0820 in #3314
- Leaderelection: Copy all parent context values to leader elector's context by @msudheendra-cflt in #3327
- Metrics: Adding missing exponential buckets on webhook native histogram by @brito-rafa in #3411
- Priorityqueue: Do FIFO ordering within priorities and not across by @zach593 in #3408
- Priorityqueue: Don't block on Get when queue is shutdown (2nd try) by @sbueringer in #3337
- Priorityqueue: Ensure priority queue always returns high-priority items first by @moritzmoe in #3330
- Priorityqueue: Fix TestWhenAddingMultipleItemsWithRatelimitTrueTheyDontAffectEachOther by @zach593 in #3395
- Priorityqueue: Limit depthWithPriorityMetric cardinality to 25 by @alvaroaleman #3419
- Priorityqueue: Properly sync the
waitermanipulation by @fossedihelm in #3368 - setup-envtest: Select the newest Kubernetes by default by @cbandy in #3380
- testing/addr: Prevent possible leak by avoiding defer in loop by @s-z-z in #3367
🌱 Other
- Dependencies: Update controller-tools to 0.20.0 and fix lint by @dongjiang1989 in #3405
- Linter: Add depguard golangci-linter for forbid sort pkg by @dongjiang1989 in #3374
- Linter: Modernize finalizer utils by @tbavelier in #3329
- Linter: Update golangci-lint version and modernize lint by @dongjiang1989 in #3384
- Linter: Update golangci-lint version to v2.4.0 by @dongjiang1989 in #3318
- Linter: Update golangci-lint version to v2.5.0 by @dongjiang1989 in #3323
- Linter: Update golangci-lint version to v2.7.2 by @dongjiang1989 in #3399
- Manager: Deflake should execute the Warmup function test when Warmup group is started by @alvaroaleman in #3356
- Misc: Add CreateOrPatch function in alias.go by @tisonkun in #3375
- Misc: Change
sorttoslicespackage by @dongjiang1989 in #3370 - Misc: Fix typo in unit test name by @s-z-z in #3304
- Misc: Revert deprecation of client.Apply by @sbueringer in #3307
- Priorityqueue: Add and use newQueueWithTimeForwarder by @alvaroaleman in #3336
- Priorityqueue: Add some more tests to the priorityqueue by @alvaroaleman in #3387
- Priorityqueue: Use separate b-trees for ready and non-ready items by @alvaroaleman in #3416
- Priorityqueue: Use synctest by @alvaroaleman in #3350
📖 Documentation
- Add a design for supporting warm replicas by @godwinpang in #3121
- Remove latest from setupenvtest docs by @troy0820 in #3359
- pkg/client/config: Remove outdated doc comments by @haoqixu in #3306
- Update client.Apply example by @aerfio in #3390
- Update
README.md's compatibility matrix forv0.22.x. by @renormalize in #3392
Dependencies
Added
- github.com/Masterminds/semver/v3: v3.4.0
- github.com/gkampitakis/ciinfo: v0.3.2
- github.com/gkampitakis/go-diff: v1.3.2
- github.com/gkampitakis/go-snaps: v0.5.15
- github.com/goccy/go-yaml: v1.18.0
- github.com/joshdk/go-junit: v1.0.0
- github.com/maruel/natural: v1.1.1
- github.com/mfridman/tparse: v0.18.0
- github.com/tidwall/gjson: v1.18.0
- github.com/tidwall/match: v1.1.1
- github.com/tidwall/pretty: v1.2.1
- github.com/tidwall/sjson: v1.2.5
- go.uber.org/automaxprocs: v1.6.0
- golang.org/x/tools/go/expect: v0.1.0-deprecated
- golang.org/x/tools/go/packages/packagestest: v0.1.1-deprecated
Changed
- github.com/go-logr/logr: v1.4.2 → v1.4.3
- github.com/google/pprof: d1b30fe → 27863c8
- github.com/onsi/ginkgo/v2: v2.22.0 → v2.27.2
- github.com/onsi/gomega: v1.36.1 → v1.38.2
- github.com/prometheus/client_golang: v1.22.0 → v1.23.2
- github.com/prometheus/client_model: v0.6.1 → v0.6.2
- github.com/prometheus/common: v0.62.0 → v0.66.1
- github.com/prometheus/procfs: v0.15.1 → v0.16.1
- github.com/rogpeppe/go-internal: v1.13.1 → v1.14.1
- github.com/spf13/cobra: v1.9.1 → v1.10.0
- github.com/spf13/pflag: v1.0.6 → v1.0.9
- github.com/stretchr/testify: v1.10.0 → v1.11.1
- go.etcd.io/bbolt: v1.4.2 → v1.4.3
- go.etcd.io/etcd/api/v3: v3.6.4 → v3.6.5
- go.etcd.io/etcd/client/pkg/v3: v3.6.4 → v3.6.5
- go.etcd.io/etcd/client/v3: v3.6.4 → v3.6.5
- go.etcd.io/etcd/pkg/v3: v3.6.4 → v3.6.5
- go.etcd.io/etcd/server/v3: v3.6.4 → v3.6.5
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp: v0.58.0 → v0.61.0
- go.opentelemetry.io/otel/metric: v1.35.0 → v1.36.0
- go.opentelemetry.io/otel/sdk/metric: v1.34.0 → v1.36.0
- go.opentelemetry.io/otel/sdk: v1.34.0 → v1.36.0
- go.opentelemetry.io/otel/trace: v1.35.0 → v1.36.0
- go.opentelemetry.io/otel: v1.35.0 → v1.36.0
- go.yaml.in/yaml/v2: v2.4.2 → v2.4.3
- golang.org/x/crypto: v0.36.0 → v0.45.0
- golang.org/x/mod: v0.21.0 → v0.29.0
- golang.org/x/net: v0.38.0 → v0.47.0
- golang.org/x/oauth2: v0.27.0 → v0.30.0
- golang.org/x/sync: v0.12.0 → v0.18.0
- golang.org/x/sys: v0.31.0 → v0.38.0
- golang.org/x/telemetry: bda5523 → 078029d
- golang.org/x/term: v0.30.0 → v0.37.0
- golang.org/x/text: v0.23.0 → v0.31.0
- golang.org/x/tools: v0.26.0 → v0.38.0
- golang.org/x/xerrors: 5ec99f8 → 9bdfabe
- google.golang.org/genproto/googleapis/rpc: a0af3ef → 200df99
- google.golang.org/grpc: v1.72.1 → v1.72.2
- google.golang.org/protobuf: v1.36.5 → v1.36.8
- gopkg.in/evanphx/json-patch.v4: v4.12.0 → v4.13.0
- k8s.io/api: v0.34.0 → v0.35.0
- k8s.io/apiextensions-apiserver: v0.34.0 → v0.35.0
- k8s.io/apimachinery: v0.34.0 → v0.35.0
- k8s.io/apiserver: v0.34.0 → v0.35.0
- k8s.io/client-go: v0.34.0 → v0.35.0
- k8s.io/code-generator: v0.34.0 → v0.35.0
- k8s.io/component-base: v0.34.0 → v0.35.0
- k8s.io/gengo/v2: 85fd79d → ec3ebc5
- k8s.io/kms: v0.34.0 → v0.35.0
- k8s.io/kube-openapi: f3f2b99 → 589584f
- k8s.io/utils: 4c0f3b2 → bc988d5
- sigs.k8s.io/json: cfa47c3 → 2d32026
Removed
New Contributors
- @haoqixu made their first contribution in #3306
- @msudheendra-cflt made their first contribution in #3327
- @tbavelier made their first contribution in #3329
- @moritzmoe made their first contribution in #3330
- @filipcirtog made their first contribution in #3346
- @fossedihelm made their first contribution in #3368
- @mzhaom made their first contribution in #3372
- @tisonkun made their first contribution in #3375
- @renormalize made their first contribution in #3392
- @brito-rafa made their first contribution in #3411
- @GonzaloLuminary made their first contribution in #3406
Full Changelog: v0.22.0...v0.23.0
Thanks to all our contributors! 😊