Repository: gardener/gardener
Pull request #12034: Move `bootstrappers` to `pkg`
Author: login: Wieneo
Labels: name: kind/enhancement
description: Enhancement, improvement, extension
name: area/usability
description: Usability related
name: size/M
description: Denotes a PR that changes 30-99 lines, ignoring generated files.
name: cla: yes
description: Indicates the PR's author has signed the cla-assistant.io CLA.
name: lgtm
description: Indicates that a PR is ready to be merged.
name: approved
description: Indicates a PR has been approved by an approver from all required OWNERS files.
Created: 2025-05-09T06:52:30Z | Merged: 2025-05-09T12:06:47Z

**How to categorize this PR?**
<!--
Please select area, kind, and priority for this pull request. This helps the community categorizing it.
Replace below TODOs or exchange the existing identifiers with those that fit best in your opinion.
If multiple identifiers make sense you can also state the commands multiple times, e.g.
  /area control-plane
  /area auto-scaling
  ...

"/area" identifiers:     audit-logging|auto-scaling|backup|compliance|control-plane-migration|control-plane|cost|delivery|dev-productivity|disaster-recovery|documentation|high-availability|logging|metering|monitoring|networking|open-source|ops-productivity|os|performance|quality|robustness|scalability|security|storage|testing|usability|user-management
"/kind" identifiers:     api-change|bug|cleanup|discussion|enhancement|epic|flake|impediment|poc|post-mortem|question|regression|task|technical-debt|test

