Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package clusterctl for openSUSE:Factory 
checked in at 2026-04-10 17:50:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/clusterctl (Old)
 and      /work/SRC/openSUSE:Factory/.clusterctl.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "clusterctl"

Fri Apr 10 17:50:51 2026 rev:30 rq:1345549 version:1.12.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/clusterctl/clusterctl.changes    2026-03-18 
16:52:28.061928923 +0100
+++ /work/SRC/openSUSE:Factory/.clusterctl.new.21863/clusterctl.changes 
2026-04-10 17:57:17.460435397 +0200
@@ -1,0 +2,13 @@
+Thu Apr 09 11:54:11 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 1.12.5:
+  * clusterctl: Bump cert-manager to v1.20.0 (#13484)
+  * clusterctl: Bump cert-manager to v1.20.1 (#13519)
+  * Others
+    - Dependency: Bump corefile-migration to v1.0.31 (#13526)
+    - Dependency: Bump dependencies to fix CVE-2026-33186
+      (google.golang.org/grpc) (#13504)
+    - Dependency: Bump go v1.25.9 (#13554)
+    - Dependency: Switch from docker to moby dependencies (#13550)
+
+-------------------------------------------------------------------

Old:
----
  clusterctl-1.12.4.obscpio

New:
----
  clusterctl-1.12.5.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ clusterctl.spec ++++++
--- /var/tmp/diff_new_pack.40Kk9z/_old  2026-04-10 17:57:20.440558549 +0200
+++ /var/tmp/diff_new_pack.40Kk9z/_new  2026-04-10 17:57:20.460559375 +0200
@@ -20,7 +20,7 @@
 %define version_git_minor %(echo %{version} | awk 'BEGIN { FS=\".\"}; {print 
$2}')
 
 Name:           clusterctl
-Version:        1.12.4
+Version:        1.12.5
 Release:        0
 Summary:        CLI tool to handle the lifecycle of a Cluster API management 
cluster
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.40Kk9z/_old  2026-04-10 17:57:20.676568302 +0200
+++ /var/tmp/diff_new_pack.40Kk9z/_new  2026-04-10 17:57:20.700569293 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/kubernetes-sigs/cluster-api</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v1.12.4</param>
+    <param name="revision">v1.12.5</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.40Kk9z/_old  2026-04-10 17:57:20.844575244 +0200
+++ /var/tmp/diff_new_pack.40Kk9z/_new  2026-04-10 17:57:20.860575906 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/kubernetes-sigs/cluster-api</param>
-              <param 
name="changesrevision">233b59b164f56e13db488aeca83c9ef6839ea74d</param></service></servicedata>
+              <param 
name="changesrevision">efc7142fa2ca086e4e2392640affa22f47cbcc11</param></service></servicedata>
 (No newline at EOF)
 

++++++ clusterctl-1.12.4.obscpio -> clusterctl-1.12.5.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/Makefile 
new/clusterctl-1.12.5/Makefile
--- old/clusterctl-1.12.4/Makefile      2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/Makefile      2026-04-08 11:51:33.000000000 +0200
@@ -23,7 +23,7 @@
 #
 # Go.
 #
-GO_VERSION ?= 1.25.8
+GO_VERSION ?= 1.25.9
 GO_DIRECTIVE_VERSION ?= 1.24.0
 GO_CONTAINER_IMAGE ?= docker.io/library/golang:$(GO_VERSION)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/Tiltfile 
new/clusterctl-1.12.5/Tiltfile
--- old/clusterctl-1.12.4/Tiltfile      2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/Tiltfile      2026-04-08 11:51:33.000000000 +0200
@@ -172,7 +172,7 @@
 
 tilt_helper_dockerfile_header = """
 # Tilt image
-FROM golang:1.25.8 as tilt-helper
+FROM golang:1.25.9 as tilt-helper
 # Install delve. Note this should be kept in step with the Go release minor 
version.
 RUN go install github.com/go-delve/delve/cmd/[email protected]
 # Support live reloading with Tilt
@@ -183,7 +183,7 @@
 """
 
 tilt_dockerfile_header = """
-FROM golang:1.25.8 as tilt
+FROM golang:1.25.9 as tilt
 WORKDIR /
 COPY --from=tilt-helper /process.txt .
 COPY --from=tilt-helper /start.sh .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/cmd/clusterctl/client/config/cert_manager_client.go 
new/clusterctl-1.12.5/cmd/clusterctl/client/config/cert_manager_client.go
--- old/clusterctl-1.12.4/cmd/clusterctl/client/config/cert_manager_client.go   
2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/cmd/clusterctl/client/config/cert_manager_client.go   
2026-04-08 11:51:33.000000000 +0200
@@ -29,7 +29,7 @@
        CertManagerConfigKey = "cert-manager"
 
        // CertManagerDefaultVersion defines the default cert-manager version 
to be used by clusterctl.
-       CertManagerDefaultVersion = "v1.19.4"
+       CertManagerDefaultVersion = "v1.20.1"
 
        // CertManagerDefaultURL defines the default cert-manager repository 
url to be used by clusterctl.
        // NOTE: At runtime CertManagerDefaultVersion may be replaced with the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/controllers/crdmigrator/crd_migrator_test.go 
new/clusterctl-1.12.5/controllers/crdmigrator/crd_migrator_test.go
--- old/clusterctl-1.12.4/controllers/crdmigrator/crd_migrator_test.go  
2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/controllers/crdmigrator/crd_migrator_test.go  
2026-04-08 11:51:33.000000000 +0200
@@ -28,6 +28,7 @@
        . "github.com/onsi/gomega"
        corev1 "k8s.io/api/core/v1"
        apiextensionsv1 
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
+       apierrors "k8s.io/apimachinery/pkg/api/errors"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
        "k8s.io/apimachinery/pkg/labels"
@@ -163,7 +164,14 @@
                        defer func() {
                                crd := 
&apiextensionsv1.CustomResourceDefinition{}
                                crd.SetName(crdName)
-                               g.Expect(env.CleanupAndWait(ctx, 
crd)).To(Succeed())
+                               g.Expect(env.Cleanup(ctx, crd)).To(Succeed())
+                               // Wait for the CRD to be fully deleted. CRDs 
have a built-in finalizer
+                               // (customresourcecleanup.apiextensions.k8s.io) 
processed by the API server,
+                               // which can take longer than cacheSyncBackoff 
under heavy load.
+                               g.Eventually(func(g Gomega) {
+                                       err := env.Get(ctx, 
client.ObjectKeyFromObject(crd), crd)
+                                       
g.Expect(apierrors.IsNotFound(err)).To(BeTrue(), "CRD %s still exists: %v", 
crdName, err)
+                               }).WithTimeout(1 * time.Minute).WithPolling(100 
* time.Millisecond).Should(Succeed())
                        }()
 
                        t.Logf("T1: Install CRDs")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/controlplane/kubeadm/internal/workload_cluster_conditions.go
 
new/clusterctl-1.12.5/controlplane/kubeadm/internal/workload_cluster_conditions.go
--- 
old/clusterctl-1.12.4/controlplane/kubeadm/internal/workload_cluster_conditions.go
  2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/controlplane/kubeadm/internal/workload_cluster_conditions.go
  2026-04-08 11:51:33.000000000 +0200
@@ -147,6 +147,18 @@
                                continue
                        }
 
+                       if member.IsLearner {
+                               v1beta1conditions.MarkFalse(machine, 
controlplanev1.MachineEtcdMemberHealthyV1Beta1Condition, 
controlplanev1.EtcdMemberUnhealthyV1Beta1Reason, 
clusterv1.ConditionSeverityError, "Waiting for learner etcd member to be 
promoted")
+
+                               conditions.Set(machine, metav1.Condition{
+                                       Type:    
controlplanev1.KubeadmControlPlaneMachineEtcdMemberHealthyCondition,
+                                       Status:  metav1.ConditionFalse,
+                                       Reason:  
controlplanev1.KubeadmControlPlaneMachineEtcdMemberNotHealthyReason,
+                                       Message: "Waiting for learner etcd 
member to be promoted",
+                               })
+                               continue
+                       }
+
                        // Check for alarms for the etcd member
                        alarmList := []string{}
                        for _, alarm := range alarms {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/controlplane/kubeadm/internal/workload_cluster_conditions_test.go
 
new/clusterctl-1.12.5/controlplane/kubeadm/internal/workload_cluster_conditions_test.go
--- 
old/clusterctl-1.12.4/controlplane/kubeadm/internal/workload_cluster_conditions_test.go
     2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/controlplane/kubeadm/internal/workload_cluster_conditions_test.go
     2026-04-08 11:51:33.000000000 +0200
@@ -391,6 +391,52 @@
                        expectedEtcdMembersAndMachinesAreMatching: false, // 
without reading members, we can not make assumptions.
                },
                {
+                       name: "an etcd member in learner mode should be 
reported",
+                       machines: []*clusterv1.Machine{
+                               fakeMachine("m1", withNodeRef("n1")),
+                       },
+                       injectClient: &fakeClient{
+                               list: &corev1.NodeList{
+                                       Items: []corev1.Node{*fakeNode("n1")},
+                               },
+                       },
+                       injectEtcdClientGenerator: &fakeEtcdClientGenerator{
+                               forNodesClient: &etcd.Client{
+                                       EtcdClient: &fake2.FakeEtcdClient{
+                                               EtcdEndpoints: []string{},
+                                               MemberListResponse: 
&clientv3.MemberListResponse{
+                                                       Members: []*pb.Member{
+                                                               {Name: "n1", 
ID: uint64(1), IsLearner: true},
+                                                       },
+                                               },
+                                               AlarmResponse: 
&clientv3.AlarmResponse{
+                                                       Alarms: 
[]*pb.AlarmMember{},
+                                               },
+                                       },
+                               },
+                       },
+                       expectedKCPV1Beta1Condition: 
v1beta1conditions.FalseCondition(controlplanev1.EtcdClusterHealthyV1Beta1Condition,
 controlplanev1.EtcdClusterUnhealthyV1Beta1Reason, 
clusterv1.ConditionSeverityError, "Following Machines are reporting etcd member 
errors: %s", "m1"),
+                       expectedMachineV1Beta1Conditions: 
map[string]clusterv1.Conditions{
+                               "m1": {
+                                       
*v1beta1conditions.FalseCondition(controlplanev1.MachineEtcdMemberHealthyV1Beta1Condition,
 controlplanev1.EtcdMemberUnhealthyV1Beta1Reason, 
clusterv1.ConditionSeverityError, "Waiting for learner etcd member to be 
promoted"),
+                               },
+                       },
+                       expectedKCPCondition: &metav1.Condition{
+                               Type:   
controlplanev1.KubeadmControlPlaneEtcdClusterHealthyCondition,
+                               Status: metav1.ConditionFalse,
+                               Reason: 
controlplanev1.KubeadmControlPlaneEtcdClusterNotHealthyReason,
+                               Message: "* Machine m1:\n" +
+                                       "  * EtcdMemberHealthy: Waiting for 
learner etcd member to be promoted",
+                       },
+                       expectedMachineConditions: 
map[string][]metav1.Condition{
+                               "m1": {
+                                       {Type: 
controlplanev1.KubeadmControlPlaneMachineEtcdMemberHealthyCondition, Status: 
metav1.ConditionFalse, Reason: 
controlplanev1.KubeadmControlPlaneMachineEtcdMemberNotHealthyReason, Message: 
"Waiting for learner etcd member to be promoted"},
+                               },
+                       },
+                       expectedEtcdMembers:                       
[]string{"n1"},
+                       expectedEtcdMembersAndMachinesAreMatching: true,
+               },
+               {
                        name: "an etcd member with alarms should report false 
condition",
                        machines: []*clusterv1.Machine{
                                fakeMachine("m1", withNodeRef("n1")),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/docs/book/src/clusterctl/commands/init.md 
new/clusterctl-1.12.5/docs/book/src/clusterctl/commands/init.md
--- old/clusterctl-1.12.4/docs/book/src/clusterctl/commands/init.md     
2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/docs/book/src/clusterctl/commands/init.md     
2026-04-08 11:51:33.000000000 +0200
@@ -194,7 +194,7 @@
 Cluster API providers require a cert-manager version supporting the 
`cert-manager.io/v1` API to be installed in the cluster.
 
 While doing init, clusterctl checks if there is a version of cert-manager 
already installed. If not, clusterctl will
-install a default version (currently cert-manager v1.19.4). See [clusterctl 
configuration](../configuration.md) for
+install a default version (currently cert-manager v1.20.1). See [clusterctl 
configuration](../configuration.md) for
 available options to customize this operation.
 
 <aside class="note warning">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/docs/book/src/developer/getting-started.md 
new/clusterctl-1.12.5/docs/book/src/developer/getting-started.md
--- old/clusterctl-1.12.4/docs/book/src/developer/getting-started.md    
2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/docs/book/src/developer/getting-started.md    
2026-04-08 11:51:33.000000000 +0200
@@ -83,7 +83,7 @@
 You'll need to deploy [cert-manager] components on your [management 
cluster][mcluster], using `kubectl`
 
 ```bash
-kubectl apply -f 
https://github.com/cert-manager/cert-manager/releases/download/v1.19.4/cert-manager.yaml
+kubectl apply -f 
https://github.com/cert-manager/cert-manager/releases/download/v1.20.1/cert-manager.yaml
 ```
 
 Ensure the cert-manager webhook service is ready before creating the Cluster 
API components.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/docs/book/src/reference/versions.md 
new/clusterctl-1.12.5/docs/book/src/reference/versions.md
--- old/clusterctl-1.12.4/docs/book/src/reference/versions.md   2026-03-17 
12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/docs/book/src/reference/versions.md   2026-04-08 
11:51:33.000000000 +0200
@@ -381,33 +381,12 @@
 #### CoreDNS Support
 
 Each version of the Kubeadm Control Plane can upgrade up to a max CoreDNS 
version.
-Notably, the Max CoreDNS version could change also with patch releases.
+Notably, the Max CoreDNS version could change also with Cluster API patch 
releases.
+The version depends on the version of the `corefile-migration` library.
 
-| KCP Version | Max CoreDNS Version |
-|-------------|---------------------|
-| v1.5        | v1.10.1             |
-| >= v1.5.1   | v1.11.1             |
-| v1.6        | v1.11.1             |
-| v1.7        | v1.11.1             |
-| v1.8        | v1.11.3             |
-| >= v1.8.9   | v1.12.0             |
-| >= v1.8.12  | v1.12.1             |
-| v1.9        | v1.11.3             |
-| >= v1.9.4   | v1.12.0             |
-| >= v1.9.7   | v1.12.1             |
-| >= v1.9.11  | v1.12.3             |
-| v1.10       | v1.12.1             |
-| >= v1.10.5  | v1.12.3             |
-| v1.10.7     | v1.12.4             |
-| >= v1.10.8  | v1.13.1             |
-| v1.11       | v1.12.3             |
-| v1.11.2     | v1.12.4             |
-| >= v1.11.3  | v1.13.1             |
-| >= v1.11.6  | v1.14.1             |
-| v1.12       | v1.13.1             |
-| >= v1.12.3  | v1.14.1             |
-
-See [corefile-migration](https://github.com/coredns/corefile-migration)
+To look up the max supported CoreDNS version of a specific Cluster API version:
+* Look up the `corefile-migration` version in the CAPI top-level go.mod file, 
e.g. `github.com/coredns/corefile-migration v1.0.31`
+* Look up the highest supported CoreDNS version, e.g. in 
https://github.com/coredns/corefile-migration/blob/v1.0.31/migration/versions.go#L32
 
 ### Other providers
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/go.mod new/clusterctl-1.12.5/go.mod
--- old/clusterctl-1.12.4/go.mod        2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/go.mod        2026-04-08 11:51:33.000000000 +0200
@@ -7,7 +7,7 @@
        github.com/Masterminds/sprig/v3 v3.3.0
        github.com/adrg/xdg v0.5.3
        github.com/blang/semver/v4 v4.0.0
-       github.com/coredns/corefile-migration v1.0.30
+       github.com/coredns/corefile-migration v1.0.31
        github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
        github.com/distribution/reference v0.6.0
        github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46
@@ -39,7 +39,7 @@
        golang.org/x/oauth2 v0.34.0
        golang.org/x/text v0.33.0
        gomodules.xyz/jsonpatch/v2 v2.5.0
-       google.golang.org/grpc v1.78.0
+       google.golang.org/grpc v1.79.3
        k8s.io/api v0.34.3
        k8s.io/apiextensions-apiserver v0.34.3
        k8s.io/apimachinery v0.34.3
@@ -57,7 +57,7 @@
 )
 
 require (
-       cel.dev/expr v0.24.0 // indirect
+       cel.dev/expr v0.25.1 // indirect
        dario.cat/mergo v1.0.1 // indirect
        github.com/Masterminds/goutils v1.1.1 // indirect
        github.com/Masterminds/semver/v3 v3.4.0 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/go.sum new/clusterctl-1.12.5/go.sum
--- old/clusterctl-1.12.4/go.sum        2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/go.sum        2026-04-08 11:51:33.000000000 +0200
@@ -1,5 +1,5 @@
-cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
-cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
+cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=
+cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=
 cloud.google.com/go v0.26.0/go.mod 
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod 
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.38.0/go.mod 
h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
@@ -65,8 +65,8 @@
 github.com/cloudflare/circl v1.6.3/go.mod 
h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4=
 github.com/coredns/caddy v1.1.1 h1:2eYKZT7i6yxIfGP3qLJoJ7HAsDJqYB+X68g4NYjSrE0=
 github.com/coredns/caddy v1.1.1/go.mod 
h1:A6ntJQlAWuQfFlsd9hvigKbo2WS0VUs2l1e2F+BawD4=
-github.com/coredns/corefile-migration v1.0.30 
h1:ljZNPGgna+4yKv81gfkvkgLEWdtz0NjBR1glaiPI140=
-github.com/coredns/corefile-migration v1.0.30/go.mod 
h1:56DPqONc3njpVPsdilEnfijCwNGC3/kTJLl7i7SPavY=
+github.com/coredns/corefile-migration v1.0.31 
h1:f7WGhY8M2Jn8P2dVO0p7wSQ1QKsMARl6WEyUjCb/V38=
+github.com/coredns/corefile-migration v1.0.31/go.mod 
h1:56DPqONc3njpVPsdilEnfijCwNGC3/kTJLl7i7SPavY=
 github.com/coreos/go-semver v0.1.0/go.mod 
h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-semver v0.3.0/go.mod 
h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-semver v0.3.1 
h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
@@ -582,8 +582,8 @@
 google.golang.org/grpc v1.26.0/go.mod 
h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/grpc v1.27.0/go.mod 
h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/grpc v1.27.1/go.mod 
h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc=
-google.golang.org/grpc v1.78.0/go.mod 
h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U=
+google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=
+google.golang.org/grpc v1.79.3/go.mod 
h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
 google.golang.org/protobuf v1.36.11 
h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
 google.golang.org/protobuf v1.36.11/go.mod 
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/hack/tools/go.mod 
new/clusterctl-1.12.5/hack/tools/go.mod
--- old/clusterctl-1.12.4/hack/tools/go.mod     2026-03-17 12:51:40.000000000 
+0100
+++ new/clusterctl-1.12.5/hack/tools/go.mod     2026-04-08 11:51:33.000000000 
+0200
@@ -34,24 +34,25 @@
 )
 
 require (
-       cel.dev/expr v0.24.0 // indirect
+       cel.dev/expr v0.25.1 // indirect
        cloud.google.com/go/auth v0.17.0 // indirect
        cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
        cloud.google.com/go/monitoring v1.24.2 // indirect
        
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp 
v1.31.0 // indirect
        
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric 
v0.53.0 // indirect
        
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping
 v0.53.0 // indirect
-       github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f // indirect
+       github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect
        github.com/containerd/errdefs v1.0.0 // indirect
        github.com/containerd/errdefs/pkg v0.3.0 // indirect
-       github.com/envoyproxy/go-control-plane/envoy v1.35.0 // indirect
-       github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect
+       github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect
+       github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-jose/go-jose/v4 v4.1.3 // indirect
        github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
        github.com/google/btree v1.1.3 // indirect
        github.com/moby/docker-image-spec v1.3.1 // indirect
-       github.com/moby/sys/sequential v0.6.0 // indirect
+       github.com/moby/moby/api v1.54.1 // indirect
+       github.com/moby/moby/client v0.4.0 // indirect
        github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 
// indirect
        github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // 
indirect
        github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect
@@ -84,9 +85,8 @@
        github.com/cyphar/filepath-securejoin v0.2.4 // indirect
        github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // 
indirect
        github.com/distribution/reference v0.6.0 // indirect
-       github.com/docker/docker v28.5.2+incompatible // indirect
        github.com/docker/go-connections v0.6.0 // indirect
-       github.com/docker/go-units v0.4.0 // indirect
+       github.com/docker/go-units v0.5.0 // indirect
        github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46
        github.com/emicklei/go-restful/v3 v3.13.0 // indirect
        github.com/emirpasic/gods v1.18.1 // indirect
@@ -127,7 +127,7 @@
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // 
indirect
        github.com/nozzle/throttler v0.0.0-20180817012639-2ea982251481 // 
indirect
        github.com/opencontainers/go-digest v1.0.0 // indirect
-       github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
+       github.com/opencontainers/image-spec v1.1.1 // indirect
        github.com/pelletier/go-toml/v2 v2.2.4 // indirect
        github.com/pjbgf/sha1cd v0.3.0 // indirect
        github.com/prometheus/client_golang v1.22.0 // indirect
@@ -164,7 +164,7 @@
        google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // 
indirect
        google.golang.org/genproto/googleapis/api 
v0.0.0-20260128011058-8636f8732409 // indirect
        google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260128011058-8636f8732409 // indirect
-       google.golang.org/grpc v1.78.0 // indirect
+       google.golang.org/grpc v1.79.3 // indirect
        google.golang.org/protobuf v1.36.11 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/warnings.v0 v0.1.2 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/hack/tools/go.sum 
new/clusterctl-1.12.5/hack/tools/go.sum
--- old/clusterctl-1.12.4/hack/tools/go.sum     2026-03-17 12:51:40.000000000 
+0100
+++ new/clusterctl-1.12.5/hack/tools/go.sum     2026-04-08 11:51:33.000000000 
+0200
@@ -1,5 +1,5 @@
-cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
-cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
+cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=
+cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=
 cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c=
 cloud.google.com/go v0.121.6/go.mod 
h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI=
 cloud.google.com/go/auth v0.17.0 
h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4=
@@ -22,8 +22,6 @@
 cloud.google.com/go/trace v1.11.6/go.mod 
h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI=
 dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
 dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
-github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 
h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
-github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod 
h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
 github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp 
v1.31.0 h1:DHa2U07rk8syqvCge0QIGMCE1WxGj9njT44GH7zNJLQ=
 github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp 
v1.31.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0=
 github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric 
v0.53.0 h1:owcC2UnmsZycprQ5RfRgjydWhuoxg71LUfyiQdijZuM=
@@ -69,18 +67,16 @@
 github.com/cloudflare/circl v1.3.3/go.mod 
h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
 github.com/cloudflare/circl v1.6.3 
h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8=
 github.com/cloudflare/circl v1.6.3/go.mod 
h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4=
-github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f 
h1:Y8xYupdHxryycyPlc9Y+bSQAYZnetRJ70VMVKm5CKI0=
-github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f/go.mod 
h1:HlzOvOjVBOfTGSRXRyY0OiCS/3J1akRGQQpRO/7zyF4=
+github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 
h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w=
+github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod 
h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI=
 github.com/containerd/errdefs v1.0.0 
h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI=
 github.com/containerd/errdefs v1.0.0/go.mod 
h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
 github.com/containerd/errdefs/pkg v0.3.0 
h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE=
 github.com/containerd/errdefs/pkg v0.3.0/go.mod 
h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk=
-github.com/containerd/log v0.1.0 
h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
-github.com/containerd/log v0.1.0/go.mod 
h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
 github.com/coredns/caddy v1.1.1 h1:2eYKZT7i6yxIfGP3qLJoJ7HAsDJqYB+X68g4NYjSrE0=
 github.com/coredns/caddy v1.1.1/go.mod 
h1:A6ntJQlAWuQfFlsd9hvigKbo2WS0VUs2l1e2F+BawD4=
-github.com/coredns/corefile-migration v1.0.30 
h1:ljZNPGgna+4yKv81gfkvkgLEWdtz0NjBR1glaiPI140=
-github.com/coredns/corefile-migration v1.0.30/go.mod 
h1:56DPqONc3njpVPsdilEnfijCwNGC3/kTJLl7i7SPavY=
+github.com/coredns/corefile-migration v1.0.31 
h1:f7WGhY8M2Jn8P2dVO0p7wSQ1QKsMARl6WEyUjCb/V38=
+github.com/coredns/corefile-migration v1.0.31/go.mod 
h1:56DPqONc3njpVPsdilEnfijCwNGC3/kTJLl7i7SPavY=
 github.com/creack/pty v1.1.9/go.mod 
h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/cyphar/filepath-securejoin v0.2.4 
h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
 github.com/cyphar/filepath-securejoin v0.2.4/go.mod 
h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
@@ -90,12 +86,10 @@
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/distribution/reference v0.6.0 
h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
 github.com/distribution/reference v0.6.0/go.mod 
h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
-github.com/docker/docker v28.5.2+incompatible 
h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM=
-github.com/docker/docker v28.5.2+incompatible/go.mod 
h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/go-connections v0.6.0 
h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94=
 github.com/docker/go-connections v0.6.0/go.mod 
h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE=
-github.com/docker/go-units v0.4.0 
h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
-github.com/docker/go-units v0.4.0/go.mod 
h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/docker/go-units v0.5.0 
h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
+github.com/docker/go-units v0.5.0/go.mod 
h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 
h1:7QPwrLT79GlD5sizHf27aoY2RTvw62mO6x7mxkScNk0=
 github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46/go.mod 
h1:esf2rsHFNlZlxsqsZDojNBcnNs5REqIvRrWRHqX0vEU=
 github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a 
h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU=
@@ -104,14 +98,14 @@
 github.com/emicklei/go-restful/v3 v3.13.0/go.mod 
h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/emirpasic/gods v1.18.1 
h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
 github.com/emirpasic/gods v1.18.1/go.mod 
h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
-github.com/envoyproxy/go-control-plane v0.13.5-0.20251024222203-75eaa193e329 
h1:K+fnvUM0VZ7ZFJf0n4L/BRlnsb9pL/GuDG6FqaH+PwM=
-github.com/envoyproxy/go-control-plane 
v0.13.5-0.20251024222203-75eaa193e329/go.mod 
h1:Alz8LEClvR7xKsrq3qzoc4N0guvVNSS8KmSChGYr9hs=
-github.com/envoyproxy/go-control-plane/envoy v1.35.0 
h1:ixjkELDE+ru6idPxcHLj8LBVc2bFP7iBytj353BoHUo=
-github.com/envoyproxy/go-control-plane/envoy v1.35.0/go.mod 
h1:09qwbGVuSWWAyN5t/b3iyVfz5+z8QWGrzkoqm/8SbEs=
+github.com/envoyproxy/go-control-plane v0.14.0 
h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA=
+github.com/envoyproxy/go-control-plane v0.14.0/go.mod 
h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU=
+github.com/envoyproxy/go-control-plane/envoy v1.36.0 
h1:yg/JjO5E7ubRyKX3m07GF3reDNEnfOboJ0QySbH736g=
+github.com/envoyproxy/go-control-plane/envoy v1.36.0/go.mod 
h1:ty89S1YCCVruQAm9OtKeEkQLTb+Lkz0k8v9W0Oxsv98=
 github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 
h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI=
 github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod 
h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4=
-github.com/envoyproxy/protoc-gen-validate v1.2.1 
h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8=
-github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod 
h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
+github.com/envoyproxy/protoc-gen-validate v1.3.0 
h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4=
+github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod 
h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA=
 github.com/evanphx/json-patch v5.7.0+incompatible 
h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI=
 github.com/evanphx/json-patch v5.7.0+incompatible/go.mod 
h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/evanphx/json-patch/v5 v5.9.11 
h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU=
@@ -243,20 +237,16 @@
 github.com/mitchellh/reflectwalk v1.0.2/go.mod 
h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
 github.com/moby/docker-image-spec v1.3.1 
h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
 github.com/moby/docker-image-spec v1.3.1/go.mod 
h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
-github.com/moby/sys/atomicwriter v0.1.0 
h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw=
-github.com/moby/sys/atomicwriter v0.1.0/go.mod 
h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs=
-github.com/moby/sys/sequential v0.6.0 
h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU=
-github.com/moby/sys/sequential v0.6.0/go.mod 
h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko=
-github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
-github.com/moby/term v0.5.0/go.mod 
h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
+github.com/moby/moby/api v1.54.1 
h1:TqVzuJkOLsgLDDwNLmYqACUuTehOHRGKiPhvH8V3Nn4=
+github.com/moby/moby/api v1.54.1/go.mod 
h1:+RQ6wluLwtYaTd1WnPLykIDPekkuyD/ROWQClE83pzs=
+github.com/moby/moby/client v0.4.0 
h1:S+2XegzHQrrvTCvF6s5HFzcrywWQmuVnhOXe2kiWjIw=
+github.com/moby/moby/client v0.4.0/go.mod 
h1:QWPbvWchQbxBNdaLSpoKpCdf5E+WxFAgNHogCWDoa7g=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod 
h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd 
h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod 
h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/reflect2 v1.0.2/go.mod 
h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee 
h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
 github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod 
h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
-github.com/morikuni/aec v1.0.0/go.mod 
h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 
h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod 
h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/nozzle/throttler v0.0.0-20180817012639-2ea982251481 
h1:Up6+btDp321ZG5/zdSLo48H9Iaq0UQGthrhWC6pCxzE=
@@ -271,8 +261,8 @@
 github.com/onsi/gomega v1.38.2/go.mod 
h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k=
 github.com/opencontainers/go-digest v1.0.0 
h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
 github.com/opencontainers/go-digest v1.0.0/go.mod 
h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.0-rc5 
h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
-github.com/opencontainers/image-spec v1.1.0-rc5/go.mod 
h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
+github.com/opencontainers/image-spec v1.1.1 
h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
+github.com/opencontainers/image-spec v1.1.1/go.mod 
h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
 github.com/pelletier/go-toml/v2 v2.2.4 
h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
 github.com/pelletier/go-toml/v2 v2.2.4/go.mod 
h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
 github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
@@ -365,8 +355,6 @@
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod 
h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 
h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod 
h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 
h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod 
h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40=
 go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 
h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY=
 go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod 
h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw=
 go.opentelemetry.io/otel/metric v1.40.0 
h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g=
@@ -490,8 +478,8 @@
 google.golang.org/genproto/googleapis/api 
v0.0.0-20260128011058-8636f8732409/go.mod 
h1:fl8J1IvUjCilwZzQowmw2b7HQB2eAuYBabMXzWurF+I=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 
h1:H86B94AW+VfJWDqFeEbBPhEtHzJwJfTbgE2lZa54ZAQ=
 google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260128011058-8636f8732409/go.mod 
h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
-google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc=
-google.golang.org/grpc v1.78.0/go.mod 
h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U=
+google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=
+google.golang.org/grpc v1.79.3/go.mod 
h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
 google.golang.org/protobuf v1.36.11 
h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
 google.golang.org/protobuf v1.36.11/go.mod 
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -512,8 +500,8 @@
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o=
-gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g=
+gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
+gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
 k8s.io/api v0.34.3 h1:D12sTP257/jSH2vHV2EDYrb16bS7ULlHpdNdNhEw2S4=
 k8s.io/api v0.34.3/go.mod h1:PyVQBF886Q5RSQZOim7DybQjAbVs8g7gwJNhGtY5MBk=
 k8s.io/apiextensions-apiserver v0.34.3 
h1:p10fGlkDY09eWKOTeUSioxwLukJnm+KuDZdrW71y40g=
@@ -536,6 +524,8 @@
 k8s.io/release v0.16.9/go.mod h1:iRTTQYssZDVke2X7bqhdbi3cPjdmRqZXpIJsp2IRDyM=
 k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 
h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
 k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod 
h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk=
+pgregory.net/rapid v1.2.0/go.mod 
h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 
h1:jpcvIRr3GLoUoEKRkHKSmGjxb6lWwrBlJsXc+eUYQHM=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2/go.mod 
h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
 sigs.k8s.io/controller-runtime v0.22.5 
h1:v3nfSUMowX/2WMp27J9slwGFyAt7IV0YwBxAkrUr0GE=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/internal/controllers/cluster/cluster_controller_test.go 
new/clusterctl-1.12.5/internal/controllers/cluster/cluster_controller_test.go
--- 
old/clusterctl-1.12.4/internal/controllers/cluster/cluster_controller_test.go   
    2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/internal/controllers/cluster/cluster_controller_test.go   
    2026-04-08 11:51:33.000000000 +0200
@@ -262,9 +262,9 @@
                        ph, err := patch.NewHelper(cluster, env)
                        g.Expect(err).ToNot(HaveOccurred())
                        conditions.Set(cluster, metav1.Condition{
-                               Type:   
clusterv1.ClusterInfrastructureReadyCondition,
+                               Type:   "CustomType",
                                Status: metav1.ConditionTrue,
-                               Reason: 
clusterv1.ClusterInfrastructureReadyReason,
+                               Reason: "CustomReason",
                        })
                        g.Expect(ph.Patch(ctx, cluster, 
patch.WithStatusObservedGeneration{})).To(Succeed())
                        return true
@@ -276,7 +276,7 @@
                        if err := env.Get(ctx, key, instance); err != nil {
                                return false
                        }
-                       return conditions.IsTrue(cluster, 
clusterv1.ClusterInfrastructureReadyCondition)
+                       return conditions.IsTrue(cluster, "CustomType")
                }, timeout).Should(BeTrue())
        })
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/internal/controllers/machineset/machineset_controller_test.go
 
new/clusterctl-1.12.5/internal/controllers/machineset/machineset_controller_test.go
--- 
old/clusterctl-1.12.4/internal/controllers/machineset/machineset_controller_test.go
 2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/internal/controllers/machineset/machineset_controller_test.go
 2026-04-08 11:51:33.000000000 +0200
@@ -2599,7 +2599,7 @@
                },
        }
 
-       fakeClient := 
fake.NewClientBuilder().WithObjects(controlPlaneUpgrading, 
builder.GenericControlPlaneCRD, 
machineSet).WithStatusSubresource(&clusterv1.MachineSet{}).Build()
+       fakeClient := 
fake.NewClientBuilder().WithObjects(controlPlaneUpgrading, 
builder.GenericControlPlaneCRD, 
machineSet).WithStatusSubresource(&clusterv1.MachineSet{}).WithScheme(fakeScheme).Build()
        r := &Reconciler{
                Client:          fakeClient,
                PreflightChecks: 
sets.Set[clusterv1.MachineSetPreflightCheck]{}.Insert(clusterv1.MachineSetPreflightCheckAll),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/scripts/ci-e2e-lib.sh 
new/clusterctl-1.12.5/scripts/ci-e2e-lib.sh
--- old/clusterctl-1.12.4/scripts/ci-e2e-lib.sh 2026-03-17 12:51:40.000000000 
+0100
+++ new/clusterctl-1.12.5/scripts/ci-e2e-lib.sh 2026-04-08 11:51:33.000000000 
+0200
@@ -258,9 +258,9 @@
 # the actual test run less sensible to the network speed.
 kind:prepullAdditionalImages () {
   # Pulling cert manager images so we can pre-load in kind nodes
-  kind::prepullImage "quay.io/jetstack/cert-manager-cainjector:v1.19.4"
-  kind::prepullImage "quay.io/jetstack/cert-manager-webhook:v1.19.4"
-  kind::prepullImage "quay.io/jetstack/cert-manager-controller:v1.19.4"
+  kind::prepullImage "quay.io/jetstack/cert-manager-cainjector:v1.20.1"
+  kind::prepullImage "quay.io/jetstack/cert-manager-webhook:v1.20.1"
+  kind::prepullImage "quay.io/jetstack/cert-manager-controller:v1.20.1"
 
   # Pull all images defined in DOCKER_PRELOAD_IMAGES.
   for IMAGE in $(grep DOCKER_PRELOAD_IMAGES: < "$E2E_CONF_FILE" | sed -E 
's/.*\[(.*)\].*/\1/' | tr ',' ' '); do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/test/e2e/config/docker.yaml 
new/clusterctl-1.12.5/test/e2e/config/docker.yaml
--- old/clusterctl-1.12.4/test/e2e/config/docker.yaml   2026-03-17 
12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/test/e2e/config/docker.yaml   2026-04-08 
11:51:33.000000000 +0200
@@ -21,11 +21,11 @@
   loadBehavior: tryLoad
 - name: gcr.io/k8s-staging-cluster-api/test-extension-{ARCH}:dev
   loadBehavior: tryLoad
-- name: quay.io/jetstack/cert-manager-cainjector:v1.19.4
+- name: quay.io/jetstack/cert-manager-cainjector:v1.20.1
   loadBehavior: tryLoad
-- name: quay.io/jetstack/cert-manager-webhook:v1.19.4
+- name: quay.io/jetstack/cert-manager-webhook:v1.20.1
   loadBehavior: tryLoad
-- name: quay.io/jetstack/cert-manager-controller:v1.19.4
+- name: quay.io/jetstack/cert-manager-controller:v1.20.1
   loadBehavior: tryLoad
 
 providers:
@@ -371,14 +371,14 @@
   # allowing the same e2e config file to be re-used in different Prow jobs 
e.g. each one with a K8s version permutation.
   # The following Kubernetes versions should be the latest versions with 
already published kindest/node images.
   # This avoids building node images in the default case which improves the 
test duration significantly.
-  KUBERNETES_VERSION_MANAGEMENT: "v1.35.0"
-  KUBERNETES_VERSION: "v1.35.0"
-  KUBERNETES_VERSION_CHAINED_UPGRADE_FROM: "v1.31.14" # Should always be 
KUBERNETES_VERSION_UPGRADE_TO - 4 minor
-  KUBERNETES_VERSION_UPGRADE_FROM: "v1.34.3"
-  KUBERNETES_VERSION_UPGRADE_TO: "v1.35.0"
-  KUBERNETES_VERSION_LATEST_CI: "ci/latest-1.35"
-  ETCD_VERSION_UPGRADE_TO: "3.6.6-0"
-  COREDNS_VERSION_UPGRADE_TO: "v1.13.1"
+  KUBERNETES_VERSION_MANAGEMENT: "v1.36.0-beta.0"
+  KUBERNETES_VERSION: "v1.36.0-beta.0"
+  KUBERNETES_VERSION_CHAINED_UPGRADE_FROM: "v1.32.11" # Should always be 
KUBERNETES_VERSION_UPGRADE_TO - 4 minor
+  KUBERNETES_VERSION_UPGRADE_FROM: "v1.35.0"
+  KUBERNETES_VERSION_UPGRADE_TO: "v1.36.0-beta.0"
+  KUBERNETES_VERSION_LATEST_CI: "ci/latest-1.36"
+  ETCD_VERSION_UPGRADE_TO: "3.6.8-0"
+  COREDNS_VERSION_UPGRADE_TO: "v1.14.2"
   DOCKER_SERVICE_DOMAIN: "cluster.local"
   IP_FAMILY: "dual"
   DOCKER_SERVICE_CIDRS: "10.128.0.0/12"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/test/framework/kubetest/run.go 
new/clusterctl-1.12.5/test/framework/kubetest/run.go
--- old/clusterctl-1.12.4/test/framework/kubetest/run.go        2026-03-17 
12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/test/framework/kubetest/run.go        2026-04-08 
11:51:33.000000000 +0200
@@ -27,7 +27,7 @@
        "strconv"
        "strings"
 
-       dockercontainer "github.com/docker/docker/api/types/container"
+       dockercontainer "github.com/moby/moby/api/types/container"
        "github.com/onsi/ginkgo/v2"
        "github.com/pkg/errors"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/test/go.mod 
new/clusterctl-1.12.5/test/go.mod
--- old/clusterctl-1.12.4/test/go.mod   2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/test/go.mod   2026-04-08 11:51:33.000000000 +0200
@@ -6,13 +6,12 @@
 
 require (
        github.com/blang/semver/v4 v4.0.0
-       github.com/docker/docker v28.5.2+incompatible
-       github.com/docker/go-connections v0.6.0
        github.com/emicklei/go-restful/v3 v3.13.0
        github.com/evanphx/json-patch/v5 v5.9.11
        github.com/flatcar/ignition v0.36.2
        github.com/go-logr/logr v1.4.3
        github.com/google/go-cmp v0.7.0
+       github.com/moby/moby/api v1.54.1
        github.com/onsi/ginkgo/v2 v2.27.2
        github.com/onsi/gomega v1.38.2
        github.com/pkg/errors v0.9.1
@@ -24,7 +23,7 @@
        go.etcd.io/etcd/client/v3 v3.6.6
        golang.org/x/net v0.49.0
        gomodules.xyz/jsonpatch/v2 v2.5.0
-       google.golang.org/grpc v1.78.0
+       google.golang.org/grpc v1.79.3
        k8s.io/api v0.34.3
        k8s.io/apiextensions-apiserver v0.34.3
        k8s.io/apimachinery v0.34.3
@@ -42,14 +41,14 @@
 
 require (
        al.essio.dev/pkg/shellescape v1.5.1 // indirect
-       cel.dev/expr v0.24.0 // indirect
+       cel.dev/expr v0.25.1 // indirect
        dario.cat/mergo v1.0.1 // indirect
        github.com/BurntSushi/toml v1.4.0 // indirect
        github.com/MakeNowJust/heredoc v1.0.0 // indirect
        github.com/Masterminds/goutils v1.1.1 // indirect
        github.com/Masterminds/semver/v3 v3.4.0 // indirect
        github.com/Masterminds/sprig/v3 v3.3.0 // indirect
-       github.com/Microsoft/go-winio v0.5.0 // indirect
+       github.com/Microsoft/go-winio v0.6.2 // indirect
        github.com/NYTimes/gziphandler v1.1.1 // indirect
        github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // 
indirect
        github.com/adrg/xdg v0.5.3 // indirect
@@ -60,13 +59,13 @@
        github.com/cloudflare/circl v1.6.3 // indirect
        github.com/containerd/errdefs v1.0.0 // indirect
        github.com/containerd/errdefs/pkg v0.3.0 // indirect
-       github.com/containerd/log v0.1.0 // indirect
        github.com/coreos/go-semver v0.3.1 // indirect
        github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // 
indirect
        github.com/coreos/go-systemd/v22 v22.5.0 // indirect
        github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // 
indirect
        github.com/distribution/reference v0.6.0 // indirect
-       github.com/docker/go-units v0.4.0 // indirect
+       github.com/docker/go-connections v0.6.0 // indirect
+       github.com/docker/go-units v0.5.0 // indirect
        github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 // 
indirect
        github.com/fatih/color v1.18.0 // indirect
        github.com/felixge/httpsnoop v1.0.4 // indirect
@@ -104,11 +103,10 @@
        github.com/mitchellh/copystructure v1.2.0 // indirect
        github.com/mitchellh/reflectwalk v1.0.2 // indirect
        github.com/moby/docker-image-spec v1.3.1 // indirect
+       github.com/moby/moby/client v0.4.0
        github.com/moby/spdystream v0.5.0 // indirect
-       github.com/moby/sys/atomicwriter v0.1.0 // indirect
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // 
indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // 
indirect
-       github.com/morikuni/aec v1.0.0 // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // 
indirect
        github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // 
indirect
        github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect
@@ -116,7 +114,7 @@
        github.com/olekukonko/ll v0.1.1 // indirect
        github.com/olekukonko/tablewriter v1.0.9 // indirect
        github.com/opencontainers/go-digest v1.0.0 // indirect
-       github.com/opencontainers/image-spec v1.0.2 // indirect
+       github.com/opencontainers/image-spec v1.1.1 // indirect
        github.com/pelletier/go-toml v1.9.5 // indirect
        github.com/pelletier/go-toml/v2 v2.2.4 // indirect
        github.com/pmezard/go-difflib v1.0.0 // indirect
@@ -141,7 +139,6 @@
        go.opentelemetry.io/otel v1.40.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 
// indirect
-       go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 
// indirect
        go.opentelemetry.io/otel/metric v1.40.0 // indirect
        go.opentelemetry.io/otel/sdk v1.40.0 // indirect
        go.opentelemetry.io/otel/trace v1.40.0 // indirect
@@ -158,7 +155,7 @@
        golang.org/x/sys v0.40.0 // indirect
        golang.org/x/term v0.39.0 // indirect
        golang.org/x/text v0.33.0 // indirect
-       golang.org/x/time v0.9.0 // indirect
+       golang.org/x/time v0.11.0 // indirect
        golang.org/x/tools v0.40.0 // indirect
        google.golang.org/genproto/googleapis/api 
v0.0.0-20260128011058-8636f8732409 // indirect
        google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260128011058-8636f8732409 // indirect
@@ -166,7 +163,6 @@
        gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
-       gotest.tools/v3 v3.4.0 // indirect
        k8s.io/cluster-bootstrap v0.34.2 // indirect
        k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
        sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 // 
indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/test/go.sum 
new/clusterctl-1.12.5/test/go.sum
--- old/clusterctl-1.12.4/test/go.sum   2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/test/go.sum   2026-04-08 11:51:33.000000000 +0200
@@ -1,11 +1,9 @@
 al.essio.dev/pkg/shellescape v1.5.1 
h1:86HrALUujYS/h+GtqoB26SBEdkWfmMI6FubjXlsXyho=
 al.essio.dev/pkg/shellescape v1.5.1/go.mod 
h1:6sIqp7X2P6mThCQ7twERpZTuigpr6KbZWtls1U8I890=
-cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
-cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
+cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=
+cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=
 dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
 dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
-github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 
h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
-github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod 
h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
 github.com/BurntSushi/toml v1.4.0 
h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
 github.com/BurntSushi/toml v1.4.0/go.mod 
h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
 github.com/MakeNowJust/heredoc v1.0.0 
h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
@@ -16,8 +14,8 @@
 github.com/Masterminds/semver/v3 v3.4.0/go.mod 
h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/Masterminds/sprig/v3 v3.3.0 
h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs=
 github.com/Masterminds/sprig/v3 v3.3.0/go.mod 
h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
-github.com/Microsoft/go-winio v0.5.0 
h1:Elr9Wn+sGKPlkaBvwu4mTrxtmOp3F3yV9qhaHbXGjwU=
-github.com/Microsoft/go-winio v0.5.0/go.mod 
h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/go-winio v0.6.2 
h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
+github.com/Microsoft/go-winio v0.6.2/go.mod 
h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
 github.com/NYTimes/gziphandler v1.1.1 
h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
 github.com/NYTimes/gziphandler v1.1.1/go.mod 
h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
 github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 
h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA=
@@ -46,12 +44,10 @@
 github.com/containerd/errdefs v1.0.0/go.mod 
h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
 github.com/containerd/errdefs/pkg v0.3.0 
h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE=
 github.com/containerd/errdefs/pkg v0.3.0/go.mod 
h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk=
-github.com/containerd/log v0.1.0 
h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
-github.com/containerd/log v0.1.0/go.mod 
h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
 github.com/coredns/caddy v1.1.1 h1:2eYKZT7i6yxIfGP3qLJoJ7HAsDJqYB+X68g4NYjSrE0=
 github.com/coredns/caddy v1.1.1/go.mod 
h1:A6ntJQlAWuQfFlsd9hvigKbo2WS0VUs2l1e2F+BawD4=
-github.com/coredns/corefile-migration v1.0.30 
h1:ljZNPGgna+4yKv81gfkvkgLEWdtz0NjBR1glaiPI140=
-github.com/coredns/corefile-migration v1.0.30/go.mod 
h1:56DPqONc3njpVPsdilEnfijCwNGC3/kTJLl7i7SPavY=
+github.com/coredns/corefile-migration v1.0.31 
h1:f7WGhY8M2Jn8P2dVO0p7wSQ1QKsMARl6WEyUjCb/V38=
+github.com/coredns/corefile-migration v1.0.31/go.mod 
h1:56DPqONc3njpVPsdilEnfijCwNGC3/kTJLl7i7SPavY=
 github.com/coreos/go-semver v0.1.0/go.mod 
h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-semver v0.3.1 
h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
 github.com/coreos/go-semver v0.3.1/go.mod 
h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
@@ -68,12 +64,10 @@
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/distribution/reference v0.6.0 
h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
 github.com/distribution/reference v0.6.0/go.mod 
h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
-github.com/docker/docker v28.5.2+incompatible 
h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM=
-github.com/docker/docker v28.5.2+incompatible/go.mod 
h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/go-connections v0.6.0 
h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94=
 github.com/docker/go-connections v0.6.0/go.mod 
h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE=
-github.com/docker/go-units v0.4.0 
h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
-github.com/docker/go-units v0.4.0/go.mod 
h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/docker/go-units v0.5.0 
h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
+github.com/docker/go-units v0.5.0/go.mod 
h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 
h1:7QPwrLT79GlD5sizHf27aoY2RTvw62mO6x7mxkScNk0=
 github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46/go.mod 
h1:esf2rsHFNlZlxsqsZDojNBcnNs5REqIvRrWRHqX0vEU=
 github.com/dustin/go-humanize v1.0.1 
h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
@@ -142,7 +136,6 @@
 github.com/google/gnostic-models v0.7.0/go.mod 
h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
 github.com/google/go-cmp v0.2.0/go.mod 
h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.5.2/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
 github.com/google/go-cmp v0.7.0/go.mod 
h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
 github.com/google/go-github/v53 v53.2.0 
h1:wvz3FyF53v4BK+AsnvCmeNhf8AkTaeh2SoYu/XUvTtI=
@@ -214,22 +207,18 @@
 github.com/mitchellh/reflectwalk v1.0.2/go.mod 
h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
 github.com/moby/docker-image-spec v1.3.1 
h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
 github.com/moby/docker-image-spec v1.3.1/go.mod 
h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
+github.com/moby/moby/api v1.54.1 
h1:TqVzuJkOLsgLDDwNLmYqACUuTehOHRGKiPhvH8V3Nn4=
+github.com/moby/moby/api v1.54.1/go.mod 
h1:+RQ6wluLwtYaTd1WnPLykIDPekkuyD/ROWQClE83pzs=
+github.com/moby/moby/client v0.4.0 
h1:S+2XegzHQrrvTCvF6s5HFzcrywWQmuVnhOXe2kiWjIw=
+github.com/moby/moby/client v0.4.0/go.mod 
h1:QWPbvWchQbxBNdaLSpoKpCdf5E+WxFAgNHogCWDoa7g=
 github.com/moby/spdystream v0.5.0 
h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU=
 github.com/moby/spdystream v0.5.0/go.mod 
h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
-github.com/moby/sys/atomicwriter v0.1.0 
h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw=
-github.com/moby/sys/atomicwriter v0.1.0/go.mod 
h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs=
-github.com/moby/sys/sequential v0.6.0 
h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU=
-github.com/moby/sys/sequential v0.6.0/go.mod 
h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko=
-github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
-github.com/moby/term v0.5.0/go.mod 
h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod 
h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd 
h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod 
h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/reflect2 v1.0.2/go.mod 
h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee 
h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
 github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod 
h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
-github.com/morikuni/aec v1.0.0/go.mod 
h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 
h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod 
h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f 
h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
@@ -248,8 +237,8 @@
 github.com/onsi/gomega v1.38.2/go.mod 
h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k=
 github.com/opencontainers/go-digest v1.0.0 
h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
 github.com/opencontainers/go-digest v1.0.0/go.mod 
h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.0.2 
h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM=
-github.com/opencontainers/image-spec v1.0.2/go.mod 
h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/image-spec v1.1.1 
h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
+github.com/opencontainers/image-spec v1.1.1/go.mod 
h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
 github.com/pborman/uuid v0.0.0-20170612153648-e790cca94e6c/go.mod 
h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34=
 github.com/pelletier/go-toml v1.9.5 
h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
 github.com/pelletier/go-toml v1.9.5/go.mod 
h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
@@ -280,7 +269,6 @@
 github.com/shopspring/decimal v1.4.0/go.mod 
h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
 github.com/sigma/bdoor v0.0.0-20160202064022-babf2a4017b0/go.mod 
h1:WBu7REWbxC/s/J06jsk//d+9DOz9BbsmcIrimuGRFbs=
 github.com/sigma/vmw-guestinfo v0.0.0-20160204083807-95dd4126d6e8/go.mod 
h1:JrRFFC0veyh0cibh0DAhriSY7/gV3kDdNaVUOmfx01U=
-github.com/sirupsen/logrus v1.7.0/go.mod 
h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/sirupsen/logrus v1.9.3 
h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
 github.com/sirupsen/logrus v1.9.3/go.mod 
h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
 github.com/smartystreets/assertions v1.2.0/go.mod 
h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
@@ -307,7 +295,6 @@
 github.com/stretchr/objx v0.5.0/go.mod 
h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
 github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
 github.com/stretchr/objx v0.5.2/go.mod 
h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
-github.com/stretchr/testify v1.2.2/go.mod 
h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod 
h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.7.0/go.mod 
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.7.1/go.mod 
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
@@ -365,8 +352,6 @@
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod 
h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 
h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod 
h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 
h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod 
h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40=
 go.opentelemetry.io/otel/metric v1.40.0 
h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g=
 go.opentelemetry.io/otel/metric v1.40.0/go.mod 
h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc=
 go.opentelemetry.io/otel/sdk v1.40.0 
h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8=
@@ -418,11 +403,8 @@
 golang.org/x/sync v0.19.0/go.mod 
h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -436,14 +418,13 @@
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
 golang.org/x/text v0.33.0/go.mod 
h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
-golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
-golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=
+golang.org/x/time v0.11.0/go.mod 
h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod 
h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod 
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod 
h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod 
h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.1.0/go.mod 
h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
 golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA=
 golang.org/x/tools v0.40.0/go.mod 
h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -458,8 +439,8 @@
 google.golang.org/genproto/googleapis/api 
v0.0.0-20260128011058-8636f8732409/go.mod 
h1:fl8J1IvUjCilwZzQowmw2b7HQB2eAuYBabMXzWurF+I=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 
h1:H86B94AW+VfJWDqFeEbBPhEtHzJwJfTbgE2lZa54ZAQ=
 google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260128011058-8636f8732409/go.mod 
h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
-google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc=
-google.golang.org/grpc v1.78.0/go.mod 
h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U=
+google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=
+google.golang.org/grpc v1.79.3/go.mod 
h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
 google.golang.org/protobuf v1.36.11 
h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
 google.golang.org/protobuf v1.36.11/go.mod 
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -475,8 +456,8 @@
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o=
-gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g=
+gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
+gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
 k8s.io/api v0.34.3 h1:D12sTP257/jSH2vHV2EDYrb16bS7ULlHpdNdNhEw2S4=
 k8s.io/api v0.34.3/go.mod h1:PyVQBF886Q5RSQZOim7DybQjAbVs8g7gwJNhGtY5MBk=
 k8s.io/apiextensions-apiserver v0.34.3 
h1:p10fGlkDY09eWKOTeUSioxwLukJnm+KuDZdrW71y40g=
@@ -497,6 +478,8 @@
 k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod 
h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts=
 k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 
h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
 k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod 
h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk=
+pgregory.net/rapid v1.2.0/go.mod 
h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 
h1:jpcvIRr3GLoUoEKRkHKSmGjxb6lWwrBlJsXc+eUYQHM=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2/go.mod 
h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
 sigs.k8s.io/controller-runtime v0.22.5 
h1:v3nfSUMowX/2WMp27J9slwGFyAt7IV0YwBxAkrUr0GE=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/container/docker.go 
new/clusterctl-1.12.5/test/infrastructure/container/docker.go
--- old/clusterctl-1.12.4/test/infrastructure/container/docker.go       
2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/test/infrastructure/container/docker.go       
2026-04-08 11:51:33.000000000 +0200
@@ -25,19 +25,16 @@
        "encoding/json"
        "fmt"
        "io"
+       "net/netip"
        "os"
        "strings"
        "time"
 
-       "github.com/docker/docker/api/types"
-       dockercontainer "github.com/docker/docker/api/types/container"
-       dockerfilters "github.com/docker/docker/api/types/filters"
-       dockerimage "github.com/docker/docker/api/types/image"
-       "github.com/docker/docker/api/types/network"
-       dockersystem "github.com/docker/docker/api/types/system"
-       "github.com/docker/docker/client"
-       "github.com/docker/docker/pkg/stdcopy"
-       "github.com/docker/go-connections/nat"
+       dockerstdcopy "github.com/moby/moby/api/pkg/stdcopy"
+       dockercontainer "github.com/moby/moby/api/types/container"
+       dockernetwork "github.com/moby/moby/api/types/network"
+       dockersystem "github.com/moby/moby/api/types/system"
+       "github.com/moby/moby/client"
        "github.com/pkg/errors"
        kerrors "k8s.io/apimachinery/pkg/util/errors"
        "k8s.io/utils/ptr"
@@ -72,7 +69,7 @@
 
 // getDockerClient returns a new client connection for interacting with the 
Docker engine.
 func getDockerClient() (*client.Client, error) {
-       dockerClient, err := client.NewClientWithOpts(client.FromEnv, 
client.WithAPIVersionNegotiation())
+       dockerClient, err := client.New(client.FromEnv)
        if err != nil {
                return nil, fmt.Errorf("create Docker client: %v", err)
        }
@@ -119,7 +116,7 @@
 
 // PullContainerImage triggers the Docker engine to pull an image.
 func (d *dockerRuntime) PullContainerImage(ctx context.Context, image string) 
error {
-       pullResp, err := d.dockerClient.ImagePull(ctx, image, 
dockerimage.PullOptions{})
+       pullResp, err := d.dockerClient.ImagePull(ctx, image, 
client.ImagePullOptions{})
        if err != nil {
                return fmt.Errorf("failure pulling container image: %v", err)
        }
@@ -136,15 +133,15 @@
 
 // ImageExistsLocally returns if the specified image exists in local container 
image cache.
 func (d *dockerRuntime) ImageExistsLocally(ctx context.Context, image string) 
(bool, error) {
-       filters := dockerfilters.NewArgs()
+       filters := make(client.Filters)
        filters.Add("reference", image)
-       images, err := d.dockerClient.ImageList(ctx, dockerimage.ListOptions{
+       images, err := d.dockerClient.ImageList(ctx, client.ImageListOptions{
                Filters: filters,
        })
        if err != nil {
                return false, errors.Wrapf(err, "failure listing container 
image: %s", image)
        }
-       if len(images) > 0 {
+       if len(images.Items) > 0 {
                return true, nil
        }
        return false, nil
@@ -153,14 +150,14 @@
 // GetHostPort looks up the host port bound for the port and protocol (e.g. 
"6443/tcp").
 func (d *dockerRuntime) GetHostPort(ctx context.Context, containerName, 
portAndProtocol string) (string, error) {
        // Get details about the container
-       containerInfo, err := d.dockerClient.ContainerInspect(ctx, 
containerName)
+       containerInfo, err := d.dockerClient.ContainerInspect(ctx, 
containerName, client.ContainerInspectOptions{})
        if err != nil {
                return "", fmt.Errorf("error getting container information for 
%q: %v", containerName, err)
        }
 
        // Loop through the container port bindings and return the first 
HostPort
-       for port, bindings := range containerInfo.NetworkSettings.Ports {
-               if string(port) == portAndProtocol {
+       for port, bindings := range 
containerInfo.Container.NetworkSettings.Ports {
+               if port.Port() == portAndProtocol {
                        for _, binding := range bindings {
                                return binding.HostPort, nil
                        }
@@ -172,7 +169,7 @@
 
 // ExecContainer executes a command in a running container and writes any 
output to the provided writer.
 func (d *dockerRuntime) ExecContainer(ctx context.Context, containerName 
string, config *ExecContainerInput, command string, args ...string) error {
-       execConfig := dockercontainer.ExecOptions{
+       execConfig := client.ExecCreateOptions{
                // Run with privileges so we can remount etc..
                // This might not make sense in the most general sense, but it 
is
                // important to many kind commands.
@@ -184,7 +181,7 @@
                Env:          config.EnvironmentVars,
        }
 
-       response, err := d.dockerClient.ContainerExecCreate(ctx, containerName, 
execConfig)
+       response, err := d.dockerClient.ExecCreate(ctx, containerName, 
execConfig)
        if err != nil {
                return errors.Wrap(err, "error creating container exec")
        }
@@ -194,7 +191,7 @@
                return errors.Wrap(err, "exec ID empty")
        }
 
-       resp, err := d.dockerClient.ContainerExecAttach(ctx, execID, 
dockercontainer.ExecStartOptions{})
+       resp, err := d.dockerClient.ExecAttach(ctx, execID, 
client.ExecAttachOptions{})
        if err != nil {
                return errors.Wrap(err, "error attaching to container exec")
        }
@@ -220,7 +217,7 @@
                // Send the output to the output writer
                var err error
                if config.ErrorBuffer != nil {
-                       _, err = stdcopy.StdCopy(config.OutputBuffer, 
config.ErrorBuffer, resp.Reader)
+                       _, err = dockerstdcopy.StdCopy(config.OutputBuffer, 
config.ErrorBuffer, resp.Reader)
                } else {
                        _, err = io.Copy(config.OutputBuffer, resp.Reader)
                }
@@ -245,7 +242,7 @@
 
        retry := 0
        for retry < 600 {
-               inspect, err := d.dockerClient.ContainerExecInspect(ctx, execID)
+               inspect, err := d.dockerClient.ExecInspect(ctx, execID, 
client.ExecInspectOptions{})
                if err != nil {
                        return errors.Wrap(err, "failed to get exec status")
                }
@@ -266,10 +263,10 @@
 
 // ListContainers returns a list of all containers.
 func (d *dockerRuntime) ListContainers(ctx context.Context, filters 
FilterBuilder) ([]Container, error) {
-       listOptions := dockercontainer.ListOptions{
+       listOptions := client.ContainerListOptions{
                All:     true,
                Limit:   -1,
-               Filters: dockerfilters.NewArgs(),
+               Filters: make(client.Filters),
        }
 
        // Construct our filtering options
@@ -291,8 +288,8 @@
        }
 
        containers := []Container{}
-       for i := range dockerContainers {
-               container := dockerContainerToContainer(&dockerContainers[i])
+       for i := range dockerContainers.Items {
+               container := 
dockerContainerToContainer(&dockerContainers.Items[i])
                containers = append(containers, container)
        }
 
@@ -301,28 +298,38 @@
 
 // DeleteContainer will remove a container, forcing removal if still running.
 func (d *dockerRuntime) DeleteContainer(ctx context.Context, containerName 
string) error {
-       return d.dockerClient.ContainerRemove(ctx, containerName, 
dockercontainer.RemoveOptions{
+       _, err := d.dockerClient.ContainerRemove(ctx, containerName, 
client.ContainerRemoveOptions{
                Force:         true, // force the container to be deleted now
                RemoveVolumes: true, // delete volumes
-       })
+       }) // Note: first return value is an empty struct. Ignored.
+       if err != nil {
+               return errors.Wrap(err, "error deleting container")
+       }
+       return nil
 }
 
 // KillContainer will kill a running container with the specified signal.
 func (d *dockerRuntime) KillContainer(ctx context.Context, containerName, 
signal string) error {
-       return d.dockerClient.ContainerKill(ctx, containerName, signal)
+       _, err := d.dockerClient.ContainerKill(ctx, containerName, 
client.ContainerKillOptions{
+               Signal: signal,
+       }) // Note: first return value is an empty struct. Ignored.
+       if err != nil {
+               return errors.Wrap(err, "error killing a container")
+       }
+       return nil
 }
 
 // GetContainerIPs inspects a container to get its IPv4 and IPv6 IP addresses.
 // Will not error if there is no IP address assigned. Calling code will need to
 // determine whether that is an issue or not.
 func (d *dockerRuntime) GetContainerIPs(ctx context.Context, containerName 
string) (string, string, error) {
-       containerInfo, err := d.dockerClient.ContainerInspect(ctx, 
containerName)
+       containerInfo, err := d.dockerClient.ContainerInspect(ctx, 
containerName, client.ContainerInspectOptions{})
        if err != nil {
                return "", "", errors.Wrap(err, "failed to get container 
details")
        }
 
-       for _, net := range containerInfo.NetworkSettings.Networks {
-               return net.IPAddress, net.GlobalIPv6Address, nil
+       for _, net := range containerInfo.Container.NetworkSettings.Networks {
+               return net.IPAddress.String(), net.GlobalIPv6Address.String(), 
nil
        }
 
        return "", "", nil
@@ -330,7 +337,7 @@
 
 // GetContainerLogs gets container logs.
 func (d *dockerRuntime) GetContainerLogs(ctx context.Context, containerName 
string) (string, error) {
-       logsReader, err := d.dockerClient.ContainerLogs(ctx, containerName, 
dockercontainer.LogsOptions{
+       logsReader, err := d.dockerClient.ContainerLogs(ctx, containerName, 
client.ContainerLogsOptions{
                ShowStdout: true,
                ShowStderr: true,
        })
@@ -349,7 +356,7 @@
 
 // ContainerDebugInfo gets the container metadata and logs from the runtime 
(docker inspect, docker logs).
 func (d *dockerRuntime) ContainerDebugInfo(ctx context.Context, containerName 
string, w io.Writer) error {
-       containerInfo, err := d.dockerClient.ContainerInspect(ctx, 
containerName)
+       containerInfo, err := d.dockerClient.ContainerInspect(ctx, 
containerName, client.ContainerInspectOptions{})
        if err != nil {
                return errors.Wrapf(err, "failed to inspect container %q", 
containerName)
        }
@@ -362,11 +369,11 @@
        fmt.Fprintln(w, "Inspected the container:")
        fmt.Fprintf(w, "%s\n", rawJSON)
 
-       options := dockercontainer.LogsOptions{
+       options := client.ContainerLogsOptions{
                ShowStdout: true,
                ShowStderr: true,
        }
-       responseBody, err := d.dockerClient.ContainerLogs(ctx, 
containerInfo.ID, options)
+       responseBody, err := d.dockerClient.ContainerLogs(ctx, 
containerInfo.Container.ID, options)
        if err != nil {
                return errors.Wrapf(err, "error getting container logs for %q", 
containerName)
        }
@@ -424,11 +431,11 @@
                SecurityOpt:   []string{"seccomp=unconfined", 
"apparmor=unconfined"}, // ignore seccomp
                NetworkMode:   dockercontainer.NetworkMode(runConfig.Network),
                Tmpfs:         runConfig.Tmpfs,
-               PortBindings:  nat.PortMap{},
+               PortBindings:  dockernetwork.PortMap{},
                RestartPolicy: dockercontainer.RestartPolicy{Name: 
restartPolicy, MaximumRetryCount: restartMaximumRetryCount},
                Init:          ptr.To(false),
        }
-       networkConfig := network.NetworkingConfig{}
+       networkConfig := dockernetwork.NetworkingConfig{}
 
        // NOTE: starting from Kind 0.20 kind requires CgroupnsMode to be set 
to private.
        if runConfig.KindMode != kind.ModeNone && runConfig.KindMode != 
kind.Mode0_19 {
@@ -442,14 +449,14 @@
                }
        }
 
-       info, err := d.dockerClient.Info(ctx)
+       info, err := d.dockerClient.Info(ctx, client.InfoOptions{})
        if err != nil {
                return errors.Wrapf(err, "unable to get Docker engine info, 
failed to create container %q", runConfig.Name)
        }
 
        // mount /dev/mapper if docker storage driver if Btrfs or ZFS
        // https://github.com/kubernetes-sigs/kind/pull/1464
-       if d.needsDevMapper(info) {
+       if d.needsDevMapper(info.Info) {
                hostConfig.Binds = append(hostConfig.Binds, 
"/dev/mapper:/dev/mapper:ro")
        }
 
@@ -466,9 +473,11 @@
        containerConfig.Env = envVars
 
        configureVolumes(runConfig, &containerConfig, &hostConfig)
-       configurePortMappings(runConfig.PortMappings, &containerConfig, 
&hostConfig)
+       if err := configurePortMappings(runConfig.PortMappings, 
&containerConfig, &hostConfig); err != nil {
+               return err
+       }
 
-       if d.usernsRemap(info) {
+       if d.usernsRemap(info.Info) {
                // We need this argument in order to make this command work
                // in systems that have userns-remap enabled on the docker 
daemon
                hostConfig.UsernsMode = "host"
@@ -476,7 +485,7 @@
 
        // enable /dev/fuse explicitly for fuse-overlayfs
        // (Rootless Docker does not automatically mount /dev/fuse with 
--privileged)
-       if d.mountFuse(info) {
+       if d.mountFuse(info.Info) {
                hostConfig.Devices = append(hostConfig.Devices, 
dockercontainer.DeviceMapping{PathOnHost: "/dev/fuse", PathInContainer: 
"/dev/fuse", CgroupPermissions: "rw"})
        }
 
@@ -488,20 +497,21 @@
        // Create the container using our settings
        resp, err := d.dockerClient.ContainerCreate(
                ctx,
-               &containerConfig,
-               &hostConfig,
-               &networkConfig,
-               nil,
-               runConfig.Name,
+               client.ContainerCreateOptions{
+                       Name:             runConfig.Name,
+                       Config:           &containerConfig,
+                       HostConfig:       &hostConfig,
+                       NetworkingConfig: &networkConfig,
+               },
        )
        if err != nil {
                return errors.Wrapf(err, "error creating container %q", 
runConfig.Name)
        }
 
-       var containerOutput types.HijackedResponse
+       var containerOutput client.ContainerAttachResult
        if output != nil {
                // Read out any output from the container
-               attachOpts := dockercontainer.AttachOptions{
+               attachOpts := client.ContainerAttachOptions{
                        Stream: true,
                        Stdin:  false,
                        Stdout: true,
@@ -516,11 +526,11 @@
        }
 
        // Actually start the container
-       if err := d.dockerClient.ContainerStart(ctx, resp.ID, 
dockercontainer.StartOptions{}); err != nil {
+       if _, err := d.dockerClient.ContainerStart(ctx, resp.ID, 
client.ContainerStartOptions{}); err != nil {
                err := errors.Wrapf(err, "error starting container %q", 
runConfig.Name)
                // Delete the container and retry later on. This helps getting 
around the race
                // condition where of hitting "port is already allocated" 
issues.
-               if reterr := d.dockerClient.ContainerRemove(ctx, resp.ID, 
dockercontainer.RemoveOptions{Force: true, RemoveVolumes: true}); reterr != nil 
{
+               if _, reterr := d.dockerClient.ContainerRemove(ctx, resp.ID, 
client.ContainerRemoveOptions{Force: true, RemoveVolumes: true}); reterr != nil 
{
                        return kerrors.NewAggregate([]error{err, 
errors.Wrapf(reterr, "error deleting container")})
                }
                return err
@@ -536,9 +546,12 @@
                defer containerOutput.Close()
 
                // Wait for the run to complete
-               statusCh, errCh := d.dockerClient.ContainerWait(ctx, resp.ID, 
dockercontainer.WaitConditionNotRunning)
+               r := d.dockerClient.ContainerWait(ctx, resp.ID, 
client.ContainerWaitOptions{
+                       Condition: dockercontainer.WaitConditionNotRunning,
+               })
+
                select {
-               case err := <-errCh:
+               case err := <-r.Error:
                        if err != nil {
                                return errors.Wrap(err, "error waiting for 
container run")
                        }
@@ -546,19 +559,19 @@
                        if err != nil {
                                return errors.Wrap(err, "error reading output 
from container run")
                        }
-               case <-statusCh:
+               case <-r.Result:
                case <-ctx.Done():
                        return ctx.Err()
                }
        }
 
-       containerJSON, err := d.dockerClient.ContainerInspect(ctx, resp.ID)
+       containerJSON, err := d.dockerClient.ContainerInspect(ctx, resp.ID, 
client.ContainerInspectOptions{})
        if err != nil {
                return fmt.Errorf("error inspecting container %s: %v", resp.ID, 
err)
        }
 
-       if containerJSON.State.ExitCode != 0 {
-               return fmt.Errorf("error container run failed with exit code 
%d", containerJSON.State.ExitCode)
+       if containerJSON.Container.State.ExitCode != 0 {
+               return fmt.Errorf("error container run failed with exit code 
%d", containerJSON.Container.State.ExitCode)
        }
 
        return nil
@@ -566,7 +579,11 @@
 
 // GetSystemInfo will return the docker system info.
 func (d *dockerRuntime) GetSystemInfo(ctx context.Context) (dockersystem.Info, 
error) {
-       return d.dockerClient.Info(ctx)
+       r, err := d.dockerClient.Info(ctx, client.InfoOptions{})
+       if err != nil {
+               return dockersystem.Info{}, fmt.Errorf("error getting docker 
system info: %v", err)
+       }
+       return r.Info, nil
 }
 
 // needsDevMapper checks whether we need to mount /dev/mapper.
@@ -638,13 +655,13 @@
 // getSubnets returns a slice of subnets for a specified network.
 func (d *dockerRuntime) getSubnets(ctx context.Context, networkName string) 
([]string, error) {
        subnets := []string{}
-       networkInfo, err := d.dockerClient.NetworkInspect(ctx, networkName, 
network.InspectOptions{})
+       networkInfo, err := d.dockerClient.NetworkInspect(ctx, networkName, 
client.NetworkInspectOptions{})
        if err != nil {
                return subnets, errors.Wrapf(err, "failed to inspect network 
%q", networkName)
        }
 
-       for _, network := range networkInfo.IPAM.Config {
-               subnets = append(subnets, network.Subnet)
+       for _, config := range networkInfo.Network.IPAM.Config {
+               subnets = append(subnets, config.Subnet.String())
        }
 
        return subnets, nil
@@ -737,16 +754,24 @@
        return string(dat) == "1"
 }
 
-func configurePortMappings(portMappings []PortMapping, config 
*dockercontainer.Config, hostConfig *dockercontainer.HostConfig) {
-       exposedPorts := nat.PortSet{}
+func configurePortMappings(portMappings []PortMapping, config 
*dockercontainer.Config, hostConfig *dockercontainer.HostConfig) error {
+       exposedPorts := dockernetwork.PortSet{}
        for _, pm := range portMappings {
                protocol := pm.Protocol
                if protocol == "" {
                        protocol = "tcp"
                }
-               port := nat.Port(fmt.Sprintf("%d/%s", pm.ContainerPort, 
protocol))
-               mapping := nat.PortBinding{
-                       HostIP:   pm.ListenAddress,
+               port, err := dockernetwork.ParsePort(fmt.Sprintf("%d/%s", 
pm.ContainerPort, protocol))
+               if err != nil {
+                       return errors.Wrapf(err, "error parsing port %d", 
pm.ContainerPort)
+               }
+               addr, err := netip.ParseAddr(pm.ListenAddress)
+               if err != nil {
+                       return errors.Wrapf(err, "error parsing address %s", 
pm.ListenAddress)
+               }
+
+               mapping := dockernetwork.PortBinding{
+                       HostIP:   addr,
                        HostPort: fmt.Sprintf("%d", pm.HostPort),
                }
                hostConfig.PortBindings[port] = 
append(hostConfig.PortBindings[port], mapping)
@@ -754,4 +779,5 @@
        }
 
        config.ExposedPorts = exposedPorts
+       return nil
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/container/fake.go 
new/clusterctl-1.12.5/test/infrastructure/container/fake.go
--- old/clusterctl-1.12.4/test/infrastructure/container/fake.go 2026-03-17 
12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/test/infrastructure/container/fake.go 2026-04-08 
11:51:33.000000000 +0200
@@ -20,7 +20,7 @@
        "context"
        "io"
 
-       dockersystem "github.com/docker/docker/api/types/system"
+       dockersystem "github.com/moby/moby/api/types/system"
 )
 
 var runContainerCallLog []RunContainerArgs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/container/interface.go 
new/clusterctl-1.12.5/test/infrastructure/container/interface.go
--- old/clusterctl-1.12.4/test/infrastructure/container/interface.go    
2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/test/infrastructure/container/interface.go    
2026-04-08 11:51:33.000000000 +0200
@@ -22,8 +22,8 @@
        "io"
        "net"
 
-       dockercontainer "github.com/docker/docker/api/types/container"
-       dockersystem "github.com/docker/docker/api/types/system"
+       dockercontainer "github.com/moby/moby/api/types/container"
+       dockersystem "github.com/moby/moby/api/types/system"
        "github.com/pkg/errors"
 
        clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/api/v1beta2/devmachine_types.go
 
new/clusterctl-1.12.5/test/infrastructure/docker/api/v1beta2/devmachine_types.go
--- 
old/clusterctl-1.12.4/test/infrastructure/docker/api/v1beta2/devmachine_types.go
    2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/test/infrastructure/docker/api/v1beta2/devmachine_types.go
    2026-04-08 11:51:33.000000000 +0200
@@ -293,7 +293,7 @@
        Bootstrapped bool `json:"bootstrapped,omitempty"`
 
        // bootstrapTimeout is the total amount of time to wait for the machine 
to bootstrap before timing out.
-       // The default value is 3m.
+       // The default value is 5m.
        // +optional
        BootstrapTimeout *metav1.Duration `json:"bootstrapTimeout,omitempty"`
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/api/v1beta2/dockermachine_types.go
 
new/clusterctl-1.12.5/test/infrastructure/docker/api/v1beta2/dockermachine_types.go
--- 
old/clusterctl-1.12.4/test/infrastructure/docker/api/v1beta2/dockermachine_types.go
 2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/test/infrastructure/docker/api/v1beta2/dockermachine_types.go
 2026-04-08 11:51:33.000000000 +0200
@@ -60,7 +60,7 @@
        Bootstrapped bool `json:"bootstrapped,omitempty"`
 
        // BootstrapTimeout is the total amount of time to wait for the machine 
to bootstrap before timing out.
-       // The default value is 3m.
+       // The default value is 5m.
        // +optional
        BootstrapTimeout *metav1.Duration `json:"bootstrapTimeout,omitempty"`
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_devmachines.yaml
 
new/clusterctl-1.12.5/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_devmachines.yaml
--- 
old/clusterctl-1.12.4/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_devmachines.yaml
  2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_devmachines.yaml
  2026-04-08 11:51:33.000000000 +0200
@@ -453,7 +453,7 @@
                       bootstrapTimeout:
                         description: |-
                           bootstrapTimeout is the total amount of time to wait 
for the machine to bootstrap before timing out.
-                          The default value is 3m.
+                          The default value is 5m.
                         type: string
                       bootstrapped:
                         description: |-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_devmachinetemplates.yaml
 
new/clusterctl-1.12.5/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_devmachinetemplates.yaml
--- 
old/clusterctl-1.12.4/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_devmachinetemplates.yaml
  2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_devmachinetemplates.yaml
  2026-04-08 11:51:33.000000000 +0200
@@ -325,7 +325,7 @@
                               bootstrapTimeout:
                                 description: |-
                                   bootstrapTimeout is the total amount of time 
to wait for the machine to bootstrap before timing out.
-                                  The default value is 3m.
+                                  The default value is 5m.
                                 type: string
                               bootstrapped:
                                 description: |-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachines.yaml
 
new/clusterctl-1.12.5/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachines.yaml
--- 
old/clusterctl-1.12.4/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachines.yaml
       2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachines.yaml
       2026-04-08 11:51:33.000000000 +0200
@@ -646,7 +646,7 @@
               bootstrapTimeout:
                 description: |-
                   BootstrapTimeout is the total amount of time to wait for the 
machine to bootstrap before timing out.
-                  The default value is 3m.
+                  The default value is 5m.
                 type: string
               bootstrapped:
                 description: |-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachinetemplates.yaml
 
new/clusterctl-1.12.5/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachinetemplates.yaml
--- 
old/clusterctl-1.12.4/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachinetemplates.yaml
       2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachinetemplates.yaml
       2026-04-08 11:51:33.000000000 +0200
@@ -398,7 +398,7 @@
                       bootstrapTimeout:
                         description: |-
                           BootstrapTimeout is the total amount of time to wait 
for the machine to bootstrap before timing out.
-                          The default value is 3m.
+                          The default value is 5m.
                         type: string
                       bootstrapped:
                         description: |-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/examples/machine-pool.yaml 
new/clusterctl-1.12.5/test/infrastructure/docker/examples/machine-pool.yaml
--- old/clusterctl-1.12.4/test/infrastructure/docker/examples/machine-pool.yaml 
2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/test/infrastructure/docker/examples/machine-pool.yaml 
2026-04-08 11:51:33.000000000 +0200
@@ -33,7 +33,7 @@
   namespace: default
 spec:
   replicas: 1
-  version: v1.35.0
+  version: v1.36.0-beta.0
   machineTemplate:
     spec:
       infrastructureRef:
@@ -80,7 +80,7 @@
   replicas: 2
   template:
     spec:
-      version: v1.35.0
+      version: v1.36.0-beta.0
       clusterName: my-cluster
       bootstrap:
         configRef:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/examples/simple-cluster-ipv6.yaml
 
new/clusterctl-1.12.5/test/infrastructure/docker/examples/simple-cluster-ipv6.yaml
--- 
old/clusterctl-1.12.4/test/infrastructure/docker/examples/simple-cluster-ipv6.yaml
  2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/test/infrastructure/docker/examples/simple-cluster-ipv6.yaml
  2026-04-08 11:51:33.000000000 +0200
@@ -33,7 +33,7 @@
   namespace: default
 spec:
   replicas: 1
-  version: v1.35.0
+  version: v1.36.0-beta.0
   machineTemplate:
     spec:
       infrastructureRef:
@@ -92,7 +92,7 @@
       cluster.x-k8s.io/cluster-name: my-cluster
   template:
     spec:
-      version: v1.35.0
+      version: v1.36.0-beta.0
       clusterName: my-cluster
       bootstrap:
         configRef:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/examples/simple-cluster-without-kcp.yaml
 
new/clusterctl-1.12.5/test/infrastructure/docker/examples/simple-cluster-without-kcp.yaml
--- 
old/clusterctl-1.12.4/test/infrastructure/docker/examples/simple-cluster-without-kcp.yaml
   2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/test/infrastructure/docker/examples/simple-cluster-without-kcp.yaml
   2026-04-08 11:51:33.000000000 +0200
@@ -31,7 +31,7 @@
   name: controlplane-0
   namespace: default
 spec:
-  version: v1.35.0
+  version: v1.36.0-beta.0
   clusterName: my-cluster
   bootstrap:
     configRef:
@@ -74,7 +74,7 @@
       cluster.x-k8s.io/cluster-name: my-cluster
   template:
     spec:
-      version: v1.35.0
+      version: v1.36.0-beta.0
       clusterName: my-cluster
       bootstrap:
         configRef:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/examples/simple-cluster.yaml 
new/clusterctl-1.12.5/test/infrastructure/docker/examples/simple-cluster.yaml
--- 
old/clusterctl-1.12.4/test/infrastructure/docker/examples/simple-cluster.yaml   
    2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/test/infrastructure/docker/examples/simple-cluster.yaml   
    2026-04-08 11:51:33.000000000 +0200
@@ -33,7 +33,7 @@
   namespace: default
 spec:
   replicas: 1
-  version: v1.35.0
+  version: v1.36.0-beta.0
   machineTemplate:
     spec:
       infrastructureRef:
@@ -83,7 +83,7 @@
       cluster.x-k8s.io/cluster-name: my-cluster
   template:
     spec:
-      version: v1.35.0
+      version: v1.36.0-beta.0
       clusterName: my-cluster
       bootstrap:
         configRef:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/internal/controllers/backends/docker/dockermachine_backend.go
 
new/clusterctl-1.12.5/test/infrastructure/docker/internal/controllers/backends/docker/dockermachine_backend.go
--- 
old/clusterctl-1.12.4/test/infrastructure/docker/internal/controllers/backends/docker/dockermachine_backend.go
      2026-03-17 12:51:40.000000000 +0100
+++ 
new/clusterctl-1.12.5/test/infrastructure/docker/internal/controllers/backends/docker/dockermachine_backend.go
      2026-04-08 11:51:33.000000000 +0200
@@ -209,13 +209,6 @@
                }
        }
 
-       // Preload images into the container
-       if len(dockerMachine.Spec.Backend.Docker.PreLoadImages) > 0 {
-               if err := externalMachine.PreloadLoadImages(ctx, 
dockerMachine.Spec.Backend.Docker.PreLoadImages); err != nil {
-                       return ctrl.Result{}, errors.Wrap(err, "failed to 
pre-load images into the DockerMachine")
-               }
-       }
-
        // if the machine is a control plane update the load balancer 
configuration
        // we should only do this once, as reconfiguration more or less ensures
        // node ref setting fails
@@ -262,7 +255,7 @@
                if dockerMachine.Spec.Backend.Docker.BootstrapTimeout != nil {
                        bootstrapTimeout = 
*dockerMachine.Spec.Backend.Docker.BootstrapTimeout
                } else {
-                       bootstrapTimeout = metav1.Duration{Duration: 3 * 
time.Minute}
+                       bootstrapTimeout = metav1.Duration{Duration: 5 * 
time.Minute}
                }
                timeoutCtx, cancel := context.WithTimeout(ctx, 
bootstrapTimeout.Duration)
                defer cancel()
@@ -311,6 +304,20 @@
                                return ctrl.Result{}, errors.Wrap(err, "waiting 
for multi-user target")
                        }
 
+                       // Preload images into the container
+                       if len(dockerMachine.Spec.Backend.Docker.PreLoadImages) 
> 0 {
+                               if err := 
externalMachine.PreloadLoadImages(timeoutCtx, 
dockerMachine.Spec.Backend.Docker.PreLoadImages); err != nil {
+                                       
v1beta1conditions.MarkFalse(dockerMachine, 
infrav1.BootstrapExecSucceededV1Beta1Condition, 
infrav1.BootstrapFailedV1Beta1Reason, clusterv1.ConditionSeverityWarning, 
"Pre-loading images: %s", err.Error())
+                                       conditions.Set(dockerMachine, 
metav1.Condition{
+                                               Type:    
infrav1.DevMachineDockerContainerBootstrapExecSucceededCondition,
+                                               Status:  metav1.ConditionFalse,
+                                               Reason:  
infrav1.DevMachineDockerContainerBootstrapExecWaitingForMultiUserTargetReason,
+                                               Message: 
fmt.Sprintf("Pre-loading images: %s", err.Error()),
+                                       })
+                                       return ctrl.Result{}, errors.Wrap(err, 
"failed to pre-load images into the DockerMachine")
+                               }
+                       }
+
                        // Run the bootstrap script. Simulates 
cloud-init/Ignition.
                        if err := externalMachine.ExecBootstrap(timeoutCtx, 
bootstrapData, format, version, dockerMachine.Spec.Backend.Docker.CustomImage); 
err != nil {
                                v1beta1conditions.MarkFalse(dockerMachine, 
infrav1.BootstrapExecSucceededV1Beta1Condition, 
infrav1.BootstrapFailedV1Beta1Reason, clusterv1.ConditionSeverityWarning, 
"Repeating bootstrap")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clusterctl-1.12.4/test/infrastructure/docker/internal/docker/machine.go 
new/clusterctl-1.12.5/test/infrastructure/docker/internal/docker/machine.go
--- old/clusterctl-1.12.4/test/infrastructure/docker/internal/docker/machine.go 
2026-03-17 12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/test/infrastructure/docker/internal/docker/machine.go 
2026-04-08 11:51:33.000000000 +0200
@@ -268,6 +268,16 @@
                default:
                        return errors.Errorf("unable to create machine for role 
%s", role)
                }
+
+               containerRuntime, err := container.RuntimeFrom(ctx)
+               if err != nil {
+                       return errors.Wrap(err, "failed to connect to container 
runtime")
+               }
+
+               if err := m.WaitForMultiUserTarget(ctx, containerRuntime); err 
!= nil {
+                       return errors.Wrap(err, "waiting for multi-user target 
after container creation")
+               }
+
                // After creating a node we need to wait a small amount of time 
until crictl does not return an error.
                // This fixes an issue where we try to kubeadm init too quickly 
after creating the container.
                err = wait.PollUntilContextTimeout(ctx, 500*time.Millisecond, 
4*time.Second, true, func(ctx context.Context) (bool, error) {
@@ -406,7 +416,7 @@
        var outErr bytes.Buffer
        var outStd bytes.Buffer
        for _, command := range commands {
-               log.Info("Running command", "instance", m.Name(), "command", 
command)
+               log.Info("Running command", "instance", m.Name(), "command", 
command.Cmd)
                cmd := m.container.Commander.Command(command.Cmd, 
command.Args...)
                cmd.SetStderr(&outErr)
                cmd.SetStdout(&outStd)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterctl-1.12.4/test/infrastructure/docker/main.go 
new/clusterctl-1.12.5/test/infrastructure/docker/main.go
--- old/clusterctl-1.12.4/test/infrastructure/docker/main.go    2026-03-17 
12:51:40.000000000 +0100
+++ new/clusterctl-1.12.5/test/infrastructure/docker/main.go    2026-04-08 
11:51:33.000000000 +0200
@@ -427,7 +427,7 @@
                WatchFilterValue: watchFilterValue,
        }).SetupWithManager(ctx, mgr, controller.Options{
                MaxConcurrentReconciles: concurrency,
-               ReconciliationTimeout:   5 * time.Minute, // increase 
reconciliation timeout because the DockerMachineReconciler performs long 
operations like kubeadm init/join, image copy, etc.
+               ReconciliationTimeout:   6 * time.Minute, // increase 
reconciliation timeout because the DockerMachineReconciler performs long 
operations like kubeadm init/join, image copy, etc.
        }); err != nil {
                setupLog.Error(err, "Unable to create controller", 
"controller", "DockerMachine")
                os.Exit(1)

++++++ clusterctl.obsinfo ++++++
--- /var/tmp/diff_new_pack.40Kk9z/_old  2026-04-10 17:57:24.536727821 +0200
+++ /var/tmp/diff_new_pack.40Kk9z/_new  2026-04-10 17:57:24.540727987 +0200
@@ -1,5 +1,5 @@
 name: clusterctl
-version: 1.12.4
-mtime: 1773748300
-commit: 233b59b164f56e13db488aeca83c9ef6839ea74d
+version: 1.12.5
+mtime: 1775641893
+commit: efc7142fa2ca086e4e2392640affa22f47cbcc11
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/clusterctl/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.clusterctl.new.21863/vendor.tar.gz differ: char 13, 
line 1

Reply via email to