feat: add TransformStripCRDSchema for reduced cache memory usage - #1058
Conversation
Signed-off-by: rafal-jan <rafal7jan@gmail.com>
📝 WalkthroughWalkthroughAdds a CRD cache transform that removes OpenAPI schemas and selected metadata while preserving non-CRD objects, with table-driven tests covering normal and edge cases. ChangesCRD cache transform
Estimated code review effort: 2 (Simple) | ~10 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@pkg/reconciler/customresourcesgate/cache_test.go`:
- Around line 241-243: Update the error comparison in the test around
TransformStripCRDSchema to pass cmpopts.EquateErrors() to cmp.Diff, and add the
corresponding github.com/google/go-cmp/cmp/cmpopts import while preserving the
existing error assertion.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 0faf12c1-76d1-41f3-a1f9-fa0317e2e768
📒 Files selected for processing (2)
pkg/reconciler/customresourcesgate/cache.gopkg/reconciler/customresourcesgate/cache_test.go
…rror comparison Signed-off-by: rafal-jan <rafal7jan@gmail.com>
bobh66
left a comment
There was a problem hiding this comment.
This LGTM but I'm far from an expert in this area, so might want someone else to take a look.
|
Hi @rafal-jan thank you for contributing the PR! I've done a short safety verification against consumers of this code -
From my perspective it's ok to get this merged in the current state |
|
/backport |
|
Successfully created backport PR for |
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [crossplane/crossplane](https://redirect.github.com/crossplane/crossplane) | minor | `v2.3.4` → `v2.4.0` | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/47) for more information. --- ### Release Notes <details> <summary>crossplane/crossplane (crossplane/crossplane)</summary> ### [`v2.4.0`](https://redirect.github.com/crossplane/crossplane/releases/tag/v2.4.0) [Compare Source](https://redirect.github.com/crossplane/crossplane/compare/v2.3.5...apis/v2.4.0-rc.1) The `v2.4.0` release is a regular quarterly Crossplane release that is focused on maturing a number of key areas of functionality across the project, as Crossplane continues to become more capable, more reliable, and more performant for your production workloads. This release includes the ability to watch required resources and reconcile XRs immediately when they change, scale to zero for safe-start capable providers, release artifacts that are vulnerability scannable, and a wide range of fixes and reliability improvements. It also includes security fixes in Crossplane's Go toolchain and dependencies. ##### 🚨 v1.20 end-of-life (EOL) November 2026 This v2.4 release marks the final release cycle where v1.20 will be maintained. **When v2.5 is released in Nov 2026, v1.20 will reach its EOL and no longer receive any support or maintenance by the Crossplane project**. Until that time, we will continue to provide critical fixes and security related dependency updates to v1.20. > \[!IMPORTANT] > This EOL notice applies only to the v1.20 release. v1 legacy workloads like Claims and cluster scoped resources remain supported in Crossplane v2 through extensive [backwards compatibility support](https://docs.crossplane.io/latest/guides/upgrade-to-crossplane-v2/#legacy-resource-behavior). ##### Is your control plane ready for v2? Upgrading to Crossplane v2 does not require any migration as part of the upgrade process, with the exception of the minimal breaking changes explicitly called out in the [v2 documentation](https://docs.crossplane.io/latest/guides/upgrade-to-crossplane-v2/#removed-features). If your control plane is not affected by those changes, you can simply [upgrade to v2](https://docs.crossplane.io/latest/guides/upgrade-crossplane/) right away. To better assist Crossplane users in determining if their control planes are affected by any of the breaking changes in v2, we have released a v2 readiness checker tool in the v1.20 Crossplane CLI that can be invoked via `crossplane beta upgrade check`. You can read all about this tool in the following resources: - blog post: <https://blog.crossplane.io/v2-upgrade-check/> - docs: <https://docs.crossplane.io/v1.20/cli/command-reference/#beta-upgrade-check> - release notes: <https://github.com/crossplane/crossplane/releases/tag/v1.20.9> ##### Crossplane Downstream Distributions Downstream distributions are eligible to continue their extended support and maintenance for their releases that are based on upstream Crossplane's v1.20. Check with your [vendor](https://www.crossplane.io/commercial) for more details if you are using a downstream distribution of Crossplane. ##### 🚨 v2.4 Notable and Breaking Changes -⚠️ The Crossplane CLI is no longer published to `releases.crossplane.io`. New CLI releases go only to `cli.crossplane.io`, under the binary name `crossplane` rather than `crank`. This completes the CLI's move to <https://github.com/crossplane/cli>, which was announced in the `v2.3.0` release notes and dual published to both locations for `v2.3.0` to ease the transition. - f you are using custom installation scripts or CI steps that download the CLI directly from `releases.crossplane.io`, update them to use `cli.crossplane.io`, and update any firewall or proxy rule that allows `releases.crossplane.io` to now allow `cli.crossplane.io` instead. - Users of the [`install.sh`](https://redirect.github.com/crossplane/crossplane/blob/main/install.sh) script as their installation procedure are unaffected. - The CLI now follows its own release schedule, so a CLI release will not accompany every core Crossplane release and the two version numbers have diverged. - Documentation and installation instructions for the Crossplane CLI can be found on <https://docs.crossplane.io/cli/latest/>. - Package revision names are now derived from both the package digest and the package's `metadata.generation`, so any change to a package's spec produces a new `PackageRevision`. [#​7473](https://redirect.github.com/crossplane/crossplane/issues/7473) - This fixes the long standing issue where changing a package's `runtimeConfigRef` reused the existing revision, along with its stale runtime settings. [#​5068](https://redirect.github.com/crossplane/crossplane/issues/5068) - When upgrading to `v2.4`, every installed package gets a new revision, with a new name, on its first reconcile. -⚠️ The `Pods` for `Providers` and `Functions` will be restarted for this new revision. - Package runtime objects (`Deployment`, `ServiceAccount`, `Service`, and TLS `Secrets`) are now applied with server-side apply under the `pkg.crossplane.io/runtime` field manager, replacing the previous merge patch applicator. [#​7563](https://redirect.github.com/crossplane/crossplane/issues/7563) - A field you remove from a `DeploymentRuntimeConfig` is now removed from the live runtime object, rather than lingering until that object is replaced. [#​4817](https://redirect.github.com/crossplane/crossplane/issues/4817) - Additions that Crossplane doesn't declare are left alone rather than replaced along with the array that held them, e.g. an injected sidecar container or an extra volume added out of band now survives a reconcile. - The `RUNTIME` printer column on `ProviderRevision` and `FunctionRevision` was renamed to `RUNTIME-HEALTHY`, and a new `RUNTIME-ACTIVE` column was added. [#​7586](https://redirect.github.com/crossplane/crossplane/issues/7586) - Update any tooling that reads `kubectl get providerrevision` or `kubectl get functionrevision` output by column position. - The `type` label on the `engine_watches_started_total` and `engine_watches_stopped_total` metrics changed from `ComposedResource` to `Dependency`, now that a single watch mechanism covers both composed and required resources. [#​7572](https://redirect.github.com/crossplane/crossplane/issues/7572) - Update any dashboards or alerts that filter on that label value. ##### 🎉 Highlights - **Watching required resources**: Composition functions can require resources they don't compose, but Crossplane didn't watch them, so a change to a required resource didn't reconcile the XRs that required it until their next poll. Crossplane now tracks the resources each XR depends on and drives watches from that. A change to a required resource now reconciles the XRs that required it the same way a change to a composed resource does. This works when realtime compositions are enabled, which is the default. See [`design/one-pager-watching-required-resources.md`](https://redirect.github.com/crossplane/crossplane/blob/main/design/one-pager-watching-required-resources.md) and [#​7572](https://redirect.github.com/crossplane/crossplane/issues/7572). - **Safe-start provider runtimes scale to zero until activated**: A provider with the safe-start capability runs no managed resource controllers while all of its `ManagedResourceDefinitions` are inactive, so there is no reason to run its pods. Crossplane now creates such a provider's runtime `Deployment` with zero replicas and scales it up once its first MRD becomes active, such as through a matching `ManagedResourceActivationPolicy`. Installing a broad set of providers no longer costs you a running pod for each one that has nothing to reconcile yet. [#​7586](https://redirect.github.com/crossplane/crossplane/issues/7586) - A new `RuntimeActive` condition on `ProviderRevision` and `FunctionRevision` makes this visible. It is `False` with reason `AwaitingActivation` while the runtime is intentionally scaled to zero and `True` once it has been scaled up. `RuntimeHealthy` stays healthy in both cases, and the package's `Healthy` condition surfaces the awaiting state with the same reason. - Scaling to zero takes precedence over an explicit `spec.replicas` in a `DeploymentRuntimeConfig`, which is now read as how many replicas to run while running, rather than a demand to always be running. [#​7639](https://redirect.github.com/crossplane/crossplane/issues/7639) - **Vulnerability-scannable container images**: Crossplane container images are now built with nixpkgs' `buildGoModule`, which includes the full Go dependency list into the binary. Scanners such as `grype` and `trivy` previously were only able to discover the Crossplane main module and the Go standard library, so CVEs in our third-party dependencies were not visible to them. Now Crossplane and its complete set of dependencies are visible to security scanner tools. [#​7549](https://redirect.github.com/crossplane/crossplane/issues/7549) - **More reliable package runtime management**: Server-side apply for package runtime objects means a field you remove from a `DeploymentRuntimeConfig` is now actually removed from the live `Deployment` instead of lingering ([#​7563](https://redirect.github.com/crossplane/crossplane/issues/7563), fixing [#​4817](https://redirect.github.com/crossplane/crossplane/issues/4817)). Deactivating a revision also no longer deletes a runtime `Deployment` that another revision controls, which could happen when a `DeploymentRuntimeConfig` pins a stable `deploymentTemplate.metadata.name` ([#​7561](https://redirect.github.com/crossplane/crossplane/issues/7561)). - **Hardening across composition and package paths**: Several changes tighten paths where a caller could reach further than intended. The composed resource garbage collector now only deletes resources whose controller reference points back to the XR, so `spec.resourceRefs` can no longer be used to make the composite controller delete arbitrary resources ([#​7627](https://redirect.github.com/crossplane/crossplane/issues/7627)). The claim to XR syncers now strip XR machinery fields such as `resourceRefs` and the `crossplane` stanza, which a claim could otherwise smuggle through an XRD schema that sets `x-kubernetes-preserve-unknown-fields: true` ([#​7626](https://redirect.github.com/crossplane/crossplane/issues/7626)). - **Version-aware docs search**: Searching from an older version of the docs, such as `/v1.20/`, used to return results from all versions, potentially returning features and APIs that don't exist in the version you're actually reading. Search is now scoped to the version you're on, results carry a clearly visible version badge, and pages from older versions show a banner explaining that, with a link to latest. Thanks to [@​haarchri](https://redirect.github.com/haarchri) for this one in [crossplane/docs#1051](https://redirect.github.com/crossplane/docs/issues/1051), so give it a try at <https://docs.crossplane.io>. - **Security fixes in dependencies**: The Go version Crossplane builds/runs with was bumped to pick up standard library CVE fixes, alongside a steady stream of security updates to Crossplane's Go dependencies across this release cycle. - **Other notable improvements**: - Several fixes to the render engine that backs `crossplane render`: an XRD schema can now be supplied to `crossplane internal render` ([#​7452](https://redirect.github.com/crossplane/crossplane/issues/7452)), requirements are returned even when a function returns a fatal result ([#​7455](https://redirect.github.com/crossplane/crossplane/issues/7455)), a namespace is set on injected resource references only for cluster-scoped XRs, matching the real reconciler ([#​7523](https://redirect.github.com/crossplane/crossplane/issues/7523)), and an input XR fetched from a real cluster keeps its own UID so its observed resources are read correctly, with clear errors when observed resources don't line up with the XR ([#​7544](https://redirect.github.com/crossplane/crossplane/issues/7544)). - The `sha256` files published with release binaries are now calculated after Nix strips the binary, so amd64 checksums match what you download. They didn't for `v2.2.0` through `v2.3.1`, and CI now verifies checksums before uploading artifacts. [#​7660](https://redirect.github.com/crossplane/crossplane/issues/7660) - A composed `Usage` no longer gets a redundant owner update on every reconcile, which could repeatedly trigger composition reconciliation and eventually open the XR circuit breaker. [#​7591](https://redirect.github.com/crossplane/crossplane/issues/7591) - The deletion protection field index now uses a separator that can't appear in a group, kind, name, or namespace, so two distinct resources can no longer collide and block a deletion that should be allowed. [#​7508](https://redirect.github.com/crossplane/crossplane/issues/7508) - Sorting of `spec.resourceRefs` now includes the namespace, so references stay stable when composed resources share a name across namespaces. [#​7341](https://redirect.github.com/crossplane/crossplane/issues/7341) ##### 🏅 Release MVP For the v2.4 release cycle, we'd like to recognize [@​rafal-jan](https://redirect.github.com/rafal-jan) as the release MVP! They had an enormous impact in `crossplane-runtime`, first by diagnosing the root cause in [crossplane/crossplane-runtime#1056](https://redirect.github.com/crossplane/crossplane-runtime/issues/1056) of significant memory usage by providers that are safe-start capable when they essentially watch and cache every CRD in the control plane. Then [@​rafal-jan](https://redirect.github.com/rafal-jan) went a step further and submitted an elegant solution in [crossplane/crossplane-runtime#1058](https://redirect.github.com/crossplane/crossplane-runtime/pull/1058) to strip the cached CRDs down to just the fields needed to watch and respond appropriately to events, drastically reducing the memory consumption by these providers. Thank you [@​rafal-jan](https://redirect.github.com/rafal-jan)! ##### 📖 Full Changelog - chore(deps): bump crossplane-runtime to v2.4.0-rc.0 by [@​jbw976](https://redirect.github.com/jbw976) in [#​7393](https://redirect.github.com/crossplane/crossplane/pull/7393) - build: add release-2.3 to renovate baseBranches by [@​jbw976](https://redirect.github.com/jbw976) in [#​7395](https://redirect.github.com/crossplane/crossplane/pull/7395) - ci: Run checks on the apis module by [@​adamwg](https://redirect.github.com/adamwg) in [#​7396](https://redirect.github.com/crossplane/crossplane/pull/7396) - Make Renovate security updates bypass throttles by [@​phisco](https://redirect.github.com/phisco) in [#​7391](https://redirect.github.com/crossplane/crossplane/pull/7391) - docs: add Stone Payments to ADOPTERS.md by [@​gadsilva](https://redirect.github.com/gadsilva) in [#​7388](https://redirect.github.com/crossplane/crossplane/pull/7388) - build: Install Earthly in Renovate container via flake URL by [@​jbw976](https://redirect.github.com/jbw976) in [#​7404](https://redirect.github.com/crossplane/crossplane/pull/7404) - build: put Nix profile bin on PATH in Renovate entrypoint by [@​jbw976](https://redirect.github.com/jbw976) in [#​7405](https://redirect.github.com/crossplane/crossplane/pull/7405) - chore(deps): Bump Go to 1.25.10 to fix stdlib CVEs (main) by [@​jbw976](https://redirect.github.com/jbw976) in [#​7414](https://redirect.github.com/crossplane/crossplane/pull/7414) - chore: bump releases table and renovate baseBranches after v2.3 release by [@​jbw976](https://redirect.github.com/jbw976) in [#​7418](https://redirect.github.com/crossplane/crossplane/pull/7418) - chore(deps): update module golang.org/x/crypto to v0.52.0 \[security] (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7423](https://redirect.github.com/crossplane/crossplane/pull/7423) - fix(ci): match release tags only when computing build version by [@​jbw976](https://redirect.github.com/jbw976) in [#​7431](https://redirect.github.com/crossplane/crossplane/pull/7431) - build: tag the apis/ Go submodule on every release by [@​jbw976](https://redirect.github.com/jbw976) in [#​7444](https://redirect.github.com/crossplane/crossplane/pull/7444) - Update install.sh to point at the new CLI release bucket by [@​adamwg](https://redirect.github.com/adamwg) in [#​7441](https://redirect.github.com/crossplane/crossplane/pull/7441) - fix(render): allow xrd schema to be supplied for `internal render` by [@​jcogilvie](https://redirect.github.com/jcogilvie) in [#​7452](https://redirect.github.com/crossplane/crossplane/pull/7452) - README: add sig-v2-migration to list of SIGs by [@​jbw976](https://redirect.github.com/jbw976) in [#​7462](https://redirect.github.com/crossplane/crossplane/pull/7462) - Move error types from xerrors to relevant packages by [@​adamwg](https://redirect.github.com/adamwg) in [#​7465](https://redirect.github.com/crossplane/crossplane/pull/7465) - fix(render): return requirements even on fatal errors by [@​jcogilvie](https://redirect.github.com/jcogilvie) in [#​7455](https://redirect.github.com/crossplane/crossplane/pull/7455) - fix: add namespace to resourceref stable sort by [@​LorenzBischof](https://redirect.github.com/LorenzBischof) in [#​7341](https://redirect.github.com/crossplane/crossplane/pull/7341) - redact secret stringData before emitting to pipeline inspector by [@​netliomax25-code](https://redirect.github.com/netliomax25-code) in [#​7476](https://redirect.github.com/crossplane/crossplane/pull/7476) - chore(deps): update actions/stale digest to [`eb5cf3a`](https://redirect.github.com/crossplane/crossplane/commit/eb5cf3a) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7379](https://redirect.github.com/crossplane/crossplane/pull/7379) - chore(deps): update actions/create-github-app-token digest to [`fee1f7d`](https://redirect.github.com/crossplane/crossplane/commit/fee1f7d) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7310](https://redirect.github.com/crossplane/crossplane/pull/7310) - chore(deps): update gomod2nix digest to [`1201ddd`](https://redirect.github.com/crossplane/crossplane/commit/1201ddd) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7128](https://redirect.github.com/crossplane/crossplane/pull/7128) - chore(deps): update module golang.org/x/sys to v0.44.0 \[security] (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7435](https://redirect.github.com/crossplane/crossplane/pull/7435) - chore(deps): update module golang.org/x/net to v0.55.0 \[security] (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7434](https://redirect.github.com/crossplane/crossplane/pull/7434) - chore(deps): update bufbuild/buf-action digest to [`fd21066`](https://redirect.github.com/crossplane/crossplane/commit/fd21066) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7380](https://redirect.github.com/crossplane/crossplane/pull/7380) - ci(renovate): disable the per-hour PR creation throttle by [@​jbw976](https://redirect.github.com/jbw976) in [#​7482](https://redirect.github.com/crossplane/crossplane/pull/7482) - chore(deps): update actions/checkout digest to [`df4cb1c`](https://redirect.github.com/crossplane/crossplane/commit/df4cb1c) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7483](https://redirect.github.com/crossplane/crossplane/pull/7483) - chore(deps): update mheap/require-checklist-action digest to [`9c8100a`](https://redirect.github.com/crossplane/crossplane/commit/9c8100a) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7487](https://redirect.github.com/crossplane/crossplane/pull/7487) - chore(deps): update github/codeql-action digest to [`8aad20d`](https://redirect.github.com/crossplane/crossplane/commit/8aad20d) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7486](https://redirect.github.com/crossplane/crossplane/pull/7486) - chore(deps): update codecov/codecov-action digest to [`0fb7174`](https://redirect.github.com/crossplane/crossplane/commit/0fb7174) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7485](https://redirect.github.com/crossplane/crossplane/pull/7485) - chore(deps): update cachix/install-nix-action digest to [`8aa0397`](https://redirect.github.com/crossplane/crossplane/commit/8aa0397) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7484](https://redirect.github.com/crossplane/crossplane/pull/7484) - chore(deps): update korthout/backport-action action to v4.5.2 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7491](https://redirect.github.com/crossplane/crossplane/pull/7491) - fix(deps): update module github.com/google/go-containerregistry to v0.21.6 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7490](https://redirect.github.com/crossplane/crossplane/pull/7490) - chore(deps): update actions/checkout action to v6.0.3 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7489](https://redirect.github.com/crossplane/crossplane/pull/7489) - chore(deps): update negz/create-tag digest to [`39bae1e`](https://redirect.github.com/crossplane/crossplane/commit/39bae1e) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7488](https://redirect.github.com/crossplane/crossplane/pull/7488) - chore(deps): update renovatebot/github-action action to v46.1.15 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7492](https://redirect.github.com/crossplane/crossplane/pull/7492) - fix(deps): update module github.com/alecthomas/kong to v1.15.0 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7493](https://redirect.github.com/crossplane/crossplane/pull/7493) - fix(deps): update module github.com/crossplane/crossplane/apis/v2 to v2.3.2 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7495](https://redirect.github.com/crossplane/crossplane/pull/7495) - fix(deps): update module github.com/aws/smithy-go to v1.27.2 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7494](https://redirect.github.com/crossplane/crossplane/pull/7494) - fix(deps): update module golang.org/x/sync to v0.21.0 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7497](https://redirect.github.com/crossplane/crossplane/pull/7497) - chore(deps): update actions/create-github-app-token action to v3 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7499](https://redirect.github.com/crossplane/crossplane/pull/7499) - fix(deps): update module google.golang.org/grpc to v1.81.1 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7498](https://redirect.github.com/crossplane/crossplane/pull/7498) - chore(deps): update cachix/cachix-action action to v17 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7501](https://redirect.github.com/crossplane/crossplane/pull/7501) - fix(deps): update module github.com/masterminds/semver/v3 to v3.5.0 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7496](https://redirect.github.com/crossplane/crossplane/pull/7496) - chore(deps): update docker/login-action action to v4 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7504](https://redirect.github.com/crossplane/crossplane/pull/7504) - chore(deps): update dependency renovate to v43 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7503](https://redirect.github.com/crossplane/crossplane/pull/7503) - chore(deps): update codecov/codecov-action action to v7 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7502](https://redirect.github.com/crossplane/crossplane/pull/7502) - chore(deps): update nick-fields/retry action to v4 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7507](https://redirect.github.com/crossplane/crossplane/pull/7507) - chore(deps): update github artifact actions to v7 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7506](https://redirect.github.com/crossplane/crossplane/pull/7506) - chore(deps): update dependency renovate to v43.222.0 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7505](https://redirect.github.com/crossplane/crossplane/pull/7505) - render: Set namespace on injected resource refs only for cluster-scoped XRs by [@​adamwg](https://redirect.github.com/adamwg) in [#​7523](https://redirect.github.com/crossplane/crossplane/pull/7523) - chore(deps): update dependency renovate to v43.230.0 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7509](https://redirect.github.com/crossplane/crossplane/pull/7509) - pkg: include package generation in revision ID by [@​RonaldLePape](https://redirect.github.com/RonaldLePape) in [#​7473](https://redirect.github.com/crossplane/crossplane/pull/7473) - chore(deps): update module github.com/sigstore/cosign/v3 to v3.0.6 \[security] (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7551](https://redirect.github.com/crossplane/crossplane/pull/7551) - Update ADOPTERS.md by [@​cazeaux](https://redirect.github.com/cazeaux) in [#​7533](https://redirect.github.com/crossplane/crossplane/pull/7533) - chore(deps): update module github.com/sigstore/rekor to v1.5.2 \[security] (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7552](https://redirect.github.com/crossplane/crossplane/pull/7552) - chore(deps): update module github.com/sigstore/timestamp-authority/v2 to v2.1.0 \[security] (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7567](https://redirect.github.com/crossplane/crossplane/pull/7567) - build(nix): build with buildGoModule so images are vulnerability-scannable by [@​phisco](https://redirect.github.com/phisco) in [#​7549](https://redirect.github.com/crossplane/crossplane/pull/7549) - docs: fix duplicated word in crossplane-v2 proposal by [@​s3onghyun](https://redirect.github.com/s3onghyun) in [#​7526](https://redirect.github.com/crossplane/crossplane/pull/7526) - chore(deps): update module github.com/sigstore/sigstore-go to v1.2.0 \[security] (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7580](https://redirect.github.com/crossplane/crossplane/pull/7580) - chore(deps): update dependency renovate to v43.272.1 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7593](https://redirect.github.com/crossplane/crossplane/pull/7593) - fix: avoid repeated owner updates for composed Usages by [@​youssefcamao](https://redirect.github.com/youssefcamao) in [#​7591](https://redirect.github.com/crossplane/crossplane/pull/7591) - chore(deps): update dependency renovate to v43.272.8 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7595](https://redirect.github.com/crossplane/crossplane/pull/7595) - render: Don't overwrite the input XR's UID if it has one and validate observed resources by [@​adamwg](https://redirect.github.com/adamwg) in [#​7544](https://redirect.github.com/crossplane/crossplane/pull/7544) - Watch required resources to reconcile the XRs that require them by [@​negz](https://redirect.github.com/negz) in [#​7572](https://redirect.github.com/crossplane/crossplane/pull/7572) - fix(deps): combined security bumps (grpc, x/net, x/text) (main) by [@​lsviben](https://redirect.github.com/lsviben) in [#​7617](https://redirect.github.com/crossplane/crossplane/pull/7617) - chore(deps): update module golang.org/x/net to v0.56.0 \[security] (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7602](https://redirect.github.com/crossplane/crossplane/pull/7602) - Do not delete package runtime deployments owned by another revision by [@​truongnht](https://redirect.github.com/truongnht) in [#​7561](https://redirect.github.com/crossplane/crossplane/pull/7561) - chore(deps): update module golang.org/x/text to v0.39.0 \[security] (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7603](https://redirect.github.com/crossplane/crossplane/pull/7603) - Make check-diff CI verify generated files are committed by [@​phisco](https://redirect.github.com/phisco) in [#​7213](https://redirect.github.com/crossplane/crossplane/pull/7213) - fix(ci): serialize Nix builds in Renovate entrypoint by [@​alliasgher](https://redirect.github.com/alliasgher) in [#​7564](https://redirect.github.com/crossplane/crossplane/pull/7564) - use unambiguous separator for usage index key by [@​netliomax25-code](https://redirect.github.com/netliomax25-code) in [#​7508](https://redirect.github.com/crossplane/crossplane/pull/7508) - test(e2e): use DefaultPollInterval in remaining wait.For calls by [@​amarkdotdev](https://redirect.github.com/amarkdotdev) in [#​7547](https://redirect.github.com/crossplane/crossplane/pull/7547) - feat(pkg): scale safe-start provider runtimes to zero until their first MRD is activated by [@​haarchri](https://redirect.github.com/haarchri) in [#​7586](https://redirect.github.com/crossplane/crossplane/pull/7586) - chore(renovate): group security-fix PRs into one per branch by [@​phisco](https://redirect.github.com/phisco) in [#​7641](https://redirect.github.com/crossplane/crossplane/pull/7641) - Scale safe-start runtimes to zero even when a DRC sets replicas by [@​negz](https://redirect.github.com/negz) in [#​7639](https://redirect.github.com/crossplane/crossplane/pull/7639) - build: give every Go build its own writable HOME by [@​jbw976](https://redirect.github.com/jbw976) in [#​7652](https://redirect.github.com/crossplane/crossplane/pull/7652) - chore(deps): update vulnerable dependencies \[security] (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7645](https://redirect.github.com/crossplane/crossplane/pull/7645) - fix(composite): only garbage collect resources we control by [@​phisco](https://redirect.github.com/phisco) in [#​7627](https://redirect.github.com/crossplane/crossplane/pull/7627) - pkg: Use the real DAG in dependency resolver tests by [@​adamwg](https://redirect.github.com/adamwg) in [#​7655](https://redirect.github.com/crossplane/crossplane/pull/7655) - chore(deps): update dependency renovate to v43.287.0 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7625](https://redirect.github.com/crossplane/crossplane/pull/7625) - fix(ci): make the flake.lock schedule reachable and cover release branches by [@​jbw976](https://redirect.github.com/jbw976) in [#​7661](https://redirect.github.com/crossplane/crossplane/pull/7661) - build: Calculate checksums after the nix fixup phase by [@​adamwg](https://redirect.github.com/adamwg) in [#​7660](https://redirect.github.com/crossplane/crossplane/pull/7660) - chore(deps): update dependency renovate to v43.288.0 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7664](https://redirect.github.com/crossplane/crossplane/pull/7664) - adopters: add Julius Baer by [@​erost](https://redirect.github.com/erost) in [#​7657](https://redirect.github.com/crossplane/crossplane/pull/7657) - chore(deps): update actions/stale digest to [`1e223db`](https://redirect.github.com/crossplane/crossplane/commit/1e223db) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7663](https://redirect.github.com/crossplane/crossplane/pull/7663) - chore(deps): update actions/checkout digest to [`d23441a`](https://redirect.github.com/crossplane/crossplane/commit/d23441a) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7662](https://redirect.github.com/crossplane/crossplane/pull/7662) - lint: Tell the goconst linter to ignore tests by [@​adamwg](https://redirect.github.com/adamwg) in [#​7669](https://redirect.github.com/crossplane/crossplane/pull/7669) - chore(deps): update buildpulse/buildpulse-action action to v3 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7500](https://redirect.github.com/crossplane/crossplane/pull/7500) - chore(deps): update module github.com/sigstore/sigstore-go to v1.2.1 \[security] (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7670](https://redirect.github.com/crossplane/crossplane/pull/7670) - chore(deps): update cachix/install-nix-action digest to [`630ae54`](https://redirect.github.com/crossplane/crossplane/commit/630ae54) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7672](https://redirect.github.com/crossplane/crossplane/pull/7672) - fix(deps): update module github.com/crossplane/crossplane/apis/v2 to v2.3.4 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7681](https://redirect.github.com/crossplane/crossplane/pull/7681) - chore(deps): update bufbuild/buf-action digest to [`8c6a16e`](https://redirect.github.com/crossplane/crossplane/commit/8c6a16e) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7671](https://redirect.github.com/crossplane/crossplane/pull/7671) - chore(deps): update docker/login-action digest to [`dbcb813`](https://redirect.github.com/crossplane/crossplane/commit/dbcb813) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7673](https://redirect.github.com/crossplane/crossplane/pull/7673) - chore(deps): update github/codeql-action digest to [`f205ea1`](https://redirect.github.com/crossplane/crossplane/commit/f205ea1) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7674](https://redirect.github.com/crossplane/crossplane/pull/7674) - fix(deps): update module github.com/google/go-containerregistry to v0.21.8 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7682](https://redirect.github.com/crossplane/crossplane/pull/7682) - fix(deps): update module github.com/aws/smithy-go to v1.27.6 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7680](https://redirect.github.com/crossplane/crossplane/pull/7680) - chore(deps): update korthout/backport-action action to v4.6.0 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7686](https://redirect.github.com/crossplane/crossplane/pull/7686) - Fix 4817 runtime ssa deployment by [@​RonaldLePape](https://redirect.github.com/RonaldLePape) in [#​7563](https://redirect.github.com/crossplane/crossplane/pull/7563) - ci: skip BuildPulse flake publishing when credentials are absent by [@​phisco](https://redirect.github.com/phisco) in [#​7691](https://redirect.github.com/crossplane/crossplane/pull/7691) - fix(ci): prioritize flake.lock maintenance updates by [@​jbw976](https://redirect.github.com/jbw976) in [#​7695](https://redirect.github.com/crossplane/crossplane/pull/7695) - chore(deps): update renovatebot/github-action action to v46.2.1 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7694](https://redirect.github.com/crossplane/crossplane/pull/7694) - chore(deps): update github/codeql-action digest to [`d1ba80a`](https://redirect.github.com/crossplane/crossplane/commit/d1ba80a) (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7693](https://redirect.github.com/crossplane/crossplane/pull/7693) - chore(deps): update actions/checkout action to v7 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7690](https://redirect.github.com/crossplane/crossplane/pull/7690) - fix(claim): don't propagate XR machinery fields from claims by [@​phisco](https://redirect.github.com/phisco) in [#​7626](https://redirect.github.com/crossplane/crossplane/pull/7626) - build: point docker-client at docker\_29 in the nix overlay by [@​jbw976](https://redirect.github.com/jbw976) in [#​7701](https://redirect.github.com/crossplane/crossplane/pull/7701) - chore(deps): lock file maintenance (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7696](https://redirect.github.com/crossplane/crossplane/pull/7696) - fix(ci): pin which Nix Renovate's post-upgrade tasks use by [@​jbw976](https://redirect.github.com/jbw976) in [#​7709](https://redirect.github.com/crossplane/crossplane/pull/7709) - fix(deps): update module github.com/alecthomas/kong to v1.16.0 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7687](https://redirect.github.com/crossplane/crossplane/pull/7687) - build: bump pinned nixpkgs channel from nixos-25.11 to nixos-26.05 by [@​jbw976](https://redirect.github.com/jbw976) in [#​7715](https://redirect.github.com/crossplane/crossplane/pull/7715) - Update the Netclab adopter entry by [@​mbakalarski](https://redirect.github.com/mbakalarski) in [#​7718](https://redirect.github.com/crossplane/crossplane/pull/7718) - pkg: Make deactivated revisions relinquish control of runtime resources by [@​adamwg](https://redirect.github.com/adamwg) in [#​7714](https://redirect.github.com/crossplane/crossplane/pull/7714) - chore(deps): update dependency renovate to v44 (main) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7698](https://redirect.github.com/crossplane/crossplane/pull/7698) - drop secret last-applied annotation from pipeline inspector output by [@​phisco](https://redirect.github.com/phisco) in [#​7726](https://redirect.github.com/crossplane/crossplane/pull/7726) - chore(deps): bump crossplane-runtime to v2.4.0-rc.1 by [@​jbw976](https://redirect.github.com/jbw976) in [#​7735](https://redirect.github.com/crossplane/crossplane/pull/7735) - chore(deps): update module golang.org/x/mod to v0.40.0 \[security] (release-2.4) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7744](https://redirect.github.com/crossplane/crossplane/pull/7744) - \[Backport release-2.4] fix(ci): pin negz/create-tag to v2 so apis/ submodule tagging works again by [@​github-actions](https://redirect.github.com/github-actions)\[bot] in [#​7747](https://redirect.github.com/crossplane/crossplane/pull/7747) - chore(deps): lock file maintenance (release-2.4) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7754](https://redirect.github.com/crossplane/crossplane/pull/7754) - chore(deps): bump crossplane-runtime to v2.4.0 by [@​jbw976](https://redirect.github.com/jbw976) in [#​7762](https://redirect.github.com/crossplane/crossplane/pull/7762) ##### New Contributors - [@​gadsilva](https://redirect.github.com/gadsilva) made their first contribution in [#​7388](https://redirect.github.com/crossplane/crossplane/pull/7388) - [@​LorenzBischof](https://redirect.github.com/LorenzBischof) made their first contribution in [#​7341](https://redirect.github.com/crossplane/crossplane/pull/7341) - [@​netliomax25-code](https://redirect.github.com/netliomax25-code) made their first contribution in [#​7476](https://redirect.github.com/crossplane/crossplane/pull/7476) - [@​RonaldLePape](https://redirect.github.com/RonaldLePape) made their first contribution in [#​7473](https://redirect.github.com/crossplane/crossplane/pull/7473) - [@​cazeaux](https://redirect.github.com/cazeaux) made their first contribution in [#​7533](https://redirect.github.com/crossplane/crossplane/pull/7533) - [@​s3onghyun](https://redirect.github.com/s3onghyun) made their first contribution in [#​7526](https://redirect.github.com/crossplane/crossplane/pull/7526) - [@​youssefcamao](https://redirect.github.com/youssefcamao) made their first contribution in [#​7591](https://redirect.github.com/crossplane/crossplane/pull/7591) - [@​truongnht](https://redirect.github.com/truongnht) made their first contribution in [#​7561](https://redirect.github.com/crossplane/crossplane/pull/7561) - [@​alliasgher](https://redirect.github.com/alliasgher) made their first contribution in [#​7564](https://redirect.github.com/crossplane/crossplane/pull/7564) - [@​amarkdotdev](https://redirect.github.com/amarkdotdev) made their first contribution in [#​7547](https://redirect.github.com/crossplane/crossplane/pull/7547) - [@​erost](https://redirect.github.com/erost) made their first contribution in [#​7657](https://redirect.github.com/crossplane/crossplane/pull/7657) **Full Changelog**: <crossplane/crossplane@v2.3.0...v2.4.0> ### [`v2.3.5`](https://redirect.github.com/crossplane/crossplane/releases/tag/v2.3.5) [Compare Source](https://redirect.github.com/crossplane/crossplane/compare/v2.3.4...v2.3.5) `v2.3.5` is a patch release scoped to fixing issues reported by users of Crossplane `v2.3` and fixing security related issues in Crossplane's dependencies. ##### 🎉 Highlights - **Correct `crank` checksums for `amd64` binaries ([#​7666](https://redirect.github.com/crossplane/crossplane/issues/7666), originally [#​7660](https://redirect.github.com/crossplane/crossplane/issues/7660)):** The published `.sha256` files for `linux_amd64` binaries had not matched the binaries themselves since `v2.2.0`, so any install script or Dockerfile that verified the `amd64` checksum failed. Checksums are now calculated after Nix strips the binary, and the release workflow verifies them before uploading. Fixes [#​7467](https://redirect.github.com/crossplane/crossplane/issues/7467). - **Unambiguous `Usage` index key ([#​7630](https://redirect.github.com/crossplane/crossplane/issues/7630), originally [#​7508](https://redirect.github.com/crossplane/crossplane/issues/7508)):** The deletion protection webhook indexed `Usage` resources by joining API group, kind, name, and namespace with `.`. Since groups and names can contain `.` themselves, two distinct resources could collapse to the same key, causing the webhook to block a deletion that should have been allowed. The key now joins with `/`, which cannot appear in any of those fields. - **Dependency security updates:** Bumps `cel-go` ([#​7761](https://redirect.github.com/crossplane/crossplane/issues/7761)), `golang.org/x/mod` ([#​7743](https://redirect.github.com/crossplane/crossplane/issues/7743)), and `sigstore-go` ([#​7678](https://redirect.github.com/crossplane/crossplane/issues/7678)), plus a combined set of vulnerable dependency updates ([#​7650](https://redirect.github.com/crossplane/crossplane/issues/7650)), to pick up upstream CVE fixes. `crossplane-runtime` is also bumped to `v2.3.4` ([#​7765](https://redirect.github.com/crossplane/crossplane/issues/7765)), which carries its own set of security dependency updates. ##### What's Changed - build: give every Go build its own writable HOME by [@​jbw976](https://redirect.github.com/jbw976) in [#​7653](https://redirect.github.com/crossplane/crossplane/pull/7653) - chore(deps): update vulnerable dependencies \[security] (release-2.3) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7650](https://redirect.github.com/crossplane/crossplane/pull/7650) - \[Backport release-2.3] use unambiguous separator for usage index key by [@​github-actions](https://redirect.github.com/github-actions)\[bot] in [#​7630](https://redirect.github.com/crossplane/crossplane/pull/7630) - Backport [#​7660](https://redirect.github.com/crossplane/crossplane/issues/7660) to release-2.3 by [@​adamwg](https://redirect.github.com/adamwg) in [#​7666](https://redirect.github.com/crossplane/crossplane/pull/7666) - chore(deps): update module github.com/sigstore/sigstore-go to v1.2.1 \[security] (release-2.3) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7678](https://redirect.github.com/crossplane/crossplane/pull/7678) - \[Backport release-2.3] build: point docker-client at docker\_29 in the nix overlay by [@​github-actions](https://redirect.github.com/github-actions)\[bot] in [#​7706](https://redirect.github.com/crossplane/crossplane/pull/7706) - chore(deps): lock file maintenance (release-2.3) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7700](https://redirect.github.com/crossplane/crossplane/pull/7700) - \[Backport release-2.3] build: bump pinned nixpkgs channel from nixos-25.11 to nixos-26.05 by [@​jbw976](https://redirect.github.com/jbw976) in [#​7720](https://redirect.github.com/crossplane/crossplane/pull/7720) - chore(deps): update module golang.org/x/mod to v0.40.0 \[security] (release-2.3) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7743](https://redirect.github.com/crossplane/crossplane/pull/7743) - \[Backport release-2.3] fix(ci): pin create-tag to v2 so apis/ submodule tagging works again by [@​jbw976](https://redirect.github.com/jbw976) in [#​7748](https://redirect.github.com/crossplane/crossplane/pull/7748) - chore(deps): lock file maintenance (release-2.3) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7753](https://redirect.github.com/crossplane/crossplane/pull/7753) - chore(deps): update module github.com/google/cel-go to v0.30.0 \[security] (release-2.3) by [@​crossplane-renovate](https://redirect.github.com/crossplane-renovate)\[bot] in [#​7761](https://redirect.github.com/crossplane/crossplane/pull/7761) - chore(deps): bump crossplane-runtime to v2.3.4 by [@​jbw976](https://redirect.github.com/jbw976) in [#​7765](https://redirect.github.com/crossplane/crossplane/pull/7765) **Full Changelog**: <crossplane/crossplane@v2.3.4...v2.3.5> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "before 6am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/blacksd/crd-schemas). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zNS40IiwidXBkYXRlZEluVmVyIjoiNDQuMzkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [crossplane](https://crossplane.io) ([source](https://github.com/crossplane/crossplane)) | minor | `2.3.4` → `2.4.0` | --- >⚠️ **Warning** > > Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/141) for more information. --- ### Release Notes <details> <summary>crossplane/crossplane (crossplane)</summary> ### [`v2.4.0`](https://github.com/crossplane/crossplane/releases/tag/v2.4.0) [Compare Source](crossplane/crossplane@v2.3.5...v2.4.0) The `v2.4.0` release is a regular quarterly Crossplane release that is focused on maturing a number of key areas of functionality across the project, as Crossplane continues to become more capable, more reliable, and more performant for your production workloads. This release includes the ability to watch required resources and reconcile XRs immediately when they change, scale to zero for safe-start capable providers, release artifacts that are vulnerability scannable, and a wide range of fixes and reliability improvements. It also includes security fixes in Crossplane's Go toolchain and dependencies. ### 🚨 v1.20 end-of-life (EOL) November 2026 This v2.4 release marks the final release cycle where v1.20 will be maintained. **When v2.5 is released in Nov 2026, v1.20 will reach its EOL and no longer receive any support or maintenance by the Crossplane project**. Until that time, we will continue to provide critical fixes and security related dependency updates to v1.20. > \[!IMPORTANT] > This EOL notice applies only to the v1.20 release. v1 legacy workloads like Claims and cluster scoped resources remain supported in Crossplane v2 through extensive [backwards compatibility support](https://docs.crossplane.io/latest/guides/upgrade-to-crossplane-v2/#legacy-resource-behavior). #### Is your control plane ready for v2? Upgrading to Crossplane v2 does not require any migration as part of the upgrade process, with the exception of the minimal breaking changes explicitly called out in the [v2 documentation](https://docs.crossplane.io/latest/guides/upgrade-to-crossplane-v2/#removed-features). If your control plane is not affected by those changes, you can simply [upgrade to v2](https://docs.crossplane.io/latest/guides/upgrade-crossplane/) right away. To better assist Crossplane users in determining if their control planes are affected by any of the breaking changes in v2, we have released a v2 readiness checker tool in the v1.20 Crossplane CLI that can be invoked via `crossplane beta upgrade check`. You can read all about this tool in the following resources: - blog post: <https://blog.crossplane.io/v2-upgrade-check/> - docs: <https://docs.crossplane.io/v1.20/cli/command-reference/#beta-upgrade-check> - release notes: <https://github.com/crossplane/crossplane/releases/tag/v1.20.9> #### Crossplane Downstream Distributions Downstream distributions are eligible to continue their extended support and maintenance for their releases that are based on upstream Crossplane's v1.20. Check with your [vendor](https://www.crossplane.io/commercial) for more details if you are using a downstream distribution of Crossplane. ### 🚨 v2.4 Notable and Breaking Changes -⚠️ The Crossplane CLI is no longer published to `releases.crossplane.io`. New CLI releases go only to `cli.crossplane.io`, under the binary name `crossplane` rather than `crank`. This completes the CLI's move to <https://github.com/crossplane/cli>, which was announced in the `v2.3.0` release notes and dual published to both locations for `v2.3.0` to ease the transition. - f you are using custom installation scripts or CI steps that download the CLI directly from `releases.crossplane.io`, update them to use `cli.crossplane.io`, and update any firewall or proxy rule that allows `releases.crossplane.io` to now allow `cli.crossplane.io` instead. - Users of the [`install.sh`](https://github.com/crossplane/crossplane/blob/main/install.sh) script as their installation procedure are unaffected. - The CLI now follows its own release schedule, so a CLI release will not accompany every core Crossplane release and the two version numbers have diverged. - Documentation and installation instructions for the Crossplane CLI can be found on <https://docs.crossplane.io/cli/latest/>. - Package revision names are now derived from both the package digest and the package's `metadata.generation`, so any change to a package's spec produces a new `PackageRevision`. [#​7473](crossplane/crossplane#7473) - This fixes the long standing issue where changing a package's `runtimeConfigRef` reused the existing revision, along with its stale runtime settings. [#​5068](crossplane/crossplane#5068) - When upgrading to `v2.4`, every installed package gets a new revision, with a new name, on its first reconcile. -⚠️ The `Pods` for `Providers` and `Functions` will be restarted for this new revision. - Package runtime objects (`Deployment`, `ServiceAccount`, `Service`, and TLS `Secrets`) are now applied with server-side apply under the `pkg.crossplane.io/runtime` field manager, replacing the previous merge patch applicator. [#​7563](crossplane/crossplane#7563) - A field you remove from a `DeploymentRuntimeConfig` is now removed from the live runtime object, rather than lingering until that object is replaced. [#​4817](crossplane/crossplane#4817) - Additions that Crossplane doesn't declare are left alone rather than replaced along with the array that held them, e.g. an injected sidecar container or an extra volume added out of band now survives a reconcile. - The `RUNTIME` printer column on `ProviderRevision` and `FunctionRevision` was renamed to `RUNTIME-HEALTHY`, and a new `RUNTIME-ACTIVE` column was added. [#​7586](crossplane/crossplane#7586) - Update any tooling that reads `kubectl get providerrevision` or `kubectl get functionrevision` output by column position. - The `type` label on the `engine_watches_started_total` and `engine_watches_stopped_total` metrics changed from `ComposedResource` to `Dependency`, now that a single watch mechanism covers both composed and required resources. [#​7572](crossplane/crossplane#7572) - Update any dashboards or alerts that filter on that label value. ### 🎉 Highlights - **Watching required resources**: Composition functions can require resources they don't compose, but Crossplane didn't watch them, so a change to a required resource didn't reconcile the XRs that required it until their next poll. Crossplane now tracks the resources each XR depends on and drives watches from that. A change to a required resource now reconciles the XRs that required it the same way a change to a composed resource does. This works when realtime compositions are enabled, which is the default. See [`design/one-pager-watching-required-resources.md`](https://github.com/crossplane/crossplane/blob/main/design/one-pager-watching-required-resources.md) and [#​7572](crossplane/crossplane#7572). - **Safe-start provider runtimes scale to zero until activated**: A provider with the safe-start capability runs no managed resource controllers while all of its `ManagedResourceDefinitions` are inactive, so there is no reason to run its pods. Crossplane now creates such a provider's runtime `Deployment` with zero replicas and scales it up once its first MRD becomes active, such as through a matching `ManagedResourceActivationPolicy`. Installing a broad set of providers no longer costs you a running pod for each one that has nothing to reconcile yet. [#​7586](crossplane/crossplane#7586) - A new `RuntimeActive` condition on `ProviderRevision` and `FunctionRevision` makes this visible. It is `False` with reason `AwaitingActivation` while the runtime is intentionally scaled to zero and `True` once it has been scaled up. `RuntimeHealthy` stays healthy in both cases, and the package's `Healthy` condition surfaces the awaiting state with the same reason. - Scaling to zero takes precedence over an explicit `spec.replicas` in a `DeploymentRuntimeConfig`, which is now read as how many replicas to run while running, rather than a demand to always be running. [#​7639](crossplane/crossplane#7639) - **Vulnerability-scannable container images**: Crossplane container images are now built with nixpkgs' `buildGoModule`, which includes the full Go dependency list into the binary. Scanners such as `grype` and `trivy` previously were only able to discover the Crossplane main module and the Go standard library, so CVEs in our third-party dependencies were not visible to them. Now Crossplane and its complete set of dependencies are visible to security scanner tools. [#​7549](crossplane/crossplane#7549) - **More reliable package runtime management**: Server-side apply for package runtime objects means a field you remove from a `DeploymentRuntimeConfig` is now actually removed from the live `Deployment` instead of lingering ([#​7563](crossplane/crossplane#7563), fixing [#​4817](crossplane/crossplane#4817)). Deactivating a revision also no longer deletes a runtime `Deployment` that another revision controls, which could happen when a `DeploymentRuntimeConfig` pins a stable `deploymentTemplate.metadata.name` ([#​7561](crossplane/crossplane#7561)). - **Hardening across composition and package paths**: Several changes tighten paths where a caller could reach further than intended. The composed resource garbage collector now only deletes resources whose controller reference points back to the XR, so `spec.resourceRefs` can no longer be used to make the composite controller delete arbitrary resources ([#​7627](crossplane/crossplane#7627)). The claim to XR syncers now strip XR machinery fields such as `resourceRefs` and the `crossplane` stanza, which a claim could otherwise smuggle through an XRD schema that sets `x-kubernetes-preserve-unknown-fields: true` ([#​7626](crossplane/crossplane#7626)). - **Version-aware docs search**: Searching from an older version of the docs, such as `/v1.20/`, used to return results from all versions, potentially returning features and APIs that don't exist in the version you're actually reading. Search is now scoped to the version you're on, results carry a clearly visible version badge, and pages from older versions show a banner explaining that, with a link to latest. Thanks to [@​haarchri](https://github.com/haarchri) for this one in [crossplane/docs#1051](crossplane/docs#1051), so give it a try at <https://docs.crossplane.io>. - **Security fixes in dependencies**: The Go version Crossplane builds/runs with was bumped to pick up standard library CVE fixes, alongside a steady stream of security updates to Crossplane's Go dependencies across this release cycle. - **Other notable improvements**: - Several fixes to the render engine that backs `crossplane render`: an XRD schema can now be supplied to `crossplane internal render` ([#​7452](crossplane/crossplane#7452)), requirements are returned even when a function returns a fatal result ([#​7455](crossplane/crossplane#7455)), a namespace is set on injected resource references only for cluster-scoped XRs, matching the real reconciler ([#​7523](crossplane/crossplane#7523)), and an input XR fetched from a real cluster keeps its own UID so its observed resources are read correctly, with clear errors when observed resources don't line up with the XR ([#​7544](crossplane/crossplane#7544)). - The `sha256` files published with release binaries are now calculated after Nix strips the binary, so amd64 checksums match what you download. They didn't for `v2.2.0` through `v2.3.1`, and CI now verifies checksums before uploading artifacts. [#​7660](crossplane/crossplane#7660) - A composed `Usage` no longer gets a redundant owner update on every reconcile, which could repeatedly trigger composition reconciliation and eventually open the XR circuit breaker. [#​7591](crossplane/crossplane#7591) - The deletion protection field index now uses a separator that can't appear in a group, kind, name, or namespace, so two distinct resources can no longer collide and block a deletion that should be allowed. [#​7508](crossplane/crossplane#7508) - Sorting of `spec.resourceRefs` now includes the namespace, so references stay stable when composed resources share a name across namespaces. [#​7341](crossplane/crossplane#7341) #### 🏅 Release MVP For the v2.4 release cycle, we'd like to recognize [@​rafal-jan](https://github.com/rafal-jan) as the release MVP! They had an enormous impact in `crossplane-runtime`, first by diagnosing the root cause in [crossplane/crossplane-runtime#1056](crossplane/crossplane-runtime#1056) of significant memory usage by providers that are safe-start capable when they essentially watch and cache every CRD in the control plane. Then [@​rafal-jan](https://github.com/rafal-jan) went a step further and submitted an elegant solution in [crossplane/crossplane-runtime#1058](crossplane/crossplane-runtime#1058) to strip the cached CRDs down to just the fields needed to watch and respond appropriately to events, drastically reducing the memory consumption by these providers. Thank you [@​rafal-jan](https://github.com/rafal-jan)! ### 📖 Full Changelog - chore(deps): bump crossplane-runtime to v2.4.0-rc.0 by [@​jbw976](https://github.com/jbw976) in [#​7393](crossplane/crossplane#7393) - build: add release-2.3 to renovate baseBranches by [@​jbw976](https://github.com/jbw976) in [#​7395](crossplane/crossplane#7395) - ci: Run checks on the apis module by [@​adamwg](https://github.com/adamwg) in [#​7396](crossplane/crossplane#7396) - Make Renovate security updates bypass throttles by [@​phisco](https://github.com/phisco) in [#​7391](crossplane/crossplane#7391) - docs: add Stone Payments to ADOPTERS.md by [@​gadsilva](https://github.com/gadsilva) in [#​7388](crossplane/crossplane#7388) - build: Install Earthly in Renovate container via flake URL by [@​jbw976](https://github.com/jbw976) in [#​7404](crossplane/crossplane#7404) - build: put Nix profile bin on PATH in Renovate entrypoint by [@​jbw976](https://github.com/jbw976) in [#​7405](crossplane/crossplane#7405) - chore(deps): Bump Go to 1.25.10 to fix stdlib CVEs (main) by [@​jbw976](https://github.com/jbw976) in [#​7414](crossplane/crossplane#7414) - chore: bump releases table and renovate baseBranches after v2.3 release by [@​jbw976](https://github.com/jbw976) in [#​7418](crossplane/crossplane#7418) - chore(deps): update module golang.org/x/crypto to v0.52.0 \[security] (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7423](crossplane/crossplane#7423) - fix(ci): match release tags only when computing build version by [@​jbw976](https://github.com/jbw976) in [#​7431](crossplane/crossplane#7431) - build: tag the apis/ Go submodule on every release by [@​jbw976](https://github.com/jbw976) in [#​7444](crossplane/crossplane#7444) - Update install.sh to point at the new CLI release bucket by [@​adamwg](https://github.com/adamwg) in [#​7441](crossplane/crossplane#7441) - fix(render): allow xrd schema to be supplied for `internal render` by [@​jcogilvie](https://github.com/jcogilvie) in [#​7452](crossplane/crossplane#7452) - README: add sig-v2-migration to list of SIGs by [@​jbw976](https://github.com/jbw976) in [#​7462](crossplane/crossplane#7462) - Move error types from xerrors to relevant packages by [@​adamwg](https://github.com/adamwg) in [#​7465](crossplane/crossplane#7465) - fix(render): return requirements even on fatal errors by [@​jcogilvie](https://github.com/jcogilvie) in [#​7455](crossplane/crossplane#7455) - fix: add namespace to resourceref stable sort by [@​LorenzBischof](https://github.com/LorenzBischof) in [#​7341](crossplane/crossplane#7341) - redact secret stringData before emitting to pipeline inspector by [@​netliomax25-code](https://github.com/netliomax25-code) in [#​7476](crossplane/crossplane#7476) - chore(deps): update actions/stale digest to [`eb5cf3a`](crossplane/crossplane@eb5cf3a) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7379](crossplane/crossplane#7379) - chore(deps): update actions/create-github-app-token digest to [`fee1f7d`](crossplane/crossplane@fee1f7d) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7310](crossplane/crossplane#7310) - chore(deps): update gomod2nix digest to [`1201ddd`](crossplane/crossplane@1201ddd) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7128](crossplane/crossplane#7128) - chore(deps): update module golang.org/x/sys to v0.44.0 \[security] (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7435](crossplane/crossplane#7435) - chore(deps): update module golang.org/x/net to v0.55.0 \[security] (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7434](crossplane/crossplane#7434) - chore(deps): update bufbuild/buf-action digest to [`fd21066`](crossplane/crossplane@fd21066) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7380](crossplane/crossplane#7380) - ci(renovate): disable the per-hour PR creation throttle by [@​jbw976](https://github.com/jbw976) in [#​7482](crossplane/crossplane#7482) - chore(deps): update actions/checkout digest to [`df4cb1c`](crossplane/crossplane@df4cb1c) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7483](crossplane/crossplane#7483) - chore(deps): update mheap/require-checklist-action digest to [`9c8100a`](crossplane/crossplane@9c8100a) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7487](crossplane/crossplane#7487) - chore(deps): update github/codeql-action digest to [`8aad20d`](crossplane/crossplane@8aad20d) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7486](crossplane/crossplane#7486) - chore(deps): update codecov/codecov-action digest to [`0fb7174`](crossplane/crossplane@0fb7174) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7485](crossplane/crossplane#7485) - chore(deps): update cachix/install-nix-action digest to [`8aa0397`](crossplane/crossplane@8aa0397) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7484](crossplane/crossplane#7484) - chore(deps): update korthout/backport-action action to v4.5.2 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7491](crossplane/crossplane#7491) - fix(deps): update module github.com/google/go-containerregistry to v0.21.6 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7490](crossplane/crossplane#7490) - chore(deps): update actions/checkout action to v6.0.3 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7489](crossplane/crossplane#7489) - chore(deps): update negz/create-tag digest to [`39bae1e`](crossplane/crossplane@39bae1e) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7488](crossplane/crossplane#7488) - chore(deps): update renovatebot/github-action action to v46.1.15 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7492](crossplane/crossplane#7492) - fix(deps): update module github.com/alecthomas/kong to v1.15.0 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7493](crossplane/crossplane#7493) - fix(deps): update module github.com/crossplane/crossplane/apis/v2 to v2.3.2 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7495](crossplane/crossplane#7495) - fix(deps): update module github.com/aws/smithy-go to v1.27.2 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7494](crossplane/crossplane#7494) - fix(deps): update module golang.org/x/sync to v0.21.0 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7497](crossplane/crossplane#7497) - chore(deps): update actions/create-github-app-token action to v3 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7499](crossplane/crossplane#7499) - fix(deps): update module google.golang.org/grpc to v1.81.1 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7498](crossplane/crossplane#7498) - chore(deps): update cachix/cachix-action action to v17 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7501](crossplane/crossplane#7501) - fix(deps): update module github.com/masterminds/semver/v3 to v3.5.0 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7496](crossplane/crossplane#7496) - chore(deps): update docker/login-action action to v4 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7504](crossplane/crossplane#7504) - chore(deps): update dependency renovate to v43 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7503](crossplane/crossplane#7503) - chore(deps): update codecov/codecov-action action to v7 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7502](crossplane/crossplane#7502) - chore(deps): update nick-fields/retry action to v4 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7507](crossplane/crossplane#7507) - chore(deps): update github artifact actions to v7 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7506](crossplane/crossplane#7506) - chore(deps): update dependency renovate to v43.222.0 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7505](crossplane/crossplane#7505) - render: Set namespace on injected resource refs only for cluster-scoped XRs by [@​adamwg](https://github.com/adamwg) in [#​7523](crossplane/crossplane#7523) - chore(deps): update dependency renovate to v43.230.0 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7509](crossplane/crossplane#7509) - pkg: include package generation in revision ID by [@​RonaldLePape](https://github.com/RonaldLePape) in [#​7473](crossplane/crossplane#7473) - chore(deps): update module github.com/sigstore/cosign/v3 to v3.0.6 \[security] (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7551](crossplane/crossplane#7551) - Update ADOPTERS.md by [@​cazeaux](https://github.com/cazeaux) in [#​7533](crossplane/crossplane#7533) - chore(deps): update module github.com/sigstore/rekor to v1.5.2 \[security] (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7552](crossplane/crossplane#7552) - chore(deps): update module github.com/sigstore/timestamp-authority/v2 to v2.1.0 \[security] (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7567](crossplane/crossplane#7567) - build(nix): build with buildGoModule so images are vulnerability-scannable by [@​phisco](https://github.com/phisco) in [#​7549](crossplane/crossplane#7549) - docs: fix duplicated word in crossplane-v2 proposal by [@​s3onghyun](https://github.com/s3onghyun) in [#​7526](crossplane/crossplane#7526) - chore(deps): update module github.com/sigstore/sigstore-go to v1.2.0 \[security] (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7580](crossplane/crossplane#7580) - chore(deps): update dependency renovate to v43.272.1 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7593](crossplane/crossplane#7593) - fix: avoid repeated owner updates for composed Usages by [@​youssefcamao](https://github.com/youssefcamao) in [#​7591](crossplane/crossplane#7591) - chore(deps): update dependency renovate to v43.272.8 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7595](crossplane/crossplane#7595) - render: Don't overwrite the input XR's UID if it has one and validate observed resources by [@​adamwg](https://github.com/adamwg) in [#​7544](crossplane/crossplane#7544) - Watch required resources to reconcile the XRs that require them by [@​negz](https://github.com/negz) in [#​7572](crossplane/crossplane#7572) - fix(deps): combined security bumps (grpc, x/net, x/text) (main) by [@​lsviben](https://github.com/lsviben) in [#​7617](crossplane/crossplane#7617) - chore(deps): update module golang.org/x/net to v0.56.0 \[security] (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7602](crossplane/crossplane#7602) - Do not delete package runtime deployments owned by another revision by [@​truongnht](https://github.com/truongnht) in [#​7561](crossplane/crossplane#7561) - chore(deps): update module golang.org/x/text to v0.39.0 \[security] (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7603](crossplane/crossplane#7603) - Make check-diff CI verify generated files are committed by [@​phisco](https://github.com/phisco) in [#​7213](crossplane/crossplane#7213) - fix(ci): serialize Nix builds in Renovate entrypoint by [@​alliasgher](https://github.com/alliasgher) in [#​7564](crossplane/crossplane#7564) - use unambiguous separator for usage index key by [@​netliomax25-code](https://github.com/netliomax25-code) in [#​7508](crossplane/crossplane#7508) - test(e2e): use DefaultPollInterval in remaining wait.For calls by [@​amarkdotdev](https://github.com/amarkdotdev) in [#​7547](crossplane/crossplane#7547) - feat(pkg): scale safe-start provider runtimes to zero until their first MRD is activated by [@​haarchri](https://github.com/haarchri) in [#​7586](crossplane/crossplane#7586) - chore(renovate): group security-fix PRs into one per branch by [@​phisco](https://github.com/phisco) in [#​7641](crossplane/crossplane#7641) - Scale safe-start runtimes to zero even when a DRC sets replicas by [@​negz](https://github.com/negz) in [#​7639](crossplane/crossplane#7639) - build: give every Go build its own writable HOME by [@​jbw976](https://github.com/jbw976) in [#​7652](crossplane/crossplane#7652) - chore(deps): update vulnerable dependencies \[security] (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7645](crossplane/crossplane#7645) - fix(composite): only garbage collect resources we control by [@​phisco](https://github.com/phisco) in [#​7627](crossplane/crossplane#7627) - pkg: Use the real DAG in dependency resolver tests by [@​adamwg](https://github.com/adamwg) in [#​7655](crossplane/crossplane#7655) - chore(deps): update dependency renovate to v43.287.0 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7625](crossplane/crossplane#7625) - fix(ci): make the flake.lock schedule reachable and cover release branches by [@​jbw976](https://github.com/jbw976) in [#​7661](crossplane/crossplane#7661) - build: Calculate checksums after the nix fixup phase by [@​adamwg](https://github.com/adamwg) in [#​7660](crossplane/crossplane#7660) - chore(deps): update dependency renovate to v43.288.0 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7664](crossplane/crossplane#7664) - adopters: add Julius Baer by [@​erost](https://github.com/erost) in [#​7657](crossplane/crossplane#7657) - chore(deps): update actions/stale digest to [`1e223db`](crossplane/crossplane@1e223db) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7663](crossplane/crossplane#7663) - chore(deps): update actions/checkout digest to [`d23441a`](crossplane/crossplane@d23441a) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7662](crossplane/crossplane#7662) - lint: Tell the goconst linter to ignore tests by [@​adamwg](https://github.com/adamwg) in [#​7669](crossplane/crossplane#7669) - chore(deps): update buildpulse/buildpulse-action action to v3 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7500](crossplane/crossplane#7500) - chore(deps): update module github.com/sigstore/sigstore-go to v1.2.1 \[security] (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7670](crossplane/crossplane#7670) - chore(deps): update cachix/install-nix-action digest to [`630ae54`](crossplane/crossplane@630ae54) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7672](crossplane/crossplane#7672) - fix(deps): update module github.com/crossplane/crossplane/apis/v2 to v2.3.4 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7681](crossplane/crossplane#7681) - chore(deps): update bufbuild/buf-action digest to [`8c6a16e`](crossplane/crossplane@8c6a16e) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7671](crossplane/crossplane#7671) - chore(deps): update docker/login-action digest to [`dbcb813`](crossplane/crossplane@dbcb813) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7673](crossplane/crossplane#7673) - chore(deps): update github/codeql-action digest to [`f205ea1`](crossplane/crossplane@f205ea1) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7674](crossplane/crossplane#7674) - fix(deps): update module github.com/google/go-containerregistry to v0.21.8 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7682](crossplane/crossplane#7682) - fix(deps): update module github.com/aws/smithy-go to v1.27.6 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7680](crossplane/crossplane#7680) - chore(deps): update korthout/backport-action action to v4.6.0 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7686](crossplane/crossplane#7686) - Fix 4817 runtime ssa deployment by [@​RonaldLePape](https://github.com/RonaldLePape) in [#​7563](crossplane/crossplane#7563) - ci: skip BuildPulse flake publishing when credentials are absent by [@​phisco](https://github.com/phisco) in [#​7691](crossplane/crossplane#7691) - fix(ci): prioritize flake.lock maintenance updates by [@​jbw976](https://github.com/jbw976) in [#​7695](crossplane/crossplane#7695) - chore(deps): update renovatebot/github-action action to v46.2.1 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7694](crossplane/crossplane#7694) - chore(deps): update github/codeql-action digest to [`d1ba80a`](crossplane/crossplane@d1ba80a) (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7693](crossplane/crossplane#7693) - chore(deps): update actions/checkout action to v7 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7690](crossplane/crossplane#7690) - fix(claim): don't propagate XR machinery fields from claims by [@​phisco](https://github.com/phisco) in [#​7626](crossplane/crossplane#7626) - build: point docker-client at docker\_29 in the nix overlay by [@​jbw976](https://github.com/jbw976) in [#​7701](crossplane/crossplane#7701) - chore(deps): lock file maintenance (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7696](crossplane/crossplane#7696) - fix(ci): pin which Nix Renovate's post-upgrade tasks use by [@​jbw976](https://github.com/jbw976) in [#​7709](crossplane/crossplane#7709) - fix(deps): update module github.com/alecthomas/kong to v1.16.0 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7687](crossplane/crossplane#7687) - build: bump pinned nixpkgs channel from nixos-25.11 to nixos-26.05 by [@​jbw976](https://github.com/jbw976) in [#​7715](crossplane/crossplane#7715) - Update the Netclab adopter entry by [@​mbakalarski](https://github.com/mbakalarski) in [#​7718](crossplane/crossplane#7718) - pkg: Make deactivated revisions relinquish control of runtime resources by [@​adamwg](https://github.com/adamwg) in [#​7714](crossplane/crossplane#7714) - chore(deps): update dependency renovate to v44 (main) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7698](crossplane/crossplane#7698) - drop secret last-applied annotation from pipeline inspector output by [@​phisco](https://github.com/phisco) in [#​7726](crossplane/crossplane#7726) - chore(deps): bump crossplane-runtime to v2.4.0-rc.1 by [@​jbw976](https://github.com/jbw976) in [#​7735](crossplane/crossplane#7735) - chore(deps): update module golang.org/x/mod to v0.40.0 \[security] (release-2.4) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7744](crossplane/crossplane#7744) - \[Backport release-2.4] fix(ci): pin negz/create-tag to v2 so apis/ submodule tagging works again by [@​github-actions](https://github.com/github-actions)\[bot] in [#​7747](crossplane/crossplane#7747) - chore(deps): lock file maintenance (release-2.4) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7754](crossplane/crossplane#7754) - chore(deps): bump crossplane-runtime to v2.4.0 by [@​jbw976](https://github.com/jbw976) in [#​7762](crossplane/crossplane#7762) #### New Contributors - [@​gadsilva](https://github.com/gadsilva) made their first contribution in [#​7388](crossplane/crossplane#7388) - [@​LorenzBischof](https://github.com/LorenzBischof) made their first contribution in [#​7341](crossplane/crossplane#7341) - [@​netliomax25-code](https://github.com/netliomax25-code) made their first contribution in [#​7476](crossplane/crossplane#7476) - [@​RonaldLePape](https://github.com/RonaldLePape) made their first contribution in [#​7473](crossplane/crossplane#7473) - [@​cazeaux](https://github.com/cazeaux) made their first contribution in [#​7533](crossplane/crossplane#7533) - [@​s3onghyun](https://github.com/s3onghyun) made their first contribution in [#​7526](crossplane/crossplane#7526) - [@​youssefcamao](https://github.com/youssefcamao) made their first contribution in [#​7591](crossplane/crossplane#7591) - [@​truongnht](https://github.com/truongnht) made their first contribution in [#​7561](crossplane/crossplane#7561) - [@​alliasgher](https://github.com/alliasgher) made their first contribution in [#​7564](crossplane/crossplane#7564) - [@​amarkdotdev](https://github.com/amarkdotdev) made their first contribution in [#​7547](crossplane/crossplane#7547) - [@​erost](https://github.com/erost) made their first contribution in [#​7657](crossplane/crossplane#7657) **Full Changelog**: <crossplane/crossplane@v2.3.0...v2.4.0> ### [`v2.3.5`](https://github.com/crossplane/crossplane/releases/tag/v2.3.5) [Compare Source](crossplane/crossplane@v2.3.4...v2.3.5) `v2.3.5` is a patch release scoped to fixing issues reported by users of Crossplane `v2.3` and fixing security related issues in Crossplane's dependencies. ### 🎉 Highlights - **Correct `crank` checksums for `amd64` binaries ([#​7666](crossplane/crossplane#7666), originally [#​7660](crossplane/crossplane#7660 The published `.sha256` files for `linux_amd64` binaries had not matched the binaries themselves since `v2.2.0`, so any install script or Dockerfile that verified the `amd64` checksum failed. Checksums are now calculated after Nix strips the binary, and the release workflow verifies them before uploading. Fixes [#​7467](crossplane/crossplane#7467). - **Unambiguous `Usage` index key ([#​7630](crossplane/crossplane#7630), originally [#​7508](crossplane/crossplane#7508 The deletion protection webhook indexed `Usage` resources by joining API group, kind, name, and namespace with `.`. Since groups and names can contain `.` themselves, two distinct resources could collapse to the same key, causing the webhook to block a deletion that should have been allowed. The key now joins with `/`, which cannot appear in any of those fields. - **Dependency security updates:** Bumps `cel-go` ([#​7761](crossplane/crossplane#7761)), `golang.org/x/mod` ([#​7743](crossplane/crossplane#7743)), and `sigstore-go` ([#​7678](crossplane/crossplane#7678)), plus a combined set of vulnerable dependency updates ([#​7650](crossplane/crossplane#7650)), to pick up upstream CVE fixes. `crossplane-runtime` is also bumped to `v2.3.4` ([#​7765](crossplane/crossplane#7765)), which carries its own set of security dependency updates. #### What's Changed - build: give every Go build its own writable HOME by [@​jbw976](https://github.com/jbw976) in [#​7653](crossplane/crossplane#7653) - chore(deps): update vulnerable dependencies \[security] (release-2.3) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7650](crossplane/crossplane#7650) - \[Backport release-2.3] use unambiguous separator for usage index key by [@​github-actions](https://github.com/github-actions)\[bot] in [#​7630](crossplane/crossplane#7630) - Backport [#​7660](crossplane/crossplane#7660) to release-2.3 by [@​adamwg](https://github.com/adamwg) in [#​7666](crossplane/crossplane#7666) - chore(deps): update module github.com/sigstore/sigstore-go to v1.2.1 \[security] (release-2.3) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7678](crossplane/crossplane#7678) - \[Backport release-2.3] build: point docker-client at docker\_29 in the nix overlay by [@​github-actions](https://github.com/github-actions)\[bot] in [#​7706](crossplane/crossplane#7706) - chore(deps): lock file maintenance (release-2.3) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7700](crossplane/crossplane#7700) - \[Backport release-2.3] build: bump pinned nixpkgs channel from nixos-25.11 to nixos-26.05 by [@​jbw976](https://github.com/jbw976) in [#​7720](crossplane/crossplane#7720) - chore(deps): update module golang.org/x/mod to v0.40.0 \[security] (release-2.3) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7743](crossplane/crossplane#7743) - \[Backport release-2.3] fix(ci): pin create-tag to v2 so apis/ submodule tagging works again by [@​jbw976](https://github.com/jbw976) in [#​7748](crossplane/crossplane#7748) - chore(deps): lock file maintenance (release-2.3) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7753](https://github.com/crossplane/crossplane/pull/7753) - chore(deps): update module github.com/google/cel-go to v0.30.0 \[security] (release-2.3) by [@​crossplane-renovate](https://github.com/crossplane-renovate)\[bot] in [#​7761](crossplane/crossplane#7761) - chore(deps): bump crossplane-runtime to v2.3.4 by [@​jbw976](https://github.com/jbw976) in [#​7765](crossplane/crossplane#7765) **Full Changelog**: <crossplane/crossplane@v2.3.4...v2.3.5> </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/London) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNjAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI2MC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9oZWxtIiwidHlwZS9taW5vciJdfQ==--> Reviewed-on: https://forgejo.hayden.moe/hayden/phoebe/pulls/325
Description of your changes
Fixes #1056
I have:
./nix.sh flake checkto ensure this PR is ready for review.backport release-x.ylabels to auto-backport this PR.Need help with this checklist? See the cheat sheet.
This PR introduces a new cache optimization function,
TransformStripCRDSchema, to reduce the memory footprint of Crossplane providers that watch CustomResourceDefinition (CRD) objects.By default, the controller-runtime cache stores the entire schema for every watched object. For clusters with a massive number of CRDs storing the OpenAPI v3 validation schemas in the informer cache leads to significant memory bloat (hundreds of megabytes per provider pod).
TransformStripCRDSchemais acache.TransformFuncthat safely strips the following fields from CRD objects before they enter the informer cache:Spec.Versions[].Schema(OpenAPI v3 validation schemas)ObjectMeta.ManagedFieldskubectl.kubernetes.io/last-applied-configurationannotationProviders can leverage this by wiring it into their manager's
cache.Options.ByObjectconfiguration. Since most controllers (like the CRD gate) only require basic metadata, group/version/kind names, and status conditions to function correctly, stripping these heavy fields is completely safe.How has this been tested?
pkg/reconciler/customresourcesgate/cache_test.goverifying that schemas, specific annotations, and managed fields are correctly stripped while leaving all other data and non-CRD objects intact.provider-template. Testing a provider against a cluster with 2,045 Upjet AWS CRDs showed controller memory usage dropping from ~630 MiB down to ~83 MiB after applying this cache transform.