For Gardener Enhancement Proposals (GEPs), please check the following [documentation](https://github.com/gardener/gardener/tree/master/docs/proposals/README.md) before submitting this pull request.
-->
/area usability
/kind enhancement

**What this PR does / why we need it**:
This PR moves the `bootstrappers` packages of to the `pkg` folder.

This is done in order to comply with the import-restrictions defined in the repository.
I also think it is sensible to not import the `cmd` package from the `pkg` directory.

**Special notes for your reviewer**:
See https://github.com/gardener/gardener/pull/12026

**Release note**:
<!--
Write your release note:
1. Enter your release note in the below block.
2. If no release note is required, just write "NONE" within the block.

Format of block header: <category> <target_group>
Possible values:
- category:       breaking|noteworthy|feature|bugfix|doc|other
- target_group:   user|operator|developer|dependency
-->
```other operator
NONE
```



Diff:
diff --git a/cmd/gardener-controller-manager/app/app.go b/cmd/gardener-controller-manager/app/app.go
index 2ca3571bb0e..190729aaf47 100644
--- a/cmd/gardener-controller-manager/app/app.go
+++ b/cmd/gardener-controller-manager/app/app.go
@@ -30,13 +30,13 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/manager"
 	metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
 
-	"github.com/gardener/gardener/cmd/gardener-controller-manager/app/bootstrappers"
 	"github.com/gardener/gardener/cmd/utils/initrun"
 	"github.com/gardener/gardener/pkg/api/indexer"
 	gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1"
 	seedmanagementv1alpha1 "github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1"
 	"github.com/gardener/gardener/pkg/client/kubernetes"
 	controllermanagerconfigv1alpha1 "github.com/gardener/gardener/pkg/controllermanager/apis/config/v1alpha1"
+	"github.com/gardener/gardener/pkg/controllermanager/bootstrappers"
 	"github.com/gardener/gardener/pkg/controllermanager/controller"
 	"github.com/gardener/gardener/pkg/controllerutils/routes"
 	"github.com/gardener/gardener/pkg/features"
diff --git a/cmd/gardener-controller-manager/app/bootstrappers/bootstrappers_suite_test.go b/cmd/gardener-controller-manager/app/bootstrappers/bootstrappers_suite_test.go
deleted file mode 100644
index 88bd3ff07ba..00000000000
--- a/cmd/gardener-controller-manager/app/bootstrappers/bootstrappers_suite_test.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Gardener contributors
-//
-// SPDX-License-Identifier: Apache-2.0
-
-package bootstrappers_test
-
-import (
-	"testing"
-
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-)
-
-func TestBootstrappers(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Command ControllerManager App Bootstrappers Suite")
-}
diff --git a/cmd/gardener-node-agent/app/app.go b/cmd/gardener-node-agent/app/app.go
index e9d12bd12b2..bbae14d7bb7 100644
--- a/cmd/gardener-node-agent/app/app.go
+++ b/cmd/gardener-node-agent/app/app.go
@@ -36,7 +36,6 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/manager"
 	metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
 
-	"github.com/gardener/gardener/cmd/gardener-node-agent/app/bootstrappers"
 	"github.com/gardener/gardener/cmd/utils/initrun"
 	"github.com/gardener/gardener/pkg/api/indexer"
 	resourcesv1alpha1 "github.com/gardener/gardener/pkg/apis/resources/v1alpha1"
@@ -48,6 +47,7 @@ import (
 	"github.com/gardener/gardener/pkg/nodeagent"
 	nodeagentconfigv1alpha1 "github.com/gardener/gardener/pkg/nodeagent/apis/config/v1alpha1"
 	"github.com/gardener/gardener/pkg/nodeagent/bootstrap"
+	"github.com/gardener/gardener/pkg/nodeagent/bootstrappers"
 	"github.com/gardener/gardener/pkg/nodeagent/controller"
 	"github.com/gardener/gardener/pkg/nodeagent/dbus"
 	gardenerutils "github.com/gardener/gardener/pkg/utils/gardener"
diff --git a/cmd/gardener-operator/app/app.go b/cmd/gardener-operator/app/app.go
index ae5cc31abed..55df2db0a66 100644
--- a/cmd/gardener-operator/app/app.go
+++ b/cmd/gardener-operator/app/app.go
@@ -28,7 +28,6 @@ import (
 	metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
 	controllerwebhook "sigs.k8s.io/controller-runtime/pkg/webhook"
 
-	"github.com/gardener/gardener/cmd/gardener-operator/app/bootstrappers"
 	"github.com/gardener/gardener/cmd/utils/initrun"
 	extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook"
 	"github.com/gardener/gardener/extensions/pkg/webhook/certificates"
@@ -40,6 +39,7 @@ import (
 	"github.com/gardener/gardener/pkg/features"
 	gardenerhealthz "github.com/gardener/gardener/pkg/healthz"
 	operatorconfigv1alpha1 "github.com/gardener/gardener/pkg/operator/apis/config/v1alpha1"
+	"github.com/gardener/gardener/pkg/operator/bootstrappers"
 	operatorclient "github.com/gardener/gardener/pkg/operator/client"
 	"github.com/gardener/gardener/pkg/operator/controller"
 	"github.com/gardener/gardener/pkg/operator/webhook"
diff --git a/cmd/gardener-resource-manager/app/app.go b/cmd/gardener-resource-manager/app/app.go
index 0b748d80a8e..3c19ece86dd 100644
--- a/cmd/gardener-resource-manager/app/app.go
+++ b/cmd/gardener-resource-manager/app/app.go
@@ -33,7 +33,6 @@ import (
 	metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
 	controllerwebhook "sigs.k8s.io/controller-runtime/pkg/webhook"
 
-	"github.com/gardener/gardener/cmd/gardener-resource-manager/app/bootstrappers"
 	"github.com/gardener/gardener/cmd/utils/initrun"
 	"github.com/gardener/gardener/pkg/api/indexer"
 	"github.com/gardener/gardener/pkg/client/kubernetes"
@@ -41,6 +40,7 @@ import (
 	"github.com/gardener/gardener/pkg/controllerutils/routes"
 	gardenerhealthz "github.com/gardener/gardener/pkg/healthz"
 	resourcemanagerconfigv1alpha1 "github.com/gardener/gardener/pkg/resourcemanager/apis/config/v1alpha1"
+	"github.com/gardener/gardener/pkg/resourcemanager/bootstrappers"
 	resourcemanagerclient "github.com/gardener/gardener/pkg/resourcemanager/client"
 	"github.com/gardener/gardener/pkg/resourcemanager/controller"
 	"github.com/gardener/gardener/pkg/resourcemanager/webhook"
diff --git a/cmd/gardenlet/app/app.go b/cmd/gardenlet/app/app.go
index b494b765fef..3a86ab5bddd 100644
--- a/cmd/gardenlet/app/app.go
+++ b/cmd/gardenlet/app/app.go
@@ -41,7 +41,6 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/manager"
 	metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
 
-	"github.com/gardener/gardener/cmd/gardenlet/app/bootstrappers"
 	"github.com/gardener/gardener/cmd/utils/initrun"
 	"github.com/gardener/gardener/pkg/api/indexer"
 	gardencore "github.com/gardener/gardener/pkg/apis/core"
@@ -60,6 +59,7 @@ import (
 	gardenletconfigv1alpha1 "github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1"
 	"github.com/gardener/gardener/pkg/gardenlet/bootstrap"
 	"github.com/gardener/gardener/pkg/gardenlet/bootstrap/certificate"
+	"github.com/gardener/gardener/pkg/gardenlet/bootstrappers"
 	"github.com/gardener/gardener/pkg/gardenlet/controller"
 	gardenerhealthz "github.com/gardener/gardener/pkg/healthz"
 	"github.com/gardener/gardener/pkg/utils"
diff --git a/cmd/gardener-controller-manager/app/bootstrappers/bootstrap.go b/pkg/controllermanager/bootstrappers/bootstrap.go
similarity index 100%
rename from cmd/gardener-controller-manager/app/bootstrappers/bootstrap.go
rename to pkg/controllermanager/bootstrappers/bootstrap.go
diff --git a/cmd/gardener-controller-manager/app/bootstrappers/bootstrap_test.go b/pkg/controllermanager/bootstrappers/bootstrap_test.go
similarity index 100%
rename from cmd/gardener-controller-manager/app/bootstrappers/bootstrap_test.go
rename to pkg/controllermanager/bootstrappers/bootstrap_test.go
diff --git a/cmd/gardener-operator/app/bootstrappers/bootstrappers_suite_test.go b/pkg/controllermanager/bootstrappers/bootstrappers_suite_test.go
similarity index 84%
rename from cmd/gardener-operator/app/bootstrappers/bootstrappers_suite_test.go
rename to pkg/controllermanager/bootstrappers/bootstrappers_suite_test.go
index d72b25ed695..9faa35f1bb4 100644
--- a/cmd/gardener-operator/app/bootstrappers/bootstrappers_suite_test.go
+++ b/pkg/controllermanager/bootstrappers/bootstrappers_suite_test.go
@@ -13,5 +13,5 @@ import (
 
 func TestBootstrappers(t *testing.T) {
 	RegisterFailHandler(Fail)
-	RunSpecs(t, "Command Operator App Bootstrappers Suite")
+	RunSpecs(t, "ControllerManager Bootstrappers Suite")
 }
diff --git a/pkg/gardenadm/botanist/kubelet.go b/pkg/gardenadm/botanist/kubelet.go
index 36d7bd04287..f1aa61153e9 100644
--- a/pkg/gardenadm/botanist/kubelet.go
+++ b/pkg/gardenadm/botanist/kubelet.go
@@ -20,12 +20,12 @@ import (
 	bootstraptokenapi "k8s.io/cluster-bootstrap/token/api"
 	"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
 
-	"github.com/gardener/gardener/cmd/gardener-node-agent/app/bootstrappers"
 	v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants"
 	"github.com/gardener/gardener/pkg/component/extensions/operatingsystemconfig/original/components/kubelet"
 	nodeagentcomponent "github.com/gardener/gardener/pkg/component/extensions/operatingsystemconfig/original/components/nodeagent"
 	"github.com/gardener/gardener/pkg/nodeagent"
 	nodeagentconfigv1alpha1 "github.com/gardener/gardener/pkg/nodeagent/apis/config/v1alpha1"
+	"github.com/gardener/gardener/pkg/nodeagent/bootstrappers"
 	"github.com/gardener/gardener/pkg/utils/kubernetes/bootstraptoken"
 	secretsutils "github.com/gardener/gardener/pkg/utils/secrets"
 )
diff --git a/cmd/gardenlet/app/bootstrappers/bootstrappers_suite_test.go b/pkg/gardenlet/bootstrappers/bootstrappers_suite_test.go
similarity index 84%
rename from cmd/gardenlet/app/bootstrappers/bootstrappers_suite_test.go
rename to pkg/gardenlet/bootstrappers/bootstrappers_suite_test.go
index cc94933298d..33277433934 100644
--- a/cmd/gardenlet/app/bootstrappers/bootstrappers_suite_test.go
+++ b/pkg/gardenlet/bootstrappers/bootstrappers_suite_test.go
@@ -13,5 +13,5 @@ import (
 
 func TestBootstrappers(t *testing.T) {
 	RegisterFailHandler(Fail)
-	RunSpecs(t, "Command Gardenlet App Bootstrappers Suite")
+	RunSpecs(t, "Gardenlet Bootstrappers Suite")
 }
diff --git a/cmd/gardenlet/app/bootstrappers/garden_kubeconfig.go b/pkg/gardenlet/bootstrappers/garden_kubeconfig.go
similarity index 100%
rename from cmd/gardenlet/app/bootstrappers/garden_kubeconfig.go
rename to pkg/gardenlet/bootstrappers/garden_kubeconfig.go
diff --git a/cmd/gardenlet/app/bootstrappers/garden_kubeconfig_test.go b/pkg/gardenlet/bootstrappers/garden_kubeconfig_test.go
similarity index 99%
rename from cmd/gardenlet/app/bootstrappers/garden_kubeconfig_test.go
rename to pkg/gardenlet/bootstrappers/garden_kubeconfig_test.go
index 2dc9e71d769..82883945efa 100644
--- a/cmd/gardenlet/app/bootstrappers/garden_kubeconfig_test.go
+++ b/pkg/gardenlet/bootstrappers/garden_kubeconfig_test.go
@@ -17,11 +17,11 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	fakeclient "sigs.k8s.io/controller-runtime/pkg/client/fake"
 
-	. "github.com/gardener/gardener/cmd/gardenlet/app/bootstrappers"
 	gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1"
 	"github.com/gardener/gardener/pkg/client/kubernetes"
 	gardenletconfigv1alpha1 "github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1"
 	gardenletbootstraputil "github.com/gardener/gardener/pkg/gardenlet/bootstrap/util"
+	. "github.com/gardener/gardener/pkg/gardenlet/bootstrappers"
 	"github.com/gardener/gardener/pkg/utils/test"
 )
 
diff --git a/cmd/gardenlet/app/bootstrappers/seed_config.go b/pkg/gardenlet/bootstrappers/seed_config.go
similarity index 100%
rename from cmd/gardenlet/app/bootstrappers/seed_config.go
rename to pkg/gardenlet/bootstrappers/seed_config.go
diff --git a/cmd/gardenlet/app/bootstrappers/seed_config_test.go b/pkg/gardenlet/bootstrappers/seed_config_test.go
similarity index 99%
rename from cmd/gardenlet/app/bootstrappers/seed_config_test.go
rename to pkg/gardenlet/bootstrappers/seed_config_test.go
index 333a6cca20a..fdfb34c14a1 100644
--- a/cmd/gardenlet/app/bootstrappers/seed_config_test.go
+++ b/pkg/gardenlet/bootstrappers/seed_config_test.go
@@ -15,10 +15,10 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	fakeclient "sigs.k8s.io/controller-runtime/pkg/client/fake"
 
-	. "github.com/gardener/gardener/cmd/gardenlet/app/bootstrappers"
 	gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1"
 	v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants"
 	gardenletconfigv1alpha1 "github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1"
+	. "github.com/gardener/gardener/pkg/gardenlet/bootstrappers"
 )
 
 var _ = Describe("SeedConfigChecker", func() {
diff --git a/cmd/gardener-node-agent/app/bootstrappers/bootstrappers_suite_test.go b/pkg/nodeagent/bootstrappers/bootstrappers_suite_test.go
similarity index 84%
rename from cmd/gardener-node-agent/app/bootstrappers/bootstrappers_suite_test.go
rename to pkg/nodeagent/bootstrappers/bootstrappers_suite_test.go
index 40d9a05505f..7a83ecbe795 100644
--- a/cmd/gardener-node-agent/app/bootstrappers/bootstrappers_suite_test.go
+++ b/pkg/nodeagent/bootstrappers/bootstrappers_suite_test.go
@@ -13,5 +13,5 @@ import (
 
 func TestBootstrappers(t *testing.T) {
 	RegisterFailHandler(Fail)
-	RunSpecs(t, "Command NodeAgent App Bootstrappers Suite")
+	RunSpecs(t, "NodeAgent Bootstrappers Suite")
 }
diff --git a/cmd/gardener-node-agent/app/bootstrappers/kubelet_bootstrap_kubeconfig.go b/pkg/nodeagent/bootstrappers/kubelet_bootstrap_kubeconfig.go
similarity index 100%
rename from cmd/gardener-node-agent/app/bootstrappers/kubelet_bootstrap_kubeconfig.go
rename to pkg/nodeagent/bootstrappers/kubelet_bootstrap_kubeconfig.go
diff --git a/cmd/gardener-node-agent/app/bootstrappers/kubelet_bootstrap_kubeconfig_test.go b/pkg/nodeagent/bootstrappers/kubelet_bootstrap_kubeconfig_test.go
similarity index 97%
rename from cmd/gardener-node-agent/app/bootstrappers/kubelet_bootstrap_kubeconfig_test.go
rename to pkg/nodeagent/bootstrappers/kubelet_bootstrap_kubeconfig_test.go
index d8d090b382c..304a630b259 100644
--- a/cmd/gardener-node-agent/app/bootstrappers/kubelet_bootstrap_kubeconfig_test.go
+++ b/pkg/nodeagent/bootstrappers/kubelet_bootstrap_kubeconfig_test.go
@@ -14,8 +14,8 @@ import (
 	"github.com/spf13/afero"
 	"sigs.k8s.io/controller-runtime/pkg/manager"
 
-	. "github.com/gardener/gardener/cmd/gardener-node-agent/app/bootstrappers"
 	nodeagentconfigv1alpha1 "github.com/gardener/gardener/pkg/nodeagent/apis/config/v1alpha1"
+	. "github.com/gardener/gardener/pkg/nodeagent/bootstrappers"
 	"github.com/gardener/gardener/pkg/utils"
 	"github.com/gardener/gardener/pkg/utils/test"
 )
diff --git a/cmd/gardener-resource-manager/app/bootstrappers/bootstrappers_suite_test.go b/pkg/operator/bootstrappers/bootstrappers_suite_test.go
similarity index 83%
rename from cmd/gardener-resource-manager/app/bootstrappers/bootstrappers_suite_test.go
rename to pkg/operator/bootstrappers/bootstrappers_suite_test.go
index d7e5c3d4d27..ad480bcd63c 100644
--- a/cmd/gardener-resource-manager/app/bootstrappers/bootstrappers_suite_test.go
+++ b/pkg/operator/bootstrappers/bootstrappers_suite_test.go
@@ -13,5 +13,5 @@ import (
 
 func TestBootstrappers(t *testing.T) {
 	RegisterFailHandler(Fail)
-	RunSpecs(t, "Command ResourceManager App Bootstrappers Suite")
+	RunSpecs(t, "Operator Bootstrappers Suite")
 }
diff --git a/cmd/gardener-operator/app/bootstrappers/verify_version.go b/pkg/operator/bootstrappers/verify_version.go
similarity index 100%
rename from cmd/gardener-operator/app/bootstrappers/verify_version.go
rename to pkg/operator/bootstrappers/verify_version.go
diff --git a/cmd/gardener-operator/app/bootstrappers/verify_version_test.go b/pkg/operator/bootstrappers/verify_version_test.go
similarity index 98%
rename from cmd/gardener-operator/app/bootstrappers/verify_version_test.go
rename to pkg/operator/bootstrappers/verify_version_test.go
index 47f32b08ca2..f41b26744cc 100644
--- a/cmd/gardener-operator/app/bootstrappers/verify_version_test.go
+++ b/pkg/operator/bootstrappers/verify_version_test.go
@@ -16,9 +16,9 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	fakeclient "sigs.k8s.io/controller-runtime/pkg/client/fake"
 
-	. "github.com/gardener/gardener/cmd/gardener-operator/app/bootstrappers"
 	gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1"
 	operatorv1alpha1 "github.com/gardener/gardener/pkg/apis/operator/v1alpha1"
+	. "github.com/gardener/gardener/pkg/operator/bootstrappers"
 	operatorclient "github.com/gardener/gardener/pkg/operator/client"
 	"github.com/gardener/gardener/pkg/utils/test"
 )
diff --git a/pkg/resourcemanager/bootstrappers/bootstrappers_suite_test.go b/pkg/resourcemanager/bootstrappers/bootstrappers_suite_test.go
new file mode 100644
index 00000000000..0c321f895f6
--- /dev/null
+++ b/pkg/resourcemanager/bootstrappers/bootstrappers_suite_test.go
@@ -0,0 +1,17 @@
+// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Gardener contributors
+//
+// SPDX-License-Identifier: Apache-2.0
+
+package bootstrappers_test
+
+import (
+	"testing"
+
+	. "github.com/onsi/ginkgo/v2"
+	. "github.com/onsi/gomega"
+)
+
+func TestBootstrappers(t *testing.T) {
+	RegisterFailHandler(Fail)
+	RunSpecs(t, "ResourceManager Bootstrappers Suite")
+}
diff --git a/cmd/gardener-resource-manager/app/bootstrappers/identity.go b/pkg/resourcemanager/bootstrappers/identity.go
similarity index 100%
rename from cmd/gardener-resource-manager/app/bootstrappers/identity.go
rename to pkg/resourcemanager/bootstrappers/identity.go
diff --git a/cmd/gardener-resource-manager/app/bootstrappers/identity_test.go b/pkg/resourcemanager/bootstrappers/identity_test.go
similarity index 98%
rename from cmd/gardener-resource-manager/app/bootstrappers/identity_test.go
rename to pkg/resourcemanager/bootstrappers/identity_test.go
index 2e31644e9fa..7870df3625a 100644
--- a/cmd/gardener-resource-manager/app/bootstrappers/identity_test.go
+++ b/pkg/resourcemanager/bootstrappers/identity_test.go
@@ -17,8 +17,8 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	fakeclient "sigs.k8s.io/controller-runtime/pkg/client/fake"
 
-	. "github.com/gardener/gardener/cmd/gardener-resource-manager/app/bootstrappers"
 	resourcemanagerconfigv1alpha1 "github.com/gardener/gardener/pkg/resourcemanager/apis/config/v1alpha1"
+	. "github.com/gardener/gardener/pkg/resourcemanager/bootstrappers"
 )
 
 var _ = Describe("Identity", func() {
diff --git a/skaffold-gardenadm.yaml b/skaffold-gardenadm.yaml
index c536fa09bf3..5b8f3cdd450 100644
--- a/skaffold-gardenadm.yaml
+++ b/skaffold-gardenadm.yaml
@@ -10,7 +10,6 @@ build:
           paths:
             - cmd/gardenadm
             - cmd/gardenadm/app
-            - cmd/gardener-node-agent/app/bootstrappers
             - cmd/utils
             - extensions/pkg/apis/config/v1alpha1
             - extensions/pkg/util
@@ -264,6 +263,7 @@ build:
             - pkg/logger
             - pkg/nodeagent
             - pkg/nodeagent/apis/config/v1alpha1
+            - pkg/nodeagent/bootstrappers
             - pkg/nodeagent/controller/healthcheck
             - pkg/nodeagent/controller/operatingsystemconfig
             - pkg/nodeagent/controller/operatingsystemconfig/templates/containerd-hosts.toml.tpl
@@ -333,7 +333,6 @@ build:
           paths:
             - cmd/gardener-node-agent
             - cmd/gardener-node-agent/app
-            - cmd/gardener-node-agent/app/bootstrappers
             - cmd/utils
             - cmd/utils/initrun
             - extensions/pkg/apis/config/v1alpha1
@@ -398,6 +397,7 @@ build:
             - pkg/nodeagent/apis/config/v1alpha1/validation
             - pkg/nodeagent/bootstrap
             - pkg/nodeagent/bootstrap/templates/scripts/format-kubelet-data-volume.tpl.sh
+            - pkg/nodeagent/bootstrappers
             - pkg/nodeagent/controller
             - pkg/nodeagent/controller/certificate
             - pkg/nodeagent/controller/healthcheck
@@ -449,7 +449,6 @@ build:
           paths:
             - cmd/gardener-resource-manager
             - cmd/gardener-resource-manager/app
-            - cmd/gardener-resource-manager/app/bootstrappers
             - cmd/utils
             - cmd/utils/initrun
             - pkg/api/extensions
@@ -495,6 +494,7 @@ build:
             - pkg/logger
             - pkg/resourcemanager/apis/config/v1alpha1
             - pkg/resourcemanager/apis/config/v1alpha1/validation
+            - pkg/resourcemanager/bootstrappers
             - pkg/resourcemanager/client
             - pkg/resourcemanager/controller
             - pkg/resourcemanager/controller/csrapprover
diff --git a/skaffold-operator.yaml b/skaffold-operator.yaml
index 29eadc1029e..622e09c0ba6 100644
--- a/skaffold-operator.yaml
+++ b/skaffold-operator.yaml
@@ -10,7 +10,6 @@ build:
           paths:
             - cmd/gardener-operator
             - cmd/gardener-operator/app
-            - cmd/gardener-operator/app/bootstrappers
             - cmd/utils
             - cmd/utils/initrun
             - extensions/pkg/apis/config/v1alpha1
@@ -230,6 +229,7 @@ build:
             - pkg/logger
             - pkg/operator/apis/config/v1alpha1
             - pkg/operator/apis/config/v1alpha1/validation
+            - pkg/operator/bootstrappers
             - pkg/operator/client
             - pkg/operator/controller
             - pkg/operator/controller/controllerregistrar
@@ -318,7 +318,6 @@ build:
           paths:
             - cmd/gardener-resource-manager
             - cmd/gardener-resource-manager/app
-            - cmd/gardener-resource-manager/app/bootstrappers
             - cmd/utils
             - cmd/utils/initrun
             - pkg/api/extensions
@@ -364,6 +363,7 @@ build:
             - pkg/logger
             - pkg/resourcemanager/apis/config/v1alpha1
             - pkg/resourcemanager/apis/config/v1alpha1/validation
+            - pkg/resourcemanager/bootstrappers
             - pkg/resourcemanager/client
             - pkg/resourcemanager/controller
             - pkg/resourcemanager/controller/csrapprover
@@ -649,7 +649,6 @@ build:
           paths:
             - cmd/gardener-controller-manager
             - cmd/gardener-controller-manager/app
-            - cmd/gardener-controller-manager/app/bootstrappers
             - cmd/utils
             - cmd/utils/initrun
             - extensions/pkg/apis/config/v1alpha1
@@ -699,6 +698,7 @@ build:
             - pkg/controller/reference
             - pkg/controllermanager/apis/config/v1alpha1
             - pkg/controllermanager/apis/config/v1alpha1/validation
+            - pkg/controllermanager/bootstrappers
             - pkg/controllermanager/controller
             - pkg/controllermanager/controller/bastion
             - pkg/controllermanager/controller/certificatesigningrequest
diff --git a/skaffold.yaml b/skaffold.yaml
index d8a0d01d13d..57e6a5903fb 100644
--- a/skaffold.yaml
+++ b/skaffold.yaml
@@ -246,7 +246,6 @@ build:
           paths:
             - cmd/gardener-controller-manager
             - cmd/gardener-controller-manager/app
-            - cmd/gardener-controller-manager/app/bootstrappers
             - cmd/utils
             - cmd/utils/initrun
             - extensions/pkg/apis/config/v1alpha1
@@ -296,6 +295,7 @@ build:
             - pkg/controller/reference
             - pkg/controllermanager/apis/config/v1alpha1
             - pkg/controllermanager/apis/config/v1alpha1/validation
+            - pkg/controllermanager/bootstrappers
             - pkg/controllermanager/controller
             - pkg/controllermanager/controller/bastion
             - pkg/controllermanager/controller/certificatesigningrequest
@@ -960,7 +960,6 @@ build:
             - charts/gardener/gardenlet
             - cmd/gardenlet
             - cmd/gardenlet/app
-            - cmd/gardenlet/app/bootstrappers
             - cmd/utils
             - cmd/utils/initrun
             - extensions/pkg/controller
@@ -1205,6 +1204,7 @@ build:
             - pkg/gardenlet/bootstrap
             - pkg/gardenlet/bootstrap/certificate
             - pkg/gardenlet/bootstrap/util
+            - pkg/gardenlet/bootstrappers
             - pkg/gardenlet/controller
             - pkg/gardenlet/controller/backupbucket
             - pkg/gardenlet/controller/backupentry
@@ -1324,7 +1324,6 @@ build:
           paths:
             - cmd/gardener-resource-manager
             - cmd/gardener-resource-manager/app
-            - cmd/gardener-resource-manager/app/bootstrappers
             - cmd/utils
             - cmd/utils/initrun
             - pkg/api/extensions
@@ -1370,6 +1369,7 @@ build:
             - pkg/logger
             - pkg/resourcemanager/apis/config/v1alpha1
             - pkg/resourcemanager/apis/config/v1alpha1/validation
+            - pkg/resourcemanager/bootstrappers
             - pkg/resourcemanager/client
             - pkg/resourcemanager/controller
             - pkg/resourcemanager/controller/csrapprover
@@ -1435,7 +1435,6 @@ build:
           paths:
             - cmd/gardener-node-agent
             - cmd/gardener-node-agent/app
-            - cmd/gardener-node-agent/app/bootstrappers
             - cmd/utils
             - cmd/utils/initrun
             - extensions/pkg/apis/config/v1alpha1
@@ -1500,6 +1499,7 @@ build:
             - pkg/nodeagent/apis/config/v1alpha1/validation
             - pkg/nodeagent/bootstrap
             - pkg/nodeagent/bootstrap/templates/scripts/format-kubelet-data-volume.tpl.sh
+            - pkg/nodeagent/bootstrappers
             - pkg/nodeagent/controller
             - pkg/nodeagent/controller/certificate
             - pkg/nodeagent/controller/healthcheck


Reviews:
user: login: marc1404
body: Thanks!

/lgtm

As the node agent expert:
/cc @oliver-goetz 
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-09T06:56:42Z
user: login: rfranzke
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-09T07:55:42Z
user: login: Wieneo
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-09T08:10:53Z
user: login: rfranzke
body: /lgtm
/approve
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-09T08:37:49Z

Review comments:
diff_hunk: @@ -60,6 +59,7 @@ import (
 	gardenletconfigv1alpha1 "github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1"
 	"github.com/gardener/gardener/pkg/gardenlet/bootstrap"
 	"github.com/gardener/gardener/pkg/gardenlet/bootstrap/certificate"
+	bootstrappers2 "github.com/gardener/gardener/pkg/gardenlet/bootstrappers"
path: cmd/gardenlet/app/app.go
user: login: rfranzke
body: ?
created_at: 2025-05-09T07:54:51Z
author_association: MEMBER
path: pkg/controllermanager/bootstrappers/bootstrappers_suite_test.go
user: login: rfranzke
body: I think you have to adapt the suite name now that the path is different. Some for other moved `*suite_test.go` files.
created_at: 2025-05-09T07:55:23Z
author_association: MEMBER
diff_hunk: @@ -60,6 +59,7 @@ import (
 	gardenletconfigv1alpha1 "github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1"
 	"github.com/gardener/gardener/pkg/gardenlet/bootstrap"
 	"github.com/gardener/gardener/pkg/gardenlet/bootstrap/certificate"
+	bootstrappers2 "github.com/gardener/gardener/pkg/gardenlet/bootstrappers"
path: cmd/gardenlet/app/app.go
user: login: Wieneo
body: I don't really know why Goland refactoring decided to rename the package here, will fix it 😅 
created_at: 2025-05-09T08:10:53Z
author_association: MEMBER

PR comments:
user: login: gardener-prow[bot]
created_at: 2025-05-09T06:56:46Z
body: LGTM label has been added.  <details>Git tree hash: 8472ee363179ce393a56a3ab0f072ead570bf674</details>
author_association: CONTRIBUTOR
user: login: rfranzke
created_at: 2025-05-09T07:04:22Z
body: The change as such looks good, but we also have other binaries in `cmd` which have this `bootstrappers` package. To make it consistent, what about moving them as well?
author_association: MEMBER
user: login: Wieneo
created_at: 2025-05-09T07:44:20Z
body: @rfranzke I moved the other `bootstrapper` packages as well :)
author_association: MEMBER
user: login: gardener-prow[bot]
created_at: 2025-05-09T08:37:55Z
body: LGTM label has been added.  <details>Git tree hash: 46c1d99cc1da677782e6c99e8a5f9fe02f576d46</details>
author_association: CONTRIBUTOR
user: login: gardener-prow[bot]
created_at: 2025-05-09T08:37:56Z
body: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/gardener/gardener/pull/12034#pullrequestreview-2827496576" title="Approved">rfranzke</a>*

The full list of commands accepted by this bot can be found [here](https://prow.gardener.cloud/command-help?repo=gardener%2Fgardener).

The pull request process is described [here](https://gardener.cloud/docs/contribute/#pull-request-checklist)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/gardener/gardener/blob/master/OWNERS)~~ [rfranzke]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
author_association: CONTRIBUTOR