Releases: kubernetes-sigs/cluster-api
v1.7.5
👌 Kubernetes version support
- Management Cluster: v1.26.x -> v1.30.x
- Workload Cluster: v1.24.x -> v1.30.x
More information about version support can be found here
Changes since v1.7.4
📈 Overview
- 21 new commits merged
- 1 feature addition ✨
- 7 bugs fixed 🐛
✨ New Features
- ClusterCacheTracker: Add QPS & burst options & flags for ClusterCacheTracker (#10894)
🐛 Bug Fixes
- API: Cluster should be provisoned when cpRef and endpoint is set (#10881)
- API: Drop caBundle from CRDs (#10978)
- API: When infrastructureRef is nil, set InfrastructureReadyCondition to true (#10921)
- CAPD: Ensure DockerMachinePool providerIDList is deterministic (#11002)
- CAPD: Fix nil pointer in dockermachinepool controller (#10877)
- Machine: Machine Controller should try to retrieve node on delete (#11043)
- MachineSet: MachineSet should allow scale down operations to proceed when templated don't exist (#10974)
🌱 Others
- API: Partially revert changes for ":bug: Cluster should be provisoned when cpRef and endpoint is set" (#10904)
- clusterctl: Bump cert-manager to v1.15.2 (#10993)
- ClusterResourceSet: Ensure CRS controller always add ownerReference to resources (#10895)
- ClusterResourceSet: Make ClusterResourceSet controller more predictable (#10896)
- Dependency: Bump docker/docker to v25.0.6 (#11010)
- e2e: Test/framework: scale up should use allocatable memory (#11008)
- e2e: Test: stop using Consistently for rollout checks (#11001)
- e2e: Test: use pause image for autoscaler tests (#10889)
- e2e: Test: use pause instead of nginx (#10892)
- Testing: Test/framework: Allow ScaleUp Deployment image to be customized (#10996)
- util: Allow ClusterCacheTracker to set CacheByObject (#10954)
📖 Additionally, there have been 2 contributions to our documentation and book. (#10859, #10860)
Dependencies
Added
Nothing has changed.
Changed
Nothing has changed.
Removed
Nothing has changed.
Thanks to all our contributors! 😊
v1.6.8
👌 Kubernetes version support
- Management Cluster: v1.25.x -> v1.29.x
- Workload Cluster: v1.23.x -> v1.29.x
More information about version support can be found here
Changes since v1.6.7
📈 Overview
- 6 new commits merged
- 3 bugs fixed 🐛
🐛 Bug Fixes
- API: Drop caBundle from CRDs (#10979)
- CAPD: Docker: ignore kubeadm preflight check for FileContent--proc-sys-net-bridge-bridge-nf-call-ip6tables (#10938)
- CAPD: Fix nil pointer in dockermachinepool controller (#10878)
🌱 Others
- clusterctl: Bump cert-manager to v1.15.2 (#10994)
- e2e: Test: use pause image for autoscaler tests (#10890)
- e2e: Test: use pause instead of nginx (#10893)
Dependencies
Added
Nothing has changed.
Changed
Nothing has changed.
Removed
Nothing has changed.
Thanks to all our contributors! 😊
v1.8.0-rc.1
🚨 This is a RELEASE CANDIDATE. Use it only for testing purposes. If you find any bugs, file an issue.
Highlights
- Bumped to controller-runtime v0.18, k8s.io/* v0.30, controller-gen v0.15, Go 1.22
- API: Add support for negative polarity conditions (#10550)
- API: Allow control plane provider to set control plane endpoint (#10667)
- CABPK: Add kubeadm v1beta4 types (including ExtraEnvs and ImagePullSerial) (#10709, #10846)
- CABPK: Allow to generate JoinConfiguration discovery kubeconfig (#10799)
- ClusterClass: Improvements for variables
- KCP: Delete out of date machines with unhealthy control plane component conditions during rollout (#10196)
- Logging: Improvements to rollout logs: Cluster topology controller (#10690), KCP controller & webhooks (#10628), MachineDeployment controller (#10688)
- MachineDeployment: Add remediation strategy (#10712)
- MachineSet/Machine: Improvements to Machine deletion
- Machine deletion skips waiting for volumes detached for unreachable Nodes (#10662)
- Machine drain ignores terminating Pods earlier for unreachable Nodes (#10706)
- MachineSet: Fix deletion priority to avoid deleting too many machines (#10087)
- MachineSet: Deprioritize unknown NodeHealthy conditions for deletion (#10763)
- MachineSet: Ensure unhealthy machines get deletion priority (#10755)
- A usual, significantly improved e2e test framework & coverage (#10083, #10216, #10135, #10498, #10639, #10530)
- New providers in clusterctl: IONOS Cloud (#10767), Linode (#10471), Tinkerbell (#10487)
Deprecation Warning
- ClusterClass: Deprecate definitionFrom field (#10841)
- ClusterClass: Deprecate IP Family builtin variable (#10554)
- MachineDeployment: Deprecate revision management (#10855)
- MachineHealthCheck: Deprecate MaxUnhealthy & UnhealthyRange fields (#10853)
Umbrella issue: API changes: #10852
More details about the release
👌 Kubernetes version support
- Management Cluster: v1.27.x -> v1.30.x
- Workload Cluster: v1.25.x -> v1.30.x
More information about version support can be found here
Changes since v1.7.0
📈 Overview
- 318 new commits merged
- 1 breaking change
⚠️ - 22 feature additions ✨
- 49 bugs fixed 🐛
⚠️ Breaking Changes
- ClusterClass: Adjust CC & Cluster controller to block on variable conflicts, deprecate definitionFrom (#10841)
✨ New Features
- API: Add support negative polarity conditions (#10550)
- API: Optimize rbac across controllers (#10552)
- Bootstrap: Allow CAPBK to generate JoinConfiguration discovery kubeconfig (#10799)
- CABPK: Add ExtraEnvs and ImagePullSerial to KubeadmConfig (#10846)
- CABPK: Add kubeadm v1beta4 types (#10709)
- ClusterCacheTracker: Add QPS & burst options & flags for ClusterCacheTracker (#10880)
- ClusterClass: Add map key for MD/MP class & topology in ClusterClass & Cluster.spec.topology (#10808)
- ClusterClass: Add metadata for top-level and nested variables & deprecate previous metadata field (#10778)
- ClusterClass: Add variable validation to ClusterClass controller, block Cluster reconcile if variables not reconciled (#10812)
- ClusterClass: Extend ControlPlane/ MD / MP builtin to include metadata (#10837)
- ClusterClass: Introduce CEL for ClusterClass Variables (#9239)
- ClusterClass: Support ControlPlane variable overrides (#10682)
- e2e: Bump Kubernetes version used for testing to v1.30.0-rc.1 (#10384)
- e2e: Bump Kubernetes version used for testing to v1.31.0-beta.0 (#10922)
- e2e: Bump Kubernetes version used for testing to v1.31.0-rc.0 (#10968)
- KCP: Default ControlPlaneKubeletLocalMode feature gate to true for >= 1.31.0 (#10947)
- MachinePool: MachinePools: Use NodeDeletionTimeout and default it to 10s (#10553)
- MachinePool: Set Kubernetes version in machinepool machine Status.Version (#10849)
- MachineSet: Add remediation strategy support in MachineDeployment (#10712)
- Runtime SDK/ClusterClass: Extend cluster builtin to include UID (#10822)
- Runtime SDK/ClusterClass: Fix GetObjectVariableInto util func (#10702)
- Testing: Support e2e for WSL (#10402)
🐛 Bug Fixes
- API: Cluster should be provisoned when cpRef and endpoint is set (#10873)
- API: Drop caBundle from CRDs to support Kubernetes 1.31 (#10976)
- API: Re-add patch for events (#10695)
- API: When infrastructureRef is nil, set InfrastructureReadyCondition to true (#10909)
- CABPK: Bootstrap: fix useExperimentalRetryJoin for kubernetes v1.31 (#11000)
- CAPD: Don't add host ports to exposed ports of containers (#10657)
- CAPD: Ensure DockerMachinePool providerIDList is deterministic (#11003)
- CAPD: Fix nil pointer in dockermachinepool controller (#10876)
- CAPD: Verify lb config after writing it (#10453)
- CI: Add for new linters to fix old syntax (#10699)
- CI: Add tenv linter (#10689)
- CI: Fix conversion-gen outside of GOPATH (#10502)
- ClusterClass: Defaulting webhook should check class is set in ClusterClass-based clusters (#10671)
- ClusterClass: Fix indexing in ClusterClass webhook MHC validation (#10672)
- ClusterClass: Fix TestServerSideApplyWithDefaulting flakes (#10905)
- clusterctl: Ensure cert-manager objects get applied before other provider objects (#10469)
- clusterctl: Ensure move uses mutated metadata when updating a target object (#10982)
- clusterctl: Fix log in clusterctl move (#10540)
- clusterctl: Handle a nil mutator by returning an error, not panicking (#10981)
- clusterctl: Verify that there is a release for the tag (#10220)
- ClusterResourceSet: Correctly handle concurrent updates to ClusterResourceSetBinding (#10656)
- ClusterResourceSet: Use separate cache for partial metadata watches on secrets to include all secrets (#10633)
- Dependency: Use k8s.io/utils/ptr instead of k8s.io/utils/pointer (#10700)
- e2e: Ensure all ownerRef assertions for some Kind are evaluated (#10590)
- e2e: Filter cluster-wide objects asserted in ResourceVersion tests to exclude objects of parallel tests (#10560)
- e2e: Fix kubetest to allow parallel execution on different clusters (#10424)
- e2e: Kubetest: also gather junit reports in case of errors observed from ginkgo (#10493)
- KCP: Delete out of date machines with unhealthy control plane component conditions when rolling out KCP (#10196)
- KCP: Fix some KCP unit test flakes (#10711)
- Machine: Machine deletion skips waiting for volumes detached for unreachable Nodes (#10662)
- Machine: Speed up ignoring terminating Pods when draining unreachable Nodes (#10706)
- MachineHealthCheck: Change MachineHealthCheck.spec.unhealthyConditions to optional (#9774)
- MachineHealthCheck: Skip publishing the
RemediationRestricted
event when there are no unhealthy target (#10591) - MachinePool: Check that replicas pointer is not nil in machinepool controller (#10632)
- MachineSet: Fix deletion priority to avoid deleting too many machines (#10087)
- MachineSet: MachineSet should allow scale down operations to proceed when templates don't exist (#10913)
- ClusterClass/MachineHealthCheck: Fix default namespace of RemediationTemplate for ClusterClass and Topology (#10843)
- ClusterClass/MachineSet/MachineDeployment: MD/MS topo reconciler: only add finalizer for owned MD/MS (#10780)
- KCP/CAPD: KCPTemplate & DockerClusterTemplate webhook: default before immutability check (#10638)
- Runtime SDK: Topology: use raw input object for patch calculation in WalkTemplates (#10912)
- Security: Also use tls options for metrics/diagnostics server (#10883)
- Testing: Fix CRS test flake (#11011)
- Testing: Fix metadata assert failure in clusterclass rollout test (#10840)
- Testing: Fix race condition in TestPatchHelper test (#10886)
- Testing: Test/framework isDockerCluster should check that infra ref is present (#10973)
- util: Check errors for IsNotFound after patching spec and status (#10787)
- util: Checking cert's keypair for nil before accessing to avoid panics (#10321)
- util: Patch helper should be able to patch non-spec objects (#10824)
- util: SSA: recover gvk after scheme.Convert (#10408)
🌱 Others
- API: Allow control plane provider to set endpoint (#10667)
- API: Allow users to specify webhook server cert and key names (#10551)
- API: Partially revert changes for ":bug: Cluster should be provisoned when cpRef and endpoint is set" (#10903)
- CAPD: Bump github.com/docker/docker to v26.0.2 (#10478)
- CI: Add more templating func to prowjob-gen (#10391)
- CI: Drop pr approver workflow top-level permissions (#10659)
- CI: Optimize dependabot config (#10571)
- CI: Publish nightly manifests to staging bucket (#10489)
- CI: Replace exec kubectl with client CreateOrUpdate (#10442)
- CI: Update base branch for link checker (#10964)
- CI: Update version matrix for github workflows for release-1.7 (#10357)
- CI: Use setup-envtest from CR main (05/2024) to use envtest binaries from CT releases (#10569)
- ClusterCacheTracker: Improve CCT error logging (#10826)
- ClusterCacheTracker: Use indexes field instead of passing it around (#10606)
- ClusterClass: Add Cluster.GetClassKey() to retrieve a NamespacedName for classes (#10703)
- ClusterClass: Add MachinePools to autoscaler e2e test (#10083)
- ClusterClass: Add MachinePools to handler and topology test (#10216)
- ClusterClass: Deprecate IP Family builtin variable (#10554)
- ClusterClass: Improve reconcile state logs (don't log empty diff) (#11015)
- ClusterClass: Log diffs for Cluster topolog...
v1.8.0-rc.0
🚨 This is a RELEASE CANDIDATE. Use it only for testing purposes. If you find any bugs, file an issue.
Highlights
- Bumped to controller-runtime v0.18, k8s.io/* v0.30, controller-gen v0.15, Go 1.22
- API: Add support for negative polarity conditions (#10550)
- API: Allow control plane provider to set control plane endpoint (#10667)
- CABPK: Add kubeadm v1beta4 types (including ExtraEnvs and ImagePullSerial) (#10709, #10846)
- CABPK: Allow to generate JoinConfiguration discovery kubeconfig (#10799)
- ClusterClass: Improvements for variables
- KCP: Delete out of date machines with unhealthy control plane component conditions during rollout (#10196)
- Logging: Improvements to rollout logs: Cluster topology controller (#10690), KCP controller & webhooks (#10628), MachineDeployment controller (#10688)
- MachineDeployment: Add remediation strategy (#10712)
- MachineSet/Machine: Improvements to Machine deletion
- Machine deletion skips waiting for volumes detached for unreachable Nodes (#10662)
- Machine drain ignores terminating Pods earlier for unreachable Nodes (#10706)
- MachineSet: Fix deletion priority to avoid deleting too many machines (#10087)
- MachineSet: Deprioritize unknown NodeHealthy conditions for deletion (#10763)
- MachineSet: Ensure unhealthy machines get deletion priority (#10755)
- A usual, significantly improved e2e test framework & coverage (#10083, #10216, #10135, #10498, #10639, #10530)
- New providers in clusterctl: IONOS Cloud (#10767), Linode (#10471), Tinkerbell (#10487)
Deprecation Warning
- ClusterClass: Deprecate definitionFrom field (#10841)
- ClusterClass: Deprecate IP Family builtin variable (#10554)
- MachineDeployment: Deprecate revision management (#10855)
- MachineHealthCheck: Deprecate MaxUnhealthy & UnhealthyRange fields (#10853)
Umbrella issue: API changes: #10852
More details about the release
👌 Kubernetes version support
- Management Cluster: v1.27.x -> v1.30.x
- Workload Cluster: v1.25.x -> v1.30.x
More information about version support can be found here
Changes since v1.7.0
📈 Overview
- 297 new commits merged
- 1 breaking change
⚠️ - 21 feature additions ✨
- 42 bugs fixed 🐛
⚠️ Breaking Changes
- ClusterClass: Adjust CC & Cluster controller to block on variable conflicts, deprecate definitionFrom (#10841)
✨ New Features
- API: Add support negative polarity conditions (#10550)
- API: Optimize rbac across controllers (#10552)
- Bootstrap: Allow CAPBK to generate JoinConfiguration discovery kubeconfig (#10799)
- CABPK: Add ExtraEnvs and ImagePullSerial to KubeadmConfig (#10846)
- CABPK: Add kubeadm v1beta4 types (#10709)
- ClusterCacheTracker: Add QPS & burst options & flags for ClusterCacheTracker (#10880)
- ClusterClass: Add map key for MD/MP class & topology in ClusterClass & Cluster.spec.topology (#10808)
- ClusterClass: Add metadata for top-level and nested variables & deprecate previous metadata field (#10778)
- ClusterClass: Add variable validation to ClusterClass controller, block Cluster reconcile if variables not reconciled (#10812)
- ClusterClass: Extend ControlPlane/ MD / MP builtin to include metadata (#10837)
- ClusterClass: Introduce CEL for ClusterClass Variables (#9239)
- ClusterClass: Support ControlPlane variable overrides (#10682)
- e2e: Bump Kubernetes version used for testing to v1.30.0-rc.1 (#10384)
- e2e: Bump Kubernetes version used for testing to v1.31.0-beta.0 (#10922)
- KCP: Default ControlPlaneKubeletLocalMode feature gate to true for >= 1.31.0 (#10947)
- MachinePool: MachinePools: Use NodeDeletionTimeout and default it to 10s (#10553)
- MachinePool: Set Kubernetes version in machinepool machine Status.Version (#10849)
- MachineSet: Add remediation strategy support in MachineDeployment (#10712)
- Runtime SDK/ClusterClass: Extend cluster builtin to include UID (#10822)
- Runtime SDK/ClusterClass: Fix GetObjectVariableInto util func (#10702)
- Testing: Support e2e for WSL (#10402)
🐛 Bug Fixes
- API: Cluster should be provisoned when cpRef and endpoint is set (#10873)
- API: Re-add patch for events (#10695)
- API: When infrastructureRef is nil, set InfrastructureReadyCondition to true (#10909)
- CAPD: Don't add host ports to exposed ports of containers (#10657)
- CAPD: Fix nil pointer in dockermachinepool controller (#10876)
- CAPD: Verify lb config after writing it (#10453)
- CI: Add for new linters to fix old syntax (#10699)
- CI: Add tenv linter (#10689)
- CI: Fix conversion-gen outside of GOPATH (#10502)
- ClusterClass: Defaulting webhook should check class is set in ClusterClass-based clusters (#10671)
- ClusterClass: Fix indexing in ClusterClass webhook MHC validation (#10672)
- ClusterClass: Fix TestServerSideApplyWithDefaulting flakes (#10905)
- clusterctl: Ensure cert-manager objects get applied before other provider objects (#10469)
- clusterctl: Fix log in clusterctl move (#10540)
- clusterctl: Verify that there is a release for the tag (#10220)
- ClusterResourceSet: Correctly handle concurrent updates to ClusterResourceSetBinding (#10656)
- ClusterResourceSet: Use separate cache for partial metadata watches on secrets to include all secrets (#10633)
- Dependency: Use k8s.io/utils/ptr instead of k8s.io/utils/pointer (#10700)
- e2e: Ensure all ownerRef assertions for some Kind are evaluated (#10590)
- e2e: Filter cluster-wide objects asserted in ResourceVersion tests to exclude objects of parallel tests (#10560)
- e2e: Fix kubetest to allow parallel execution on different clusters (#10424)
- e2e: Kubetest: also gather junit reports in case of errors observed from ginkgo (#10493)
- KCP: Delete out of date machines with unhealthy control plane component conditions when rolling out KCP (#10196)
- KCP: Fix some KCP unit test flakes (#10711)
- Machine: Machine deletion skips waiting for volumes detached for unreachable Nodes (#10662)
- Machine: Speed up ignoring terminating Pods when draining unreachable Nodes (#10706)
- MachineHealthCheck: Change MachineHealthCheck.spec.unhealthyConditions to optional (#9774)
- MachineHealthCheck: Skip publishing the
RemediationRestricted
event when there are no unhealthy target (#10591) - MachinePool: Check that replicas pointer is not nil in machinepool controller (#10632)
- MachineSet: Fix deletion priority to avoid deleting too many machines (#10087)
- MachineSet: MachineSet should allow scale down operations to proceed when templates don't exist (#10913)
- ClusterClass/MachineHealthCheck: Fix default namespace of RemediationTemplate for ClusterClass and Topology (#10843)
- ClusterClass/MachineSet/MachineDeployment: MD/MS topo reconciler: only add finalizer for owned MD/MS (#10780)
- KCP/CAPD: KCPTemplate & DockerClusterTemplate webhook: default before immutability check (#10638)
- Runtime SDK: Topology: use raw input object for patch calculation in WalkTemplates (#10912)
- Security: Also use tls options for metrics/diagnostics server (#10883)
- Testing: Fix metadata assert failure in clusterclass rollout test (#10840)
- Testing: Fix race condition in TestPatchHelper test (#10886)
- util: Check errors for IsNotFound after patching spec and status (#10787)
- util: Checking cert's keypair for nil before accessing to avoid panics (#10321)
- util: Patch helper should be able to patch non-spec objects (#10824)
- util: SSA: recover gvk after scheme.Convert (#10408)
🌱 Others
- API: Allow control plane provider to set endpoint (#10667)
- API: Allow users to specify webhook server cert and key names (#10551)
- API: Partially revert changes for ":bug: Cluster should be provisoned when cpRef and endpoint is set" (#10903)
- CAPD: Bump github.com/docker/docker to v26.0.2 (#10478)
- CI: Add more templating func to prowjob-gen (#10391)
- CI: Drop pr approver workflow top-level permissions (#10659)
- CI: Optimize dependabot config (#10571)
- CI: Publish nightly manifests to staging bucket (#10489)
- CI: Replace exec kubectl with client CreateOrUpdate (#10442)
- CI: Update version matrix for github workflows for release-1.7 (#10357)
- CI: Use setup-envtest from CR main (05/2024) to use envtest binaries from CT releases (#10569)
- ClusterCacheTracker: Improve CCT error logging (#10826)
- ClusterCacheTracker: Use indexes field instead of passing it around (#10606)
- ClusterClass: Add Cluster.GetClassKey() to retrieve a NamespacedName for classes (#10703)
- ClusterClass: Add MachinePools to autoscaler e2e test (#10083)
- ClusterClass: Add MachinePools to handler and topology test (#10216)
- ClusterClass: Deprecate IP Family builtin variable (#10554)
- ClusterClass: Log diffs for Cluster topology rollouts/patches (#10690)
- ClusterClass: Separate schema and CEL errors in CC variable validation (#10809)
- ClusterClass: Webhooks: make MDT.replicas and autoscaler mut. exclusive (#10370)
- clusterctl: Add ionoscloud provider (#10767)
- clusterctl: Add support for the linode-linode infrastructure provider to clusterctl (#10471)
- clusterctl: Add Tinkerbell to the providers list (#10487)
- clusterctl: Always run crd migration if possible to reduce conversion webhook usage (#10513)
- clusterctl: Bump cert-manager to 1.14.5 (#10514)
- clusterctl: Bump cert-manager to v1.15.0 (#10727)
- clusterctl: Bump cert-manager to v1.15.1 (#10807)
- clusterctl: Improve cert-manager shouldUpgrade (#10407)
- ClusterResou...
v1.8.0-beta.1
🚨 This is a BETA RELEASE. Use it only for testing purposes. If you find any bugs, file an issue.
Highlights
- Add kubeadm v1beta4 types
- Add support negative polarity conditions
More details about the release
👌 Kubernetes version support
- Management Cluster: v1.27.x -> v1.30.x
- Workload Cluster: v1.25.x -> v1.30.x
More information about version support can be found here
Changes since v1.7.0
📈 Overview
- 285 new commits merged
- 1 breaking change
⚠️ - 19 feature additions ✨
- 40 bugs fixed 🐛
⚠️ Breaking Changes
- ClusterClass: Adjust CC & Cluster controller to block on variable conflicts, deprecate definitionFrom (#10841)
✨ New Features
- API: Add support negative polarity conditions (#10550)
- API: Optimize rbac across controllers (#10552)
- Bootstrap: Allow CAPBK to generate JoinConfiguration discovery kubeconfig (#10799)
- CABPK: Add ExtraEnvs and ImagePullSerial to KubeadmConfig (#10846)
- CABPK: Add kubeadm v1beta4 types (#10709)
- ClusterCacheTracker: Add QPS & burst options & flags for ClusterCacheTracker (#10880)
- ClusterClass: Add map key for MD/MP class & topology in ClusterClass & Cluster.spec.topology (#10808)
- ClusterClass: Add metadata for top-level and nested variables & deprecate previous metadata field (#10778)
- ClusterClass: Add variable validation to ClusterClass controller, block Cluster reconcile if variables not reconciled (#10812)
- ClusterClass: Extend ControlPlane/ MD / MP builtin to include metadata (#10837)
- ClusterClass: Introduce CEL for ClusterClass Variables (#9239)
- ClusterClass: Support ControlPlane variable overrides (#10682)
- e2e: Bump Kubernetes version used for testing to v1.30.0-rc.1 (#10384)
- e2e: Bump Kubernetes version used for testing to v1.31.0-beta.0 (#10922)
- MachinePool: Set Kubernetes version in machinepool machine Status.Version (#10849)
- MachineSet: Add remediation strategy support in MachineDeployment (#10712)
- Runtime SDK/ClusterClass: Extend cluster builtin to include UID (#10822)
- Runtime SDK/ClusterClass: Fix GetObjectVariableInto util func (#10702)
- Testing: Support e2e for WSL (#10402)
🐛 Bug Fixes
- API: Cluster should be provisoned when cpRef and endpoint is set (#10873)
- API: Re-add patch for events (#10695)
- API: When infrastructureRef is nil, set InfrastructureReadyCondition to true (#10909)
- CAPD: Don't add host ports to exposed ports of containers (#10657)
- CAPD: Fix nil pointer in dockermachinepool controller (#10876)
- CAPD: Verify lb config after writing it (#10453)
- CI: Add for new linters to fix old syntax (#10699)
- CI: Add tenv linter (#10689)
- CI: Fix conversion-gen outside of GOPATH (#10502)
- ClusterClass: Defaulting webhook should check class is set in ClusterClass-based clusters (#10671)
- ClusterClass: Fix indexing in ClusterClass webhook MHC validation (#10672)
- ClusterClass: Fix TestServerSideApplyWithDefaulting flakes (#10905)
- clusterctl: Ensure cert-manager objects get applied before other provider objects (#10469)
- clusterctl: Fix log in clusterctl move (#10540)
- clusterctl: Verify that there is a release for the tag (#10220)
- ClusterResourceSet: Correctly handle concurrent updates to ClusterResourceSetBinding (#10656)
- ClusterResourceSet: Use separate cache for partial metadata watches on secrets to include all secrets (#10633)
- Dependency: Use k8s.io/utils/ptr instead of k8s.io/utils/pointer (#10700)
- e2e: Ensure all ownerRef assertions for some Kind are evaluated (#10590)
- e2e: Filter cluster-wide objects asserted in ResourceVersion tests to exclude objects of parallel tests (#10560)
- e2e: Fix kubetest to allow parallel execution on different clusters (#10424)
- e2e: Kubetest: also gather junit reports in case of errors observed from ginkgo (#10493)
- KCP: Delete out of date machines with unhealthy control plane component conditions when rolling out KCP (#10196)
- KCP: Fix some KCP unit test flakes (#10711)
- Machine: Machine deletion skips waiting for volumes detached for unreachable Nodes (#10662)
- Machine: Speed up ignoring terminating Pods when draining unreachable Nodes (#10706)
- MachineHealthCheck: Change MachineHealthCheck.spec.unhealthyConditions to optional (#9774)
- MachineHealthCheck: Skip publishing the
RemediationRestricted
event when there are no unhealthy target (#10591) - MachinePool: Check that replicas pointer is not nil in machinepool controller (#10632)
- MachineSet: Fix deletion priority to avoid deleting too many machines (#10087)
- ClusterClass/MachineHealthCheck: Fix default namespace of RemediationTemplate for ClusterClass and Topology (#10843)
- ClusterClass/MachineSet/MachineDeployment: MD/MS topo reconciler: only add finalizer for owned MD/MS (#10780)
- KCP/CAPD: KCPTemplate & DockerClusterTemplate webhook: default before immutability check (#10638)
- Runtime SDK: Topology: use raw input object for patch calculation in WalkTemplates (#10912)
- Testing: Fix metadata assert failure in clusterclass rollout test (#10840)
- Testing: Fix race condition in TestPatchHelper test (#10886)
- util: Check errors for IsNotFound after patching spec and status (#10787)
- util: Checking cert's keypair for nil before accessing to avoid panics (#10321)
- util: Patch helper should be able to patch non-spec objects (#10824)
- util: SSA: recover gvk after scheme.Convert (#10408)
🌱 Others
- API: Allow control plane provider to set endpoint (#10667)
- API: Allow users to specify webhook server cert and key names (#10551)
- API: Partially revert changes for ":bug: Cluster should be provisoned when cpRef and endpoint is set" (#10903)
- CAPD: Bump github.com/docker/docker to v26.0.2 (#10478)
- CI: Add more templating func to prowjob-gen (#10391)
- CI: Drop pr approver workflow top-level permissions (#10659)
- CI: Optimize dependabot config (#10571)
- CI: Publish nightly manifests to staging bucket (#10489)
- CI: Replace exec kubectl with client CreateOrUpdate (#10442)
- CI: Update version matrix for github workflows for release-1.7 (#10357)
- CI: Use setup-envtest from CR main (05/2024) to use envtest binaries from CT releases (#10569)
- ClusterCacheTracker: Improve CCT error logging (#10826)
- ClusterCacheTracker: Use indexes field instead of passing it around (#10606)
- ClusterClass: Add Cluster.GetClassKey() to retrieve a NamespacedName for classes (#10703)
- ClusterClass: Add MachinePools to autoscaler e2e test (#10083)
- ClusterClass: Add MachinePools to handler and topology test (#10216)
- ClusterClass: Deprecate IP Family builtin variable (#10554)
- ClusterClass: Log diffs for Cluster topology rollouts/patches (#10690)
- ClusterClass: Separate schema and CEL errors in CC variable validation (#10809)
- ClusterClass: Webhooks: make MDT.replicas and autoscaler mut. exclusive (#10370)
- clusterctl: Add ionoscloud provider (#10767)
- clusterctl: Add support for the linode-linode infrastructure provider to clusterctl (#10471)
- clusterctl: Add Tinkerbell to the providers list (#10487)
- clusterctl: Always run crd migration if possible to reduce conversion webhook usage (#10513)
- clusterctl: Bump cert-manager to 1.14.5 (#10514)
- clusterctl: Bump cert-manager to v1.15.0 (#10727)
- clusterctl: Bump cert-manager to v1.15.1 (#10807)
- clusterctl: Improve cert-manager shouldUpgrade (#10407)
- ClusterResourceSet: Ensure CRS controller always add ownerReference to resources (#10756)
- ClusterResourceSet: Make ClusterResourceSet controller more predictable (#10869)
- Community meeting: Retire the Alternative communication pattern feature group (#10658)
- Control-plane: Improve KCP remediation re-entrancy (#10559)
- Core: Cleanup separate unstructuredCachingClient (#10692)
- Dependency: Bump controller-gen to v0.15 (#10380)
- Dependency: Bump controller-runtime to v0.18.0 (#10383)
- Dependency: Bump conversion-gen to v0.30.0 (#10474)
- Dependency: Bump docker/docker to 26.0.0+incompatible (#10335)
- Dependency: Bump envtest to v1.30.0 (#10477)
- Dependency: Bump github.com/distribution/reference from 0.5.0 to 0.6.0 (#10501)
- Dependency: Bump github.com/docker/docker from 26.1.4+incompatible to 27.0.0+incompatible in /test (#10775)
- Dependency: Bump github.com/docker/docker to v27.0.1 (#10794)
- Dependency: Bump Go to v1.22.2 (#10452)
- Dependency: Bump go version to 1.22.3 (#10586)
- Dependency: Bump golang to v1.21.9 and golang.org/x/net to mitigate CVE-2023-45288 (#10375)
- Dependency: Bump golangci-lint to v1.57.2 (#10398)
- Dependency: Bump to Go 1.22.4 (#10739)
- Dependency: Bump to Go 1.22.5 (#10828)
- Dependency: Fix loopvar linter issue and usage of deprecated grpc function (#10731)
- Dependency: Fixup patch order in CABPK (#10399)
- Dependency: Stop bumping cel-go via dependabot (#10834)
- Dependency: Update Kustomize deprecated syntax (#10294)
- Devtools: Add triage-party for the Cluster API backlog (#10437)
- Devtools: Bump Cluster API Visualizer to v1.3.0 (#10386)
- Devtools: Bump Cluster API Visualizer to v1.3.1 (#10816)
- Devtools: Improve triage query (#10644)
- Devtools: Tilt: ensure in-tree providers always use start.sh to allow restarts (#10811)
- e2e: Add function to create the ClusterProxy when using a secondary kind-based management cluster (#10804)
- e2e: Add IPAM API to test framework convenience scheme (#10745)
- e2e: Allow setting worker machine count to nil in ApplyClusterTemplateAndWait & ConfigCluster (#10388)
- e2e: Bump autoscaler to v1.30.0 (#10510)
- e2e: Bump kind to v0.23.0 (#10610)
- e2e: Drop support for INIT env variables in clusterctl upgrade test (#10609)
- e2e: Enable ability to test pre-releases of kubernetes (#10412)
- e...
v1.8.0-beta.0
🚨 This is a BETA RELEASE. Use it only for testing purposes. If you find any bugs, file an issue.
Highlights
- Add kubeadm v1beta4 types
- Add support negative polarity conditions
More details about the release
👌 Kubernetes version support
- Management Cluster: v1.27.x -> v1.30.x
- Workload Cluster: v1.25.x -> v1.30.x
More information about version support can be found here
Changes since v1.7.0
📈 Overview
- 267 new commits merged
- 1 breaking change
⚠️ - 16 feature additions ✨
- 36 bugs fixed 🐛
⚠️ Breaking Changes
- ClusterClass: Adjust CC & Cluster controller to block on variable conflicts, deprecate definitionFrom (#10841)
✨ New Features
- API: Add support negative polarity conditions (#10550)
- API: Optimize rbac across controllers (#10552)
- Bootstrap: Allow CAPBK to generate JoinConfiguration discovery kubeconfig (#10799)
- CABPK: Add ExtraEnvs and ImagePullSerial to KubeadmConfig (#10846)
- CABPK: Add kubeadm v1beta4 types (#10709)
- ClusterClass: Add map key for MD/MP class & topology in ClusterClass & Cluster.spec.topology (#10808)
- ClusterClass: Add metadata for top-level and nested variables & deprecate previous metadata field (#10778)
- ClusterClass: Add variable validation to ClusterClass controller, block Cluster reconcile if variables not reconciled (#10812)
- ClusterClass: Extend ControlPlane/ MD / MP builtin to include metadata (#10837)
- ClusterClass: Introduce CEL for ClusterClass Variables (#9239)
- ClusterClass: Support ControlPlane variable overrides (#10682)
- e2e: Bump Kubernetes version used for testing to v1.30.0-rc.1 (#10384)
- MachineSet: Add remediation strategy support in MachineDeployment (#10712)
- Runtime SDK/ClusterClass: Extend cluster builtin to include UID (#10822)
- Runtime SDK/ClusterClass: Fix GetObjectVariableInto util func (#10702)
- Testing: Support e2e for WSL (#10402)
🐛 Bug Fixes
- API: Cluster should be provisoned when cpRef and endpoint is set (#10873)
- API: Re-add patch for events (#10695)
- CAPD: Don't add host ports to exposed ports of containers (#10657)
- CAPD: Fix nil pointer in dockermachinepool controller (#10876)
- CAPD: Verify lb config after writing it (#10453)
- CI: Add for new linters to fix old syntax (#10699)
- CI: Add tenv linter (#10689)
- CI: Fix conversion-gen outside of GOPATH (#10502)
- ClusterClass: Defaulting webhook should check class is set in ClusterClass-based clusters (#10671)
- ClusterClass: Fix indexing in ClusterClass webhook MHC validation (#10672)
- clusterctl: Ensure cert-manager objects get applied before other provider objects (#10469)
- clusterctl: Fix log in clusterctl move (#10540)
- clusterctl: Verify that there is a release for the tag (#10220)
- ClusterResourceSet: Correctly handle concurrent updates to ClusterResourceSetBinding (#10656)
- ClusterResourceSet: Use separate cache for partial metadata watches on secrets to include all secrets (#10633)
- Dependency: Use k8s.io/utils/ptr instead of k8s.io/utils/pointer (#10700)
- e2e: Fix kubetest to allow parallel execution on different clusters (#10424)
- e2e: Kubetest also gather junit reports in case of errors observed from ginkgo (#10493)
- e2e: Ensure all ownerRef assertions for some Kind are evaluated (#10590)
- e2e: Filter cluster-wide objects asserted in ResourceVersion tests to exclude objects of parallel tests (#10560)
- KCP: Delete out of date machines with unhealthy control plane component conditions when rolling out KCP (#10196)
- KCP: Fix some KCP unit test flakes (#10711)
- Machine: Machine deletion skips waiting for volumes detached for unreachable Nodes (#10662)
- Machine: Speed up ignoring terminating Pods when draining unreachable Nodes (#10706)
- MachineHealthCheck: Change MachineHealthCheck.spec.unhealthyConditions to optional (#9774)
- MachineHealthCheck: Skip publishing the
RemediationRestricted
event when there are no unhealthy target (#10591) - MachinePool: Check that replicas pointer is not nil in machinepool controller (#10632)
- MachineSet: Deletion priority to avoid deleting too many machines (#10087)
- ClusterClass/MachineHealthCheck: Fix default namespace of RemediationTemplate for ClusterClass and Topology (#10843)
- ClusterClass/MachineSet/MachineDeployment: MD/MS topo reconciler: only add finalizer for owned MD/MS (#10780)
- KCP/CAPD: KCPTemplate & DockerClusterTemplate webhook: default before immutability check (#10638)
- Testing: Fix metadata assert failure in clusterclass rollout test (#10840)
- util: Check errors for IsNotFound after patching spec and status (#10787)
- util: Checking cert's keypair for nil before accessing to avoid panics (#10321)
- util: Patch helper should be able to patch non-spec objects (#10824)
- util: Recover gvk after scheme.Convert (#10408)
🌱 Others
- API: Allow control plane provider to set endpoint (#10667)
- API: Allow users to specify webhook server cert and key names (#10551)
- CAPD: Bump github.com/docker/docker to v26.0.2 (#10478)
- CI: Add more templating func to prowjob-gen (#10391)
- CI: Drop pr approver workflow top-level permissions (#10659)
- CI: Optimize dependabot config (#10571)
- CI: Publish nightly manifests to staging bucket (#10489)
- CI: Replace exec kubectl with client CreateOrUpdate (#10442)
- CI: Update version matrix for github workflows for release-1.7 (#10357)
- CI: Use setup-envtest from CR main (05/2024) to use envtest binaries from CT releases (#10569)
- ClusterCacheTracker: Improve CCT error logging (#10826)
- ClusterCacheTracker: Use indexes field instead of passing it around (#10606)
- ClusterClass: Add Cluster.GetClassKey() to retrieve a NamespacedName for classes (#10703)
- ClusterClass: Add MachinePools to autoscaler e2e test (#10083)
- ClusterClass: Add MachinePools to handler and topology test (#10216)
- ClusterClass: Deprecate IP Family builtin variable (#10554)
- ClusterClass: Make MDT.replicas and autoscaler mut. exclusive (#10370)
- ClusterClass: Log diffs for Cluster topology rollouts/patches (#10690)
- ClusterClass: Separate schema and CEL errors in CC variable validation (#10809)
- clusterctl: Add ionoscloud provider (#10767)
- clusterctl: Add Tinkerbell to the providers list (#10487)
- clusterctl: Always run crd migration if possible to reduce conversion webhook usage (#10513)
- clusterctl: Bump cert-manager to 1.14.5 (#10514)
- clusterctl: Bump cert-manager to v1.15.0 (#10727)
- clusterctl: Bump cert-manager to v1.15.1 (#10807)
- clusterctl: Improve shouldUpgrade (#10407)
- clusterctl: Add support for the linode-linode infrastructure provider to clusterctl (#10471)
- ClusterResourceSet: Ensure CRS controller always add ownerReference to resources (#10756)
- Community meeting: Retire the Alternative communication pattern feature group (#10658)
- Control-plane: Improve KCP remediation re-entrancy (#10559)
- Core: Cleanup separate unstructuredCachingClient (#10692)
- Dependency: Bump controller-gen to v0.15 (#10380)
- Dependency: Bump controller-runtime to v0.18.0 (#10383)
- Dependency: Bump conversion-gen to v0.30.0 (#10474)
- Dependency: Bump docker/docker to 26.0.0+incompatible (#10335)
- Dependency: Bump envtest to v1.30.0 (#10477)
- Dependency: Bump github.com/distribution/reference from 0.5.0 to 0.6.0 (#10501)
- Dependency: Bump github.com/docker/docker from 26.1.4+incompatible to 27.0.0+incompatible in /test (#10775)
- Dependency: Bump github.com/docker/docker to v27.0.1 (#10794)
- Dependency: Bump Go to v1.22.2 (#10452)
- Dependency: Bump go version to 1.22.3 (#10586)
- Dependency: Bump golang to v1.21.9 and golang.org/x/net to mitigate CVE-2023-45288 (#10375)
- Dependency: Bump golangci-lint to v1.57.2 (#10398)
- Dependency: Bump to Go 1.22.4 (#10739)
- Dependency: Bump to Go 1.22.5 (#10828)
- Dependency: Fix loopvar linter issue and usage of deprecated grpc function (#10731)
- Dependency: Fixup patch order in CABPK (#10399)
- Dependency: Stop bumping cel-go via dependabot (#10834)
- Dependency: Update Kustomize deprecated syntax (#10294)
- Devtools: Add triage-party for the Cluster API backlog (#10437)
- Devtools: Bump Cluster API Visualizer to v1.3.0 (#10386)
- Devtools: Bump Cluster API Visualizer to v1.3.1 (#10816)
- Devtools: Improve triage query (#10644)
- Devtools: Ensure in-tree providers always use start.sh to allow restarts (#10811)
- e2e: Add function to create the ClusterProxy when using a secondary kind-based management cluster (#10804)
- e2e: Add IPAM API to test framework convenience scheme (#10745)
- e2e: Allow setting worker machine count to nil in ApplyClusterTemplateAndWait & ConfigCluster (#10388)
- e2e: Bump autoscaler to v1.30.0 (#10510)
- e2e: Drop support for INIT env variables in clusterctl upgrade test (#10609)
- e2e: Enable ability to test pre-releases of kubernetes (#10412)
- e2e: Enhance E2E Tests to Filter Out Extra Provider-Specific Metadata (#10715)
- e2e: Ensure resourceVersions are stable (#10530)
- e2e: Export more func in test/e2e/common.go (#10420)
- e2e: Fix finalizers assertions (#10735)
- e2e: Improve E2E tests for finalizers and ownerRefs (#10730)
- e2e: Improve E2E ValidateFinalizers and ValidateOwnerRef (#10693)
- e2e: Improve metadata assertions in ClusterClass rollout test (#10851)
- e2e: Kind bump to v0.23.0 (#10610)
- e2e: Add restConfigModifier Option to clusterProxy (#10832)
- e2e: Check for metadata.yaml when resolving releases to not try to use unreleased versions + avoid retry on 404 (also in clusterctl) (#10618)
- e2e: Dump resources before deleting extensionconfig (#10874)
- e2e: Improve output for ValidateResourceVersionStable by using BeComparable instead of Equal (...
v1.7.4
👌 Kubernetes version support
- Management Cluster: v1.26.x -> v1.30.x
- Workload Cluster: v1.24.x -> v1.30.x
More information about version support can be found here
Changes since v1.7.3
📈 Overview
- 23 new commits merged
- 6 feature additions ✨
- 5 bugs fixed 🐛
✨ New Features
- Bootstrap: Allow CAPBK to generate JoinConfiguration discovery kubeconfig (#10842)
- ClusterClass: Extend ControlPlane/ MD / MP builtin to include metadata (#10850)
- CABPK: Add kubeadm v1beta4 types (#10771)
- Dependency: Bump to Go 1.22.4 (#10801)
- MachineDeployment: Add remediation strategy support in MachineDeployment (#10759)
- Runtime SDK/ClusterClass: Extend cluster builtin to include UID (#10831)
🐛 Bug Fixes
- ClusterResourceSet: Correctly handle concurrent updates to ClusterResourceSetBinding (#10785)
- Machine: Machine deletion skips waiting for volumes detached for unreachable Nodes (#10765)
- Machine: Speed up ignoring terminating Pods when draining unreachable Nodes (#10766)
- ClusterClass/MachineSet/MachineDeployment: MD/MS topo reconciler: only add finalizer for owned MD/MS (#10781)
- util: Patch helper should be able to patch non-spec objects (#10833)
🌱 Others
- clusterctl: Add ionoscloud provider (#10769)
- clusterctl: Bump cert-manager to v1.15.1 (#10814)
- Control-plane: Allow control plane provider to set endpoint (#10800)
- Dependency: Bump to Go 1.22.5 (#10829)
- e2e: Improvements to ownerReferences and finalizers test (#10747)
- Machine: Improve logs & conditions when machine is waiting for node (#10762)
- MachineHealthCheck: MachineHealthCheck should take Machine's InfraReady condition (#10758)
- MachineSet: Deprioritize unknown NodeHealthy conditions for deletion (#10770)
- MachineSet: Ensure unhealthy machines get deletion priority (#10761)
📖 Additionally, there have been 3 contributions to our documentation and book. (#10760, #10779, #10796)
Dependencies
Added
Nothing has changed.
Changed
Nothing has changed.
Removed
Nothing has changed.
Thanks to all our contributors! 😊
v1.6.7
👌 Kubernetes version support
- Management Cluster: v1.25.x -> v1.29.x
- Workload Cluster: v1.23.x -> v1.29.x
More information about version support can be found here
Changes since v1.6.6
📈 Overview
- 6 new commits merged
- 1 feature addition ✨
- 1 bug fixed 🐛
✨ New Features
- Dependency: Bump to Go 1.22.4 (#10802)
🐛 Bug Fixes
- ClusterClass/MachineSet/MachineDeployment: MD/MS topo reconciler: only add finalizer for owned MD/MS (#10782)
🌱 Others
- clusterctl: Bump cert-manager to v1.15.1 (#10813)
- Dependency: Bump to Go 1.22.5 (#10830)
- Devtools: Pin controller-gen binary to go 1.21 (#10815)
📖 Additionally, there has been 1 contribution to our documentation and book. (#10797)
Dependencies
Added
Nothing has changed.
Changed
Nothing has changed.
Removed
Nothing has changed.
Thanks to all our contributors! 😊
v1.7.3
👌 Kubernetes version support
- Management Cluster: v1.26.x -> v1.30.x
- Workload Cluster: v1.24.x -> v1.30.x
More information about version support can be found here
Changes since v1.7.2
📈 Overview
- 18 new commits merged
- 1 feature addition ✨
- 5 bugs fixed 🐛
✨ New Features
- ClusterClass: Support ControlPlane variable overrides (#10701)
🐛 Bug Fixes
- ClusterClass: Defaulting webhook should check class is set in ClusterClass-based clusters (#10673)
- ClusterClass: Fix indexing in ClusterClass webhook MHC validation (#10678)
- MachineHealthCheck: Skip publishing the
RemediationRestricted
event when there are no unhealthy target (#10616) - MachinePool: Check that replicas pointer is not nil in machinepool controller (#10634)
- KCP/CAPD: KCPTemplate & DockerClusterTemplate webhook: default before immutability check (#10646)
🌱 Others
- clusterctl: Bump cert-manager to v1.15.0 (#10732)
- Dependency: Bump to Go 1.21.11 (#10740)
- Devtools: Use setup-envtest from CR main (05/2024) to use envtest binaries from CT releases (#10663)
- e2e: Kind: bump to v0.23.0 (#10641)
- e2e: Test: check for metadata.yaml when resolving releases to not try to use unreleased versions (#10645)
- e2e: Test: improve output for ValidateResourceVersionStable by using BeComparable instead of Equal (#10654)
- Security: Cleanup owner files (#10679)
- Testing: Support MachinePools without MachinePoolMachines in clusterctl upgrade test (#10614)
- Testing: Use kind as a secondary management cluster for clusterctl E2E tests (#10675)
📖 Additionally, there have been 2 contributions to our documentation and book. (#10687, #10720)
Dependencies
Added
Nothing has changed.
Changed
Nothing has changed.
Removed
Nothing has changed.
Thanks to all our contributors! 😊
v1.6.6
👌 Kubernetes version support
- Management Cluster: v1.25.x -> v1.29.x
- Workload Cluster: v1.23.x -> v1.29.x
More information about version support can be found here
Changes since v1.6.5
📈 Overview
- 14 new commits merged
- 5 bugs fixed 🐛
🐛 Bug Fixes
- ClusterClass: Defaulting webhook should check class is set in ClusterClass-based clusters (#10674)
- ClusterClass: Fix indexing in ClusterClass webhook MHC validation (#10677)
- MachineHealthCheck: Skip publishing the
RemediationRestricted
event when there are no unhealthy target (#10617) - MachinePool: Check that replicas pointer is not nil in machinepool controller (#10635)
- KCP/CAPD: KCPTemplate & DockerClusterTemplate webhook: default before immutability check (#10647)
🌱 Others
- clusterctl: Bump cert-manager to v1.15.0 (#10733)
- Dependency: Bump to Go 1.21.11 (#10741)
- Devtools: Use setup-envtest from CR main (05/2024) to use envtest binaries from CT releases (#10664)
- Security: Cleanup owner files (#10680)
- Testing: Support MachinePools without MachinePoolMachines in clusterctl upgrade test (#10615)
- Testing: Use kind as a secondary management cluster for clusterctl E2E tests (#10676)
📖 Additionally, there have been 2 contributions to our documentation and book. (#10686, #10721)
Dependencies
Added
Nothing has changed.
Changed
Nothing has changed.
Removed
Nothing has changed.
Thanks to all our contributors! 😊