Update Helm release crossplane to v2.4.0 (main)
This MR contains the following updates:
| Package | Update | Change |
|---|---|---|
| crossplane (source) | minor | 2.0.8 -> 2.4.0 |
⚠️ WarningSome dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
crossplane/crossplane (crossplane)
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.
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. If your control plane is not affected by those changes, you can simply upgrade to v2 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 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 toreleases.crossplane.io. New CLI releases go only tocli.crossplane.io, under the binary namecrossplanerather thancrank. This completes the CLI's move to https://github.com/crossplane/cli, which was announced in thev2.3.0release notes and dual published to both locations forv2.3.0to 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 usecli.crossplane.io, and update any firewall or proxy rule that allowsreleases.crossplane.ioto now allowcli.crossplane.ioinstead.- Users of the
install.shscript as their installation procedure are unaffected.
- Users of the
- 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/.
- f you are using custom installation scripts or CI steps that download the CLI directly from
- 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 newPackageRevision. #7473- This fixes the long standing issue where changing a package's
runtimeConfigRefreused the existing revision, along with its stale runtime settings. #5068 - When upgrading to
v2.4, every installed package gets a new revision, with a new name, on its first reconcile. ⚠️ ThePodsforProvidersandFunctionswill be restarted for this new revision.
- This fixes the long standing issue where changing a package's
- Package runtime objects (
Deployment,ServiceAccount,Service, and TLSSecrets) are now applied with server-side apply under thepkg.crossplane.io/runtimefield manager, replacing the previous merge patch applicator. #7563- A field you remove from a
DeploymentRuntimeConfigis now removed from the live runtime object, rather than lingering until that object is replaced. #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.
- A field you remove from a
- The
RUNTIMEprinter column onProviderRevisionandFunctionRevisionwas renamed toRUNTIME-HEALTHY, and a newRUNTIME-ACTIVEcolumn was added. #7586- Update any tooling that reads
kubectl get providerrevisionorkubectl get functionrevisionoutput by column position.
- Update any tooling that reads
- The
typelabel on theengine_watches_started_totalandengine_watches_stopped_totalmetrics changed fromComposedResourcetoDependency, now that a single watch mechanism covers both composed and required resources. #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.mdand #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
ManagedResourceDefinitionsare inactive, so there is no reason to run its pods. Crossplane now creates such a provider's runtimeDeploymentwith zero replicas and scales it up once its first MRD becomes active, such as through a matchingManagedResourceActivationPolicy. Installing a broad set of providers no longer costs you a running pod for each one that has nothing to reconcile yet. #7586- A new
RuntimeActivecondition onProviderRevisionandFunctionRevisionmakes this visible. It isFalsewith reasonAwaitingActivationwhile the runtime is intentionally scaled to zero andTrueonce it has been scaled up.RuntimeHealthystays healthy in both cases, and the package'sHealthycondition surfaces the awaiting state with the same reason. - Scaling to zero takes precedence over an explicit
spec.replicasin aDeploymentRuntimeConfig, which is now read as how many replicas to run while running, rather than a demand to always be running. #7639
- A new
- 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 asgrypeandtrivypreviously 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 - More reliable package runtime management: Server-side apply for package runtime objects means a field you remove from a
DeploymentRuntimeConfigis now actually removed from the liveDeploymentinstead of lingering (#7563, fixing #4817). Deactivating a revision also no longer deletes a runtimeDeploymentthat another revision controls, which could happen when aDeploymentRuntimeConfigpins a stabledeploymentTemplate.metadata.name(#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.resourceRefscan no longer be used to make the composite controller delete arbitrary resources (#7627). The claim to XR syncers now strip XR machinery fields such asresourceRefsand thecrossplanestanza, which a claim could otherwise smuggle through an XRD schema that setsx-kubernetes-preserve-unknown-fields: true(#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 for this one in 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 tocrossplane internal render(#7452), requirements are returned even when a function returns a fatal result (#7455), a namespace is set on injected resource references only for cluster-scoped XRs, matching the real reconciler (#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). - The
sha256files published with release binaries are now calculated after Nix strips the binary, so amd64 checksums match what you download. They didn't forv2.2.0throughv2.3.1, and CI now verifies checksums before uploading artifacts. #7660 - A composed
Usageno longer gets a redundant owner update on every reconcile, which could repeatedly trigger composition reconciliation and eventually open the XR circuit breaker. #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
- Sorting of
spec.resourceRefsnow includes the namespace, so references stay stable when composed resources share a name across namespaces. #7341
- Several fixes to the render engine that backs
🏅 Release MVP
For the v2.4 release cycle, we'd like to recognize @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 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 went a step further and submitted an elegant solution in 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!
📖 Full Changelog
- chore(deps): bump crossplane-runtime to v2.4.0-rc.0 by @jbw976 in #7393
- build: add release-2.3 to renovate baseBranches by @jbw976 in #7395
- ci: Run checks on the apis module by @adamwg in #7396
- Make Renovate security updates bypass throttles by @phisco in #7391
- docs: add Stone Payments to ADOPTERS.md by @gadsilva in #7388
- build: Install Earthly in Renovate container via flake URL by @jbw976 in #7404
- build: put Nix profile bin on PATH in Renovate entrypoint by @jbw976 in #7405
- chore(deps): Bump Go to 1.25.10 to fix stdlib CVEs (main) by @jbw976 in #7414
- chore: bump releases table and renovate baseBranches after v2.3 release by @jbw976 in #7418
- chore(deps): update module golang.org/x/crypto to v0.52.0 [security] (main) by @crossplane-renovate[bot] in #7423
- fix(ci): match release tags only when computing build version by @jbw976 in #7431
- build: tag the apis/ Go submodule on every release by @jbw976 in #7444
- Update install.sh to point at the new CLI release bucket by @adamwg in #7441
- fix(render): allow xrd schema to be supplied for
internal renderby @jcogilvie in #7452 - README: add sig-v2-migration to list of SIGs by @jbw976 in #7462
- Move error types from xerrors to relevant packages by @adamwg in #7465
- fix(render): return requirements even on fatal errors by @jcogilvie in #7455
- fix: add namespace to resourceref stable sort by @LorenzBischof in #7341
- redact secret stringData before emitting to pipeline inspector by @netliomax25-code in #7476
- chore(deps): update actions/stale digest to
eb5cf3a(main) by @crossplane-renovate[bot] in #7379 - chore(deps): update actions/create-github-app-token digest to
fee1f7d(main) by @crossplane-renovate[bot] in #7310 - chore(deps): update gomod2nix digest to
1201ddd(main) by @crossplane-renovate[bot] in #7128 - chore(deps): update module golang.org/x/sys to v0.44.0 [security] (main) by @crossplane-renovate[bot] in #7435
- chore(deps): update module golang.org/x/net to v0.55.0 [security] (main) by @crossplane-renovate[bot] in #7434
- chore(deps): update bufbuild/buf-action digest to
fd21066(main) by @crossplane-renovate[bot] in #7380 - ci(renovate): disable the per-hour MR creation throttle by @jbw976 in #7482
- chore(deps): update actions/checkout digest to
df4cb1c(main) by @crossplane-renovate[bot] in #7483 - chore(deps): update mheap/require-checklist-action digest to
9c8100a(main) by @crossplane-renovate[bot] in #7487 - chore(deps): update github/codeql-action digest to
8aad20d(main) by @crossplane-renovate[bot] in #7486 - chore(deps): update codecov/codecov-action digest to
0fb7174(main) by @crossplane-renovate[bot] in #7485 - chore(deps): update cachix/install-nix-action digest to
8aa0397(main) by @crossplane-renovate[bot] in #7484 - chore(deps): update korthout/backport-action action to v4.5.2 (main) by @crossplane-renovate[bot] in #7491
- fix(deps): update module github.com/google/go-containerregistry to v0.21.6 (main) by @crossplane-renovate[bot] in #7490
- chore(deps): update actions/checkout action to v6.0.3 (main) by @crossplane-renovate[bot] in #7489
- chore(deps): update negz/create-tag digest to
39bae1e(main) by @crossplane-renovate[bot] in #7488 - chore(deps): update renovatebot/github-action action to v46.1.15 (main) by @crossplane-renovate[bot] in #7492
- fix(deps): update module github.com/alecthomas/kong to v1.15.0 (main) by @crossplane-renovate[bot] in #7493
- fix(deps): update module github.com/crossplane/crossplane/apis/v2 to v2.3.2 (main) by @crossplane-renovate[bot] in #7495
- fix(deps): update module github.com/aws/smithy-go to v1.27.2 (main) by @crossplane-renovate[bot] in #7494
- fix(deps): update module golang.org/x/sync to v0.21.0 (main) by @crossplane-renovate[bot] in #7497
- chore(deps): update actions/create-github-app-token action to v3 (main) by @crossplane-renovate[bot] in #7499
- fix(deps): update module google.golang.org/grpc to v1.81.1 (main) by @crossplane-renovate[bot] in #7498
- chore(deps): update cachix/cachix-action action to v17 (main) by @crossplane-renovate[bot] in #7501
- fix(deps): update module github.com/masterminds/semver/v3 to v3.5.0 (main) by @crossplane-renovate[bot] in #7496
- chore(deps): update docker/login-action action to v4 (main) by @crossplane-renovate[bot] in #7504
- chore(deps): update dependency renovate to v43 (main) by @crossplane-renovate[bot] in #7503
- chore(deps): update codecov/codecov-action action to v7 (main) by @crossplane-renovate[bot] in #7502
- chore(deps): update nick-fields/retry action to v4 (main) by @crossplane-renovate[bot] in #7507
- chore(deps): update github artifact actions to v7 (main) by @crossplane-renovate[bot] in #7506
- chore(deps): update dependency renovate to v43.222.0 (main) by @crossplane-renovate[bot] in #7505
- render: Set namespace on injected resource refs only for cluster-scoped XRs by @adamwg in #7523
- chore(deps): update dependency renovate to v43.230.0 (main) by @crossplane-renovate[bot] in #7509
- pkg: include package generation in revision ID by @RonaldLePape in #7473
- chore(deps): update module github.com/sigstore/cosign/v3 to v3.0.6 [security] (main) by @crossplane-renovate[bot] in #7551
- Update ADOPTERS.md by @cazeaux in #7533
- chore(deps): update module github.com/sigstore/rekor to v1.5.2 [security] (main) by @crossplane-renovate[bot] in #7552
- chore(deps): update module github.com/sigstore/timestamp-authority/v2 to v2.1.0 [security] (main) by @crossplane-renovate[bot] in #7567
- build(nix): build with buildGoModule so images are vulnerability-scannable by @phisco in #7549
- docs: fix duplicated word in crossplane-v2 proposal by @s3onghyun in #7526
- chore(deps): update module github.com/sigstore/sigstore-go to v1.2.0 [security] (main) by @crossplane-renovate[bot] in #7580
- chore(deps): update dependency renovate to v43.272.1 (main) by @crossplane-renovate[bot] in #7593
- fix: avoid repeated owner updates for composed Usages by @youssefcamao in #7591
- chore(deps): update dependency renovate to v43.272.8 (main) by @crossplane-renovate[bot] in #7595
- render: Don't overwrite the input XR's UID if it has one and validate observed resources by @adamwg in #7544
- Watch required resources to reconcile the XRs that require them by @negz in #7572
- fix(deps): combined security bumps (grpc, x/net, x/text) (main) by @lsviben in #7617
- chore(deps): update module golang.org/x/net to v0.56.0 [security] (main) by @crossplane-renovate[bot] in #7602
- Do not delete package runtime deployments owned by another revision by @truongnht in #7561
- chore(deps): update module golang.org/x/text to v0.39.0 [security] (main) by @crossplane-renovate[bot] in #7603
- Make check-diff CI verify generated files are committed by @phisco in #7213
- fix(ci): serialize Nix builds in Renovate entrypoint by @alliasgher in #7564
- use unambiguous separator for usage index key by @netliomax25-code in #7508
- test(e2e): use DefaultPollInterval in remaining wait.For calls by @amarkdotdev in #7547
- feat(pkg): scale safe-start provider runtimes to zero until their first MRD is activated by @haarchri in #7586
- chore(renovate): group security-fix MRs into one per branch by @phisco in #7641
- Scale safe-start runtimes to zero even when a DRC sets replicas by @negz in #7639
- build: give every Go build its own writable HOME by @jbw976 in #7652
- chore(deps): update vulnerable dependencies [security] (main) by @crossplane-renovate[bot] in #7645
- fix(composite): only garbage collect resources we control by @phisco in #7627
- pkg: Use the real DAG in dependency resolver tests by @adamwg in #7655
- chore(deps): update dependency renovate to v43.287.0 (main) by @crossplane-renovate[bot] in #7625
- fix(ci): make the flake.lock schedule reachable and cover release branches by @jbw976 in #7661
- build: Calculate checksums after the nix fixup phase by @adamwg in #7660
- chore(deps): update dependency renovate to v43.288.0 (main) by @crossplane-renovate[bot] in #7664
- adopters: add Julius Baer by @erost in #7657
- chore(deps): update actions/stale digest to
1e223db(main) by @crossplane-renovate[bot] in #7663 - chore(deps): update actions/checkout digest to
d23441a(main) by @crossplane-renovate[bot] in #7662 - lint: Tell the goconst linter to ignore tests by @adamwg in #7669
- chore(deps): update buildpulse/buildpulse-action action to v3 (main) by @crossplane-renovate[bot] in #7500
- chore(deps): update module github.com/sigstore/sigstore-go to v1.2.1 [security] (main) by @crossplane-renovate[bot] in #7670
- chore(deps): update cachix/install-nix-action digest to
630ae54(main) by @crossplane-renovate[bot] in #7672 - fix(deps): update module github.com/crossplane/crossplane/apis/v2 to v2.3.4 (main) by @crossplane-renovate[bot] in #7681
- chore(deps): update bufbuild/buf-action digest to
8c6a16e(main) by @crossplane-renovate[bot] in #7671 - chore(deps): update docker/login-action digest to
dbcb813(main) by @crossplane-renovate[bot] in #7673 - chore(deps): update github/codeql-action digest to
f205ea1(main) by @crossplane-renovate[bot] in #7674 - fix(deps): update module github.com/google/go-containerregistry to v0.21.8 (main) by @crossplane-renovate[bot] in #7682
- fix(deps): update module github.com/aws/smithy-go to v1.27.6 (main) by @crossplane-renovate[bot] in #7680
- chore(deps): update korthout/backport-action action to v4.6.0 (main) by @crossplane-renovate[bot] in #7686
- Fix 4817 runtime ssa deployment by @RonaldLePape in #7563
- ci: skip BuildPulse flake publishing when credentials are absent by @phisco in #7691
- fix(ci): prioritize flake.lock maintenance updates by @jbw976 in #7695
- chore(deps): update renovatebot/github-action action to v46.2.1 (main) by @crossplane-renovate[bot] in #7694
- chore(deps): update github/codeql-action digest to
d1ba80a(main) by @crossplane-renovate[bot] in #7693 - chore(deps): update actions/checkout action to v7 (main) by @crossplane-renovate[bot] in #7690
- fix(claim): don't propagate XR machinery fields from claims by @phisco in #7626
- build: point docker-client at docker_29 in the nix overlay by @jbw976 in #7701
- chore(deps): lock file maintenance (main) by @crossplane-renovate[bot] in #7696
- fix(ci): pin which Nix Renovate's post-upgrade tasks use by @jbw976 in #7709
- fix(deps): update module github.com/alecthomas/kong to v1.16.0 (main) by @crossplane-renovate[bot] in #7687
- build: bump pinned nixpkgs channel from nixos-25.11 to nixos-26.05 by @jbw976 in #7715
- Update the Netclab adopter entry by @mbakalarski in #7718
- pkg: Make deactivated revisions relinquish control of runtime resources by @adamwg in #7714
- chore(deps): update dependency renovate to v44 (main) by @crossplane-renovate[bot] in #7698
- drop secret last-applied annotation from pipeline inspector output by @phisco in #7726
- chore(deps): bump crossplane-runtime to v2.4.0-rc.1 by @jbw976 in #7735
- chore(deps): update module golang.org/x/mod to v0.40.0 [security] (release-2.4) by @crossplane-renovate[bot] in #7744
- [Backport release-2.4] fix(ci): pin negz/create-tag to v2 so apis/ submodule tagging works again by @github-actions[bot] in #7747
- chore(deps): lock file maintenance (release-2.4) by @crossplane-renovate[bot] in #7754
- chore(deps): bump crossplane-runtime to v2.4.0 by @jbw976 in #7762
New Contributors
- @gadsilva made their first contribution in #7388
- @LorenzBischof made their first contribution in #7341
- @netliomax25-code made their first contribution in #7476
- @RonaldLePape made their first contribution in #7473
- @cazeaux made their first contribution in #7533
- @s3onghyun made their first contribution in #7526
- @youssefcamao made their first contribution in #7591
- @truongnht made their first contribution in #7561
- @alliasgher made their first contribution in #7564
- @amarkdotdev made their first contribution in #7547
- @erost made their first contribution in #7657
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.3.0...v2.4.0
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
crankchecksums foramd64binaries (#7666, originally #7660): The published.sha256files forlinux_amd64binaries had not matched the binaries themselves sincev2.2.0, so any install script or Dockerfile that verified theamd64checksum failed. Checksums are now calculated after Nix strips the binary, and the release workflow verifies them before uploading. Fixes #7467. - Unambiguous
Usageindex key (#7630, originally #7508): The deletion protection webhook indexedUsageresources 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),golang.org/x/mod(#7743), andsigstore-go(#7678), plus a combined set of vulnerable dependency updates (#7650), to pick up upstream CVE fixes.crossplane-runtimeis also bumped tov2.3.4(#7765), which carries its own set of security dependency updates.
What's Changed
- build: give every Go build its own writable HOME by @jbw976 in #7653
- chore(deps): update vulnerable dependencies [security] (release-2.3) by @crossplane-renovate[bot] in #7650
- [Backport release-2.3] use unambiguous separator for usage index key by @github-actions[bot] in #7630
- Backport #7660 to release-2.3 by @adamwg in #7666
- chore(deps): update module github.com/sigstore/sigstore-go to v1.2.1 [security] (release-2.3) by @crossplane-renovate[bot] in #7678
- [Backport release-2.3] build: point docker-client at docker_29 in the nix overlay by @github-actions[bot] in #7706
- chore(deps): lock file maintenance (release-2.3) by @crossplane-renovate[bot] in #7700
- [Backport release-2.3] build: bump pinned nixpkgs channel from nixos-25.11 to nixos-26.05 by @jbw976 in #7720
- chore(deps): update module golang.org/x/mod to v0.40.0 [security] (release-2.3) by @crossplane-renovate[bot] in #7743
- [Backport release-2.3] fix(ci): pin create-tag to v2 so apis/ submodule tagging works again by @jbw976 in #7748
- chore(deps): lock file maintenance (release-2.3) by @crossplane-renovate[bot] in #7753
- chore(deps): update module github.com/google/cel-go to v0.30.0 [security] (release-2.3) by @crossplane-renovate[bot] in #7761
- chore(deps): bump crossplane-runtime to v2.3.4 by @jbw976 in #7765
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.3.4...v2.3.5
v2.3.4
v2.3.4 is a patch release scoped to fixing issues reported by users of Crossplane v2.3 and fixing security related issues in Crossplane and its dependencies.
🎉 Highlights
- Fixed repeated owner updates for composed Usages (#7597, originally #7591): The Usage controller only checked the first
ownerReferencewhen deciding whether thespec.byresource already owned the Usage. A Usage created by a Composition already has the composite as its first owner, sospec.byended up as a later owner and the controller issued an unnecessary update on every reconciliation — repeatedly re-triggering composition reconciliation and eventually opening the XR circuit breaker. It now checks all owner references. crossplane renderfixes (#7599, originally #7544):renderno longer overwrites the input XR's UID when one is already set, and now validates observed resources before proceeding with the render.- Vulnerability-scannable images (#7574): Container images are now built with
buildGoModule(replacinggomod2nix), so published images can be scanned by standard vulnerability tooling. - Dependency security updates: Bumps
grpc/golang.org/x/net/golang.org/x/text(#7618, #7614, #7615) and the sigstore stack —cosign(#7559),rekor(#7560),timestamp-authority(#7570),sigstore-go(#7583) — to pick up upstream CVE fixes. See## What's Changedfor the full list.
What's Changed
- chore(deps): update module github.com/sigstore/rekor to v1.5.2 [security] (release-2.3) by @crossplane-renovate[bot] in #7560
- chore(deps): update module github.com/sigstore/cosign/v3 to v3.0.6 [security] (release-2.3) by @crossplane-renovate[bot] in #7559
- chore(deps): update module github.com/sigstore/timestamp-authority/v2 to v2.1.0 [security] (release-2.3) by @crossplane-renovate[bot] in #7570
- [Backport release-2.3] build(nix): build with buildGoModule so images are vulnerability-scannable by @phisco in #7574
- chore(deps): update module github.com/sigstore/sigstore-go to v1.2.0 [security] (release-2.3) by @crossplane-renovate[bot] in #7583
- fix(deps): combined security bumps (grpc, x/net, x/text) (release-2.3) by @lsviben in #7618
- [Backport release-2.3] fix: avoid repeated owner updates for composed Usages by @github-actions[bot] in #7597
- [Backport release-2.3] render: Don't overwrite the input XR's UID if it has one and validate observed resources by @github-actions[bot] in #7599
- chore(deps): update module golang.org/x/text to v0.39.0 [security] (release-2.3) by @crossplane-renovate[bot] in #7615
- chore(deps): update module golang.org/x/net to v0.56.0 [security] (release-2.3) by @crossplane-renovate[bot] in #7614
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.3.3...v2.3.4
v2.3.3
v2.3.3 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
- Fixed package signature verification TOCTOU (
GHSA-mf7q-r4rv-jv94): A time-of-check-to-time-of-use flaw could let a malicious OCI registry pass signature verification with a signed image and then serve unsigned content for installation. Forv2.3this fix ships via the crossplane-runtimev2.3.3bump in #7541, since the affected code moved fromcrossplanetocrossplane-runtimeduring thev2.3milestone. See the crossplane-runtimev2.3.3release notes for the full details. - Correct namespace on injected resource refs in
crossplane render:crossplane renderpreviously set a namespace on every injected resource reference, which is inaccurate for namespaced XRs (whose resource refs are local and carry no namespace) and broke composition functions with strict schemas, such as the generated KCL bindings used in control plane projects. Render now matches the real reconciler and sets the namespace only for cluster-scoped XRs. Backported in #7525, originally fixed in #7523. - Dependency security updates: This release also bumps the Go toolchain to
1.25.11andgolang.org/x/netandgolang.org/x/sysin theapismodule to pick up CVE fixes (#7530). See## What's Changedbelow for the full list.
What's Changed
- [Backport release-2.3] render: Set namespace on injected resource refs only for cluster-scoped XRs by @github-actions[bot] in #7525
- [release-2.3] bump Go to 1.25.11 and apis golang.org/x/net, x/sys for CVEs [security] by @phisco in #7530
- Update crossplane-runtime to v2.3.3 by @lsviben in #7541
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.3.2...v2.3.3
v2.3.2
v2.3.2 is a patch release scoped to fixing issues reported by users of Crossplane v2.3 and fixing security related issues in Crossplane's dependencies. The primary goal of this release is to fix regressions in the Crossplane CLI's render commands.
What's Changed
- [Backport release-2.3] build: tag the apis/ Go submodule on every release by @github-actions[bot] in #7445
- Backport #7452 to release-2.3: render honors input XR schema by @jcogilvie in #7459
- Backport #7455 to release-2.3: return requirements even on fatal errors by @jcogilvie in #7466
- Bump crossplane-runtime dependency to v2.3.2 (release-2.3) by @adamwg in #7474
- [Backport release-2.3] fix: add namespace to resourceref stable sort by @github-actions[bot] in #7475
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.3.1...v2.3.2
v2.3.1
v2.3.1 is a patch release scoped to fixing issues reported by users of Crossplane v2.3 and fixing security related issues in Crossplane's dependencies.
What's Changed
- chore(deps): update module golang.org/x/crypto to v0.52.0 [security] (release-2.3) by @crossplane-renovate[bot] in #7427
- fix(ci): match release tags only when computing build version by @jbw976 in #7432
- chore(deps): bump crossplane-runtime to v2.3.1 by @jbw976 in #7433
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.3.0...v2.3.1
v2.3.0
The v2.3.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 a new high-fidelity local rendering engine, finer-grained reconciliation control for both XRs and managed resources, new alpha deletion protection for Provider packages, and a wide range of fixes and reliability improvements. It also includes security fixes in Crossplane's Go toolchain and dependencies.
ℹ️ Extended support for v1.20
Because v1.20 is the last minor release of the v1 series and major version upgrades require additional planning for users, v1.20 will continue to receive critical fixes. The final EOL date for v1.20 is to be determined.
⚠️ Upgrade from v2.2
It is strongly advised to upgrade to v2.3 from the previous minor version, which is v2.2. Upon upgrade for each minor release, Crossplane performs any necessary migrations of its CRDs to ensure the latest versions are stored in the Kubernetes API server. Therefore, it is important to upgrade sequentially through one minor version at a time as described in the upgrade docs.
🚨 Notable and Breaking Changes
github.com/crossplane/crossplane/apis/v2is now a separate Go module from the rest of Crossplane. #7019- External consumers of Crossplane APIs should update their dependencies from
github.com/crossplane/crossplane/v2/apistogithub.com/crossplane/crossplane/apis/v2. - The
commonAPIs fromcrossplane-runtimehave moved togithub.com/crossplane/crossplane/apis/v2/core. v1andv2of thecommonAPIs have been collapsed into a singlev2package. The oldv1.Resource*types are nowv2.ClusterManagedResource*to differentiate them fromv2.ManagedResource*, which are the namespaced versions.- A complete guide on how to update your provider source code to use these types can be found in the section below.
- External consumers of Crossplane APIs should update their dependencies from
- The Crossplane CLI (formerly
crank) has moved into its own repository, https://github.com/crossplane/cli, and will be released separately from Crossplane core going forward. #7355- A v2.3.0 release of the CLI coincides with this Crossplane core v2.3.0 release and has been dual published to the typical release location on releases.crossplane.io to help ease the transition. After the v2.3.0 release, version numbers and release schedules will diverge as the Crossplane CLI will have its own independent release schedule. Learn more and provide feedback in #7350.
- Commands have been re-organized into a noun-first tree.
- Alpha and beta commands that previously lived in the
crossplane alphaandcrossplane betatrees have moved into the main tree. - Example:
crossplane beta traceis nowcrossplane resource trace - See full release CLI notes (including full details on these breaking changes): https://github.com/crossplane/cli/releases/tag/v2.3.0
🎉 Highlights
- High-fidelity render engine:
crossplane rendernow drives the real composite reconciler via a new hiddencrossplane internal rendersubcommand, instead of maintaining a parallel reimplementation. The output ofcrossplane render(and downstream tools likecrossplane-diff) now matches what would actually happen in-cluster, eliminating differences between local rendering and real reconciliation. By default it pulls the Crossplane container image to run the reconcile, so a separate controller binary is not required. See #7280 and #7339. - Provider deletion protection: A new alpha feature automatically protects
Providerpackages from accidental deletion while instances of their managed resources still exist. When--enable-provider-deletion-protectionis set, Crossplane will automatically createClusterUsageresources that block Provider deletion through the existing Usage webhook. #7362 - Per-resource reconciliation control: Two new annotations give users fine-grained control over when individual resources reconcile.
crossplane.io/poll-intervaloverrides the controller-level poll interval for a specific resource (e.g."24h","30m"), andcrossplane.io/reconcile-requested-attriggers an immediate reconciliation when its value changes. This works immediately for XRs, but requires providers to release a new version based on crossplane-runtime v.2.3.0 to gain this behavior for their managed resources #7239 - Composition functions can now select all resources of a given kind: When a composition function returned a
Requirements.ResourceSelectorwith onlyapiVersionandkindset (nomatchNameormatchLabels), Crossplane previously rejected this as an invalid request. A selector with no match field is now correctly interpreted as "all resources of that kind". #7241 - Scale subresource for XRs:
CompositeResourceDefinitioncan now configure thescalesubresource on the XRs it defines, so composite resources can be scaled withkubectl scaleand other standard tooling. #7004 - Other notable improvements:
- Improved docker network configuration support for
crank render: A newrender.crossplane.io/runtime-docker-networkannotation onFunctionresources tells the Docker runtime which network function containers should join. This makescrossplane renderwork inside container jobs (such as GitHub Actions container jobs) where the default bridge network is unreachable from the caller. #7216 commonAnnotationsin compositions: Compositions can now propagate a set of common annotations to every composed resource, mirroring the existingcommonLabelsbehavior. #7211crossplane beta validatenow correctly resolves and caches dependencies that use semantic version ranges (e.g.">=v0.6.0,<v1.0.0"), and adds an--update-cacheflag to always check upstream for newer matching versions. #7050crossplane beta traceadds a YAML output format. #7275- The XR circuit breaker now resets its state when the XR is deleted, so a new resource with the same name starts fresh instead of inheriting an open circuit. #7201
CompositionRevisionand composite reconcilers now skip no-op status updates, eliminating an unnecessary reconcile loop that prevented steady state convergence. #7283
- Improved docker network configuration support for
🏅 Release MVP
For the v2.3 release cycle, we'd like to recognize two amazing community members for their contributions and name them the v2.3 release MVPs!
- @yordis delivered one of this release's headline features in #7239 as a first-time contributor to core Crossplane (but long time contributor to the Crossplane ecosystem
😉 ) : the per-resource reconciliation control. This work gives operators fine-grained control over when individual resources reconcile, and required coordinated changes across both the core composite reconciler and the managed reconciler incrossplane-runtime. Thank you @yordis! - @fernandezcuesta has had a sustained impact on the broader Crossplane ecosystem, contributing to and releasing a steady stream of community providers and extensions that expand what users can build on Crossplane, e.g.
provider-kafka,provider-mongodbatlas, andprovider-pagerduty. To top that off, they also landed new support in core Crossplane forcommonAnnotationsfor compositions in #7211. Thank you, @fernandezcuesta!
Updating a provider's source code to the v2.3 API types
The common API types that providers embed (managed resource specs and statuses, provider config types, credential selectors, and conditions) now live in the new github.com/crossplane/crossplane/apis/v2 module, in its core/v2 package, rather than in crossplane-runtime. Providers adopt them by bumping their dependencies, changing to the new types, then regenerating their method sets with the latest build of crossplane-tools from master.
crossplane/provider-template#164 is a complete, merged example of this update and a useful reference to diff against while working through the steps below.
crossplane-tools support for v2.3+ is additive: it still generates against the legacy crossplane-runtime types, so upgrading crossplane-tools does not force this source code migration. It is also possible to just bump the tool first and then migrate your types when you are ready.
Update dependencies. Fetch the v2.3.3 runtime and APIs modules, plus the latest crossplane-tools from master:
go get github.com/crossplane/crossplane-runtime/v2@​v2.3.3
go get github.com/crossplane/crossplane/apis/v2@​v2.3.3
go get -tool github.com/crossplane/crossplane-tools/cmd/angryjet@latestIf your provider pins the generator a different way, such as a tools.go blank import rather than a Go tool directive, drop -tool and run go get github.com/crossplane/crossplane-tools@latest instead.
Update imports in all source code files. Replace the two crossplane-runtime common imports with the single core/v2 package:
// before
xpv1 "github.com/crossplane/crossplane-runtime/v2/apis/common/v1"
xpv2 "github.com/crossplane/crossplane-runtime/v2/apis/common/v2"
// after
xpv2 "github.com/crossplane/crossplane/apis/v2/core/v2"Update types. The core/v2 package keeps the same names as the old common/v2 types, and most of the common/v1 types also kept their names. They simply move to the new module with the import alias repoint.
The common/v1 (xpv1) types that need to be renamed are as follows:
Old (crossplane-runtime common/v1) |
New (apis/v2/core/v2) |
|---|---|
ResourceStatus |
ManagedResourceStatus |
ResourceSpec |
ClusterManagedResourceSpec |
There is a single ManagedResourceStatus for both namespaced and cluster-scoped managed resources, so the spec is the only part that differs by scope (ManagedResourceSpec vs ClusterManagedResourceSpec).
Regenerate and tidy. Run make generate (or your go generate target), then go mod tidy.
Silence the deprecated event recorder. The Kubernetes controller-runtime version is also bumped during this process, which includes a deprecation of the EventRecorder API, so you will likely have linter failures if you are using that API until #7152 is fixed. Consider adding a nolint comment for now:
managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), //nolint:staticcheck // pending the new events API, see crossplane/crossplane#7152Update your scaffolding templates. If your provider generates new resources from templates such as those under hack/helpers, update those to the v2.3 types so newly-added resources start on the new API.
What's Changed
- Bump crossplane-runtime dependency to v2.3.0-rc.0 by @adamwg in #7134
- Update renovate config for v2.2 release by @adamwg in #7141
- Use foreground cascading deletion for unneeded composed resources by @bobh66 in #6599
- readme: Leave a note about v1.20 extended support by @adamwg in #7153
- chore: clean up lingering refs to HACK_CROSSPLANE_ARGS by @jbw976 in #7124
- Add WG to adopters by @alexey-pankratyev in #7165
- build: mitigate potential script injection in promote workflow by @jbw976 in #7166
- fix: adding required permissions to top level and jobs in the workflow by @gaganhr94 in #7131
- ci: fix renovate config parsing by @phisco in #7176
- apis: Make apis a separate go module by @adamwg in #7019
- Update crossplane-runtime to use core APIs from the apis module by @adamwg in #7190
- fix(crank): xpkg push respects proxy environment variables by @fhopfensperger in #7208
- fix(crank): include resource kind, name, namespace in trace get errors by @kruthiwusirika5 in #7158
- chore(deps): update module github.com/cloudflare/circl to v1.6.3 [security] (main) by @crossplane-renovate[bot] in #7177
- Add a warning message for when a resource's namespace is overwritten by @adamkasztenny in #7156
- Issue #7200 - Reset circuit breaker state on XR deletion by @nicmunroe in #7201
- Update crossplane-runtime and remove temporary copy by @adamwg in #7215
- ci: use new env for renovate allowed commands by @phisco in #7188
- ci: switch to korthout/backport-action and update it. by @phisco in #7234
- ci: drop Trivy vulnerability scanning by @phisco in #7237
- add sig-prod-readiness by @mestredelpino in #7136
- Add render.crossplane.io/runtime-docker-network annotation by @jtucci in #7216
- fix: get all resources when requiredResources matchLabels is empty by @nkzk in #7145
- fix(deps): update module google.golang.org/grpc to v1.79.3 [security] (main) by @crossplane-renovate[bot] in #7225
- Support ResourceSelector with no match field by @negz in #7241
- feat: implement commonAnnotations by @fernandezcuesta in #7211
- adopters: add T-Systems International GmbH to adopters list by @jbw976 in #7261
- Remove Hyland Software from ADOPTERS.md by @sethfduke in #7262
- Allow XRDs to configure the
scalesubresource by @jonasz-lasut in #7004 - Add YAML output format to crossplane beta trace by @bobh66 in #7275
- fix: set standard file permissions on Nix-built release binaries by @adamkasztenny in #7255
- pkg: Correctly handle dependency upgrades with ImageConfig prefix rewriting by @adamwg in #7233
- README: update release table after v2.2 release by @jbw976 in #7274
- chore(deps): update module go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp to v1.43.0 [security] (main) by @crossplane-renovate[bot] in #7286
- fix(deps): update module github.com/go-git/go-git/v5 to v5.17.1 [security] (main) by @crossplane-renovate[bot] in #7137
- chore(deps): update module github.com/go-jose/go-jose/v4 to v4.1.4 [security] (main) by @crossplane-renovate[bot] in #7263
- fix(deps): update module github.com/sigstore/cosign/v3 to v3.0.5 [security] (main) by @crossplane-renovate[bot] in #7178
- chore(deps): update module github.com/docker/cli to v29.2.0+incompatible [security] (main) by @crossplane-renovate[bot] in #7193
- chore(deps): update module github.com/sigstore/timestamp-authority/v2 to v2.0.6 [security] (main) by @crossplane-renovate[bot] in #7297
- Add UpToDate condition by @bobh66 in #7294
- Use xcrd and xpkg packages from crossplane-runtime by @adamwg in #7308
- chore(deps): bump Go to 1.25.9 [security] by @phisco in #7306
- chore: add Lansweeper as adopter by @fernandezcuesta in #7172
- chore(deps): update module github.com/moby/spdystream to v0.5.1 [security] (main) by @crossplane-renovate[bot] in #7313
- Fix nix lint errors by @adamwg in #7321
- Avoid rebuilding upstream nixpkgs due to Go toolchain changes by @adamwg in #7323
- fix(deps): update module github.com/go-git/go-git/v5 to v5.18.0 [security] (main) by @crossplane-renovate[bot] in #7325
- Add high-fidelity render engine by @negz in #7280
- Add per-resource poll interval and reconcile-now annotations by @yordis in #7239
- chore: disable CodeRabbit automatic label application by @jbw976 in #7337
- design: Add a design document for developer experience tooling by @adamwg in #6909
- crank: Update render to use
crossplane internal renderby @adamwg in #7339 - feat(crank): add per-service template vars for xpkg batch by @nullable-eth in #7295
- fix(cli/beta/validate): support dependency semantic version range by @nkzk in #7050
- Use pkgs.unstable overlay instead of single pkgs.go-unstable attribute by @negz in #7356
- Remove crank by @adamwg in #7355
- fix(gomod): update go mod and gomod2nix after crank removal by @haarchri in #7361
- feat(provider-deletion): protect Providers from deletion via ClusterUsage by @haarchri in #7362
- chore(deps): update module github.com/in-toto/in-toto-golang to v0.11.0 [security] (main) by @crossplane-renovate[bot] in #7368
- chore(deps): update module golang.org/x/net to v0.53.0 [security] (main) by @crossplane-renovate[bot] in #7363
- Pin Renovate config validator by @phisco in #7386
- Skip no-op status updates in revision and composite reconcilers by @tgoodwin in #7283
- Update ADOPTERS.md by @olafsm in #7385
- Pin Renovate Earthly download by @phisco in #7387
- chore(deps): bump crossplane-runtime to v2.3.0-rc.1 by @jbw976 in #7394
- chore(deps): Bump Go to 1.25.10 to fix stdlib CVEs (release-2.3) by @jbw976 in #7413
- chore(deps): bump crossplane-runtime to v2.3.0 by @jbw976 in #7417
New Contributors
- @alexey-pankratyev made their first contribution in #7165
- @gaganhr94 made their first contribution in #7131
- @kruthiwusirika5 made their first contribution in #7158
- @adamkasztenny made their first contribution in #7156
- @nicmunroe made their first contribution in #7201
- @mestredelpino made their first contribution in #7136
- @jtucci made their first contribution in #7216
- @nkzk made their first contribution in #7145
- @yordis made their first contribution in #7239
- @tgoodwin made their first contribution in #7283
- @olafsm made their first contribution in #7385
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.2.0...v2.3.0
v2.2.5
v2.2.5 is a patch release scoped to fixing issues reported by users of Crossplane v2.2 and fixing security related issues in Crossplane's dependencies.
🎉 Highlights
- Correct
crankchecksums foramd64binaries (#7665, originally #7660): The published.sha256files forlinux_amd64binaries had not matched the binaries themselves sincev2.2.0, so any install script or Dockerfile that verified theamd64checksum failed. Checksums are now calculated after Nix strips the binary, and the release workflow verifies them before uploading. Fixes #7467. - Unambiguous
Usageindex key (#7629, originally #7508): The deletion protection webhook indexedUsageresources 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(#7760),golang.org/x/mod(#7742),sigstore-go(#7677), andgo-git(#7724), plus a combined set of vulnerable dependency updates (#7649), to pick up upstream CVE fixes.crossplane-runtimeis also bumped tov2.2.4(#7766), which carries its own set of security dependency updates.
What's Changed
- build: give every Go build its own writable HOME by @jbw976 in #7654
- chore(deps): update vulnerable dependencies [security] (release-2.2) by @crossplane-renovate[bot] in #7649
- [Backport release-2.2] use unambiguous separator for usage index key by @github-actions[bot] in #7629
- Backport #7660 to release-2.2 by @adamwg in #7665
- chore(deps): update module github.com/sigstore/sigstore-go to v1.2.1 [security] (release-2.2) by @crossplane-renovate[bot] in #7677
- build: point docker-client at docker_29 in the nix overlay [release-2.2] by @phisco in #7704
- chore(deps): lock file maintenance (release-2.2) by @crossplane-renovate[bot] in #7699
- [Backport release-2.2] build: bump pinned nixpkgs channel from nixos-25.11 to nixos-26.05 by @jbw976 in #7719
- fix(deps): update module github.com/go-git/go-git/v5 to v5.19.2 [security] (release-2.2) by @crossplane-renovate[bot] in #7724
- chore(deps): update module golang.org/x/mod to v0.40.0 [security] (release-2.2) by @crossplane-renovate[bot] in #7742
- chore(deps): lock file maintenance (release-2.2) by @crossplane-renovate[bot] in #7752
- chore(deps): update module github.com/google/cel-go to v0.30.0 [security] (release-2.2) by @crossplane-renovate[bot] in #7760
- chore(deps): bump crossplane-runtime to v2.2.4 by @jbw976 in #7766
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.2.4...v2.2.5
v2.2.4
v2.2.4 is a patch release scoped to fixing issues reported by users of Crossplane v2.2 and fixing security related issues in Crossplane and its dependencies.
🎉 Highlights
- Fixed repeated owner updates for composed Usages (#7596, originally #7591): The Usage controller only checked the first
ownerReferencewhen deciding whether thespec.byresource already owned the Usage. A Usage created by a Composition already has the composite as its first owner, sospec.byended up as a later owner and the controller issued an unnecessary update on every reconciliation — repeatedly re-triggering composition reconciliation and eventually opening the XR circuit breaker. It now checks all owner references. - Vulnerability-scannable images (#7575): Container images are now built with
buildGoModule(replacinggomod2nix), so published images can be scanned by standard vulnerability tooling. - Dependency security updates: Bumps
grpc/golang.org/x/net/golang.org/x/text(#7619) and the sigstore stack —cosign(#7558),rekor(#7557),timestamp-authority(#7569),sigstore-go(#7582) — to pick up upstream CVE fixes. See## What's Changedfor the full list.
What's Changed
- chore(deps): update module github.com/sigstore/rekor to v1.5.2 [security] (release-2.2) by @crossplane-renovate[bot] in #7557
- fix(deps): update module github.com/sigstore/cosign/v3 to v3.0.6 [security] (release-2.2) by @crossplane-renovate[bot] in #7558
- chore(deps): update module github.com/sigstore/timestamp-authority/v2 to v2.1.0 [security] (release-2.2) by @crossplane-renovate[bot] in #7569
- [Backport release-2.2] build(nix): build with buildGoModule so images are vulnerability-scannable by @phisco in #7575
- chore(deps): update module github.com/sigstore/sigstore-go to v1.2.0 [security] (release-2.2) by @crossplane-renovate[bot] in #7582
- fix(deps): combined security bumps (grpc, x/net, x/text) (release-2.2) by @lsviben in #7619
- [Backport release-2.2] fix: avoid repeated owner updates for composed Usages by @github-actions[bot] in #7596
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.2.3...v2.2.4
v2.2.3
v2.2.3 is a patch release scoped to fixing issues reported by users of Crossplane v2.2 and fixing security related issues in Crossplane and its dependencies.
🎉 Highlights
- Fixed package signature verification TOCTOU (
GHSA-wfqx-gjrf-g28r): A time-of-check-to-time-of-use flaw would let a malicious OCI registry serve a correctly signed image for verification and then an unsigned image for installation, because Crossplane resolved tag references separately for each step. Crossplane now resolves a tag to a digest once and uses that same digest for both signature verification and the image pull, so the content that is verified is exactly the content that is installed. This affected only users who enable package signature verification, install packages by tag, and pull from registries they don't control. Installing by digest would avoid this issue. Backported in #7520, and reported independently by @bugbunny-research and @tonghuaroot.- Note this fix appears in
crossplanefor v2.2 andcrossplane-runtimefor v2.3 because the affected code was moved fromcrossplanetocrossplane-runtimeduring the v2.3 milestone.
- Note this fix appears in
- Dependency security updates: This release also bumps the Go toolchain to
1.25.11(#7529),golang.org/x/nettov0.55.0(#7438), and crossplane-runtime tov2.2.3(#7540), picking up security fixes in those upstream dependencies.
What's Changed
- chore(deps): update module golang.org/x/net to v0.55.0 [security] (release-2.2) by @crossplane-renovate[bot] in #7438
- Backport xpkg signature verification fix to release-2.2 by @adamwg in #7520
- [release-2.2] bump Go to 1.25.11 [security] by @phisco in #7529
- Update crossplane-runtime to v2.2.3 by @lsviben in #7540
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.2.2...v2.2.3
v2.2.2
v2.2.2 is a patch release scoped to fixing issues reported by users of Crossplane v2.2 and fixing security related issues in Crossplane's dependencies.
What's Changed
- fix(deps): update module github.com/in-toto/in-toto-golang to v0.11.0 [security] (release-2.2) by @crossplane-renovate[bot] in #7372
- fix(deps): update module github.com/go-git/go-git/v5 to v5.19.0 [security] (release-2.2) by @crossplane-renovate[bot] in #7384
- chore(deps): Bump Go to 1.25.10 to fix stdlib CVEs (release-2.2) by @jbw976 in #7412
- fix(deps): update module github.com/go-git/go-git/v5 to v5.19.1 [security] (release-2.2) by @crossplane-renovate[bot] in #7409
- chore(deps): update module golang.org/x/crypto to v0.52.0 [security] (release-2.2) by @crossplane-renovate[bot] in #7426
- chore(deps): bump crossplane-runtime to v2.2.2 (release-2.2) by @jbw976 in #7430
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.2.1...v2.2.2
v2.2.1
v2.2.1 is a patch release scoped to fixing issues reported by users of Crossplane v2.2 and fixing security related issues in Crossplane's dependencies.
🎉 Highlights
-
Dependency upgrades work correctly with
ImageConfigprefix rewriting: Packages installed via anImageConfigprefix rewrite were previously not being upgraded when their dependencies changed, leaving users stuck on stale versions of dependent packages. Dependency upgrades now behave as expected when prefix rewrites are in use. Backported in #7277, originally fixed in #7233. -
Composition functions can now select all resources of a given kind: When a composition function returned a
Requirements.ResourceSelectorwith onlyapiVersionandkindset (nomatchNameormatchLabels), Crossplane previously rejected this as an invalid request. A selector with no match field is now correctly interpreted as "all resources of that kind". Backported in #7247, originally fixed in #7241.
This release also bumps Go to 1.25.9 and pulls in security related updates for a number of Crossplane's upstream dependencies, including cosign, go-git, go-jose, cloudflare/circl, moby/spdystream, sigstore/timestamp-authority, docker/cli, and the OpenTelemetry OTLP HTTP trace exporter
What's Changed
- [Backport release-2.2] build: mitigate potential script injection in promote workflow by @github-actions[bot] in #7168
- [Backport release-2.2] fix: adding required permissions to top level and jobs in the workflow by @github-actions[bot] in #7175
- chore(deps): update module github.com/cloudflare/circl to v1.6.3 [security] (release-2.2) by @crossplane-renovate[bot] in #7182
- [Backport release-2.2] ci: drop Trivy vulnerability scanning by @github-actions[bot] in #7238
- chore(deps): update module go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp to v1.43.0 [security] (release-2.2) by @crossplane-renovate[bot] in #7290
- chore(deps): update module github.com/go-jose/go-jose/v4 to v4.1.4 [security] (release-2.2) by @crossplane-renovate[bot] in #7266
- fix(deps): update module github.com/sigstore/cosign/v3 to v3.0.5 [security] (release-2.2) by @crossplane-renovate[bot] in #7184
- fix(deps): update module github.com/go-git/go-git/v5 to v5.17.1 [security] (release-2.2) by @crossplane-renovate[bot] in #7183
- chore(deps): update module github.com/docker/cli to v29.2.0+incompatible [security] (release-2.2) - autoclosed by @crossplane-renovate[bot] in #7197
- chore(deps): bump Go to 1.25.9 [security] (release-2.2) by @phisco in #7307
- [Backport release-2.2] pkg: Correctly handle dependency upgrades with ImageConfig prefix rewriting by @github-actions[bot] in #7277
- chore(deps): update module github.com/moby/spdystream to v0.5.1 [security] (release-2.2) by @crossplane-renovate[bot] in #7319
- chore(deps): update module github.com/sigstore/timestamp-authority/v2 to v2.0.6 [security] (release-2.2) by @crossplane-renovate[bot] in #7320
- [Backport release-2.2] Fix nix lint errors by @github-actions[bot] in #7322
- Backport #7323 to release-2.2 by @adamwg in #7324
- [Backport release-2.2] Support ResourceSelector with no match field by @github-actions[bot] in #7247
- fix(deps): update module github.com/go-git/go-git/v5 to v5.18.0 [security] (release-2.2) by @crossplane-renovate[bot] in #7329
- Bump crossplane-runtime to v2.2.1 by @lsviben in #7333
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.2.0...v2.2.1
v2.2.0
The v2.2.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 many fixes and reliability improvements, a new alpha feature for debugging (the pipeline inspector), and usability improvements.
ℹ️ Extended support for v1.20
Normally, the release of v2.2 would correspond with the end-of-life for v1.20. However, because v1.20 is the last minor release of the v1 series and major version upgrades require additional planning for users, v1.20 will continue to receive critical fixes. The final EOL date for v1.20 is to be determined.
⚠️ Upgrade from v2.1
It is strongly advised to upgrade to v2.2 from the previous minor version, which is v2.1. Upon upgrade for each minor release, Crossplane performs any necessary migrations of its CRDs to ensure the latest versions are stored in the Kubernetes API server. Therefore, it is important to upgrade sequentially through one minor version at a time as described in the upgrade docs.
🚨 Notable and Breaking Changes
- Input CRDs included in
Functionpackages are no longer installed by the package manager, following the xpkg specification. Unknown or disallowed resources in a package are now ignored instead of causing package installation to fail. See #6976. - The on-disk structure of the package cache has changed. This breaks an undocumented behavior via which packages could be side-loaded into Crossplane, which was especially useful for testing. See #6981 for details on the change and #7147 for discussion of the test changes necessary to accommodate it.
🎉 Highlights
ImageConfigcan now be used to configure theDeploymentRuntimeConfigused for packages, including those installed as dependencies. Note that a matchingImageConfigtakes precedence over theruntimeConfigRefin a package spec if both are present. See #6382.- The MRD controller now uses server-side apply to update CRDs, improving reliability. See #6934.
- The pipeline inspector is now available as an alpha feature (disabled by default). When enabled, the inspector forwards function requests and responses to a user-configured gRPC endpoint for debugging or observability. See #7025 and #7031.
- XRDs can now configure
x-kubernetes-validationsoutside of the spec. This allows for validation of metadata such as names and labels. See #7018. - Composition and operation functions can now request OpenAPI schemas for any resource kind in the cluster using the
RequiredSchemasfield in the function response. Crossplane now advertises capabilities (including required schemas) to functions in a new function request field. See #7022. - The
crossplane beta traceCLI command now supports tracing all resources of a given kind, and supports watching resources. See #6552 and #7015. - New documentation has been added regarding connection details for composite resources and workload identity with Crossplane.
🏅 Release MVP
@jonasz-lasut is the v2.2 release MVP! Their work driving enhancements, fixing bugs, and maintaining quality across Crossplane and its ecosystem is much appreciated by the Crossplane maintainers. Additionally, @jonasz-lasut is an active participant on the Crossplane Slack instance, answering questions and providing guidance to many new and experienced members of the community. Thank you for your dedication, @jonasz-lasut!
What's Changed
- chore(deps): bump crossplane-runtime to v2.2.0-rc.0 by @jbw976 in #6888
- build: add release-2.1 to renovate baseBranches by @jbw976 in #6892
- Fix Docker port binding race condition on macOS by using HostPort "0" by @kaessert in #6897
- v2.1 release follow ups by @jbw976 in #6903
- Fix XR circuit breaker to account for double token consumption by @negz in #6911
- chore: add Evaneos to adopters list by @jbw976 in #6916
- chore(deps): update docker/login-action digest to
5e57cd1(main) by @crossplane-renovate[bot] in #6890 - chore(deps): update module golang.org/x/crypto to v0.43.0 [security] (main) by @crossplane-renovate[bot] in #6921
- chore: add ambev tech as adopter by @rafaelvilarinho in #6925
- Update ADOPTERS.md by @O5ten in #6900
- Fix claim controller watch startup after transient failures by @negz in #6929
- Add option to prevent events from being emitted in default namespace by @frigaut-orange in #6733
- Allow configuring custom annotations on Crossplane helm chart secret resources by @ravilr in #6917
- Use server-side apply for MRD controller by @negz in #6934
- fix: Add TLS as app protocol to function service by @ezgidemirel in #6943
- pkg: Allow configuration of DeploymentRuntimeConfig via ImageConfig by @adamwg in #6940
- chore(deps): update module github.com/jmattheis/goverter to v1.9.2 (main) by @crossplane-renovate[bot] in #6918
- chore(deps): update github/codeql-action digest to
d3ced5c(main) by @crossplane-renovate[bot] in #6891 - chore(deps): update module golang.org/x/crypto to v0.45.0 [security] (main) by @crossplane-renovate[bot] in #6937
- chore(deps): update actions/checkout digest to
34e1148(main) by @crossplane-renovate[bot] in #6954 - add yaml support to render --context-files and --context-values flag by @u-kai in #6830
- chore(deps): update github/codeql-action digest to
497990d(main) by @crossplane-renovate[bot] in #6955 - Add Netclab to adopters list with usage details by @mbakalarski in #6972
- fix(render): propagate root composite identity through nested XR trees by @jcogilvie in #6957
- Add Sumo Logic to adopters by @jcogilvie in #6958
- Update ADOPTERS.md by @TheBelgarion in #6754
- fix(deps): update module google.golang.org/protobuf to v1.36.11 (main) by @crossplane-renovate[bot] in #6960
- Disable CodeRabbit issue enrichment beta feature by @negz in #6993
- chore: update run function proto comments for v2 connection details by @jbw976 in #6992
- pkg: Stop installing function input CRDs and ignore disallowed kinds by @adamwg in #6976
- fix broken link by @cahillsf in #6995
- chore: Remove ESS leftovers by @ezgidemirel in #7001
- tests: add error handling test for printPodsTable by @intojhanurag in #6944
- feat: Support list of resources for
crossplane beta traceby @twobiers in #6552 - Introduce
xpkg.Clientto consolidate package fetching by @negz in #6981 - Bump golangci-lint to v2.6.2 by @negz in #7009
- apis: Eliminate imports of internal packages in apis by @adamwg in #7002
- Add sidecar container support to Crossplane Helm chart by @phisco in #7007
- feat(helm): Set automountServiceAccountToken on service accounts by @bradyz7 in #6873
- chore: add adamwg as maintainer, move turkenh to emeritus by @jbw976 in #7027
- docs: fix typo in comments by @NAM-MAN in #7028
- Pipeline inspector hook one-pager by @phisco in #7025
- chore(deps): update module github.com/go-chi/chi/v5 to v5.2.4 [security] (main) by @crossplane-renovate[bot] in #7033
- Add Cosign v3 support by @jonasz-lasut in #6985
- pkg: Fix upgrading packages with common transitive dependencies by @adamwg in #7030
- Add an option to prevent caching of resources in other namespaces by @frigaut-orange in #6732
- feat: add defaultCompositionRevisionSelector for v1 and v2 APIs by @markussiebert in #7032
- docs(links): update links in crds by @haarchri in #7045
- Migrate build system from Earthly to Nix by @negz in #6999
- Fix Renovate local preset syntax to use owner/repo//path format by @negz in #7055
- Fix Nix config for Renovate post-upgrade tasks by @negz in #7058
- Disable Nix build-users-group for Renovate by @negz in #7059
- fix(deps): update module github.com/sigstore/cosign/v3 to v3.0.4 [security] (main) by @crossplane-renovate[bot] in #7047
- chore(deps): pin dependencies (main) by @crossplane-renovate[bot] in #7057
- skip checklist-completed check for comments by @lsviben in #7061
- chore(deps): update module github.com/go-chi/chi/v5 to v5.2.4 [security] (main) by @crossplane-renovate[bot] in #7046
- chore(deps): update module github.com/theupdateframework/go-tuf/v2 to v2.4.1 [security] (main) by @crossplane-renovate[bot] in #7048
- chore(deps): update module github.com/sigstore/rekor to v1.5.0 [security] (main) by @crossplane-renovate[bot] in #7034
- fix(deps): update module github.com/sigstore/sigstore to v1.10.4 [security] (main) by @crossplane-renovate[bot] in #7035
- chore(deps): update module github.com/quic-go/quic-go to v0.57.0 [security] (main) by @crossplane-renovate[bot] in #6977
- fix(fn-cache): prevent caching responses with unfulfilled requirements by @haarchri in #6961
- fix: improve errors for malformed xpkg examples by @majiayu000 in #6990
- Add Christopher Haar as a maintainer by @negz in #7069
- chore(deps): update docker/login-action digest to
c94ce9f(main) by @crossplane-renovate[bot] in #7070 - chore(deps): update github/codeql-action digest to
439137e(main) by @crossplane-renovate[bot] in #7071 - Remove Earthfile and .ko.yaml by @negz in #7073
- chore(deps): update module github.com/jmattheis/goverter to v1.9.3 (main) by @crossplane-renovate[bot] in #7074
- chore(deps): update actions/checkout action to v4.3.1 (main) by @crossplane-renovate[bot] in #7076
- chore(deps): update aquasecurity/trivy-action action to v0.33.1 (main) by @crossplane-renovate[bot] in #7077
- fix(deps): update module github.com/sirupsen/logrus to v1.9.4 (main) by @crossplane-renovate[bot] in #7075
- chore(deps): update buildpulse/buildpulse-action action to v0.12.0 (main) by @crossplane-renovate[bot] in #7078
- fix(deps): update module github.com/alecthomas/kong to v1.13.0 (main) by @crossplane-renovate[bot] in #7081
- fix(deps): update module github.com/emicklei/dot to v1.10.0 (main) by @crossplane-renovate[bot] in #7083
- fix(deps): update module github.com/go-git/go-billy/v5 to v5.7.0 (main) by @crossplane-renovate[bot] in #7087
- Remove unused
tools/dir by @negz in #7085 - Use lockFileMaintenance to update flake.lock by @negz in #7084
- feat(trace): add watch for trace by @haarchri in #7015
- Pipeline inspector implementation by @phisco in #7031
- chore(deps): update github/codeql-action digest to
2588666(main) by @crossplane-renovate[bot] in #7092 - fix(deps): update module github.com/go-git/go-git/v5 to v5.16.4 (main) by @crossplane-renovate[bot] in #7088
- fix(deps): update module github.com/docker/go-connections to v0.6.0 (main) by @crossplane-renovate[bot] in #7082
- chore(deps): update actions/checkout action to v6 (main) by @crossplane-renovate[bot] in #7095
- chore(deps): update actions/upload-artifact action to v6 (main) by @crossplane-renovate[bot] in #7098
- chore(deps): lock file maintenance (main) by @crossplane-renovate[bot] in #7102
- chore(deps): update actions/create-github-app-token action to v2 (main) by @crossplane-renovate[bot] in #7096
- chore(deps): update actions/stale action to v10 (main) by @crossplane-renovate[bot] in #7097
- chore(deps): update codecov/codecov-action action to v5 (main) by @crossplane-renovate[bot] in #7099
- chore(deps): update renovatebot/github-action action to v46 (main) by @crossplane-renovate[bot] in #7100
- chore(deps): update zeebe-io/backport-action action to v4 (main) by @crossplane-renovate[bot] in #7101
- chore(deps): update dependency ubuntu to v24 (main) by @crossplane-renovate[bot] in #7103
- chore(deps): update github/codeql-action action to v4 (main) by @crossplane-renovate[bot] in #7104
- fix(deps): update module github.com/in-toto/in-toto-golang to v0.10.0 (main) by @crossplane-renovate[bot] in #7093
- build: add args support for hack target, add new unhack target by @jbw976 in #7106
- fix: exclude ClusterProviderConfigUsages from CRD to MRD conversion by @LukeTimeWalker in #7090
- Handle CronOperation and WatchOperation in alpha render op by @bobh66 in #7021
- build: add values file support for hack target by @phisco in #7107
- fix(deps): update module github.com/posener/complete to v2 (main) by @crossplane-renovate[bot] in #7105
- feat(install.sh): download and unpack the compressed file by @tampakrap in #6436
- Add shell script linting and expand lint app to format all code by @negz in #7112
- Add CLI argument support to hack Nix app by @negz in #7111
- fix: check correct condition in package reconciler by @tenstad in #7091
- Add support for composition functions to request OpenAPI schemas by @negz in #7022
- Use function-python:v0.4.0 in required schemas E2Es by @negz in #7117
- Use
--watched-resourceflag for WatchOperations by @negz in #7113 - chore(deps): update gomod2nix digest to
0629af8(main) by @crossplane-renovate[bot] in #7115 - chore(deps): update gomod2nix digest to
75c2866(main) by @crossplane-renovate[bot] in #7120 - chore(deps): update github/codeql-action digest to
45cbd0c(main) by @crossplane-renovate[bot] in #7119 - fix(deps): update module github.com/posener/complete to v2 (main) by @crossplane-renovate[bot] in #7116
- Allow XRDs to configure x-kubernetes-validations outside of spec by @jonasz-lasut in #7018
- feat(helm): make sidecars, extra volumes, and volume mounts templatable by @phisco in #7122
- fix(deps): update module github.com/posener/complete to v2 (main) by @crossplane-renovate[bot] in #7121
- fix(deps): update module github.com/alecthomas/kong to v1.14.0 (main) by @crossplane-renovate[bot] in #7125
- chore: update steering committee table for 2026 election results by @jbw976 in #7127
- chore(deps): update renovatebot/github-action action to v46.0.2 (main) by @crossplane-renovate[bot] in #7132
- Bump crossplane-runtime dependency to v2.2.0-rc.1 by @adamwg in #7135
- [Backport release-2.2] Use foreground cascading deletion for unneeded composed resources by @github-actions[bot] in #7144
- deps: Update crossplane-runtime to v2.2.0 by @adamwg in #7150
New Contributors
- @kaessert made their first contribution in #6897
- @rafaelvilarinho made their first contribution in #6925
- @O5ten made their first contribution in #6900
- @mbakalarski made their first contribution in #6972
- @cahillsf made their first contribution in #6995
- @intojhanurag made their first contribution in #6944
- @bradyz7 made their first contribution in #6873
- @NAM-MAN made their first contribution in #7028
- @markussiebert made their first contribution in #7032
- @majiayu000 made their first contribution in #6990
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.1.0...v2.2.0
v2.1.8
v2.1.8 is a patch release scoped to fixing issues reported by users of Crossplane v2.1 and fixing security related issues in Crossplane's dependencies.
🎉 Highlights
- Fixed repeated owner updates for composed Usages (#7622, originally #7591): The Usage controller only checked the first
ownerReferencewhen deciding whether thespec.byresource already owned the Usage. A Usage created by a Composition already has the composite as its first owner, sospec.byended up as a later owner and the controller issued an unnecessary update on every reconciliation — repeatedly re-triggering composition reconciliation and eventually opening the XR circuit breaker. It now checks all owner references. - Dependency security updates: Bumps the Go toolchain to
1.25.12(#7577),grpc/golang.org/x/net/golang.org/x/text(#7620, #7609), and the sigstore stack —cosign(#7556),rekor(#7555),timestamp-authority(#7568),sigstore-go(#7581) — to pick up upstream CVE fixes. See## What's Changedfor the full list.
What's Changed
- chore(deps): update module github.com/sigstore/rekor to v1.5.2 [security] (release-2.1) by @crossplane-renovate[bot] in #7555
- chore(deps): update module github.com/sigstore/timestamp-authority/v2 to v2.1.0 [security] (release-2.1) by @crossplane-renovate[bot] in #7568
- fix(deps): update module github.com/sigstore/cosign/v2 to v2.6.3 [security] (release-2.1) by @crossplane-renovate[bot] in #7556
- build(deps): bump Go to 1.25.12 [security] [release-2.1] by @phisco in #7577
- chore(deps): update module github.com/sigstore/sigstore-go to v1.2.0 [security] (release-2.1) by @crossplane-renovate[bot] in #7581
- fix(deps): combined security bumps (grpc, x/net, x/text) (release-2.1) by @lsviben in #7620
- chore(deps): update module golang.org/x/text to v0.39.0 [security] (release-2.1) by @crossplane-renovate[bot] in #7609
- [Backport release-2.1] fix: avoid repeated owner updates for composed Usages by @phisco in #7622
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.1.7...v2.1.8
v2.1.7
v2.1.7 is a patch release scoped to fixing issues reported by users of Crossplane v2.1 and fixing security related issues in Crossplane's dependencies.
What's Changed
- chore(deps): update module github.com/quic-go/quic-go to v0.59.1 [security] (release-2.1) by @crossplane-renovate[bot] in #7460
- chore(deps): update module golang.org/x/net to v0.55.0 [security] (release-2.1) by @crossplane-renovate[bot] in #7437
- [release-2.1] bump Go to 1.25.11 [security] by @phisco in #7528
- Update crossplane-runtime to v2.1.7 by @lsviben in #7539
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.1.6...v2.1.7
v2.1.6
v2.1.6 is a patch release scoped to fixing issues reported by users of Crossplane v2.1 and fixing security related issues in Crossplane's dependencies.
What's Changed
- chore(deps): update module golang.org/x/net to v0.53.0 [security] (release-2.1) by @crossplane-renovate[bot] in #7365
- chore(deps): update module go.opentelemetry.io/otel to v1.41.0 [security] (release-2.1) by @crossplane-renovate[bot] in #7357
- fix(deps): update module github.com/in-toto/in-toto-golang to v0.11.0 [security] (release-2.1) by @crossplane-renovate[bot] in #7371
- fix(deps): update module github.com/go-git/go-git/v5 to v5.19.0 [security] (release-2.1) by @crossplane-renovate[bot] in #7383
- chore(deps): Bump Go to 1.25.10 to fix stdlib CVEs (release-2.1) by @jbw976 in #7411
- fix(deps): update module github.com/go-git/go-git/v5 to v5.19.1 [security] (release-2.1) by @crossplane-renovate[bot] in #7408
- chore(deps): update module golang.org/x/crypto to v0.52.0 [security] (release-2.1) by @crossplane-renovate[bot] in #7425
- chore(deps): bump crossplane-runtime to v2.1.6 (release-2.1) by @jbw976 in #7429
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.1.5...v2.1.6
v2.1.5
v2.1.5 is a patch release scoped to fixing issues reported by users of Crossplane v2.1 and fixing security related issues in Crossplane's dependencies.
🎉 Highlights
-
Dependency upgrades work correctly with
ImageConfigprefix rewriting: Packages installed via anImageConfigprefix rewrite were previously not being upgraded when their dependencies changed, leaving users stuck on stale versions of dependent packages. Dependency upgrades now behave as expected when prefix rewrites are in use. Backported in #7279, originally fixed in #7233. -
Composition functions can now select all resources of a given kind: When a composition function returned a
Requirements.ResourceSelectorwith onlyapiVersionandkindset (nomatchNameormatchLabels), Crossplane previously rejected this as an invalid request. A selector with no match field is now correctly interpreted as "all resources of that kind". Backported in #7246, originally fixed in #7241.
This release also bumps Go to 1.25.9 and pulls in security related updates for a number of Crossplane's upstream dependencies, including grpc, cosign, go-git, go-jose, cloudflare/circl, moby/spdystream, sigstore/timestamp-authority, docker/cli, and the OpenTelemetry OTLP HTTP trace exporter.
What's Changed
- build: mitigate potential script injection in promote workflow (release-2.1) by @jbw976 in #7167
- [Backport release-2.1] fix: adding required permissions to top level and jobs in the workflow by @jbw976 in #7185
- chore(deps): update module github.com/cloudflare/circl to v1.6.3 [security] (release-2.1) by @crossplane-renovate[bot] in #7181
- [Backport release-2.1] Issue #7200 - Reset circuit breaker state on XR deletion by @github-actions[bot] in #7217
- fix(deps): update module google.golang.org/grpc to v1.79.3 [security] (release-2.1) by @crossplane-renovate[bot] in #7228
- [Backport release-2.1] Support ResourceSelector with no match field by @github-actions[bot] in #7246
- Backport #7233 to release-2.1 by @adamwg in #7279
- chore(deps): update module go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp to v1.43.0 [security] (release-2.1) by @crossplane-renovate[bot] in #7289
- chore(deps): update module github.com/go-jose/go-jose/v4 to v4.1.4 [security] (release-2.1) by @crossplane-renovate[bot] in #7265
- [Backport release-2.1] ci: drop Trivy vulnerability scanning by @phisco in #7299
- chore(deps): bump Go to 1.25.9 [security] (release-2.1) by @phisco in #7305
- fix(deps): update module github.com/go-git/go-git/v5 to v5.17.1 [security] (release-2.1) by @crossplane-renovate[bot] in #7140
- chore(deps): update module github.com/moby/spdystream to v0.5.1 [security] (release-2.1) by @crossplane-renovate[bot] in #7317
- chore(deps): update module github.com/sigstore/timestamp-authority/v2 to v2.0.6 [security] (release-2.1) by @crossplane-renovate[bot] in #7318
- chore(deps): update module github.com/docker/cli to v29.2.0+incompatible [security] (release-2.1) by @crossplane-renovate[bot] in #7196
- fix(deps): update module github.com/go-git/go-git/v5 to v5.18.0 [security] (release-2.1) by @crossplane-renovate[bot] in #7328
- Bump crossplane-runtime to v2.1.5 by @lsviben in #7332
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.1.4...v2.1.5
v2.1.4
This release backports #7030 to the 2.1 branch to fix one of the issues reported in #3423, where shared transitive dependencies could not be upgraded successfully. It also contains security updates to Crossplane's dependencies.
What's Changed
- chore(deps): update module github.com/quic-go/quic-go to v0.57.0 [security] (release-2.1) by @crossplane-renovate[bot] in #6978
- Backport #7030 to release-2.1 by @adamwg in #7054
- [release-2.1] Update sigstore dependencies to fix CVEs by @negz in #7064
- chore(deps): update module github.com/theupdateframework/go-tuf/v2 to v2.4.1 [security] (release-2.1) by @crossplane-renovate[bot] in #7067
- chore(deps): update module github.com/go-chi/chi/v5 to v5.2.4 [security] (release-2.1) by @crossplane-renovate[bot] in #7040
- [Backport release-2.1] fix(render): propagate root composite identity through nested XR trees by @github-actions[bot] in #6974
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.1.3...v2.1.4
v2.1.3
This release resolves #6761 - issues when upgrading providers that manifest with errors like these:
cannot establish control of object: addresses.compute.gcp.upbound.io is already controlled by ProviderRevision provider-gcp-compute-a41e4ba551fc (UID
58db5de-38e7-40f9-9d31-669bb25a688e)
What's Changed
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.1.2...v2.1.3
v2.1.2
What's Changed
- chore(deps): update module golang.org/x/crypto to v0.43.0 [security] (release-2.1) by @crossplane-renovate[bot] in #6926
- [Backport release-2.1] Fix claim controller watch startup after transient failures by @github-actions[bot] in #6933
- [Backport release-2.1] fix: Add TLS as app protocol to function service by @github-actions[bot] in #6946
- chore(deps): update module golang.org/x/crypto to v0.45.0 [security] (release-2.1) by @crossplane-renovate[bot] in #6941
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.1.1...v2.1.2
v2.1.1
This release backports #6911, which makes the new XR watch circuit breaker a little more lenient. We noticed sometimes simple XRs were triggering the circuit breaker during initial creation, which usually involves a burst of watch events as resources are created and update to reach a stable state.
What's Changed
- [Backport release-2.1] Fix XR circuit breaker to account for double token consumption by @github-actions[bot] in #6912
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.1.0...v2.1.1
v2.1.0
The v2.1.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. After the major v2.0 release, we spent time focusing on polishing and hardening the experience with the goal of enhancing core reliability.
⚠️ Upgrade from v2.0
It is strongly advised to upgrade to v2.1 from the previous minor version, which is v2.0. Upon upgrade for each minor release, Crossplane performs any necessary migrations of its CRDs to ensure the latest versions are stored in the Kubernetes API server. Therefore, it is important to upgrade sequentially through one minor version at a time as described in the upgrade docs.
🎉 Highlights
- XR circuit breaker: A circuit breaker was added to all Composite Resource (XR) controllers in #6777 to prevent reconciliation thrashing when controllers fight over composed resource state. This addresses a common cause of excessive resource (CPU) usage.
- Each circuit breaker monitors reconciliation rates for their XR and opens ("breaks the circuit") when thresholds are exceeded (50 burst, 1 every 2s sustained). While open, it blocks most reconcile requests but allows one through every 30 seconds. The circuit stays open for 5 minutes, then automatically closes and returns to normal operation. If thrashing resumes, the circuit will open again.
- Realtime compositions for namespaced XRs: #6780 fixes an issue where namespaced XRs were not being reconciled in response to changes in their composed resources.
crossplane renderfor remote Docker daemons: #6799 fixes an issue that preventedcrossplane renderfrom establishing a connection to the remote Docker host.crossplane rendernow allows function annotations to be passed on the command line with-a/--function-annotationsflags. Two new function annotations are now supported:render.crossplane.io/runtime-docker-publish-addresscontrols the host address Docker publishes the container port to (defaults to127.0.0.1for security)render.crossplane.io/runtime-docker-targetcontrols the address the CLI connects to (defaults to the publish address)
- XRD change detection: In previous versions of Crossplane, XRD spec fields could change without the XR controller being restarted automatically. With #6806, users no longer need to manually restart the Crossplane deployment for some XRD changes to take effect.
🚨 Warnings and breaking changes
- Crossplane's custom rate limiting implementation as well as client-side rate limiting has been removed in #6851 as proposed and described in detail in #6790.
- Crossplane's reconcilers will rely on a combination of the Kubernetes API Priority and Fairness, the circuit breaker described in the highlights below, and worker pool size configuration to appropriately manage reconciliation load and retries in the control plane.
--max-concurrent-reconcilescan be set to influence the maximum number of concurrent reconcile operations (worker pool size) that Crossplane will perform.- The
--max-reconcile-rateflag has been renamed to this new--max-concurrent-reconcilesflag to better represent what this flag controls - The old
--max-reconcile-rateflag is now an alias for the new flag name
- The
- Providers are unaffected by this change, only core Crossplane reconcilers are affected.
🏅 Release MVP
@binarycode is the v2.1 release MVP! They discovered a critical issue preventing realtime compositions from functioning correctly for namespaced XRs. Their fix in #6780 now properly configures an index for each namespaced XR so that events generated from changes in their composed resources correctly result in the XR being enqueued for reconciliation.
Thank you very much to @binarycode, our latest release MVP!
What's Changed
- chore(deps) bump crossplane-runtime to v2.1.0-rc.0 by @jbw976 in #6690
- build: add release-2.0 branch to renovate baseBranches by @jbw976 in #6692
- Add alpha render subcommands for XRs and Operations by @negz in #6695
- Fuzzy match function capabilities by @negz in #6697
- Use FILE level buf breaking change detection by @negz in #6698
- chore: bump releases table, remove 1.18 from renovate baseBranches by @jbw976 in #6703
- Support function cache XfnCacheMaxTTL CLI option by @stevendborrelli in #6710
- chore(deps): update docker/login-action digest to
184bdaa(main) by @crossplane-renovate[bot] in #6706 - Fix composed resource names containing invalid characters by @negz in #6705
- Fix CRD-to-MRD converter to preserve provider configuration CRDs by @negz in #6721
- adds Terradue as adopter by @fabricebrito in #6723
- Update Get Started Docs link by @itsrainingmani in #6713
- Add Sophotech to adopters list by @archy-rock3t-cloud in #6760
- Address some linter/format issues from main by @negz in #6775
- fix realtime Compositions for Namespaced XRs by @binarycode in #6780
- pkg: Ignore tags that are incomplete semantic versions by @adamwg in #6776
- Initial CodeRabbit configuration by @negz in #6791
- Rename WebhooksEnabled by EnableWebhooks in init cmd by @frigaut-orange in #6793
- Set CodeRabbit to chill mode by @negz in #6794
- Disable code rabbit review status messages by @negz in #6795
- run the validating webhook remover only if webhooks are enabled by @frigaut-orange in #6801
- Isolate buf and code generation tools in separate module by @negz in #6796
- Apply consistent error handling pattern in apiextensions reconcilers by @negz in #6755
- Include kind logs when running E2Es by @negz in #6786
- Update ADOPTERS.md by @zouldapp in #6811
- Update ADOPTERS.md by @zouldapp in #6816
- chore(deps): update module github.com/go-chi/chi/v5 to v5.2.2 [security] (main) by @crossplane-renovate[bot] in #6815
- Update ADOPTERS.md by @PI-Victor in #6807
- Separate go mod tidy from code generation to speed development by @negz in #6814
- Queue reconciles for packages when ImageConfigs change by @negz in #6765
- Support remote Docker daemons in render commands by @negz in #6799
- Add MRD and MRAP to package kind linter by @negz in #6797
- Fix XRD controller restart to detect all spec changes by @negz in #6806
- Add circuit breaker to prevent XR reconciliation thrashing by @negz in #6777
- fix(render): propagate XR namespace to composed resources by @u-kai in #6812
- Fix circuit breaker tests to match consistent error handling pattern by @negz in #6822
- Sort extra resources alphabetically to guarantee stable order by @twobiers in #6819
- Move cached function response protos to internal/proto by @negz in #6825
- Update adding monday.com to ADOPTERS.md by @elhayef in #6828
- README: clarify purpose of SIGs by @jbw976 in #6835
- governance: community extension projects list by @jbw976 in #6836
- Update Add Baloise to ADOPTERS.md by @jonasz-lasut in #6838
- fix: add missing permissions on protection and ops groups by @phisco in #6829
- docs: add RELEASE.md and links to crossplane/release for better discoverability of release process by @jbw976 in #6843
- One pager for a namespace-restricted option by @frigaut-orange in #6419
- fix(deps): update module github.com/go-git/go-billy/v5 to v5.6.2 (main) by @crossplane-renovate[bot] in #6568
- fix(deps): update module github.com/google/go-containerregistry to v0.20.6 (main) by @crossplane-renovate[bot] in #6642
- chore(deps): update module github.com/go-viper/mapstructure/v2 to v2.4.0 [security] (main) by @crossplane-renovate[bot] in #6740
- chore(deps): update actions/checkout digest to
08eba0b(main) by @crossplane-renovate[bot] in #6715 - build: update releases/charts bucket names by @jbw976 in #6849
- chore(deps): Update k8s.io modules to latest by @branden in #6844
- Remove watch debug message by @bobh66 in #6720
- Add XR circuit breaker Prometheus metrics by @mfkd in #6854
- Refactor circuit breaker metrics to match Crossplane patterns by @negz in #6870
- chore: remove all migrators that are no longer needed by @jbw976 in #6869
- feat(crl): remove custom rate limiting by @haarchri in #6851
- doc(crank): Remove deprecated subcommands from the convert help message by @tampakrap in #6743
- fix: ensure enforcedCompositionRef properly controls composition selection by @ezgidemirel in #6881
- fix(deps): update module github.com/docker/docker to v28.3.3+incompatible [security] (main) by @crossplane-renovate[bot] in #6845
- chore(deps): update module github.com/quic-go/quic-go to v0.54.1 [security] (main) by @crossplane-renovate[bot] in #6846
- Fix XRD controller watch startup after transient failures by @negz in #6885
- chore(deps): bump crossplane-runtime to v2.1.0-rc.1 by @jbw976 in #6889
- [Backport release-2.1] Fix Docker port binding race condition on macOS by using HostPort "0" by @github-actions[bot] in #6901
- chore(deps): bump crossplane-runtime to v2.1.0 by @jbw976 in #6902
New Contributors
- @fabricebrito made their first contribution in #6723
- @itsrainingmani made their first contribution in #6713
- @archy-rock3t-cloud made their first contribution in #6760
- @binarycode made their first contribution in #6780
- @frigaut-orange made their first contribution in #6793
- @zouldapp made their first contribution in #6811
- @PI-Victor made their first contribution in #6807
- @u-kai made their first contribution in #6812
- @elhayef made their first contribution in #6828
- @jonasz-lasut made their first contribution in #6838
- @branden made their first contribution in #6844
- @mfkd made their first contribution in #6854
Full Changelog: https://github.com/crossplane/crossplane/compare/v2.0.0...v2.1.0
Configuration
- If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot Sylva instance.
CI configuration couldn't be handle by MR description. A dedicated comment has been posted to control it.
If no checkbox is checked, a default pipeline will be enabled (capm3, or capo if capo label is set)