diff --git a/controllers/toolchainstatus/toolchainstatus_controller.go b/controllers/toolchainstatus/toolchainstatus_controller.go
index 0593362bb..17e57b0f6 100644
--- a/controllers/toolchainstatus/toolchainstatus_controller.go
+++ b/controllers/toolchainstatus/toolchainstatus_controller.go
@@ -8,7 +8,6 @@ import (
"io"
"net/http"
"net/url"
- "regexp"
"text/template"
"time"
@@ -104,8 +103,6 @@ const (
{{end}}`
)
-var emailRegex = regexp.MustCompile("^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$")
-
// SetupWithManager sets up the controller with the Manager.
func (r *Reconciler) SetupWithManager(mgr manager.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
@@ -490,11 +487,6 @@ func (r *Reconciler) sendToolchainStatusNotification(logger logr.Logger,
return errs.Wrapf(err, "unable to get ToolchainConfig")
}
- if !isValidEmailAddress(config.Notifications().AdminEmail()) {
- return errs.New(fmt.Sprintf("cannot create notification due to configuration error - admin.email [%s] is invalid or not set",
- config.Notifications().AdminEmail()))
- }
-
tsValue := time.Now().Format("20060102150405")
contentString := ""
subjectString := ""
@@ -948,10 +940,3 @@ func (s *regServiceSubstatusHandler) addRegistrationServiceHealthAndRevisionChec
// if we get here it means that component health is ok
return true
}
-
-func isValidEmailAddress(email string) bool {
- if len(email) < 3 && len(email) > 254 {
- return false
- }
- return emailRegex.MatchString(email)
-}
diff --git a/controllers/toolchainstatus/toolchainstatus_controller_test.go b/controllers/toolchainstatus/toolchainstatus_controller_test.go
index 416a008b3..fabb64f51 100644
--- a/controllers/toolchainstatus/toolchainstatus_controller_test.go
+++ b/controllers/toolchainstatus/toolchainstatus_controller_test.go
@@ -1106,33 +1106,36 @@ func TestToolchainStatusNotifications(t *testing.T) {
os.Setenv("WATCH_NAMESPACE", test.HostOperatorNs)
- toolchainConfig := commonconfig.NewToolchainConfigObjWithReset(t, testconfig.Notifications().AdminEmail("admin@dev.sandbox.com"))
-
- reconciler, req, fakeClient := prepareReconcile(t, requestName, newResponseGood(), mockLastGitHubAPICall, defaultGitHubClient, []string{"member-1", "member-2"},
- hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, toolchainConfig, proxyRoute())
+ t.Run("no notificaion created", func(t *testing.T) {
+ // given
+ toolchainConfig := commonconfig.NewToolchainConfigObjWithReset(t, testconfig.Notifications().AdminEmail("admin@dev.sandbox.com"))
+ reconciler, req, fakeClient := prepareReconcile(t, requestName, newResponseGood(), mockLastGitHubAPICall, defaultGitHubClient, []string{"member-1", "member-2"},
+ hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, toolchainConfig, proxyRoute())
- // when
- res, err := reconciler.Reconcile(context.TODO(), req)
+ // when
+ res, err := reconciler.Reconcile(context.TODO(), req)
- // then
- require.NoError(t, err)
- assert.Equal(t, requeueResult, res)
+ // then
+ require.NoError(t, err)
+ assert.Equal(t, requeueResult, res)
- AssertThatToolchainStatus(t, req.Namespace, requestName, fakeClient).
- HasConditions(componentsReady(), unreadyNotificationNotCreated()).
- HasHostOperatorStatus(hostOperatorStatusReady()).
- HasMemberClusterStatus(memberCluster("member-1", ready()), memberCluster("member-2", ready())).
- HasRegistrationServiceStatus(registrationServiceReady(conditionReady(toolchainv1alpha1.ToolchainStatusRegServiceReadyReason), conditionReadyWithMessage(toolchainv1alpha1.ToolchainStatusDeploymentRevisionCheckDisabledReason, "access token key is not provided"))).
- HasHostRoutesStatus("https://api-toolchain-host-operator.host-cluster", hostRoutesAvailable())
+ AssertThatToolchainStatus(t, req.Namespace, requestName, fakeClient).
+ HasConditions(componentsReady(), unreadyNotificationNotCreated()).
+ HasHostOperatorStatus(hostOperatorStatusReady()).
+ HasMemberClusterStatus(memberCluster("member-1", ready()), memberCluster("member-2", ready())).
+ HasRegistrationServiceStatus(registrationServiceReady(conditionReady(toolchainv1alpha1.ToolchainStatusRegServiceReadyReason), conditionReadyWithMessage(toolchainv1alpha1.ToolchainStatusDeploymentRevisionCheckDisabledReason, "access token key is not provided"))).
+ HasHostRoutesStatus("https://api-toolchain-host-operator.host-cluster", hostRoutesAvailable())
- // Confirm there is no notification
- assertToolchainStatusNotificationNotCreated(t, fakeClient, unreadyStatusNotification)
- assertToolchainStatusNotificationNotCreated(t, fakeClient, restoredStatusNotification)
+ // Confirm there is no notification
+ assertToolchainStatusNotificationNotCreated(t, fakeClient, unreadyStatusNotification)
+ assertToolchainStatusNotificationNotCreated(t, fakeClient, restoredStatusNotification)
+ })
t.Run("Notification not created when host operator deployment not ready within threshold", func(t *testing.T) {
// given
hostOperatorDeployment := newDeploymentWithConditions(defaultHostOperatorDeploymentName,
status.DeploymentNotAvailableCondition(), status.DeploymentProgressingCondition())
+ toolchainConfig := commonconfig.NewToolchainConfigObjWithReset(t, testconfig.Notifications().AdminEmail("admin@dev.sandbox.com"))
reconciler, req, fakeClient := prepareReconcile(t, requestName, newResponseGood(), mockLastGitHubAPICall, defaultGitHubClient, []string{"member-1", "member-2"},
hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, toolchainConfig, proxyRoute())
@@ -1172,9 +1175,7 @@ func TestToolchainStatusNotifications(t *testing.T) {
// then
require.Error(t, err)
- require.Equal(t, fmt.Sprintf("Failed to create toolchain status unready notification: cannot create notification "+
- "due to configuration error - admin.email [%s] is invalid or not set", email),
- err.Error())
+ require.True(t, strings.HasPrefix(err.Error(), fmt.Sprintf("Failed to create toolchain status unready notification: The specified recipient [%s] is not a valid email address", email)))
assert.Equal(t, requeueResult, res)
// Confirm there is no notification
@@ -1198,106 +1199,113 @@ func TestToolchainStatusNotifications(t *testing.T) {
overrideLastTransitionTime(t, toolchainStatus, metav1.Time{Time: time.Now().Add(-time.Duration(24) * time.Hour)})
- reconciler, req, fakeClient := prepareReconcile(t, requestName, newResponseGood(), mockLastGitHubAPICall, defaultGitHubClient, []string{"member-1", "member-2"},
- hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, toolchainConfig, proxyRoute())
-
- // when
- res, err := reconciler.Reconcile(context.TODO(), req)
-
- // then
- require.NoError(t, err)
- assert.Equal(t, requeueResult, res)
- // confirm restored notification has not been created
- assertToolchainStatusNotificationNotCreated(t, fakeClient, restoredStatusNotification)
- // Confirm the unready notification has been created
- notification := assertToolchainStatusNotificationCreated(t, fakeClient)
- require.True(t, strings.HasPrefix(notification.ObjectMeta.Name, "toolchainstatus-unready-"))
-
- require.NotNil(t, notification)
- require.Equal(t, notification.Spec.Subject, "ToolchainStatus has been in an unready status for an extended period")
- require.Equal(t, notification.Spec.Recipient, "admin@dev.sandbox.com")
-
- t.Run("Toolchain status now ok again, notification should be removed", func(t *testing.T) {
- hostOperatorDeployment := newDeploymentWithConditions(defaultHostOperatorDeploymentName,
- status.DeploymentAvailableCondition())
-
- // Reload the toolchain status
- require.NoError(t, fakeClient.Get(context.Background(), test.NamespacedName(test.HostOperatorNs,
- toolchainStatus.Name), toolchainStatus))
-
- reconciler, req, fakeClient := prepareReconcile(t, requestName, newResponseGood(), mockLastGitHubAPICall, defaultGitHubClient, []string{"member-1", "member-2"},
- hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, proxyRoute())
-
- // when
- res, err := reconciler.Reconcile(context.TODO(), req)
-
- // then
- require.NoError(t, err)
- assert.Equal(t, requeueResult, res)
+ for _, email := range []string{"admin@dev.sandbox.com", "admin@dev.sandbox.com, another-admin@acme.com"} {
+ t.Run("for email "+email, func(t *testing.T) {
+ toolchainConfig := commonconfig.NewToolchainConfigObjWithReset(t, testconfig.Notifications().AdminEmail(email))
- // Confirm there is no unready notification
- assertToolchainStatusNotificationNotCreated(t, fakeClient, unreadyStatusNotification)
-
- // Confirm restored notification has been created
- notification := assertToolchainStatusNotificationCreated(t, fakeClient)
- require.True(t, strings.HasPrefix(notification.ObjectMeta.Name, "toolchainstatus-restored-"))
-
- require.NotNil(t, notification)
- require.Equal(t, notification.Spec.Subject, "ToolchainStatus has now been restored to ready status")
- require.Equal(t, notification.Spec.Recipient, "admin@dev.sandbox.com")
-
- t.Run("Toolchain status not ready again for extended period, notification is created", func(t *testing.T) {
- // given
- hostOperatorDeployment := newDeploymentWithConditions(defaultHostOperatorDeploymentName,
- status.DeploymentNotAvailableCondition(), status.DeploymentProgressingCondition())
-
- // Reload the toolchain status
- require.NoError(t, fakeClient.Get(context.Background(), test.NamespacedName(test.HostOperatorNs,
- toolchainStatus.Name), toolchainStatus))
-
- // Reconcile in order to update the ready status to false
reconciler, req, fakeClient := prepareReconcile(t, requestName, newResponseGood(), mockLastGitHubAPICall, defaultGitHubClient, []string{"member-1", "member-2"},
hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, toolchainConfig, proxyRoute())
// when
- _, err := reconciler.Reconcile(context.TODO(), req)
-
- require.NoError(t, err)
- // Confirm there is no notification
- assertToolchainStatusNotificationNotCreated(t, fakeClient, unreadyStatusNotification)
- assertToolchainStatusNotificationNotCreated(t, fakeClient, restoredStatusNotification)
-
- // Reload the toolchain status
- require.NoError(t, fakeClient.Get(context.Background(), test.NamespacedName(test.HostOperatorNs,
- toolchainStatus.Name), toolchainStatus))
-
- // Now override the last transition time again
- overrideLastTransitionTime(t, toolchainStatus, metav1.Time{Time: time.Now().Add(-time.Duration(24) * time.Hour)})
-
- // Reconcile once more
- reconciler, req, fakeClient = prepareReconcile(t, requestName, newResponseGood(), mockLastGitHubAPICall, defaultGitHubClient, []string{"member-1", "member-2"},
- hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, toolchainConfig, proxyRoute())
-
- // when
- res, err = reconciler.Reconcile(context.TODO(), req)
+ res, err := reconciler.Reconcile(context.TODO(), req)
// then
require.NoError(t, err)
assert.Equal(t, requeueResult, res)
- // Confirm restored notification is not created
+ // confirm restored notification has not been created
assertToolchainStatusNotificationNotCreated(t, fakeClient, restoredStatusNotification)
// Confirm the unready notification has been created
notification := assertToolchainStatusNotificationCreated(t, fakeClient)
require.True(t, strings.HasPrefix(notification.ObjectMeta.Name, "toolchainstatus-unready-"))
- require.Len(t, notification.ObjectMeta.Name, 38)
+
require.NotNil(t, notification)
- assert.Equal(t, notification.Spec.Subject, "ToolchainStatus has been in an unready status for an extended period")
- assert.Equal(t, notification.Spec.Recipient, "admin@dev.sandbox.com")
- assert.True(t, strings.HasPrefix(notification.Spec.Content, "
The following issues"))
- assert.True(t, strings.HasSuffix(strings.TrimSpace(notification.Spec.Content), ""))
- assert.NotContains(t, notification.Spec.Content, "managedFields")
+ require.Equal(t, notification.Spec.Subject, "ToolchainStatus has been in an unready status for an extended period")
+ require.Equal(t, notification.Spec.Recipient, email)
+
+ t.Run("Toolchain status now ok again, notification should be removed", func(t *testing.T) {
+ hostOperatorDeployment := newDeploymentWithConditions(defaultHostOperatorDeploymentName,
+ status.DeploymentAvailableCondition())
+
+ // Reload the toolchain status
+ require.NoError(t, fakeClient.Get(context.Background(), test.NamespacedName(test.HostOperatorNs,
+ toolchainStatus.Name), toolchainStatus))
+
+ reconciler, req, fakeClient := prepareReconcile(t, requestName, newResponseGood(), mockLastGitHubAPICall, defaultGitHubClient, []string{"member-1", "member-2"},
+ hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, proxyRoute())
+
+ // when
+ res, err := reconciler.Reconcile(context.TODO(), req)
+
+ // then
+ require.NoError(t, err)
+ assert.Equal(t, requeueResult, res)
+
+ // Confirm there is no unready notification
+ assertToolchainStatusNotificationNotCreated(t, fakeClient, unreadyStatusNotification)
+
+ // Confirm restored notification has been created
+ notification := assertToolchainStatusNotificationCreated(t, fakeClient)
+ require.True(t, strings.HasPrefix(notification.ObjectMeta.Name, "toolchainstatus-restored-"))
+
+ fmt.Println(notification)
+ require.NotNil(t, notification)
+ require.Equal(t, "ToolchainStatus has now been restored to ready status", notification.Spec.Subject)
+ require.Equal(t, email, notification.Spec.Recipient)
+
+ t.Run("Toolchain status not ready again for extended period, notification is created", func(t *testing.T) {
+ // given
+ hostOperatorDeployment := newDeploymentWithConditions(defaultHostOperatorDeploymentName,
+ status.DeploymentNotAvailableCondition(), status.DeploymentProgressingCondition())
+
+ // Reload the toolchain status
+ require.NoError(t, fakeClient.Get(context.Background(), test.NamespacedName(test.HostOperatorNs,
+ toolchainStatus.Name), toolchainStatus))
+
+ // Reconcile in order to update the ready status to false
+ reconciler, req, fakeClient := prepareReconcile(t, requestName, newResponseGood(), mockLastGitHubAPICall, defaultGitHubClient, []string{"member-1", "member-2"},
+ hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, toolchainConfig, proxyRoute())
+
+ // when
+ _, err := reconciler.Reconcile(context.TODO(), req)
+
+ require.NoError(t, err)
+ // Confirm there is no notification
+ assertToolchainStatusNotificationNotCreated(t, fakeClient, unreadyStatusNotification)
+ assertToolchainStatusNotificationNotCreated(t, fakeClient, restoredStatusNotification)
+
+ // Reload the toolchain status
+ require.NoError(t, fakeClient.Get(context.Background(), test.NamespacedName(test.HostOperatorNs,
+ toolchainStatus.Name), toolchainStatus))
+
+ // Now override the last transition time again
+ overrideLastTransitionTime(t, toolchainStatus, metav1.Time{Time: time.Now().Add(-time.Duration(24) * time.Hour)})
+
+ // Reconcile once more
+ reconciler, req, fakeClient = prepareReconcile(t, requestName, newResponseGood(), mockLastGitHubAPICall, defaultGitHubClient, []string{"member-1", "member-2"},
+ hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, toolchainConfig, proxyRoute())
+
+ // when
+ res, err = reconciler.Reconcile(context.TODO(), req)
+
+ // then
+ require.NoError(t, err)
+ assert.Equal(t, requeueResult, res)
+ // Confirm restored notification is not created
+ assertToolchainStatusNotificationNotCreated(t, fakeClient, restoredStatusNotification)
+ // Confirm the unready notification has been created
+ notification := assertToolchainStatusNotificationCreated(t, fakeClient)
+ require.True(t, strings.HasPrefix(notification.ObjectMeta.Name, "toolchainstatus-unready-"))
+ require.Len(t, notification.ObjectMeta.Name, 38)
+ require.NotNil(t, notification)
+ assert.Equal(t, "ToolchainStatus has been in an unready status for an extended period", notification.Spec.Subject)
+ assert.Equal(t, email, notification.Spec.Recipient)
+ assert.True(t, strings.HasPrefix(notification.Spec.Content, "The following issues"))
+ assert.True(t, strings.HasSuffix(strings.TrimSpace(notification.Spec.Content), ""))
+ assert.NotContains(t, notification.Spec.Content, "managedFields")
+ })
+ })
})
- })
+ }
})
})
})
diff --git a/go.mod b/go.mod
index 289fb9f5b..59e064051 100644
--- a/go.mod
+++ b/go.mod
@@ -2,7 +2,7 @@ module github.com/codeready-toolchain/host-operator
require (
github.com/codeready-toolchain/api v0.0.0-20230912073725-4ae0201b4630
- github.com/codeready-toolchain/toolchain-common v0.0.0-20230919021542-5a14033d7b7c
+ github.com/codeready-toolchain/toolchain-common v0.0.0-20230920120310-0f59f17bca92
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/ghodss/yaml v1.0.0
github.com/go-bindata/go-bindata v3.1.2+incompatible
@@ -55,13 +55,11 @@ require (
github.com/emicklei/go-restful/v3 v3.8.0 // indirect
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
github.com/evanphx/json-patch/v5 v5.6.0 // indirect
- github.com/fatih/color v1.12.0 // indirect
github.com/fsnotify/fsnotify v1.5.4 // indirect
github.com/go-logr/zapr v1.2.3 // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/jsonreference v0.19.5 // indirect
github.com/go-openapi/swag v0.19.14 // indirect
- github.com/gobuffalo/flect v0.2.5 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt/v4 v4.2.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
@@ -75,12 +73,9 @@ require (
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 // indirect
github.com/huandu/xstrings v1.3.1 // indirect
github.com/imdario/mergo v0.3.12 // indirect
- github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/mailru/easyjson v0.7.6 // indirect
- github.com/mattn/go-colorable v0.1.8 // indirect
- github.com/mattn/go-isatty v0.0.12 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
github.com/migueleliasweb/go-github-mock v0.0.18 // indirect
github.com/mitchellh/copystructure v1.0.0 // indirect
@@ -94,31 +89,25 @@ require (
github.com/prometheus/procfs v0.7.3 // indirect
github.com/segmentio/backo-go v1.0.0 // indirect
github.com/shopspring/decimal v1.2.0 // indirect
- github.com/spf13/cobra v1.4.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
golang.org/x/crypto v0.9.0 // indirect
- golang.org/x/mod v0.8.0 // indirect
golang.org/x/net v0.10.0 // indirect
golang.org/x/oauth2 v0.7.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/term v0.8.0 // indirect
golang.org/x/text v0.9.0 // indirect
golang.org/x/time v0.3.0 // indirect
- golang.org/x/tools v0.6.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.28.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
- k8s.io/code-generator v0.25.0 // indirect
k8s.io/component-base v0.25.0 // indirect
- k8s.io/gengo v0.0.0-20211129171323-c02415ce4185 // indirect
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect
k8s.io/kubectl v0.24.0 // indirect
k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect
- sigs.k8s.io/controller-tools v0.10.0 // indirect
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
diff --git a/go.sum b/go.sum
index 4aff8da31..4c7737f2c 100644
--- a/go.sum
+++ b/go.sum
@@ -136,16 +136,10 @@ github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWH
github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
-github.com/codeready-toolchain/api v0.0.0-20230823083409-fe9ca973d9a9 h1:ytFqNSSEvgevqvwMilmmqlrrDH1O/qUwzg8bO3CxCiY=
-github.com/codeready-toolchain/api v0.0.0-20230823083409-fe9ca973d9a9/go.mod h1:nn3W6eKb9PFIVwSwZW7wDeLACMBOwAV+4kddGuN+ARM=
github.com/codeready-toolchain/api v0.0.0-20230912073725-4ae0201b4630 h1:Z281nLD0OLfdzbUq2tUK5/B6d2OX1hPg5oFGZSJM4RQ=
github.com/codeready-toolchain/api v0.0.0-20230912073725-4ae0201b4630/go.mod h1:nn3W6eKb9PFIVwSwZW7wDeLACMBOwAV+4kddGuN+ARM=
-github.com/codeready-toolchain/toolchain-common v0.0.0-20230906081513-e7f1da96c683 h1:pGWlpSRzJTBW1BZCDJoYVdRoSDMN3t2xIpSmXxxAsN4=
-github.com/codeready-toolchain/toolchain-common v0.0.0-20230906081513-e7f1da96c683/go.mod h1:wvbndymhFMqyc8syiaanid91GsywkDfuVyiTjdyiqNM=
-github.com/codeready-toolchain/toolchain-common v0.0.0-20230914033010-82394174ad63 h1:VniP6k6AgGnFZbaLjyztwLpphS/nJLkF70+4CHlPwXM=
-github.com/codeready-toolchain/toolchain-common v0.0.0-20230914033010-82394174ad63/go.mod h1:amY2JAo3SMOsgjcXozOunXue7hRbOlajd46/0eQKPVM=
-github.com/codeready-toolchain/toolchain-common v0.0.0-20230919021542-5a14033d7b7c h1:HgNSFo3WssvOS3smNeWX3Jxi599Tuc6vkvZ5YengLL4=
-github.com/codeready-toolchain/toolchain-common v0.0.0-20230919021542-5a14033d7b7c/go.mod h1:amY2JAo3SMOsgjcXozOunXue7hRbOlajd46/0eQKPVM=
+github.com/codeready-toolchain/toolchain-common v0.0.0-20230920120310-0f59f17bca92 h1:9gcDMkjSAjxM3RLUYCHv9prCDwdi7IgAWpTwTsDpGL8=
+github.com/codeready-toolchain/toolchain-common v0.0.0-20230920120310-0f59f17bca92/go.mod h1:+rs3V8do2s0DzGPyCy2sgnvUs9GfSi5RVWx+AZC+cTM=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
@@ -198,8 +192,6 @@ github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 h1:E2s37DuLxFhQD
github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0=
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
-github.com/fatih/color v1.12.0 h1:mRhaKNwANqRgUBGKmnI5ZxEk7QXmjQeCcuYFMX2bfcc=
-github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
github.com/fatih/set v0.2.1/go.mod h1:+RKtMCH+favT2+3YecHGxcc0b4KyVWA1QWWJUs4E0CI=
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
@@ -249,8 +241,6 @@ github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5F
github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
-github.com/gobuffalo/flect v0.2.5 h1:H6vvsv2an0lalEaCDRThvtBfmg44W/QHXBCYUXf/6S4=
-github.com/gobuffalo/flect v0.2.5/go.mod h1:1ZyCLIbg0YD7sDkzvFdPoOydPtD8y9JQnrOROolUcM8=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA=
github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
@@ -397,7 +387,6 @@ github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
-github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
@@ -444,11 +433,7 @@ github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7
github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
-github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
-github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
-github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
@@ -596,7 +581,6 @@ github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
-github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q=
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
@@ -730,7 +714,6 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -847,7 +830,6 @@ golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -997,7 +979,6 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1205,8 +1186,6 @@ k8s.io/client-go v0.25.0 h1:CVWIaCETLMBNiTUta3d5nzRbXvY5Hy9Dpl+VvREpu5E=
k8s.io/client-go v0.25.0/go.mod h1:lxykvypVfKilxhTklov0wz1FoaUZ8X4EwbhS6rpRfN8=
k8s.io/code-generator v0.22.1/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o=
k8s.io/code-generator v0.24.0/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w=
-k8s.io/code-generator v0.25.0 h1:QP8fJuXu882ztf6dsqJsso/Btm94pMd68TAZC1rE6KI=
-k8s.io/code-generator v0.25.0/go.mod h1:B6jZgI3DvDFAualltPitbYMQ74NjaCFxum3YeKZZ+3w=
k8s.io/component-base v0.22.1/go.mod h1:0D+Bl8rrnsPN9v0dyYvkqFfBeAd4u7n77ze+p8CMiPo=
k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA=
k8s.io/component-base v0.25.0 h1:haVKlLkPCFZhkcqB6WCvpVxftrg6+FK5x1ZuaIDaQ5Y=
@@ -1216,7 +1195,6 @@ k8s.io/component-helpers v0.24.0/go.mod h1:Q2SlLm4h6g6lPTC9GMMfzdywfLSvJT2f1hOnn
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
-k8s.io/gengo v0.0.0-20211129171323-c02415ce4185 h1:TT1WdmqqXareKxZ/oNXEUSwKlLiHzPMyB0t8BaFeBYI=
k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
@@ -1247,8 +1225,6 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyz
sigs.k8s.io/controller-runtime v0.10.0/go.mod h1:GCdh6kqV6IY4LK0JLwX0Zm6g233RtVGdb/f0+KSfprg=
sigs.k8s.io/controller-runtime v0.13.0 h1:iqa5RNciy7ADWnIc8QxCbOX5FEKVR3uxVxKHRMc2WIQ=
sigs.k8s.io/controller-runtime v0.13.0/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI=
-sigs.k8s.io/controller-tools v0.10.0 h1:0L5DTDTFB67jm9DkfrONgTGmfc/zYow0ZaHyppizU2U=
-sigs.k8s.io/controller-tools v0.10.0/go.mod h1:uvr0EW6IsprfB0jpQq6evtKy+hHyHCXNfdWI5ONPx94=
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY=
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k=
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=