From 67b17a1b2109995ca23d9b87d31e69eef7719842 Mon Sep 17 00:00:00 2001 From: grego952 Date: Fri, 21 Nov 2025 12:34:55 +0100 Subject: [PATCH 01/18] Improve hints --- internal/modules/enable.go | 8 ++++---- internal/modules/enable_test.go | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/internal/modules/enable.go b/internal/modules/enable.go index bebc5607d..1ec33e03e 100644 --- a/internal/modules/enable.go +++ b/internal/modules/enable.go @@ -23,10 +23,10 @@ func Enable(ctx context.Context, client kube.Client, repo repo.ModuleTemplatesRe func enable(printer *out.Printer, ctx context.Context, client kube.Client, repo repo.ModuleTemplatesRepository, module, channel string, defaultCR bool, crs ...unstructured.Unstructured) clierror.Error { if err := validateModuleAvailability(ctx, client, repo, module); err != nil { hints := []string{ - "make sure you provide valid module name and channel (or version)", - "list available modules by calling the `kyma module catalog` command", - "pull available modules by calling the `kyma module pull` command", - "if you want to add a community module, use the `--origin` flag", + "make sure you provide a valid module name and channel (or version)", + "to list available modules, call the `kyma module catalog` command", + "to pull available modules, call the `kyma module pull` command", + "to add a community module, use the `--origin` flag", } return clierror.Wrap(err, clierror.New("unknown module name", hints...)) } diff --git a/internal/modules/enable_test.go b/internal/modules/enable_test.go index 0a90bf6c6..b58d46f62 100644 --- a/internal/modules/enable_test.go +++ b/internal/modules/enable_test.go @@ -110,10 +110,10 @@ func TestEnable(t *testing.T) { repo := &modulesfake.ModuleTemplatesRepo{} hints := []string{ - "make sure you provide valid module name and channel (or version)", - "list available modules by calling the `kyma module catalog` command", - "pull available modules by calling the `kyma module pull` command", - "if you want to add a community module, use the `--origin` flag", + "make sure you provide a valid module name and channel (or version)", + "to list available modules, call the `kyma module catalog` command", + "to pull available modules, call the `kyma module pull` command", + "to add a community module, use the `--origin` flag", } expectedCliErr := clierror.Wrap( @@ -140,10 +140,10 @@ func TestEnable(t *testing.T) { repo := &modulesfake.ModuleTemplatesRepo{} hints := []string{ - "make sure you provide valid module name and channel (or version)", - "list available modules by calling the `kyma module catalog` command", - "pull available modules by calling the `kyma module pull` command", - "if you want to add a community module, use the `--origin` flag", + "make sure you provide a valid module name and channel (or version)", + "to list available modules, call the `kyma module catalog` command", + "to pull available modules, call the `kyma module pull` command", + "to add a community module, use the `--origin` flag", } expectedCliErr := clierror.Wrap( From 66573749778f29917741fbbe1aecb30043369cf6 Mon Sep 17 00:00:00 2001 From: grego952 Date: Tue, 2 Dec 2025 08:09:16 +0100 Subject: [PATCH 02/18] Improve the remaining messages --- internal/authorization/rbacbuilder.go | 8 +++---- internal/cmd/alpha/hana/map.go | 4 ++-- internal/cmd/alpha/kubeconfig/generate.go | 4 ++-- internal/cmd/alpha/provision/provision.go | 4 ++-- internal/cmd/app/push.go | 20 ++++++++--------- internal/cmd/module/manage.go | 4 ++-- internal/cmd/module/unmanage.go | 4 ++-- internal/cmdcommon/kubeconfig.go | 2 +- .../extensions/actions/call_files_to_save.go | 8 +++---- .../extensions/actions/common/configurator.go | 2 +- internal/extensions/actions/function_init.go | 6 ++--- .../extensions/actions/registry_config.go | 2 +- .../actions/registry_image-import.go | 4 ++-- internal/extensions/call/pod.go | 4 ++-- internal/extensions/commands.go | 2 +- internal/github/token.go | 2 +- internal/github/token_test.go | 2 +- internal/kubeconfig/kubeconfig.go | 2 +- internal/modules/disable.go | 2 +- internal/modules/disable_test.go | 16 +++++++------- internal/modules/enable.go | 6 ++--- internal/modules/enable_test.go | 10 ++++----- internal/modules/uninstall.go | 2 +- internal/registry/config.go | 6 ++--- internal/registry/image.go | 8 +++---- internal/registry/image_test.go | 22 +++++++++---------- 26 files changed, 78 insertions(+), 78 deletions(-) diff --git a/internal/authorization/rbacbuilder.go b/internal/authorization/rbacbuilder.go index ce3e97028..f195799a0 100644 --- a/internal/authorization/rbacbuilder.go +++ b/internal/authorization/rbacbuilder.go @@ -122,19 +122,19 @@ func (b *RBACBuilder) validateForRoleBinding() clierror.Error { return clierror.New("subjectName is required") } if b.role == "" && b.clusterrole == "" { - return clierror.New("either role or clusterrole must be specified for RoleBinding") + return clierror.New("specify either Role or ClusterRole for RoleBinding") } if b.role != "" && b.clusterrole != "" { - return clierror.New("cannot specify both role and clusterrole for RoleBinding") + return clierror.New("cannot specify both Role and ClusterRole for RoleBinding") } if b.namespace == "" && b.clusterrole != "" { return clierror.New( fmt.Sprintf("failed to apply binding for the '%s' ClusterRole", b.clusterrole), - "either specify a namespace or enable cluster-wide flag for ClusterRoleBinding", + "either specify a namespace or enable the cluster-wide flag for ClusterRoleBinding", ) } if b.namespace == "" { - return clierror.New("namespace is required for RoleBinding") + return clierror.New("provide namespace for RoleBinding") } return nil diff --git a/internal/cmd/alpha/hana/map.go b/internal/cmd/alpha/hana/map.go index ba85aa9e7..f3e6cb374 100644 --- a/internal/cmd/alpha/hana/map.go +++ b/internal/cmd/alpha/hana/map.go @@ -91,11 +91,11 @@ func runHanaMap(config *hanaMapConfig) clierror.Error { func getClusterID(ctx context.Context, client kubernetes.Interface) (string, clierror.Error) { secret, geterr := client.CoreV1().Secrets("kyma-system").Get(ctx, "sap-btp-manager", metav1.GetOptions{}) if geterr != nil { - return "", clierror.Wrap(geterr, clierror.New("failed to get secret kyma-system/sap-btp-manager")) + return "", clierror.Wrap(geterr, clierror.New("failed to get Secret kyma-system/sap-btp-manager")) } if secret.Data["cluster_id"] == nil { - return "", clierror.New("cluster_id not found in the secret kyma-system/sap-btp-manager") + return "", clierror.New("cluster_id not found in the Secret kyma-system/sap-btp-manager") } return string(secret.Data["cluster_id"]), nil diff --git a/internal/cmd/alpha/kubeconfig/generate.go b/internal/cmd/alpha/kubeconfig/generate.go index b91ff4b75..efe904985 100644 --- a/internal/cmd/alpha/kubeconfig/generate.go +++ b/internal/cmd/alpha/kubeconfig/generate.go @@ -153,7 +153,7 @@ func (cfg *generateConfig) validate() clierror.Error { // check if request token is provided return clierror.New( "ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable is required if --id-token-request-url flag or ACTIONS_ID_TOKEN_REQUEST_URL env were provided", - "make sure you're running the command in Github Actions environment", + "make sure you're running the command in the GitHub Actions environment", ) } if cfg.server != "" && (cfg.ca == "" && cfg.caData == "") { @@ -324,7 +324,7 @@ func setupServiceAccountWithBindings(cfg *generateConfig, kubeClient kube.Client if cfg.permanent { err = resources.CreateServiceAccountToken(cfg.Ctx, kubeClient, cfg.serviceAccount, cfg.namespace) if err != nil { - return clierror.Wrap(err, clierror.New("failed to create secret")) + return clierror.Wrap(err, clierror.New("failed to create Secret")) } } return nil diff --git a/internal/cmd/alpha/provision/provision.go b/internal/cmd/alpha/provision/provision.go index 48a984ef6..cc2f07d1c 100644 --- a/internal/cmd/alpha/provision/provision.go +++ b/internal/cmd/alpha/provision/provision.go @@ -80,7 +80,7 @@ func runProvision(config *provisionConfig) clierror.Error { kymaParameters, err := buildParameters(config) if err != nil { - return clierror.WrapE(err, clierror.New("failed to prepare kyma parameters")) + return clierror.WrapE(err, clierror.New("failed to prepare Kyma parameters")) } ProvisionEnvironment := &cis.ProvisionEnvironment{ @@ -93,7 +93,7 @@ func runProvision(config *provisionConfig) clierror.Error { response, err := localCISClient.Provision(ProvisionEnvironment) if err != nil { - return clierror.WrapE(err, clierror.New("failed to provision kyma runtime")) + return clierror.WrapE(err, clierror.New("failed to provision Kyma runtime")) } out.Msgfln("Kyma environment provisioning, environment name: '%s', id: '%s'", response.Name, response.ID) diff --git a/internal/cmd/app/push.go b/internal/cmd/app/push.go index 72e9211d5..bf0d0fa35 100644 --- a/internal/cmd/app/push.go +++ b/internal/cmd/app/push.go @@ -173,7 +173,7 @@ func (apc *appPushConfig) complete() clierror.Error { apc.dockerfileSrcContext, err = os.Getwd() if err != nil { return clierror.Wrap(err, clierror.New("failed to get current working directory", - "Please provide the path to the dockerfile context using --dockerfile-context flag")) + "Provide the path to the Dockerfile context using --dockerfile-context flag")) } } } @@ -233,7 +233,7 @@ func runAppPush(cfg *appPushConfig) clierror.Error { out.Msgfln("\nCreating service %s/%s", cfg.namespace, cfg.name) err := resources.CreateService(cfg.Ctx, client, cfg.name, cfg.namespace, int32(*cfg.containerPort.Value)) if err != nil { - return clierror.Wrap(err, clierror.New("failed to create service")) + return clierror.Wrap(err, clierror.New("failed to create Service")) } } @@ -243,7 +243,7 @@ func runAppPush(cfg *appPushConfig) clierror.Error { err := resources.CreateAPIRule(cfg.Ctx, client.RootlessDynamic(), cfg.name, cfg.namespace, cfg.name, uint32(*cfg.containerPort.Value)) if err != nil { - return clierror.Wrap(err, clierror.New("failed to create API Rule resource", "Make sure API Gateway module is installed", "Make sure APIRule CRD is available in v2 version")) + return clierror.Wrap(err, clierror.New("failed to create the APIRule resource", "Make sure the API Gateway module is installed", "Make sure APIRule CRD is available in the v2 version")) } // try to get domain from resulting virtual service @@ -251,12 +251,12 @@ func runAppPush(cfg *appPushConfig) clierror.Error { authRes, authErr := resources.CreateSelfSubjectAccessReview(cfg.Ctx, client, "watch", "virtualservices", cfg.namespace, "networking.istio.io") if authErr != nil { - return clierror.Wrap(authErr, clierror.New("failed to check permissions to get virtualservices")) + return clierror.Wrap(authErr, clierror.New("failed to check permissions to get VirtualServices")) } if authRes.Status.Allowed { url, clierr = client.Istio().GetHostFromVirtualServiceByApiruleName(cfg.Ctx, cfg.name, cfg.namespace) if clierr != nil { - return clierror.WrapE(clierr, clierror.New("failed to get host address of ApiRule's Virtual Service")) + return clierror.WrapE(clierr, clierror.New("failed to get host address of APIRule's VirtualService")) } } @@ -272,12 +272,12 @@ func runAppPush(cfg *appPushConfig) clierror.Error { func createDeployment(cfg *appPushConfig, client kube.Client, image, imagePullSecret string) clierror.Error { configmapEnvs, err := envs.BuildFromConfigmap(cfg.Ctx, client, cfg.namespace, cfg.configmapEnvs) if err != nil { - return clierror.Wrap(err, clierror.New("failed to build envs from configmap")) + return clierror.Wrap(err, clierror.New("failed to build envs from ConfigMap")) } secretEnvs, err := envs.BuildFromSecret(cfg.Ctx, client, cfg.namespace, cfg.secretEnvs) if err != nil { - return clierror.Wrap(err, clierror.New("failed to build envs from secret")) + return clierror.Wrap(err, clierror.New("failed to build envs from Secret")) } fileEnvs, err := envs.BuildFromFile(cfg.fileEnvs) @@ -307,7 +307,7 @@ func createDeployment(cfg *appPushConfig, client kube.Client, image, imagePullSe Insecure: cfg.insecure, }) if err != nil { - return clierror.Wrap(err, clierror.New("failed to create deployment")) + return clierror.Wrap(err, clierror.New("failed to create Deployment")) } return nil @@ -317,7 +317,7 @@ func buildAndImportImage(client kube.Client, cfg *appPushConfig, registryConfig out.Msgln("Building image\n") imageName, err := buildImage(cfg) if err != nil { - return "", clierror.Wrap(err, clierror.New("failed to build image from dockerfile")) + return "", clierror.Wrap(err, clierror.New("failed to build image from Dockerfile")) } pushFunc := registry.NewPushWithPortforwardFunc( @@ -346,7 +346,7 @@ func buildAndImportImage(client kube.Client, cfg *appPushConfig, registryConfig pushFunc, ) if cliErr != nil { - return "", clierror.WrapE(cliErr, clierror.New("failed to import image to in-cluster docker registry")) + return "", clierror.WrapE(cliErr, clierror.New("failed to import image to the in-cluster Docker registry")) } return pushedImage, nil diff --git a/internal/cmd/module/manage.go b/internal/cmd/module/manage.go index 6147b46a0..443f3c22f 100644 --- a/internal/cmd/module/manage.go +++ b/internal/cmd/module/manage.go @@ -97,7 +97,7 @@ func manageModuleMissingInKyma(cfg *manageConfig, client kube.Client) clierror.E return nil } if !errors.Is(err, modules.ErrModuleInstalledVersionNotInKymaChannel) { - return clierror.Wrap(err, clierror.New("failed to set module as managed")) + return clierror.Wrap(err, clierror.New("failed to set the module as managed")) } // If not found, prompt for alternative channel @@ -134,7 +134,7 @@ func promptForAlternativeChannel(channelsAndVersions map[string]string) (string, } out.Msgln("The version of the module you have installed is not available in the default Kyma channel.") - out.Msgln("To proceed, please select one of the available channels below to manage the module with the desired version.") + out.Msgln("To proceed, select one of the available channels below to manage the module with the desired version.") channelPrompt := prompt.NewOneOfEnumList("Available versions:\n", "Type the option number: ", channelOpts) selectedChannel, err := channelPrompt.Prompt() diff --git a/internal/cmd/module/unmanage.go b/internal/cmd/module/unmanage.go index 9f9b658ea..cc104f81e 100644 --- a/internal/cmd/module/unmanage.go +++ b/internal/cmd/module/unmanage.go @@ -40,12 +40,12 @@ func runUnmanage(cfg *unmanageConfig) clierror.Error { err := client.Kyma().UnmanageModule(cfg.Ctx, cfg.module) if err != nil { - return clierror.Wrap(err, clierror.New("failed to set module as unmanaged")) + return clierror.Wrap(err, clierror.New("failed to set the module as unmanaged")) } err = client.Kyma().WaitForModuleState(cfg.Ctx, cfg.module, "Unmanaged") if err != nil { - return clierror.Wrap(err, clierror.New("failed to check module state")) + return clierror.Wrap(err, clierror.New("failed to check the module state")) } out.Msgfln("Module %s set to unmanaged", cfg.module) diff --git a/internal/cmdcommon/kubeconfig.go b/internal/cmdcommon/kubeconfig.go index 52ecbb15d..5039ea6d1 100644 --- a/internal/cmdcommon/kubeconfig.go +++ b/internal/cmdcommon/kubeconfig.go @@ -41,7 +41,7 @@ func (kcc *kubeClientConfig) GetKubeClient() (kube.Client, error) { func (kcc *kubeClientConfig) GetKubeClientWithClierr() (kube.Client, clierror.Error) { if kcc.kubeClientErr != nil { return nil, clierror.Wrap(kcc.kubeClientErr, - clierror.New("failed to create connection with the target Kyma environment", "Make sure that kubeconfig is proper."), + clierror.New("failed to create connection with the target Kyma environment", "Make sure that kubeconfig is correct."), ) } diff --git a/internal/extensions/actions/call_files_to_save.go b/internal/extensions/actions/call_files_to_save.go index bdee9e60e..12756d10e 100644 --- a/internal/extensions/actions/call_files_to_save.go +++ b/internal/extensions/actions/call_files_to_save.go @@ -37,16 +37,16 @@ type callFilesToSaveConfig struct { func (c *callFilesToSaveConfig) validate() clierror.Error { if c.TargetPod.Namespace == "" { - return clierror.New("empty target pod namespace") + return clierror.New("empty target Pod namespace") } if c.TargetPod.Selector == nil { - return clierror.New("empty target pod selector") + return clierror.New("empty target Pod selector") } if c.TargetPod.Port == "" { - return clierror.New("empty target pod port") + return clierror.New("empty target Pod port") } if c.TargetPod.Path == "" { - return clierror.New("empty target pod path") + return clierror.New("empty target Pod path") } if c.OutputDir == "" { return clierror.New("empty output directory path") diff --git a/internal/extensions/actions/common/configurator.go b/internal/extensions/actions/common/configurator.go index 2ed905fd0..d49df3dcc 100644 --- a/internal/extensions/actions/common/configurator.go +++ b/internal/extensions/actions/common/configurator.go @@ -17,7 +17,7 @@ func (c *TemplateConfigurator[T]) Configure(cfgTmpl types.ActionConfig, overwrit clierr := c.configure(cfgTmpl, overwrites) if clierr != nil { return clierror.WrapE(clierr, clierror.New("failed to configure action", - "make sure the cli version is compatible with the extension")) + "make sure the CLI version is compatible with the extension")) } return nil diff --git a/internal/extensions/actions/function_init.go b/internal/extensions/actions/function_init.go index b5a755ab0..ea35c4282 100644 --- a/internal/extensions/actions/function_init.go +++ b/internal/extensions/actions/function_init.go @@ -43,14 +43,14 @@ func (c *functionInitActionConfig) validate() clierror.Error { if !filepath.IsLocal(runtimeCfg.DepsFilename) { return clierror.New( fmt.Sprintf("invalid dependency filename %s for runtime %s", runtimeCfg.DepsFilename, runtimeName), - "dependency filename must be a local path or single file name", + "dependency filename must be a local path or a single file name", ) } if !filepath.IsLocal(runtimeCfg.HandlerFilename) { return clierror.New( fmt.Sprintf("invalid handler filename %s for runtime %s", runtimeCfg.HandlerFilename, runtimeName), - "handler filename must be a local path or single file name", + "handler filename must be a local path or a single file name", ) } } @@ -138,6 +138,6 @@ func getOutputDirAcceptance(path string) clierror.Error { return clierror.New( "command execution aborted", - "you must provide a local path for the output directory or accept the default one by typing 'y' and pressing enter", + "provide a local path for the output directory or accept the default one by typing 'y' and pressing enter", ) } diff --git a/internal/extensions/actions/registry_config.go b/internal/extensions/actions/registry_config.go index 0e5fddb81..de658aa7e 100644 --- a/internal/extensions/actions/registry_config.go +++ b/internal/extensions/actions/registry_config.go @@ -56,7 +56,7 @@ func (a *registryConfigAction) Run(cmd *cobra.Command, _ []string) clierror.Erro if a.Cfg.Output != "" { writeErr := os.WriteFile(a.Cfg.Output, []byte(outputString), 0600) if writeErr != nil { - return clierror.New("failed to write docker config to file") + return clierror.New("failed to write the Docker config to file") } return nil } diff --git a/internal/extensions/actions/registry_image-import.go b/internal/extensions/actions/registry_image-import.go index 1ada4b5d1..711f46c84 100644 --- a/internal/extensions/actions/registry_image-import.go +++ b/internal/extensions/actions/registry_image-import.go @@ -20,7 +20,7 @@ type registryImageImportActionConfig struct { func (c *registryImageImportActionConfig) validate() clierror.Error { imageElems := strings.Split(c.Image, ":") if len(imageElems) != 2 { - return clierror.New(fmt.Sprintf("image '%s' not in expected format 'image:tag'", c.Image)) + return clierror.New(fmt.Sprintf("image '%s' not in the expected format 'image:tag'", c.Image)) } return nil @@ -81,7 +81,7 @@ func (a *registryImageImportAction) Run(cmd *cobra.Command, _ []string) clierror pushFunc, ) if err != nil { - return clierror.WrapE(err, clierror.New("failed to import image to in-cluster docker registry")) + return clierror.WrapE(err, clierror.New("failed to import the image to the in-cluster Docker registry")) } pullImageName := fmt.Sprintf("%s/%s", registryConfig.SecretData.PullRegAddr, pushedImage) diff --git a/internal/extensions/call/pod.go b/internal/extensions/call/pod.go index aec5d7110..c96eba70d 100644 --- a/internal/extensions/call/pod.go +++ b/internal/extensions/call/pod.go @@ -37,7 +37,7 @@ func (c *PodCaller) Call(method, path string, parameters map[string]string) ([]b c.podSelector, ) if err != nil { - return nil, clierror.Wrap(err, clierror.New("failed to get target pod")) + return nil, clierror.Wrap(err, clierror.New("failed to get target Pod")) } req, err := buildRequest(method, targetPod.GetName(), targetPod.GetNamespace(), c.podPort, path, parameters) @@ -53,7 +53,7 @@ func (c *PodCaller) Call(method, path string, parameters map[string]string) ([]b req, ) if err != nil { - return nil, clierror.Wrap(err, clierror.New("failed to send request to target pod")) + return nil, clierror.Wrap(err, clierror.New("failed to send request to target Pod")) } defer resp.Body.Close() diff --git a/internal/extensions/commands.go b/internal/extensions/commands.go index 099f58939..87b86847b 100644 --- a/internal/extensions/commands.go +++ b/internal/extensions/commands.go @@ -13,7 +13,7 @@ var ( emptyActionRun = func(cmd *cobra.Command, _ []string) error { return cmd.Help() } unsupportedActionRun = func(_ *cobra.Command, _ []string) { clierror.Check(clierror.New("unsupported action", - "make sure the cli version is compatible with the extension")) + "make sure the CLI version is compatible with the extension")) } ) diff --git a/internal/github/token.go b/internal/github/token.go index 5f81ea705..afdffdd3b 100644 --- a/internal/github/token.go +++ b/internal/github/token.go @@ -24,7 +24,7 @@ func GetToken(url, requestToken, audience string) (string, clierror.Error) { response, err := http.DefaultClient.Do(request) if err != nil { - return "", clierror.Wrap(err, clierror.New("failed to get token from Github")) + return "", clierror.Wrap(err, clierror.New("failed to get token from GitHub")) } defer response.Body.Close() diff --git a/internal/github/token_test.go b/internal/github/token_test.go index 19c362a24..413e664e0 100644 --- a/internal/github/token_test.go +++ b/internal/github/token_test.go @@ -31,7 +31,7 @@ func Test_getGithubToken(t *testing.T) { { name: "wrong URL", url: "doesnotexist", - wantedErr: clierror.Wrap(errors.New("Get \"doesnotexist\": unsupported protocol scheme \"\""), clierror.New("failed to get token from Github")), + wantedErr: clierror.Wrap(errors.New("Get \"doesnotexist\": unsupported protocol scheme \"\""), clierror.New("failed to get token from GitHub")), }, { name: "token request", diff --git a/internal/kubeconfig/kubeconfig.go b/internal/kubeconfig/kubeconfig.go index 30277df4a..bdce93548 100644 --- a/internal/kubeconfig/kubeconfig.go +++ b/internal/kubeconfig/kubeconfig.go @@ -49,7 +49,7 @@ func Prepare(ctx context.Context, client kube.Client, name, namespace, time, out var loopErr error secret, loopErr = client.Static().CoreV1().Secrets(namespace).Get(ctx, name, metav1.GetOptions{}) if loopErr != nil { - return nil, clierror.Wrap(loopErr, clierror.New("failed to get secret")) + return nil, clierror.Wrap(loopErr, clierror.New("failed to get Secret")) } } diff --git a/internal/modules/disable.go b/internal/modules/disable.go index 0c23d69e4..e51742d3e 100644 --- a/internal/modules/disable.go +++ b/internal/modules/disable.go @@ -30,7 +30,7 @@ func disable(printer *out.Printer, ctx context.Context, client kube.Client, modu printer.Msgfln("removing %s module from the target Kyma environment", module) err := client.Kyma().DisableModule(ctx, module) if err != nil { - return clierror.Wrap(err, clierror.New("failed to disable module")) + return clierror.Wrap(err, clierror.New("failed to disable the module")) } printer.Msgfln("%s module disabled", module) diff --git a/internal/modules/disable_test.go b/internal/modules/disable_test.go index d01422416..e1836eec1 100644 --- a/internal/modules/disable_test.go +++ b/internal/modules/disable_test.go @@ -51,10 +51,10 @@ func TestDisableCore(t *testing.T) { err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Nil(t, err) require.Equal(t, []string{"keda"}, fakeKymaClient.DisabledModules) - require.Equal(t, "removing keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) + require.Equal(t, "removing the Keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) - t.Run("disable module with Ignore policy for module with no CR", func(t *testing.T) { + t.Run("disable the module with Ignore policy for module with no CR", func(t *testing.T) { buffer := bytes.NewBuffer([]byte{}) fakeKymaClient := fake.KymaClient{ ReturnErr: nil, @@ -78,10 +78,10 @@ func TestDisableCore(t *testing.T) { err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Nil(t, err) require.Equal(t, []string{"keda"}, fakeKymaClient.DisabledModules) - require.Equal(t, "removing keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) + require.Equal(t, "removing the Keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) - t.Run("disable module with Ignore policy for module", func(t *testing.T) { + t.Run("disable the module with Ignore policy for module", func(t *testing.T) { buffer := bytes.NewBuffer([]byte{}) fakeKymaClient := fake.KymaClient{ ReturnErr: nil, @@ -118,7 +118,7 @@ func TestDisableCore(t *testing.T) { require.Equal(t, "removing kyma-system/default CR\nwaiting for kyma-system/default CR to be removed\nremoving keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) - t.Run("failed to disable module", func(t *testing.T) { + t.Run("failed to disable the module", func(t *testing.T) { buffer := bytes.NewBuffer([]byte{}) fakeKymaClient := fake.KymaClient{ ReturnDisableModuleErr: errors.New("test error"), @@ -134,12 +134,12 @@ func TestDisableCore(t *testing.T) { expectedCliErr := clierror.Wrap( errors.New("test error"), - clierror.New("failed to disable module"), + clierror.New("failed to disable the module"), ) err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Equal(t, expectedCliErr, err) - require.Equal(t, "removing keda module from the target Kyma environment\n", buffer.String()) + require.Equal(t, "removing the Keda module from the target Kyma environment\n", buffer.String()) }) t.Run("failed to get module info", func(t *testing.T) { @@ -153,7 +153,7 @@ func TestDisableCore(t *testing.T) { expectedCliErr := clierror.Wrap( errors.New("test error"), - clierror.New("failed to get module info from the target Kyma environment"), + clierror.New("failed to get the module info from the target Kyma environment"), ) err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") diff --git a/internal/modules/enable.go b/internal/modules/enable.go index 88b0edb68..8ba77e05c 100644 --- a/internal/modules/enable.go +++ b/internal/modules/enable.go @@ -39,7 +39,7 @@ func enable(printer *out.Printer, ctx context.Context, client kube.Client, repo printer.Msgfln("adding %s module to the Kyma CR", module) err := client.Kyma().EnableModule(ctx, module, channel, crPolicy) if err != nil { - return clierror.Wrap(err, clierror.New("failed to enable module")) + return clierror.Wrap(err, clierror.New("failed to enable the module")) } clierr := applyCustomCR(printer, ctx, client, module, crs...) @@ -63,14 +63,14 @@ func applyCustomCR(printer *out.Printer, ctx context.Context, client kube.Client printer.Msgln("waiting for module to be ready") err := client.Kyma().WaitForModuleState(ctx, module, "Ready", "Warning") if err != nil { - return clierror.Wrap(err, clierror.New("failed to check module state")) + return clierror.Wrap(err, clierror.New("failed to check the module state")) } for _, cr := range crs { printer.Msgfln("applying %s/%s cr", cr.GetNamespace(), cr.GetName()) err = client.RootlessDynamic().Apply(ctx, &cr, false) if err != nil { - return clierror.Wrap(err, clierror.New("failed to apply custom cr from path")) + return clierror.Wrap(err, clierror.New("failed to apply a custom CR from path")) } } diff --git a/internal/modules/enable_test.go b/internal/modules/enable_test.go index dc5e91c90..ed0f3cf28 100644 --- a/internal/modules/enable_test.go +++ b/internal/modules/enable_test.go @@ -198,7 +198,7 @@ func TestEnable(t *testing.T) { } expectedCliErr := clierror.Wrap( - errors.New("the keda module is not available in the catalog"), + errors.New("the Keda module is not available in the catalog"), clierror.New("unknown module name or channel", hints...), ) @@ -231,7 +231,7 @@ func TestEnable(t *testing.T) { } expectedCliErr := clierror.Wrap( - errors.New("the keda module is not available in the regular channel"), + errors.New("the Keda module is not available in the regular channel"), clierror.New("unknown module name or channel", hints...), ) @@ -262,7 +262,7 @@ func TestEnable(t *testing.T) { err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", false, testKedaCR) require.Equal(t, expectedCliErr, err) - require.Equal(t, "adding keda module to the Kyma CR\nwaiting for module to be ready\n", buffer.String()) + require.Equal(t, "adding the Keda module to the Kyma CR\nwaiting for module to be ready\n", buffer.String()) }) t.Run("failed to apply custom resource", func(t *testing.T) { @@ -287,11 +287,11 @@ func TestEnable(t *testing.T) { expectedCliErr := clierror.Wrap( errors.New("test error"), - clierror.New("failed to apply custom cr from path"), + clierror.New("failed to apply a custom CR from path"), ) err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", false, testKedaCR) require.Equal(t, expectedCliErr, err) - require.Equal(t, "adding keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\n", buffer.String()) + require.Equal(t, "adding Keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\n", buffer.String()) }) } diff --git a/internal/modules/uninstall.go b/internal/modules/uninstall.go index 8894336bd..a73519586 100644 --- a/internal/modules/uninstall.go +++ b/internal/modules/uninstall.go @@ -25,7 +25,7 @@ func uninstall(printer *out.Printer, ctx context.Context, repo repo.ModuleTempla moduleResources, err := repo.Resources(ctx, *moduleTemplate) if err != nil { - return clierror.Wrap(err, clierror.New(fmt.Sprintf("failed to get resources for module %v", moduleName))) + return clierror.Wrap(err, clierror.New(fmt.Sprintf("failed to get resources for the module %v", moduleName))) } // We want to remove resources in the reversed order diff --git a/internal/registry/config.go b/internal/registry/config.go index b58ec438a..bcfacadc0 100644 --- a/internal/registry/config.go +++ b/internal/registry/config.go @@ -30,7 +30,7 @@ func GetExternalConfig(ctx context.Context, client kube.Client) (*ExternalRegist if err != nil { return nil, clierror.Wrap(err, clierror.New("failed to get external registry configuration", - "make sure the docker-registry module is configured for external access; see https://kyma-project.io/#/docker-registry/user/tutorials/01-20-expose-registry", + "make sure the Docker registry module is configured for external access; see https://kyma-project.io/#/docker-registry/user/tutorials/01-20-expose-registry", ), ) } @@ -42,9 +42,9 @@ func GetInternalConfig(ctx context.Context, client kube.Client) (*InternalRegist config, err := getInternalConfig(ctx, client) if err != nil { return nil, clierror.Wrap(err, - clierror.New("failed to load in-cluster registry configuration", + clierror.New("failed to load the in-cluster registry configuration", "make sure cluster is available and properly configured", - "enable docker registry module by calling `kyma module add docker-registry -c experimental --default-cr`", + "add the Docker registry module by calling `kyma module add docker-registry -c experimental --default-cr`", ), ) } diff --git a/internal/registry/image.go b/internal/registry/image.go index aae472ddb..201bd7fec 100644 --- a/internal/registry/image.go +++ b/internal/registry/image.go @@ -44,9 +44,9 @@ func importImage(ctx context.Context, imageName string, pushFunc PushFunc, utils localImage, err := imageFromInternalRegistry(ctx, imageName, utils) if err != nil { return "", clierror.Wrap(err, - clierror.New("failed to load image from local docker daemon", - "make sure docker daemon is running", - "make sure the image exists in the local docker daemon", + clierror.New("failed to load image from the local Docker daemon", + "make sure Docker daemon is running", + "make sure the image exists in the local Docker daemon", ), ) } @@ -94,7 +94,7 @@ func NewPushWithPortforwardFunc(clusterAPIRestConfig *rest.Config, registryPodNa pushedImage, err := imageToInClusterRegistry(ctx, localImage, transport, registryAuth, registryPullHost, imageName, utils) if err != nil { - return "", clierror.Wrap(err, clierror.New("failed to push image to the in-cluster registry", "pushing through portforward may be unstable, try exposing the registry in the Registr CR")) + return "", clierror.Wrap(err, clierror.New("failed to push image to the in-cluster registry", "pushing through portforward may be unstable, expose the registry in the Registry CR")) } return pushedImage, nil diff --git a/internal/registry/image_test.go b/internal/registry/image_test.go index 310bda071..494fdb7a8 100644 --- a/internal/registry/image_test.go +++ b/internal/registry/image_test.go @@ -73,9 +73,9 @@ func Test_importImage(t *testing.T) { imageName: ":::::::::", }, wantErr: clierror.Wrap(errors.New("::::::::: must specify a tag name after the colon"), - clierror.New("failed to load image from local docker daemon", - "make sure docker daemon is running", - "make sure the image exists in the local docker daemon"), + clierror.New("failed to load image from the local Docker daemon", + "make sure Docker daemon is running", + "make sure the image exists in the local Docker daemon"), ), }, { @@ -84,9 +84,9 @@ func Test_importImage(t *testing.T) { imageName: "gcr.io/test:image", }, wantErr: clierror.Wrap(errors.New("image 'gcr.io/test:image' can't contain registry 'gcr.io' address"), - clierror.New("failed to load image from local docker daemon", - "make sure docker daemon is running", - "make sure the image exists in the local docker daemon"), + clierror.New("failed to load image from the local Docker daemon", + "make sure Docker daemon is running", + "make sure the image exists in the local Docker daemon"), ), }, { @@ -101,9 +101,9 @@ func Test_importImage(t *testing.T) { }, }, wantErr: clierror.Wrap(errors.New("test-error"), - clierror.New("failed to load image from local docker daemon", - "make sure docker daemon is running", - "make sure the image exists in the local docker daemon"), + clierror.New("failed to load image from the local Docker daemon", + "make sure Docker daemon is running", + "make sure the image exists in the local Docker daemon"), ), }, { @@ -145,7 +145,7 @@ func Test_importImage(t *testing.T) { wantErr: clierror.Wrap(errors.New("registries must be valid RFC 3986 URI authorities: < >"), clierror.New( "failed to push image to the in-cluster registry", - "pushing through portforward may be unstable, try exposing the registry in the Registr CR", + "pushing through portforward may be unstable, expose the registry in the Registry CR", )), }, { @@ -174,7 +174,7 @@ func Test_importImage(t *testing.T) { wantErr: clierror.Wrap(errors.New("test error"), clierror.New( "failed to push image to the in-cluster registry", - "pushing through portforward may be unstable, try exposing the registry in the Registr CR", + "pushing through portforward may be unstable, expose the registry in the Registry CR", ), ), }, From b06f8316831a5b1387dc7a753c1992eadedcabf3 Mon Sep 17 00:00:00 2001 From: grego952 Date: Tue, 2 Dec 2025 09:03:11 +0100 Subject: [PATCH 03/18] Fix tests --- internal/authorization/rbacbuilder_test.go | 6 +++--- internal/modules/disable.go | 2 +- internal/modules/disable_test.go | 2 +- internal/modules/enable_test.go | 10 +++++----- internal/modules/manage.go | 2 +- internal/modules/uninstall_test.go | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/internal/authorization/rbacbuilder_test.go b/internal/authorization/rbacbuilder_test.go index 4301d0d0e..f053ea338 100644 --- a/internal/authorization/rbacbuilder_test.go +++ b/internal/authorization/rbacbuilder_test.go @@ -230,7 +230,7 @@ func TestRBACBuilder_BuildRoleBinding(t *testing.T) { ForSubjectName("owner/repo"). ForNamespace("default") }, - expectedError: "either role or clusterrole must be specified for RoleBinding", + expectedError: "specify either Role or ClusterRole for RoleBinding", }, { name: "error when both role and clusterrole are specified", @@ -243,7 +243,7 @@ func TestRBACBuilder_BuildRoleBinding(t *testing.T) { ForClusterRole("cluster-admin"). ForNamespace("default") }, - expectedError: "cannot specify both role and clusterrole for RoleBinding", + expectedError: "cannot specify both Role and ClusterRole for RoleBinding", }, { name: "error when namespace is missing", @@ -254,7 +254,7 @@ func TestRBACBuilder_BuildRoleBinding(t *testing.T) { ForSubjectName("owner/repo"). ForRole("reader") }, - expectedError: "namespace is required for RoleBinding", + expectedError: "provide namespace for RoleBinding", }, } diff --git a/internal/modules/disable.go b/internal/modules/disable.go index e51742d3e..becb3541f 100644 --- a/internal/modules/disable.go +++ b/internal/modules/disable.go @@ -40,7 +40,7 @@ func disable(printer *out.Printer, ctx context.Context, client kube.Client, modu func removeModuleCR(printer *out.Printer, ctx context.Context, client kube.Client, module string) clierror.Error { info, err := client.Kyma().GetModuleInfo(ctx, module) if err != nil { - return clierror.Wrap(err, clierror.New("failed to get module info from the target Kyma environment")) + return clierror.Wrap(err, clierror.New("failed to get the module info from the target Kyma environment")) } if info.Spec.CustomResourcePolicy == kyma.CustomResourcePolicyCreateAndDelete { diff --git a/internal/modules/disable_test.go b/internal/modules/disable_test.go index e1836eec1..496e3da34 100644 --- a/internal/modules/disable_test.go +++ b/internal/modules/disable_test.go @@ -115,7 +115,7 @@ func TestDisableCore(t *testing.T) { err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Nil(t, err) require.Equal(t, []string{"keda"}, fakeKymaClient.DisabledModules) - require.Equal(t, "removing kyma-system/default CR\nwaiting for kyma-system/default CR to be removed\nremoving keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) + require.Equal(t, "removing kyma-system/default CR\nwaiting for kyma-system/default CR to be removed\nremoving the Keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) t.Run("failed to disable the module", func(t *testing.T) { diff --git a/internal/modules/enable_test.go b/internal/modules/enable_test.go index ed0f3cf28..6252fae15 100644 --- a/internal/modules/enable_test.go +++ b/internal/modules/enable_test.go @@ -78,7 +78,7 @@ func TestEnable(t *testing.T) { err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", true) require.Nil(t, err) - require.Equal(t, "adding keda module to the Kyma CR\nkeda module enabled\n", buffer.String()) + require.Equal(t, "adding the Keda module to the Kyma CR\nkeda module enabled\n", buffer.String()) require.Equal(t, []fake.FakeEnabledModule{expectedEnabledModule}, kymaClient.EnabledModules) }) @@ -112,7 +112,7 @@ func TestEnable(t *testing.T) { err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "", true) require.Nil(t, err) - require.Equal(t, "adding keda module to the Kyma CR\nkeda module enabled\n", buffer.String()) + require.Equal(t, "adding the Keda module to the Kyma CR\nkeda module enabled\n", buffer.String()) require.Equal(t, []fake.FakeEnabledModule{expectedEnabledModule}, kymaClient.EnabledModules) }) @@ -142,7 +142,7 @@ func TestEnable(t *testing.T) { err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", false, testKedaCR) require.Nil(t, err) - require.Equal(t, "adding keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\nkeda module enabled\n", buffer.String()) + require.Equal(t, "adding the Keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\nkeda module enabled\n", buffer.String()) require.Equal(t, []fake.FakeEnabledModule{expectedEnabledModule}, kymaClient.EnabledModules) require.Equal(t, []unstructured.Unstructured{testKedaCR}, rootlessDynamicClient.ApplyObjs) }) @@ -257,7 +257,7 @@ func TestEnable(t *testing.T) { expectedCliErr := clierror.Wrap( errors.New("test error"), - clierror.New("failed to check module state"), + clierror.New("failed to check the module state"), ) err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", false, testKedaCR) @@ -292,6 +292,6 @@ func TestEnable(t *testing.T) { err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", false, testKedaCR) require.Equal(t, expectedCliErr, err) - require.Equal(t, "adding Keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\n", buffer.String()) + require.Equal(t, "adding the Keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\n", buffer.String()) }) } diff --git a/internal/modules/manage.go b/internal/modules/manage.go index 29e2a7f32..ccb6404d7 100644 --- a/internal/modules/manage.go +++ b/internal/modules/manage.go @@ -35,7 +35,7 @@ func ManageModuleInKymaCR(ctx context.Context, client kube.Client, moduleName, p err = client.Kyma().WaitForModuleState(ctx, moduleName, "Ready", "Warning") if err != nil { - return fmt.Errorf("failed to check module state: %v", err) + return fmt.Errorf("failed to check the module state: %v", err) } return nil diff --git a/internal/modules/uninstall_test.go b/internal/modules/uninstall_test.go index 6ed087be7..059ccb8e8 100644 --- a/internal/modules/uninstall_test.go +++ b/internal/modules/uninstall_test.go @@ -99,7 +99,7 @@ func TestDisableCommunity(t *testing.T) { expectedCliErr := clierror.Wrap( errors.New("ResourcesError"), - clierror.New("failed to get resources for module test"), + clierror.New("failed to get resources for the module test"), ) require.NotNil(t, err) From be3e4a5f29007378fbb8f28f01371eae0ec32565 Mon Sep 17 00:00:00 2001 From: grego952 Date: Tue, 2 Dec 2025 13:06:03 +0100 Subject: [PATCH 04/18] Fix tests --- internal/modules/disable.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/modules/disable.go b/internal/modules/disable.go index becb3541f..f5c70ef81 100644 --- a/internal/modules/disable.go +++ b/internal/modules/disable.go @@ -27,7 +27,7 @@ func disable(printer *out.Printer, ctx context.Context, client kube.Client, modu return clierr } - printer.Msgfln("removing %s module from the target Kyma environment", module) + printer.Msgfln("removing the %s module from the target Kyma environment", module) err := client.Kyma().DisableModule(ctx, module) if err != nil { return clierror.Wrap(err, clierror.New("failed to disable the module")) From 74a597676f68bb21f553d9fa11b70322ddb1b796 Mon Sep 17 00:00:00 2001 From: grego952 Date: Wed, 3 Dec 2025 10:36:58 +0100 Subject: [PATCH 05/18] Fix tests continues --- internal/modules/disable_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/modules/disable_test.go b/internal/modules/disable_test.go index 496e3da34..9c7a6a8a3 100644 --- a/internal/modules/disable_test.go +++ b/internal/modules/disable_test.go @@ -51,7 +51,7 @@ func TestDisableCore(t *testing.T) { err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Nil(t, err) require.Equal(t, []string{"keda"}, fakeKymaClient.DisabledModules) - require.Equal(t, "removing the Keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) + require.Equal(t, "removing the keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) t.Run("disable the module with Ignore policy for module with no CR", func(t *testing.T) { @@ -78,7 +78,7 @@ func TestDisableCore(t *testing.T) { err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Nil(t, err) require.Equal(t, []string{"keda"}, fakeKymaClient.DisabledModules) - require.Equal(t, "removing the Keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) + require.Equal(t, "removing the keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) t.Run("disable the module with Ignore policy for module", func(t *testing.T) { From 106ca9096766d693e255ba2d9610654201196dc9 Mon Sep 17 00:00:00 2001 From: grego952 Date: Fri, 21 Nov 2025 12:34:55 +0100 Subject: [PATCH 06/18] Improve hints --- internal/modules/enable.go | 8 ++++---- internal/modules/enable_test.go | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/internal/modules/enable.go b/internal/modules/enable.go index d0925072e..88b0edb68 100644 --- a/internal/modules/enable.go +++ b/internal/modules/enable.go @@ -23,10 +23,10 @@ func Enable(ctx context.Context, client kube.Client, repo repo.ModuleTemplatesRe func enable(printer *out.Printer, ctx context.Context, client kube.Client, repo repo.ModuleTemplatesRepository, module, channel string, defaultCR bool, crs ...unstructured.Unstructured) clierror.Error { if err := validateModuleAvailability(ctx, client, repo, module, channel); err != nil { hints := []string{ - "make sure you provide valid module name and channel (or version)", - "list available modules by calling the `kyma module catalog` command", - "pull available modules by calling the `kyma module pull` command", - "if you want to add a community module, use the `--origin` flag", + "make sure you provide a valid module name and channel (or version)", + "to list available modules, call the `kyma module catalog` command", + "to pull available modules, call the `kyma module pull` command", + "to add a community module, use the `--origin` flag", } return clierror.Wrap(err, clierror.New("unknown module name or channel", hints...)) } diff --git a/internal/modules/enable_test.go b/internal/modules/enable_test.go index 2358ed0ff..dc5e91c90 100644 --- a/internal/modules/enable_test.go +++ b/internal/modules/enable_test.go @@ -161,10 +161,10 @@ func TestEnable(t *testing.T) { repo := &modulesfake.ModuleTemplatesRepo{} hints := []string{ - "make sure you provide valid module name and channel (or version)", - "list available modules by calling the `kyma module catalog` command", - "pull available modules by calling the `kyma module pull` command", - "if you want to add a community module, use the `--origin` flag", + "make sure you provide a valid module name and channel (or version)", + "to list available modules, call the `kyma module catalog` command", + "to pull available modules, call the `kyma module pull` command", + "to add a community module, use the `--origin` flag", } expectedCliErr := clierror.Wrap( @@ -191,10 +191,10 @@ func TestEnable(t *testing.T) { repo := &modulesfake.ModuleTemplatesRepo{} hints := []string{ - "make sure you provide valid module name and channel (or version)", - "list available modules by calling the `kyma module catalog` command", - "pull available modules by calling the `kyma module pull` command", - "if you want to add a community module, use the `--origin` flag", + "make sure you provide a valid module name and channel (or version)", + "to list available modules, call the `kyma module catalog` command", + "to pull available modules, call the `kyma module pull` command", + "to add a community module, use the `--origin` flag", } expectedCliErr := clierror.Wrap( From d9d9a1a7661efced14aaf89fefb9295718253a10 Mon Sep 17 00:00:00 2001 From: grego952 Date: Tue, 2 Dec 2025 08:09:16 +0100 Subject: [PATCH 07/18] Improve the remaining messages --- internal/authorization/rbacbuilder.go | 8 +++---- internal/cmd/alpha/hana/map.go | 4 ++-- internal/cmd/alpha/kubeconfig/generate.go | 4 ++-- internal/cmd/alpha/provision/provision.go | 4 ++-- internal/cmd/app/push.go | 20 ++++++++--------- internal/cmd/module/manage.go | 4 ++-- internal/cmd/module/unmanage.go | 4 ++-- internal/cmdcommon/kubeconfig.go | 2 +- .../extensions/actions/call_files_to_save.go | 8 +++---- .../extensions/actions/common/configurator.go | 2 +- internal/extensions/actions/function_init.go | 6 ++--- .../extensions/actions/registry_config.go | 2 +- .../actions/registry_image-import.go | 4 ++-- internal/extensions/call/pod.go | 4 ++-- internal/extensions/commands.go | 2 +- internal/github/token.go | 2 +- internal/github/token_test.go | 2 +- internal/kubeconfig/kubeconfig.go | 2 +- internal/modules/disable.go | 2 +- internal/modules/disable_test.go | 16 +++++++------- internal/modules/enable.go | 6 ++--- internal/modules/enable_test.go | 10 ++++----- internal/modules/uninstall.go | 2 +- internal/registry/config.go | 6 ++--- internal/registry/image.go | 8 +++---- internal/registry/image_test.go | 22 +++++++++---------- 26 files changed, 78 insertions(+), 78 deletions(-) diff --git a/internal/authorization/rbacbuilder.go b/internal/authorization/rbacbuilder.go index ce3e97028..f195799a0 100644 --- a/internal/authorization/rbacbuilder.go +++ b/internal/authorization/rbacbuilder.go @@ -122,19 +122,19 @@ func (b *RBACBuilder) validateForRoleBinding() clierror.Error { return clierror.New("subjectName is required") } if b.role == "" && b.clusterrole == "" { - return clierror.New("either role or clusterrole must be specified for RoleBinding") + return clierror.New("specify either Role or ClusterRole for RoleBinding") } if b.role != "" && b.clusterrole != "" { - return clierror.New("cannot specify both role and clusterrole for RoleBinding") + return clierror.New("cannot specify both Role and ClusterRole for RoleBinding") } if b.namespace == "" && b.clusterrole != "" { return clierror.New( fmt.Sprintf("failed to apply binding for the '%s' ClusterRole", b.clusterrole), - "either specify a namespace or enable cluster-wide flag for ClusterRoleBinding", + "either specify a namespace or enable the cluster-wide flag for ClusterRoleBinding", ) } if b.namespace == "" { - return clierror.New("namespace is required for RoleBinding") + return clierror.New("provide namespace for RoleBinding") } return nil diff --git a/internal/cmd/alpha/hana/map.go b/internal/cmd/alpha/hana/map.go index ba85aa9e7..f3e6cb374 100644 --- a/internal/cmd/alpha/hana/map.go +++ b/internal/cmd/alpha/hana/map.go @@ -91,11 +91,11 @@ func runHanaMap(config *hanaMapConfig) clierror.Error { func getClusterID(ctx context.Context, client kubernetes.Interface) (string, clierror.Error) { secret, geterr := client.CoreV1().Secrets("kyma-system").Get(ctx, "sap-btp-manager", metav1.GetOptions{}) if geterr != nil { - return "", clierror.Wrap(geterr, clierror.New("failed to get secret kyma-system/sap-btp-manager")) + return "", clierror.Wrap(geterr, clierror.New("failed to get Secret kyma-system/sap-btp-manager")) } if secret.Data["cluster_id"] == nil { - return "", clierror.New("cluster_id not found in the secret kyma-system/sap-btp-manager") + return "", clierror.New("cluster_id not found in the Secret kyma-system/sap-btp-manager") } return string(secret.Data["cluster_id"]), nil diff --git a/internal/cmd/alpha/kubeconfig/generate.go b/internal/cmd/alpha/kubeconfig/generate.go index b91ff4b75..efe904985 100644 --- a/internal/cmd/alpha/kubeconfig/generate.go +++ b/internal/cmd/alpha/kubeconfig/generate.go @@ -153,7 +153,7 @@ func (cfg *generateConfig) validate() clierror.Error { // check if request token is provided return clierror.New( "ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable is required if --id-token-request-url flag or ACTIONS_ID_TOKEN_REQUEST_URL env were provided", - "make sure you're running the command in Github Actions environment", + "make sure you're running the command in the GitHub Actions environment", ) } if cfg.server != "" && (cfg.ca == "" && cfg.caData == "") { @@ -324,7 +324,7 @@ func setupServiceAccountWithBindings(cfg *generateConfig, kubeClient kube.Client if cfg.permanent { err = resources.CreateServiceAccountToken(cfg.Ctx, kubeClient, cfg.serviceAccount, cfg.namespace) if err != nil { - return clierror.Wrap(err, clierror.New("failed to create secret")) + return clierror.Wrap(err, clierror.New("failed to create Secret")) } } return nil diff --git a/internal/cmd/alpha/provision/provision.go b/internal/cmd/alpha/provision/provision.go index 48a984ef6..cc2f07d1c 100644 --- a/internal/cmd/alpha/provision/provision.go +++ b/internal/cmd/alpha/provision/provision.go @@ -80,7 +80,7 @@ func runProvision(config *provisionConfig) clierror.Error { kymaParameters, err := buildParameters(config) if err != nil { - return clierror.WrapE(err, clierror.New("failed to prepare kyma parameters")) + return clierror.WrapE(err, clierror.New("failed to prepare Kyma parameters")) } ProvisionEnvironment := &cis.ProvisionEnvironment{ @@ -93,7 +93,7 @@ func runProvision(config *provisionConfig) clierror.Error { response, err := localCISClient.Provision(ProvisionEnvironment) if err != nil { - return clierror.WrapE(err, clierror.New("failed to provision kyma runtime")) + return clierror.WrapE(err, clierror.New("failed to provision Kyma runtime")) } out.Msgfln("Kyma environment provisioning, environment name: '%s', id: '%s'", response.Name, response.ID) diff --git a/internal/cmd/app/push.go b/internal/cmd/app/push.go index 72e9211d5..bf0d0fa35 100644 --- a/internal/cmd/app/push.go +++ b/internal/cmd/app/push.go @@ -173,7 +173,7 @@ func (apc *appPushConfig) complete() clierror.Error { apc.dockerfileSrcContext, err = os.Getwd() if err != nil { return clierror.Wrap(err, clierror.New("failed to get current working directory", - "Please provide the path to the dockerfile context using --dockerfile-context flag")) + "Provide the path to the Dockerfile context using --dockerfile-context flag")) } } } @@ -233,7 +233,7 @@ func runAppPush(cfg *appPushConfig) clierror.Error { out.Msgfln("\nCreating service %s/%s", cfg.namespace, cfg.name) err := resources.CreateService(cfg.Ctx, client, cfg.name, cfg.namespace, int32(*cfg.containerPort.Value)) if err != nil { - return clierror.Wrap(err, clierror.New("failed to create service")) + return clierror.Wrap(err, clierror.New("failed to create Service")) } } @@ -243,7 +243,7 @@ func runAppPush(cfg *appPushConfig) clierror.Error { err := resources.CreateAPIRule(cfg.Ctx, client.RootlessDynamic(), cfg.name, cfg.namespace, cfg.name, uint32(*cfg.containerPort.Value)) if err != nil { - return clierror.Wrap(err, clierror.New("failed to create API Rule resource", "Make sure API Gateway module is installed", "Make sure APIRule CRD is available in v2 version")) + return clierror.Wrap(err, clierror.New("failed to create the APIRule resource", "Make sure the API Gateway module is installed", "Make sure APIRule CRD is available in the v2 version")) } // try to get domain from resulting virtual service @@ -251,12 +251,12 @@ func runAppPush(cfg *appPushConfig) clierror.Error { authRes, authErr := resources.CreateSelfSubjectAccessReview(cfg.Ctx, client, "watch", "virtualservices", cfg.namespace, "networking.istio.io") if authErr != nil { - return clierror.Wrap(authErr, clierror.New("failed to check permissions to get virtualservices")) + return clierror.Wrap(authErr, clierror.New("failed to check permissions to get VirtualServices")) } if authRes.Status.Allowed { url, clierr = client.Istio().GetHostFromVirtualServiceByApiruleName(cfg.Ctx, cfg.name, cfg.namespace) if clierr != nil { - return clierror.WrapE(clierr, clierror.New("failed to get host address of ApiRule's Virtual Service")) + return clierror.WrapE(clierr, clierror.New("failed to get host address of APIRule's VirtualService")) } } @@ -272,12 +272,12 @@ func runAppPush(cfg *appPushConfig) clierror.Error { func createDeployment(cfg *appPushConfig, client kube.Client, image, imagePullSecret string) clierror.Error { configmapEnvs, err := envs.BuildFromConfigmap(cfg.Ctx, client, cfg.namespace, cfg.configmapEnvs) if err != nil { - return clierror.Wrap(err, clierror.New("failed to build envs from configmap")) + return clierror.Wrap(err, clierror.New("failed to build envs from ConfigMap")) } secretEnvs, err := envs.BuildFromSecret(cfg.Ctx, client, cfg.namespace, cfg.secretEnvs) if err != nil { - return clierror.Wrap(err, clierror.New("failed to build envs from secret")) + return clierror.Wrap(err, clierror.New("failed to build envs from Secret")) } fileEnvs, err := envs.BuildFromFile(cfg.fileEnvs) @@ -307,7 +307,7 @@ func createDeployment(cfg *appPushConfig, client kube.Client, image, imagePullSe Insecure: cfg.insecure, }) if err != nil { - return clierror.Wrap(err, clierror.New("failed to create deployment")) + return clierror.Wrap(err, clierror.New("failed to create Deployment")) } return nil @@ -317,7 +317,7 @@ func buildAndImportImage(client kube.Client, cfg *appPushConfig, registryConfig out.Msgln("Building image\n") imageName, err := buildImage(cfg) if err != nil { - return "", clierror.Wrap(err, clierror.New("failed to build image from dockerfile")) + return "", clierror.Wrap(err, clierror.New("failed to build image from Dockerfile")) } pushFunc := registry.NewPushWithPortforwardFunc( @@ -346,7 +346,7 @@ func buildAndImportImage(client kube.Client, cfg *appPushConfig, registryConfig pushFunc, ) if cliErr != nil { - return "", clierror.WrapE(cliErr, clierror.New("failed to import image to in-cluster docker registry")) + return "", clierror.WrapE(cliErr, clierror.New("failed to import image to the in-cluster Docker registry")) } return pushedImage, nil diff --git a/internal/cmd/module/manage.go b/internal/cmd/module/manage.go index 6147b46a0..443f3c22f 100644 --- a/internal/cmd/module/manage.go +++ b/internal/cmd/module/manage.go @@ -97,7 +97,7 @@ func manageModuleMissingInKyma(cfg *manageConfig, client kube.Client) clierror.E return nil } if !errors.Is(err, modules.ErrModuleInstalledVersionNotInKymaChannel) { - return clierror.Wrap(err, clierror.New("failed to set module as managed")) + return clierror.Wrap(err, clierror.New("failed to set the module as managed")) } // If not found, prompt for alternative channel @@ -134,7 +134,7 @@ func promptForAlternativeChannel(channelsAndVersions map[string]string) (string, } out.Msgln("The version of the module you have installed is not available in the default Kyma channel.") - out.Msgln("To proceed, please select one of the available channels below to manage the module with the desired version.") + out.Msgln("To proceed, select one of the available channels below to manage the module with the desired version.") channelPrompt := prompt.NewOneOfEnumList("Available versions:\n", "Type the option number: ", channelOpts) selectedChannel, err := channelPrompt.Prompt() diff --git a/internal/cmd/module/unmanage.go b/internal/cmd/module/unmanage.go index 9f9b658ea..cc104f81e 100644 --- a/internal/cmd/module/unmanage.go +++ b/internal/cmd/module/unmanage.go @@ -40,12 +40,12 @@ func runUnmanage(cfg *unmanageConfig) clierror.Error { err := client.Kyma().UnmanageModule(cfg.Ctx, cfg.module) if err != nil { - return clierror.Wrap(err, clierror.New("failed to set module as unmanaged")) + return clierror.Wrap(err, clierror.New("failed to set the module as unmanaged")) } err = client.Kyma().WaitForModuleState(cfg.Ctx, cfg.module, "Unmanaged") if err != nil { - return clierror.Wrap(err, clierror.New("failed to check module state")) + return clierror.Wrap(err, clierror.New("failed to check the module state")) } out.Msgfln("Module %s set to unmanaged", cfg.module) diff --git a/internal/cmdcommon/kubeconfig.go b/internal/cmdcommon/kubeconfig.go index 52ecbb15d..5039ea6d1 100644 --- a/internal/cmdcommon/kubeconfig.go +++ b/internal/cmdcommon/kubeconfig.go @@ -41,7 +41,7 @@ func (kcc *kubeClientConfig) GetKubeClient() (kube.Client, error) { func (kcc *kubeClientConfig) GetKubeClientWithClierr() (kube.Client, clierror.Error) { if kcc.kubeClientErr != nil { return nil, clierror.Wrap(kcc.kubeClientErr, - clierror.New("failed to create connection with the target Kyma environment", "Make sure that kubeconfig is proper."), + clierror.New("failed to create connection with the target Kyma environment", "Make sure that kubeconfig is correct."), ) } diff --git a/internal/extensions/actions/call_files_to_save.go b/internal/extensions/actions/call_files_to_save.go index bdee9e60e..12756d10e 100644 --- a/internal/extensions/actions/call_files_to_save.go +++ b/internal/extensions/actions/call_files_to_save.go @@ -37,16 +37,16 @@ type callFilesToSaveConfig struct { func (c *callFilesToSaveConfig) validate() clierror.Error { if c.TargetPod.Namespace == "" { - return clierror.New("empty target pod namespace") + return clierror.New("empty target Pod namespace") } if c.TargetPod.Selector == nil { - return clierror.New("empty target pod selector") + return clierror.New("empty target Pod selector") } if c.TargetPod.Port == "" { - return clierror.New("empty target pod port") + return clierror.New("empty target Pod port") } if c.TargetPod.Path == "" { - return clierror.New("empty target pod path") + return clierror.New("empty target Pod path") } if c.OutputDir == "" { return clierror.New("empty output directory path") diff --git a/internal/extensions/actions/common/configurator.go b/internal/extensions/actions/common/configurator.go index 2ed905fd0..d49df3dcc 100644 --- a/internal/extensions/actions/common/configurator.go +++ b/internal/extensions/actions/common/configurator.go @@ -17,7 +17,7 @@ func (c *TemplateConfigurator[T]) Configure(cfgTmpl types.ActionConfig, overwrit clierr := c.configure(cfgTmpl, overwrites) if clierr != nil { return clierror.WrapE(clierr, clierror.New("failed to configure action", - "make sure the cli version is compatible with the extension")) + "make sure the CLI version is compatible with the extension")) } return nil diff --git a/internal/extensions/actions/function_init.go b/internal/extensions/actions/function_init.go index b5a755ab0..ea35c4282 100644 --- a/internal/extensions/actions/function_init.go +++ b/internal/extensions/actions/function_init.go @@ -43,14 +43,14 @@ func (c *functionInitActionConfig) validate() clierror.Error { if !filepath.IsLocal(runtimeCfg.DepsFilename) { return clierror.New( fmt.Sprintf("invalid dependency filename %s for runtime %s", runtimeCfg.DepsFilename, runtimeName), - "dependency filename must be a local path or single file name", + "dependency filename must be a local path or a single file name", ) } if !filepath.IsLocal(runtimeCfg.HandlerFilename) { return clierror.New( fmt.Sprintf("invalid handler filename %s for runtime %s", runtimeCfg.HandlerFilename, runtimeName), - "handler filename must be a local path or single file name", + "handler filename must be a local path or a single file name", ) } } @@ -138,6 +138,6 @@ func getOutputDirAcceptance(path string) clierror.Error { return clierror.New( "command execution aborted", - "you must provide a local path for the output directory or accept the default one by typing 'y' and pressing enter", + "provide a local path for the output directory or accept the default one by typing 'y' and pressing enter", ) } diff --git a/internal/extensions/actions/registry_config.go b/internal/extensions/actions/registry_config.go index 0e5fddb81..de658aa7e 100644 --- a/internal/extensions/actions/registry_config.go +++ b/internal/extensions/actions/registry_config.go @@ -56,7 +56,7 @@ func (a *registryConfigAction) Run(cmd *cobra.Command, _ []string) clierror.Erro if a.Cfg.Output != "" { writeErr := os.WriteFile(a.Cfg.Output, []byte(outputString), 0600) if writeErr != nil { - return clierror.New("failed to write docker config to file") + return clierror.New("failed to write the Docker config to file") } return nil } diff --git a/internal/extensions/actions/registry_image-import.go b/internal/extensions/actions/registry_image-import.go index 1ada4b5d1..711f46c84 100644 --- a/internal/extensions/actions/registry_image-import.go +++ b/internal/extensions/actions/registry_image-import.go @@ -20,7 +20,7 @@ type registryImageImportActionConfig struct { func (c *registryImageImportActionConfig) validate() clierror.Error { imageElems := strings.Split(c.Image, ":") if len(imageElems) != 2 { - return clierror.New(fmt.Sprintf("image '%s' not in expected format 'image:tag'", c.Image)) + return clierror.New(fmt.Sprintf("image '%s' not in the expected format 'image:tag'", c.Image)) } return nil @@ -81,7 +81,7 @@ func (a *registryImageImportAction) Run(cmd *cobra.Command, _ []string) clierror pushFunc, ) if err != nil { - return clierror.WrapE(err, clierror.New("failed to import image to in-cluster docker registry")) + return clierror.WrapE(err, clierror.New("failed to import the image to the in-cluster Docker registry")) } pullImageName := fmt.Sprintf("%s/%s", registryConfig.SecretData.PullRegAddr, pushedImage) diff --git a/internal/extensions/call/pod.go b/internal/extensions/call/pod.go index aec5d7110..c96eba70d 100644 --- a/internal/extensions/call/pod.go +++ b/internal/extensions/call/pod.go @@ -37,7 +37,7 @@ func (c *PodCaller) Call(method, path string, parameters map[string]string) ([]b c.podSelector, ) if err != nil { - return nil, clierror.Wrap(err, clierror.New("failed to get target pod")) + return nil, clierror.Wrap(err, clierror.New("failed to get target Pod")) } req, err := buildRequest(method, targetPod.GetName(), targetPod.GetNamespace(), c.podPort, path, parameters) @@ -53,7 +53,7 @@ func (c *PodCaller) Call(method, path string, parameters map[string]string) ([]b req, ) if err != nil { - return nil, clierror.Wrap(err, clierror.New("failed to send request to target pod")) + return nil, clierror.Wrap(err, clierror.New("failed to send request to target Pod")) } defer resp.Body.Close() diff --git a/internal/extensions/commands.go b/internal/extensions/commands.go index 099f58939..87b86847b 100644 --- a/internal/extensions/commands.go +++ b/internal/extensions/commands.go @@ -13,7 +13,7 @@ var ( emptyActionRun = func(cmd *cobra.Command, _ []string) error { return cmd.Help() } unsupportedActionRun = func(_ *cobra.Command, _ []string) { clierror.Check(clierror.New("unsupported action", - "make sure the cli version is compatible with the extension")) + "make sure the CLI version is compatible with the extension")) } ) diff --git a/internal/github/token.go b/internal/github/token.go index 5f81ea705..afdffdd3b 100644 --- a/internal/github/token.go +++ b/internal/github/token.go @@ -24,7 +24,7 @@ func GetToken(url, requestToken, audience string) (string, clierror.Error) { response, err := http.DefaultClient.Do(request) if err != nil { - return "", clierror.Wrap(err, clierror.New("failed to get token from Github")) + return "", clierror.Wrap(err, clierror.New("failed to get token from GitHub")) } defer response.Body.Close() diff --git a/internal/github/token_test.go b/internal/github/token_test.go index 19c362a24..413e664e0 100644 --- a/internal/github/token_test.go +++ b/internal/github/token_test.go @@ -31,7 +31,7 @@ func Test_getGithubToken(t *testing.T) { { name: "wrong URL", url: "doesnotexist", - wantedErr: clierror.Wrap(errors.New("Get \"doesnotexist\": unsupported protocol scheme \"\""), clierror.New("failed to get token from Github")), + wantedErr: clierror.Wrap(errors.New("Get \"doesnotexist\": unsupported protocol scheme \"\""), clierror.New("failed to get token from GitHub")), }, { name: "token request", diff --git a/internal/kubeconfig/kubeconfig.go b/internal/kubeconfig/kubeconfig.go index 30277df4a..bdce93548 100644 --- a/internal/kubeconfig/kubeconfig.go +++ b/internal/kubeconfig/kubeconfig.go @@ -49,7 +49,7 @@ func Prepare(ctx context.Context, client kube.Client, name, namespace, time, out var loopErr error secret, loopErr = client.Static().CoreV1().Secrets(namespace).Get(ctx, name, metav1.GetOptions{}) if loopErr != nil { - return nil, clierror.Wrap(loopErr, clierror.New("failed to get secret")) + return nil, clierror.Wrap(loopErr, clierror.New("failed to get Secret")) } } diff --git a/internal/modules/disable.go b/internal/modules/disable.go index 0c23d69e4..e51742d3e 100644 --- a/internal/modules/disable.go +++ b/internal/modules/disable.go @@ -30,7 +30,7 @@ func disable(printer *out.Printer, ctx context.Context, client kube.Client, modu printer.Msgfln("removing %s module from the target Kyma environment", module) err := client.Kyma().DisableModule(ctx, module) if err != nil { - return clierror.Wrap(err, clierror.New("failed to disable module")) + return clierror.Wrap(err, clierror.New("failed to disable the module")) } printer.Msgfln("%s module disabled", module) diff --git a/internal/modules/disable_test.go b/internal/modules/disable_test.go index d01422416..e1836eec1 100644 --- a/internal/modules/disable_test.go +++ b/internal/modules/disable_test.go @@ -51,10 +51,10 @@ func TestDisableCore(t *testing.T) { err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Nil(t, err) require.Equal(t, []string{"keda"}, fakeKymaClient.DisabledModules) - require.Equal(t, "removing keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) + require.Equal(t, "removing the Keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) - t.Run("disable module with Ignore policy for module with no CR", func(t *testing.T) { + t.Run("disable the module with Ignore policy for module with no CR", func(t *testing.T) { buffer := bytes.NewBuffer([]byte{}) fakeKymaClient := fake.KymaClient{ ReturnErr: nil, @@ -78,10 +78,10 @@ func TestDisableCore(t *testing.T) { err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Nil(t, err) require.Equal(t, []string{"keda"}, fakeKymaClient.DisabledModules) - require.Equal(t, "removing keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) + require.Equal(t, "removing the Keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) - t.Run("disable module with Ignore policy for module", func(t *testing.T) { + t.Run("disable the module with Ignore policy for module", func(t *testing.T) { buffer := bytes.NewBuffer([]byte{}) fakeKymaClient := fake.KymaClient{ ReturnErr: nil, @@ -118,7 +118,7 @@ func TestDisableCore(t *testing.T) { require.Equal(t, "removing kyma-system/default CR\nwaiting for kyma-system/default CR to be removed\nremoving keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) - t.Run("failed to disable module", func(t *testing.T) { + t.Run("failed to disable the module", func(t *testing.T) { buffer := bytes.NewBuffer([]byte{}) fakeKymaClient := fake.KymaClient{ ReturnDisableModuleErr: errors.New("test error"), @@ -134,12 +134,12 @@ func TestDisableCore(t *testing.T) { expectedCliErr := clierror.Wrap( errors.New("test error"), - clierror.New("failed to disable module"), + clierror.New("failed to disable the module"), ) err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Equal(t, expectedCliErr, err) - require.Equal(t, "removing keda module from the target Kyma environment\n", buffer.String()) + require.Equal(t, "removing the Keda module from the target Kyma environment\n", buffer.String()) }) t.Run("failed to get module info", func(t *testing.T) { @@ -153,7 +153,7 @@ func TestDisableCore(t *testing.T) { expectedCliErr := clierror.Wrap( errors.New("test error"), - clierror.New("failed to get module info from the target Kyma environment"), + clierror.New("failed to get the module info from the target Kyma environment"), ) err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") diff --git a/internal/modules/enable.go b/internal/modules/enable.go index 88b0edb68..8ba77e05c 100644 --- a/internal/modules/enable.go +++ b/internal/modules/enable.go @@ -39,7 +39,7 @@ func enable(printer *out.Printer, ctx context.Context, client kube.Client, repo printer.Msgfln("adding %s module to the Kyma CR", module) err := client.Kyma().EnableModule(ctx, module, channel, crPolicy) if err != nil { - return clierror.Wrap(err, clierror.New("failed to enable module")) + return clierror.Wrap(err, clierror.New("failed to enable the module")) } clierr := applyCustomCR(printer, ctx, client, module, crs...) @@ -63,14 +63,14 @@ func applyCustomCR(printer *out.Printer, ctx context.Context, client kube.Client printer.Msgln("waiting for module to be ready") err := client.Kyma().WaitForModuleState(ctx, module, "Ready", "Warning") if err != nil { - return clierror.Wrap(err, clierror.New("failed to check module state")) + return clierror.Wrap(err, clierror.New("failed to check the module state")) } for _, cr := range crs { printer.Msgfln("applying %s/%s cr", cr.GetNamespace(), cr.GetName()) err = client.RootlessDynamic().Apply(ctx, &cr, false) if err != nil { - return clierror.Wrap(err, clierror.New("failed to apply custom cr from path")) + return clierror.Wrap(err, clierror.New("failed to apply a custom CR from path")) } } diff --git a/internal/modules/enable_test.go b/internal/modules/enable_test.go index dc5e91c90..ed0f3cf28 100644 --- a/internal/modules/enable_test.go +++ b/internal/modules/enable_test.go @@ -198,7 +198,7 @@ func TestEnable(t *testing.T) { } expectedCliErr := clierror.Wrap( - errors.New("the keda module is not available in the catalog"), + errors.New("the Keda module is not available in the catalog"), clierror.New("unknown module name or channel", hints...), ) @@ -231,7 +231,7 @@ func TestEnable(t *testing.T) { } expectedCliErr := clierror.Wrap( - errors.New("the keda module is not available in the regular channel"), + errors.New("the Keda module is not available in the regular channel"), clierror.New("unknown module name or channel", hints...), ) @@ -262,7 +262,7 @@ func TestEnable(t *testing.T) { err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", false, testKedaCR) require.Equal(t, expectedCliErr, err) - require.Equal(t, "adding keda module to the Kyma CR\nwaiting for module to be ready\n", buffer.String()) + require.Equal(t, "adding the Keda module to the Kyma CR\nwaiting for module to be ready\n", buffer.String()) }) t.Run("failed to apply custom resource", func(t *testing.T) { @@ -287,11 +287,11 @@ func TestEnable(t *testing.T) { expectedCliErr := clierror.Wrap( errors.New("test error"), - clierror.New("failed to apply custom cr from path"), + clierror.New("failed to apply a custom CR from path"), ) err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", false, testKedaCR) require.Equal(t, expectedCliErr, err) - require.Equal(t, "adding keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\n", buffer.String()) + require.Equal(t, "adding Keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\n", buffer.String()) }) } diff --git a/internal/modules/uninstall.go b/internal/modules/uninstall.go index 8894336bd..a73519586 100644 --- a/internal/modules/uninstall.go +++ b/internal/modules/uninstall.go @@ -25,7 +25,7 @@ func uninstall(printer *out.Printer, ctx context.Context, repo repo.ModuleTempla moduleResources, err := repo.Resources(ctx, *moduleTemplate) if err != nil { - return clierror.Wrap(err, clierror.New(fmt.Sprintf("failed to get resources for module %v", moduleName))) + return clierror.Wrap(err, clierror.New(fmt.Sprintf("failed to get resources for the module %v", moduleName))) } // We want to remove resources in the reversed order diff --git a/internal/registry/config.go b/internal/registry/config.go index b58ec438a..bcfacadc0 100644 --- a/internal/registry/config.go +++ b/internal/registry/config.go @@ -30,7 +30,7 @@ func GetExternalConfig(ctx context.Context, client kube.Client) (*ExternalRegist if err != nil { return nil, clierror.Wrap(err, clierror.New("failed to get external registry configuration", - "make sure the docker-registry module is configured for external access; see https://kyma-project.io/#/docker-registry/user/tutorials/01-20-expose-registry", + "make sure the Docker registry module is configured for external access; see https://kyma-project.io/#/docker-registry/user/tutorials/01-20-expose-registry", ), ) } @@ -42,9 +42,9 @@ func GetInternalConfig(ctx context.Context, client kube.Client) (*InternalRegist config, err := getInternalConfig(ctx, client) if err != nil { return nil, clierror.Wrap(err, - clierror.New("failed to load in-cluster registry configuration", + clierror.New("failed to load the in-cluster registry configuration", "make sure cluster is available and properly configured", - "enable docker registry module by calling `kyma module add docker-registry -c experimental --default-cr`", + "add the Docker registry module by calling `kyma module add docker-registry -c experimental --default-cr`", ), ) } diff --git a/internal/registry/image.go b/internal/registry/image.go index aae472ddb..201bd7fec 100644 --- a/internal/registry/image.go +++ b/internal/registry/image.go @@ -44,9 +44,9 @@ func importImage(ctx context.Context, imageName string, pushFunc PushFunc, utils localImage, err := imageFromInternalRegistry(ctx, imageName, utils) if err != nil { return "", clierror.Wrap(err, - clierror.New("failed to load image from local docker daemon", - "make sure docker daemon is running", - "make sure the image exists in the local docker daemon", + clierror.New("failed to load image from the local Docker daemon", + "make sure Docker daemon is running", + "make sure the image exists in the local Docker daemon", ), ) } @@ -94,7 +94,7 @@ func NewPushWithPortforwardFunc(clusterAPIRestConfig *rest.Config, registryPodNa pushedImage, err := imageToInClusterRegistry(ctx, localImage, transport, registryAuth, registryPullHost, imageName, utils) if err != nil { - return "", clierror.Wrap(err, clierror.New("failed to push image to the in-cluster registry", "pushing through portforward may be unstable, try exposing the registry in the Registr CR")) + return "", clierror.Wrap(err, clierror.New("failed to push image to the in-cluster registry", "pushing through portforward may be unstable, expose the registry in the Registry CR")) } return pushedImage, nil diff --git a/internal/registry/image_test.go b/internal/registry/image_test.go index 310bda071..494fdb7a8 100644 --- a/internal/registry/image_test.go +++ b/internal/registry/image_test.go @@ -73,9 +73,9 @@ func Test_importImage(t *testing.T) { imageName: ":::::::::", }, wantErr: clierror.Wrap(errors.New("::::::::: must specify a tag name after the colon"), - clierror.New("failed to load image from local docker daemon", - "make sure docker daemon is running", - "make sure the image exists in the local docker daemon"), + clierror.New("failed to load image from the local Docker daemon", + "make sure Docker daemon is running", + "make sure the image exists in the local Docker daemon"), ), }, { @@ -84,9 +84,9 @@ func Test_importImage(t *testing.T) { imageName: "gcr.io/test:image", }, wantErr: clierror.Wrap(errors.New("image 'gcr.io/test:image' can't contain registry 'gcr.io' address"), - clierror.New("failed to load image from local docker daemon", - "make sure docker daemon is running", - "make sure the image exists in the local docker daemon"), + clierror.New("failed to load image from the local Docker daemon", + "make sure Docker daemon is running", + "make sure the image exists in the local Docker daemon"), ), }, { @@ -101,9 +101,9 @@ func Test_importImage(t *testing.T) { }, }, wantErr: clierror.Wrap(errors.New("test-error"), - clierror.New("failed to load image from local docker daemon", - "make sure docker daemon is running", - "make sure the image exists in the local docker daemon"), + clierror.New("failed to load image from the local Docker daemon", + "make sure Docker daemon is running", + "make sure the image exists in the local Docker daemon"), ), }, { @@ -145,7 +145,7 @@ func Test_importImage(t *testing.T) { wantErr: clierror.Wrap(errors.New("registries must be valid RFC 3986 URI authorities: < >"), clierror.New( "failed to push image to the in-cluster registry", - "pushing through portforward may be unstable, try exposing the registry in the Registr CR", + "pushing through portforward may be unstable, expose the registry in the Registry CR", )), }, { @@ -174,7 +174,7 @@ func Test_importImage(t *testing.T) { wantErr: clierror.Wrap(errors.New("test error"), clierror.New( "failed to push image to the in-cluster registry", - "pushing through portforward may be unstable, try exposing the registry in the Registr CR", + "pushing through portforward may be unstable, expose the registry in the Registry CR", ), ), }, From 4a7a8cee85ccad6b4adbe11b3a629292764ce50a Mon Sep 17 00:00:00 2001 From: grego952 Date: Tue, 2 Dec 2025 09:03:11 +0100 Subject: [PATCH 08/18] Fix tests --- internal/authorization/rbacbuilder_test.go | 6 +++--- internal/modules/disable.go | 2 +- internal/modules/disable_test.go | 2 +- internal/modules/enable_test.go | 10 +++++----- internal/modules/manage.go | 2 +- internal/modules/uninstall_test.go | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/internal/authorization/rbacbuilder_test.go b/internal/authorization/rbacbuilder_test.go index 4301d0d0e..f053ea338 100644 --- a/internal/authorization/rbacbuilder_test.go +++ b/internal/authorization/rbacbuilder_test.go @@ -230,7 +230,7 @@ func TestRBACBuilder_BuildRoleBinding(t *testing.T) { ForSubjectName("owner/repo"). ForNamespace("default") }, - expectedError: "either role or clusterrole must be specified for RoleBinding", + expectedError: "specify either Role or ClusterRole for RoleBinding", }, { name: "error when both role and clusterrole are specified", @@ -243,7 +243,7 @@ func TestRBACBuilder_BuildRoleBinding(t *testing.T) { ForClusterRole("cluster-admin"). ForNamespace("default") }, - expectedError: "cannot specify both role and clusterrole for RoleBinding", + expectedError: "cannot specify both Role and ClusterRole for RoleBinding", }, { name: "error when namespace is missing", @@ -254,7 +254,7 @@ func TestRBACBuilder_BuildRoleBinding(t *testing.T) { ForSubjectName("owner/repo"). ForRole("reader") }, - expectedError: "namespace is required for RoleBinding", + expectedError: "provide namespace for RoleBinding", }, } diff --git a/internal/modules/disable.go b/internal/modules/disable.go index e51742d3e..becb3541f 100644 --- a/internal/modules/disable.go +++ b/internal/modules/disable.go @@ -40,7 +40,7 @@ func disable(printer *out.Printer, ctx context.Context, client kube.Client, modu func removeModuleCR(printer *out.Printer, ctx context.Context, client kube.Client, module string) clierror.Error { info, err := client.Kyma().GetModuleInfo(ctx, module) if err != nil { - return clierror.Wrap(err, clierror.New("failed to get module info from the target Kyma environment")) + return clierror.Wrap(err, clierror.New("failed to get the module info from the target Kyma environment")) } if info.Spec.CustomResourcePolicy == kyma.CustomResourcePolicyCreateAndDelete { diff --git a/internal/modules/disable_test.go b/internal/modules/disable_test.go index e1836eec1..496e3da34 100644 --- a/internal/modules/disable_test.go +++ b/internal/modules/disable_test.go @@ -115,7 +115,7 @@ func TestDisableCore(t *testing.T) { err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Nil(t, err) require.Equal(t, []string{"keda"}, fakeKymaClient.DisabledModules) - require.Equal(t, "removing kyma-system/default CR\nwaiting for kyma-system/default CR to be removed\nremoving keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) + require.Equal(t, "removing kyma-system/default CR\nwaiting for kyma-system/default CR to be removed\nremoving the Keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) t.Run("failed to disable the module", func(t *testing.T) { diff --git a/internal/modules/enable_test.go b/internal/modules/enable_test.go index ed0f3cf28..6252fae15 100644 --- a/internal/modules/enable_test.go +++ b/internal/modules/enable_test.go @@ -78,7 +78,7 @@ func TestEnable(t *testing.T) { err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", true) require.Nil(t, err) - require.Equal(t, "adding keda module to the Kyma CR\nkeda module enabled\n", buffer.String()) + require.Equal(t, "adding the Keda module to the Kyma CR\nkeda module enabled\n", buffer.String()) require.Equal(t, []fake.FakeEnabledModule{expectedEnabledModule}, kymaClient.EnabledModules) }) @@ -112,7 +112,7 @@ func TestEnable(t *testing.T) { err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "", true) require.Nil(t, err) - require.Equal(t, "adding keda module to the Kyma CR\nkeda module enabled\n", buffer.String()) + require.Equal(t, "adding the Keda module to the Kyma CR\nkeda module enabled\n", buffer.String()) require.Equal(t, []fake.FakeEnabledModule{expectedEnabledModule}, kymaClient.EnabledModules) }) @@ -142,7 +142,7 @@ func TestEnable(t *testing.T) { err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", false, testKedaCR) require.Nil(t, err) - require.Equal(t, "adding keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\nkeda module enabled\n", buffer.String()) + require.Equal(t, "adding the Keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\nkeda module enabled\n", buffer.String()) require.Equal(t, []fake.FakeEnabledModule{expectedEnabledModule}, kymaClient.EnabledModules) require.Equal(t, []unstructured.Unstructured{testKedaCR}, rootlessDynamicClient.ApplyObjs) }) @@ -257,7 +257,7 @@ func TestEnable(t *testing.T) { expectedCliErr := clierror.Wrap( errors.New("test error"), - clierror.New("failed to check module state"), + clierror.New("failed to check the module state"), ) err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", false, testKedaCR) @@ -292,6 +292,6 @@ func TestEnable(t *testing.T) { err := enable(out.NewToWriter(buffer), context.Background(), &client, repo, "keda", "fast", false, testKedaCR) require.Equal(t, expectedCliErr, err) - require.Equal(t, "adding Keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\n", buffer.String()) + require.Equal(t, "adding the Keda module to the Kyma CR\nwaiting for module to be ready\napplying kyma-system/default cr\n", buffer.String()) }) } diff --git a/internal/modules/manage.go b/internal/modules/manage.go index 29e2a7f32..ccb6404d7 100644 --- a/internal/modules/manage.go +++ b/internal/modules/manage.go @@ -35,7 +35,7 @@ func ManageModuleInKymaCR(ctx context.Context, client kube.Client, moduleName, p err = client.Kyma().WaitForModuleState(ctx, moduleName, "Ready", "Warning") if err != nil { - return fmt.Errorf("failed to check module state: %v", err) + return fmt.Errorf("failed to check the module state: %v", err) } return nil diff --git a/internal/modules/uninstall_test.go b/internal/modules/uninstall_test.go index 6ed087be7..059ccb8e8 100644 --- a/internal/modules/uninstall_test.go +++ b/internal/modules/uninstall_test.go @@ -99,7 +99,7 @@ func TestDisableCommunity(t *testing.T) { expectedCliErr := clierror.Wrap( errors.New("ResourcesError"), - clierror.New("failed to get resources for module test"), + clierror.New("failed to get resources for the module test"), ) require.NotNil(t, err) From 89ac3952091bca8e1054e618c920ebc84bc3185f Mon Sep 17 00:00:00 2001 From: Antoni Date: Mon, 1 Dec 2025 15:29:53 +0100 Subject: [PATCH 09/18] Added ServiceAccount namespace option for authorize cmd (#2753) --- docs/user/gen-docs/kyma_alpha_authorize.md | 1 + internal/authorization/rbacbuilder.go | 52 +++++++++++++++++----- internal/authorization/rbacbuilder_test.go | 24 ++++++++++ internal/cmd/alpha/authorize/authorize.go | 35 +++++++++------ 4 files changed, 86 insertions(+), 26 deletions(-) diff --git a/docs/user/gen-docs/kyma_alpha_authorize.md b/docs/user/gen-docs/kyma_alpha_authorize.md index fe3122cbd..3bab63745 100644 --- a/docs/user/gen-docs/kyma_alpha_authorize.md +++ b/docs/user/gen-docs/kyma_alpha_authorize.md @@ -48,6 +48,7 @@ kyma alpha authorize [flags] --namespace string Namespace for RoleBinding (required when binding a Role or binding a ClusterRole to a specific namespace) -o, --output string Output format for dry-run (yaml or json) --role string Role name to bind (creates RoleBinding in specified namespace) + --sa-namespace string Namespace for the service account subject. Defaults to the RoleBinding namespace when not specified. --context string The name of the kubeconfig context to use -h, --help Help for the command --kubeconfig string Path to the Kyma kubeconfig file diff --git a/internal/authorization/rbacbuilder.go b/internal/authorization/rbacbuilder.go index f195799a0..1239cefba 100644 --- a/internal/authorization/rbacbuilder.go +++ b/internal/authorization/rbacbuilder.go @@ -41,6 +41,8 @@ type RBACBuilder struct { subjectKind *SubjectKind subjectName string bindingName string + + serviceAccountNamespace string } func NewRBACBuilder() *RBACBuilder { @@ -82,6 +84,11 @@ func (b *RBACBuilder) ForClusterRole(clusterRole string) *RBACBuilder { return b } +func (b *RBACBuilder) ForServiceAccountNamespace(saNamespace string) *RBACBuilder { + b.serviceAccountNamespace = saNamespace + return b +} + func (b *RBACBuilder) BuildClusterRoleBinding() (*unstructured.Unstructured, clierror.Error) { if err := b.validateForClusterRoleBinding(); err != nil { return nil, err @@ -111,6 +118,10 @@ func (b *RBACBuilder) validateForClusterRoleBinding() clierror.Error { return clierror.New("clusterrole is required for ClusterRoleBinding") } + if b.subjectKind != nil && b.subjectKind.name == SERVICE_ACCOUNT && b.namespace == "" && b.serviceAccountNamespace == "" { + return clierror.New("namespace is required for service account subject", "Make use of '--sa-namespace' flag to define namespace for ServiceAccount") + } + return nil } @@ -136,6 +147,9 @@ func (b *RBACBuilder) validateForRoleBinding() clierror.Error { if b.namespace == "" { return clierror.New("provide namespace for RoleBinding") } + if b.subjectKind != nil && b.subjectKind.name == SERVICE_ACCOUNT && b.namespace == "" && b.serviceAccountNamespace == "" { + return clierror.New("namespace is required for ServiceAccount subject") + } return nil } @@ -148,12 +162,7 @@ func (b *RBACBuilder) buildClusterRoleBinding() *unstructured.Unstructured { "metadata": map[string]any{ "name": b.bindingName, }, - "subjects": []map[string]any{ - { - "kind": b.subjectKind.name, - "name": b.prefix + b.subjectName, - }, - }, + "subjects": b.buildRoleBindingSubject(), "roleRef": map[string]any{ "kind": "ClusterRole", "name": b.clusterrole, @@ -179,12 +188,7 @@ func (b *RBACBuilder) buildRoleBinding() *unstructured.Unstructured { "name": b.bindingName, "namespace": b.namespace, }, - "subjects": []map[string]any{ - { - "kind": b.subjectKind.name, - "name": b.prefix + b.subjectName, - }, - }, + "subjects": b.buildRoleBindingSubject(), "roleRef": map[string]any{ "kind": roleKind, "name": roleName, @@ -193,3 +197,27 @@ func (b *RBACBuilder) buildRoleBinding() *unstructured.Unstructured { }, } } + +func (b *RBACBuilder) buildRoleBindingSubject() []map[string]any { + if b.subjectKind.name == SERVICE_ACCOUNT { + saNamespace := b.serviceAccountNamespace + if saNamespace == "" { + saNamespace = b.namespace + } + + return []map[string]any{ + { + "kind": b.subjectKind.name, + "name": b.prefix + b.subjectName, + "namespace": saNamespace, + }, + } + } + + return []map[string]any{ + { + "kind": b.subjectKind.name, + "name": b.prefix + b.subjectName, + }, + } +} diff --git a/internal/authorization/rbacbuilder_test.go b/internal/authorization/rbacbuilder_test.go index f053ea338..b42623045 100644 --- a/internal/authorization/rbacbuilder_test.go +++ b/internal/authorization/rbacbuilder_test.go @@ -256,6 +256,30 @@ func TestRBACBuilder_BuildRoleBinding(t *testing.T) { }, expectedError: "provide namespace for RoleBinding", }, + { + name: "successful build for ServiceAccount", + setupBuilder: func() *authorization.RBACBuilder { + saSubjectKind, _ := authorization.NewSubjectKindFrom("ServiceAccount") + return authorization.NewRBACBuilder(). + ForSubjectKind(saSubjectKind). + ForSubjectName("sa-test-binding"). + ForRole("reader"). + ForNamespace("default"). + ForServiceAccountNamespace("sa-default") + }, + validateResult: func(t *testing.T, result *unstructured.Unstructured) { + subjects, found, err := unstructured.NestedFieldNoCopy(result.Object, "subjects") + require.NoError(t, err) + require.True(t, found) + subjectsSlice := subjects.([]map[string]any) + require.Len(t, subjectsSlice, 1) + + subject := subjectsSlice[0] + assert.Equal(t, "sa-test-binding", subject["name"]) + assert.Equal(t, "ServiceAccount", subject["kind"]) + assert.Equal(t, "sa-default", subject["namespace"]) + }, + }, } for _, tt := range tests { diff --git a/internal/cmd/alpha/authorize/authorize.go b/internal/cmd/alpha/authorize/authorize.go index d078513f4..b74262a58 100644 --- a/internal/cmd/alpha/authorize/authorize.go +++ b/internal/cmd/alpha/authorize/authorize.go @@ -16,14 +16,15 @@ import ( type authorizeConfig struct { *cmdcommon.KymaConfig - authTarget string // user, group, serviceaccount - name []string - namespace string - clusterWide bool - role string - clusterrole string - dryRun bool - outputFormat types.Format + authTarget string // user, group, serviceaccount + name []string + namespace string + clusterWide bool + role string + clusterrole string + serviceAccountNamespace string + dryRun bool + outputFormat types.Format } func NewAuthorizeCMD(kymaConfig *cmdcommon.KymaConfig) *cobra.Command { @@ -75,6 +76,7 @@ func NewAuthorizeCMD(kymaConfig *cmdcommon.KymaConfig) *cobra.Command { cmd.Flags().StringVar(&cfg.role, "role", "", "Role name to bind (creates RoleBinding in specified namespace)") cmd.Flags().StringVar(&cfg.clusterrole, "clusterrole", "", "ClusterRole name to bind (for ClusterRoleBinding with --cluster-wide, or RoleBinding in namespace)") cmd.Flags().StringSliceVar(&cfg.name, "name", []string{}, "Name(s) of the subject(s) to authorize (required)") + cmd.Flags().StringVar(&cfg.serviceAccountNamespace, "sa-namespace", "", "Namespace for the service account subject. Defaults to the RoleBinding namespace when not specified.") cmd.Flags().BoolVar(&cfg.dryRun, "dry-run", false, "Preview the YAML/JSON output without applying resources to the cluster") cmd.Flags().VarP(&cfg.outputFormat, "output", "o", "Output format for dry-run (yaml or json)") @@ -101,11 +103,13 @@ func authorize(cfg *authorizeConfig) clierror.Error { if cfg.outputFormat == "" { out.Msgfln("%s '%s' applied successfully.%s", res.GetKind(), res.GetName(), msgSuffix) - } else { - clierr := outputResources(cfg.outputFormat, rbacResources) - if clierr != nil { - return clierr - } + } + } + + if cfg.outputFormat != "" { + clierr := outputResources(cfg.outputFormat, rbacResources) + if clierr != nil { + return clierr } } @@ -150,6 +154,7 @@ func buildClusterRoleBinding(builder *authorization.RBACBuilder, cfg *authorizeC rbacResource, err := builder. ForClusterRole(cfg.clusterrole). ForBindingName(fmt.Sprintf("%s-%s-binding", cfg.clusterrole, subjectName)). + ForServiceAccountNamespace(cfg.serviceAccountNamespace). BuildClusterRoleBinding() if err != nil { @@ -159,7 +164,9 @@ func buildClusterRoleBinding(builder *authorization.RBACBuilder, cfg *authorizeC } func buildRoleBinding(builder *authorization.RBACBuilder, cfg *authorizeConfig, subjectName string) (*unstructured.Unstructured, clierror.Error) { - builder = builder.ForNamespace(cfg.namespace) + builder = builder. + ForNamespace(cfg.namespace). + ForServiceAccountNamespace(cfg.serviceAccountNamespace) if cfg.role != "" { builder = builder. From 345299a7621613aedfe0d52b3c66471adcc22672 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 08:51:18 +0100 Subject: [PATCH 10/18] gomod(deps): bump github.com/google/go-containerregistry from 0.20.6 to 0.20.7 (#2761) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 14 +++++++------- go.sum | 28 ++++++++++++++-------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/go.mod b/go.mod index 9f7544c6c..18deb2f26 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/docker/cli v29.0.3+incompatible github.com/docker/docker v28.5.2+incompatible github.com/go-test/deep v1.1.1 - github.com/google/go-containerregistry v0.20.6 + github.com/google/go-containerregistry v0.20.7 github.com/itchyny/gojq v0.12.17 github.com/jedib0t/go-pretty/v6 v6.7.5 github.com/joho/godotenv v1.5.1 @@ -80,7 +80,7 @@ require ( 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/containerd/stargz-snapshotter/estargz v0.16.3 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.18.1 // indirect github.com/containerd/typeurl/v2 v2.2.3 // indirect github.com/cyphar/filepath-securejoin v0.6.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -142,7 +142,7 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/compress v1.18.1 // indirect github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect github.com/lestrrat-go/blackmagic v1.0.3 // indirect github.com/lestrrat-go/httpcc v1.0.1 // indirect @@ -202,7 +202,7 @@ require ( github.com/stretchr/objx v0.5.2 // indirect github.com/thoas/go-funk v0.9.3 // indirect github.com/tonistiigi/go-csvvalue v0.0.0-20240814133006-030d3b2625d0 // indirect - github.com/vbatts/tar-split v0.12.1 // indirect + github.com/vbatts/tar-split v0.12.2 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect @@ -224,15 +224,15 @@ require ( go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/crypto v0.45.0 // indirect golang.org/x/exp v0.0.0-20251017212417-90e834f514db // indirect - golang.org/x/mod v0.29.0 // indirect + golang.org/x/mod v0.30.0 // indirect golang.org/x/net v0.47.0 // indirect - golang.org/x/oauth2 v0.32.0 // indirect + golang.org/x/oauth2 v0.33.0 // indirect golang.org/x/sync v0.18.0 // indirect golang.org/x/sys v0.38.0 // indirect golang.org/x/term v0.37.0 // indirect golang.org/x/text v0.31.0 // indirect golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.38.0 // indirect + golang.org/x/tools v0.39.0 // indirect gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20251020155222-88f65dc88635 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251020155222-88f65dc88635 // indirect diff --git a/go.sum b/go.sum index fa5294c24..a92e8625c 100644 --- a/go.sum +++ b/go.sum @@ -138,8 +138,8 @@ github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151X 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/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8= -github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU= +github.com/containerd/stargz-snapshotter/estargz v0.18.1 h1:cy2/lpgBXDA3cDKSyEfNOFMA/c10O1axL69EU7iirO8= +github.com/containerd/stargz-snapshotter/estargz v0.18.1/go.mod h1:ALIEqa7B6oVDsrF37GkGN20SuvG/pIMm7FwP7ZmRb0Q= github.com/containerd/typeurl/v2 v2.2.3 h1:yNA/94zxWdvYACdYO8zofhrTVuQY73fFU1y++dYSw40= github.com/containerd/typeurl/v2 v2.2.3/go.mod h1:95ljDnPfD3bAbDJRugOiShd/DlAAsxGtUBhJxIn7SCk= github.com/coreos/go-oidc v2.3.0+incompatible h1:+5vEsrgprdLjjQ9FzIKAzQz1wwPD+83hQRfUIPh7rO0= @@ -276,8 +276,8 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 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-containerregistry v0.20.6 h1:cvWX87UxxLgaH76b4hIvya6Dzz9qHB31qAwjAohdSTU= -github.com/google/go-containerregistry v0.20.6/go.mod h1:T0x8MuoAoKX/873bkeSfLD2FAkwCDf9/HZgsFJ02E2Y= +github.com/google/go-containerregistry v0.20.7 h1:24VGNpS0IwrOZ2ms2P1QE3Xa5X9p4phx0aUgzYzHW6I= +github.com/google/go-containerregistry v0.20.7/go.mod h1:Lx5LCZQjLH1QBaMPeGwsME9biPeo1lPx6lbGj/UmzgM= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -341,8 +341,8 @@ github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4 github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= -github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co= +github.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -561,8 +561,8 @@ github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPf github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= github.com/tonistiigi/go-csvvalue v0.0.0-20240814133006-030d3b2625d0 h1:2f304B10LaZdB8kkVEaoXvAMVan2tl9AiK4G0odjQtE= github.com/tonistiigi/go-csvvalue v0.0.0-20240814133006-030d3b2625d0/go.mod h1:278M4p8WsNh3n4a1eqiFcV2FGk7wE5fwUpUom9mK9lE= -github.com/vbatts/tar-split v0.12.1 h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo= -github.com/vbatts/tar-split v0.12.1/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= +github.com/vbatts/tar-split v0.12.2 h1:w/Y6tjxpeiFMR47yzZPlPj/FcPLpXbTUi/9H7d3CPa4= +github.com/vbatts/tar-split v0.12.2/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= @@ -640,8 +640,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= -golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= +golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= +golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -659,8 +659,8 @@ golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= -golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY= -golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo= +golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -740,8 +740,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= -golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= +golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= 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= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 1d02ef0489a27646f895fa2e83707e4061e63a2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 07:57:19 +0000 Subject: [PATCH 11/18] gomod(deps): bump github.com/docker/cli from 29.0.3+incompatible to 29.1.1+incompatible in the docker group (#2759) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 18deb2f26..09a57b9d6 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/Masterminds/semver/v3 v3.4.0 github.com/Masterminds/sprig/v3 v3.3.0 github.com/buildpacks/pack v0.38.2 - github.com/docker/cli v29.0.3+incompatible + github.com/docker/cli v29.1.1+incompatible github.com/docker/docker v28.5.2+incompatible github.com/go-test/deep v1.1.1 github.com/google/go-containerregistry v0.20.7 diff --git a/go.sum b/go.sum index a92e8625c..1e002ff56 100644 --- a/go.sum +++ b/go.sum @@ -160,8 +160,8 @@ github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= 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/cli v29.0.3+incompatible h1:8J+PZIcF2xLd6h5sHPsp5pvvJA+Sr2wGQxHkRl53a1E= -github.com/docker/cli v29.0.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v29.1.1+incompatible h1:gGQk5qx62yPKRm3bUdKBzmDBSQzp17hlSLbV1F7jjys= +github.com/docker/cli v29.1.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM= From 80305302d0cfeb8849439106685adb02630b25ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 08:03:20 +0000 Subject: [PATCH 12/18] gomod(deps): bump the k8s-io group with 3 updates (#2758) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 09a57b9d6..ceea47938 100644 --- a/go.mod +++ b/go.mod @@ -23,9 +23,9 @@ require ( gopkg.in/yaml.v3 v3.0.1 istio.io/client-go v1.28.0-alpha.0.0.20251117135800-816e95cb1f4d istio.io/istio v0.0.0-20251118002659-9d049551c3db - k8s.io/api v0.34.1 - k8s.io/apimachinery v0.34.1 - k8s.io/client-go v0.34.1 + k8s.io/api v0.34.2 + k8s.io/apimachinery v0.34.2 + k8s.io/client-go v0.34.2 k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d ) diff --git a/go.sum b/go.sum index 1e002ff56..72d4a7000 100644 --- a/go.sum +++ b/go.sum @@ -791,16 +791,16 @@ istio.io/client-go v1.28.0-alpha.0.0.20251117135800-816e95cb1f4d h1:XqXksMo8LBHg istio.io/client-go v1.28.0-alpha.0.0.20251117135800-816e95cb1f4d/go.mod h1:+w39lRFVPiFOJ/tulJLIuqn9K0XoR6KBCeb4kDilNqU= istio.io/istio v0.0.0-20251118002659-9d049551c3db h1:xU/aGVEk3FLfelCJ/Syb0w3y6B7KEjDvrScQoLkbANc= istio.io/istio v0.0.0-20251118002659-9d049551c3db/go.mod h1:XX+weJgSJjATSE52qTak5PtfFTDjla63Cf1mYM6rKms= -k8s.io/api v0.34.1 h1:jC+153630BMdlFukegoEL8E/yT7aLyQkIVuwhmwDgJM= -k8s.io/api v0.34.1/go.mod h1:SB80FxFtXn5/gwzCoN6QCtPD7Vbu5w2n1S0J5gFfTYk= +k8s.io/api v0.34.2 h1:fsSUNZhV+bnL6Aqrp6O7lMTy6o5x2C4XLjnh//8SLYY= +k8s.io/api v0.34.2/go.mod h1:MMBPaWlED2a8w4RSeanD76f7opUoypY8TFYkSM+3XHw= k8s.io/apiextensions-apiserver v0.34.1 h1:NNPBva8FNAPt1iSVwIE0FsdrVriRXMsaWFMqJbII2CI= k8s.io/apiextensions-apiserver v0.34.1/go.mod h1:hP9Rld3zF5Ay2Of3BeEpLAToP+l4s5UlxiHfqRaRcMc= -k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4= -k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= +k8s.io/apimachinery v0.34.2 h1:zQ12Uk3eMHPxrsbUJgNF8bTauTVR2WgqJsTmwTE/NW4= +k8s.io/apimachinery v0.34.2/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= k8s.io/apiserver v0.34.1 h1:U3JBGdgANK3dfFcyknWde1G6X1F4bg7PXuvlqt8lITA= k8s.io/apiserver v0.34.1/go.mod h1:eOOc9nrVqlBI1AFCvVzsob0OxtPZUCPiUJL45JOTBG0= -k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY= -k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8= +k8s.io/client-go v0.34.2 h1:Co6XiknN+uUZqiddlfAjT68184/37PS4QAzYvQvDR8M= +k8s.io/client-go v0.34.2/go.mod h1:2VYDl1XXJsdcAxw7BenFslRQX28Dxz91U9MWKjX97fE= k8s.io/component-base v0.34.1 h1:v7xFgG+ONhytZNFpIz5/kecwD+sUhVE6HU7qQUiRM4A= k8s.io/component-base v0.34.1/go.mod h1:mknCpLlTSKHzAQJJnnHVKqjxR7gBeHRv0rPXA7gdtQ0= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= From 0121d1097474c126f47afd28932a42c3306abc0b Mon Sep 17 00:00:00 2001 From: grego952 Date: Tue, 2 Dec 2025 13:06:03 +0100 Subject: [PATCH 13/18] Fix tests --- internal/modules/disable.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/modules/disable.go b/internal/modules/disable.go index becb3541f..f5c70ef81 100644 --- a/internal/modules/disable.go +++ b/internal/modules/disable.go @@ -27,7 +27,7 @@ func disable(printer *out.Printer, ctx context.Context, client kube.Client, modu return clierr } - printer.Msgfln("removing %s module from the target Kyma environment", module) + printer.Msgfln("removing the %s module from the target Kyma environment", module) err := client.Kyma().DisableModule(ctx, module) if err != nil { return clierror.Wrap(err, clierror.New("failed to disable the module")) From cff9af5f384ee53f8f8bef77065bf51e86091820 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 10:39:58 +0100 Subject: [PATCH 14/18] gomod(deps): bump github.com/buildpacks/pack from 0.38.2 to 0.39.0 (#2760) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 73 ++++++++++----------- go.sum | 201 ++++++++++++++++++++++++--------------------------------- 2 files changed, 121 insertions(+), 153 deletions(-) diff --git a/go.mod b/go.mod index ceea47938..592d0d674 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,11 @@ module github.com/kyma-project/cli.v3 -go 1.24.4 +go 1.25.3 require ( github.com/Masterminds/semver/v3 v3.4.0 github.com/Masterminds/sprig/v3 v3.3.0 - github.com/buildpacks/pack v0.38.2 + github.com/buildpacks/pack v0.39.0 github.com/docker/cli v29.1.1+incompatible github.com/docker/docker v28.5.2+incompatible github.com/go-test/deep v1.1.1 @@ -31,7 +31,7 @@ require ( require ( cel.dev/expr v0.24.0 // indirect - cloud.google.com/go/compute/metadata v0.7.0 // indirect + cloud.google.com/go/compute/metadata v0.9.0 // indirect cyphar.com/go-pathrs v0.2.1 // indirect dario.cat/mergo v1.0.2 // indirect github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect @@ -45,35 +45,36 @@ require ( github.com/Azure/go-autorest/logger v0.2.2 // indirect github.com/Azure/go-autorest/tracing v0.6.1 // indirect github.com/BurntSushi/toml v1.5.0 // indirect - github.com/GoogleContainerTools/kaniko v1.24.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/ProtonMail/go-crypto v1.2.0 // indirect + github.com/ProtonMail/go-crypto v1.3.0 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/apex/log v1.9.0 // indirect - github.com/aws/aws-sdk-go-v2 v1.37.2 // indirect - github.com/aws/aws-sdk-go-v2/config v1.29.14 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.71 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.33 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.2 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.2 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.44.0 // indirect - github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.33.0 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.18 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.25.6 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.34.1 // indirect - github.com/aws/smithy-go v1.22.5 // indirect - github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.9.1 // indirect + github.com/aws/aws-sdk-go-v2 v1.40.0 // indirect + github.com/aws/aws-sdk-go-v2/config v1.32.0 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.0 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.14 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.14 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.51.2 // indirect + github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.38.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.0.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.4 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.8 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.41.1 // indirect + github.com/aws/smithy-go v1.23.2 // indirect + github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.11.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/buildpacks/imgutil v0.0.0-20250626173435-7c19c278f3d2 // indirect - github.com/buildpacks/lifecycle v0.20.11 // indirect + github.com/buildpacks/imgutil v0.0.0-20250909162057-9db16db815e3 // indirect + github.com/buildpacks/lifecycle v0.20.19 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/chainguard-dev/kaniko v1.25.5 // indirect github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 // indirect github.com/cloudflare/circl v1.6.1 // indirect github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect @@ -88,7 +89,7 @@ require ( github.com/dimchansky/utfbom v1.1.1 // indirect github.com/distribution/reference v0.6.0 // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker-credential-helpers v0.9.3 // indirect + github.com/docker/docker-credential-helpers v0.9.4 // indirect github.com/docker/go-connections v0.6.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/go-units v0.5.0 // indirect @@ -103,10 +104,10 @@ require ( github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.9.0 // indirect github.com/gdamore/encoding v1.0.1 // indirect - github.com/gdamore/tcell/v2 v2.8.1 // indirect + github.com/gdamore/tcell/v2 v2.11.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.6.2 // indirect - github.com/go-git/go-git/v5 v5.16.2 // indirect + github.com/go-git/go-git/v5 v5.16.3 // indirect github.com/go-jose/go-jose/v4 v4.1.2 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -149,7 +150,7 @@ require ( github.com/lestrrat-go/iter v1.0.2 // indirect github.com/lestrrat-go/jwx v1.2.31 // indirect github.com/lestrrat-go/option v1.0.1 // indirect - github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/lucasb-eyer/go-colorful v1.3.0 // indirect github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect @@ -159,7 +160,7 @@ require ( github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/ioprogress v0.0.0-20180201004757-6a23b12fa88e // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/moby/buildkit v0.23.2 // indirect + github.com/moby/buildkit v0.26.1 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/moby/api v1.52.0 // indirect github.com/moby/moby/client v0.1.0 // indirect @@ -189,7 +190,7 @@ require ( github.com/prometheus/otlptranslator v0.0.0-20250717125610-8549f4ab4f8f // indirect github.com/prometheus/procfs v0.17.0 // indirect github.com/prometheus/prometheus v0.305.0 // indirect - github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 // indirect + github.com/rivo/tview v0.42.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect @@ -208,14 +209,14 @@ require ( github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect - go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect - go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/exporters/prometheus v0.59.1 // indirect - go.opentelemetry.io/otel/metric v1.37.0 // indirect - go.opentelemetry.io/otel/sdk v1.37.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.37.0 // indirect - go.opentelemetry.io/otel/trace v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect go.opentelemetry.io/proto/otlp v1.7.1 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect @@ -235,7 +236,7 @@ require ( golang.org/x/tools v0.39.0 // indirect gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20251020155222-88f65dc88635 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251020155222-88f65dc88635 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 // indirect google.golang.org/grpc v1.76.0 // indirect google.golang.org/protobuf v1.36.10 // indirect gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect diff --git a/go.sum b/go.sum index 72d4a7000..c199fb384 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= -cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= -cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= +cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= +cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cyphar.com/go-pathrs v0.2.1 h1:9nx1vOgwVvX1mNBWDu93+vaceedpbsDqo+XuBGL40b8= cyphar.com/go-pathrs v0.2.1/go.mod h1:y8f1EMG7r+hCuFf/rXsKqMJrJAUoADZGNh5/vZPKcGc= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= @@ -40,8 +40,6 @@ github.com/Azure/go-autorest/tracing v0.6.1 h1:YUMSrC/CeD1ZnnXcNYU4a/fzsO35u2Fsf github.com/Azure/go-autorest/tracing v0.6.1/go.mod h1:/3EgjbsjraOqiicERAeu3m7/z0x1TzjQGAwDrJrXGkc= github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/GoogleContainerTools/kaniko v1.24.0 h1:PgzzuOwaraxC7UMw0F0YoxNHi+a6YeiAbDgc2GHrk+M= -github.com/GoogleContainerTools/kaniko v1.24.0/go.mod h1:hO9q9uGMwrItm4wGcX7E0cMJIw84NM6gPETIt6vkwAk= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= @@ -53,8 +51,8 @@ github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSC github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/ProtonMail/go-crypto v1.2.0 h1:+PhXXn4SPGd+qk76TlEePBfOfivE0zkWFenhGhFLzWs= -github.com/ProtonMail/go-crypto v1.2.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= +github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw= +github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/alecholmes/xfccparser v0.4.0 h1:IFB4bP34oorjcV3n8utZtBhEwlAw9rZ43pb4LgT23Vo= @@ -75,38 +73,40 @@ github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3st github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v1.37.2 h1:xkW1iMYawzcmYFYEV0UCMxc8gSsjCGEhBXQkdQywVbo= -github.com/aws/aws-sdk-go-v2 v1.37.2/go.mod h1:9Q0OoGQoboYIAJyslFyF1f5K1Ryddop8gqMhWx/n4Wg= -github.com/aws/aws-sdk-go-v2/config v1.29.14 h1:f+eEi/2cKCg9pqKBoAIwRGzVb70MRKqWX4dg1BDcSJM= -github.com/aws/aws-sdk-go-v2/config v1.29.14/go.mod h1:wVPHWcIFv3WO89w0rE10gzf17ZYy+UVS1Geq8Iei34g= -github.com/aws/aws-sdk-go-v2/credentials v1.17.71 h1:r2w4mQWnrTMJjOyIsZtGp3R3XGY3nqHn8C26C2lQWgA= -github.com/aws/aws-sdk-go-v2/credentials v1.17.71/go.mod h1:E7VF3acIup4GB5ckzbKFrCK0vTvEQxOxgdq4U3vcMCY= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.33 h1:D9ixiWSG4lyUBL2DDNK924Px9V/NBVpML90MHqyTADY= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.33/go.mod h1:caS/m4DI+cij2paz3rtProRBI4s/+TCiWoaWZuQ9010= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.2 h1:sPiRHLVUIIQcoVZTNwqQcdtjkqkPopyYmIX0M5ElRf4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.2/go.mod h1:ik86P3sgV+Bk7c1tBFCwI3VxMoSEwl4YkRB9xn1s340= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.2 h1:ZdzDAg075H6stMZtbD2o+PyB933M/f20e9WmCBC17wA= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.2/go.mod h1:eE1IIzXG9sdZCB0pNNpMpsYTLl4YdOQD3njiVN1e/E4= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= -github.com/aws/aws-sdk-go-v2/service/ecr v1.44.0 h1:E+UTVTDH6XTSjqxHWRuY8nB6s+05UllneWxnycplHFk= -github.com/aws/aws-sdk-go-v2/service/ecr v1.44.0/go.mod h1:iQ1skgw1XRK+6Lgkb0I9ODatAP72WoTILh0zXQ5DtbU= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.33.0 h1:wA2O6pZ2r5smqJunFP4hp7qptMW4EQxs8O6RVHPulOE= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.33.0/go.mod h1:RZL7ov7c72wSmoM8bIiVxRHgcVdzhNkVW2J36C8RF4s= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4 h1:CXV68E2dNqhuynZJPB80bhPQwAKqBWVer887figW6Jc= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4/go.mod h1:/xFi9KtvBXP97ppCz1TAEvU1Uf66qvid89rbem3wCzQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.18 h1:vvbXsA2TVO80/KT7ZqCbx934dt6PY+vQ8hZpUZ/cpYg= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.18/go.mod h1:m2JJHledjBGNMsLOF1g9gbAxprzq3KjC8e4lxtn+eWg= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.6 h1:rGtWqkQbPk7Bkwuv3NzpE/scwwL9sC1Ul3tn9x83DUI= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.6/go.mod h1:u4ku9OLv4TO4bCPdxf4fA1upaMaJmP9ZijGk3AAOC6Q= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.4 h1:OV/pxyXh+eMA0TExHEC4jyWdumLxNbzz1P0zJoezkJc= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.4/go.mod h1:8Mm5VGYwtm+r305FfPSuc+aFkrypeylGYhFim6XEPoc= -github.com/aws/aws-sdk-go-v2/service/sts v1.34.1 h1:aUrLQwJfZtwv3/ZNG2xRtEen+NqI3iesuacjP51Mv1s= -github.com/aws/aws-sdk-go-v2/service/sts v1.34.1/go.mod h1:3wFBZKoWnX3r+Sm7in79i54fBmNfwhdNdQuscCw7QIk= -github.com/aws/smithy-go v1.22.5 h1:P9ATCXPMb2mPjYBgueqJNCA5S9UfktsW0tTxi+a7eqw= -github.com/aws/smithy-go v1.22.5/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= -github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.9.1 h1:50sS0RWhGpW/yZx2KcDNEb1u1MANv5BMEkJgcieEDTA= -github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.9.1/go.mod h1:ErZOtbzuHabipRTDTor0inoRlYwbsV1ovwSxjGs/uJo= +github.com/aws/aws-sdk-go-v2 v1.40.0 h1:/WMUA0kjhZExjOQN2z3oLALDREea1A7TobfuiBrKlwc= +github.com/aws/aws-sdk-go-v2 v1.40.0/go.mod h1:c9pm7VwuW0UPxAEYGyTmyurVcNrbF6Rt/wixFqDhcjE= +github.com/aws/aws-sdk-go-v2/config v1.32.0 h1:T5WWJYnam9SzBLbsVYDu2HscLDe+GU1AUJtfcDAc/vA= +github.com/aws/aws-sdk-go-v2/config v1.32.0/go.mod h1:pSRm/+D3TxBixGMXlgtX4+MPO9VNtEEtiFmNpxksoxw= +github.com/aws/aws-sdk-go-v2/credentials v1.19.0 h1:7zm+ez+qEqLaNsCSRaistkvJRJv8sByDOVuCnyHbP7M= +github.com/aws/aws-sdk-go-v2/credentials v1.19.0/go.mod h1:pHKPblrT7hqFGkNLxqoS3FlGoPrQg4hMIa+4asZzBfs= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.14 h1:WZVR5DbDgxzA0BJeudId89Kmgy6DIU4ORpxwsVHz0qA= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.14/go.mod h1:Dadl9QO0kHgbrH1GRqGiZdYtW5w+IXXaBNCHTIaheM4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.14 h1:PZHqQACxYb8mYgms4RZbhZG0a7dPW06xOjmaH0EJC/I= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.14/go.mod h1:VymhrMJUWs69D8u0/lZ7jSB6WgaG/NqHi3gX0aYf6U0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14 h1:bOS19y6zlJwagBfHxs0ESzr1XCOU2KXJCWcq3E2vfjY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14/go.mod h1:1ipeGBMAxZ0xcTm6y6paC2C/J6f6OO7LBODV9afuAyM= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc= +github.com/aws/aws-sdk-go-v2/service/ecr v1.51.2 h1:aq2N/9UkbEyljIQ7OFcudEgUsJzO8MYucmfsM/k/dmc= +github.com/aws/aws-sdk-go-v2/service/ecr v1.51.2/go.mod h1:1NVD1KuMjH2GqnPwMotPndQaT/MreKkWpjkF12d6oKU= +github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.38.2 h1:9fe6w8bydUwNAhFVmjo+SRqAJjbBMOyILL/6hTTVkyA= +github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.38.2/go.mod h1:x7gU4CAyAz4BsM9hlRkhHiYw2GIr1QCmN45uwQw9l/E= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 h1:x2Ibm/Af8Fi+BH+Hsn9TXGdT+hKbDd5XOTZxTMxDk7o= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3/go.mod h1:IW1jwyrQgMdhisceG8fQLmQIydcT/jWY21rFhzgaKwo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14 h1:FIouAnCE46kyYqyhs0XEBDFFSREtdnr8HQuLPQPLCrY= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14/go.mod h1:UTwDc5COa5+guonQU8qBikJo1ZJ4ln2r1MkF7Dqag1E= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.1 h1:BDgIUYGEo5TkayOWv/oBLPphWwNm/A91AebUjAu5L5g= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.1/go.mod h1:iS6EPmNeqCsGo+xQmXv0jIMjyYtQfnwg36zl2FwEouk= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.4 h1:U//SlnkE1wOQiIImxzdY5PXat4Wq+8rlfVEw4Y7J8as= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.4/go.mod h1:av+ArJpoYf3pgyrj6tcehSFW+y9/QvAY8kMooR9bZCw= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.8 h1:MvlNs/f+9eM0mOjD9JzBUbf5jghyTk3p+O9yHMXX94Y= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.8/go.mod h1:/j67Z5XBVDx8nZVp9EuFM9/BS5dvBznbqILGuu73hug= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.1 h1:GdGmKtG+/Krag7VfyOXV17xjTCz0i9NT+JnqLTOI5nA= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.1/go.mod h1:6TxbXoDSgBQ225Qd8Q+MbxUxUh6TtNKwbRt/EPS9xso= +github.com/aws/smithy-go v1.23.2 h1:Crv0eatJUQhaManss33hS5r40CG3ZFH+21XSkqMrIUM= +github.com/aws/smithy-go v1.23.2/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= +github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.11.0 h1:GOPttfOAf5qAgx7r6b+zCWZrvCsfKffkL4H6mSYx1kA= +github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.11.0/go.mod h1:a2HN6+p7k0JLDO8514sMr0l4cnrR52z4sWoZ/Uc82ho= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -114,18 +114,20 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/buildpacks/imgutil v0.0.0-20250626173435-7c19c278f3d2 h1:31i47pC9YE898vRkFDlubgX9UwxSy8cX/YSXtfPcRLA= -github.com/buildpacks/imgutil v0.0.0-20250626173435-7c19c278f3d2/go.mod h1:UH4th60x/wM1DdH7+eSgzbp0kgsJMhVgngWzXoF21cs= -github.com/buildpacks/lifecycle v0.20.11 h1:lr8smVyW59HvkdJj7H3rYbfiNT7ndkV4cV2lQiOnCuo= -github.com/buildpacks/lifecycle v0.20.11/go.mod h1:+YlGlTCwJcyJSp5QvZKxH8k2JOpYzjTE9NYB6CA5CuE= -github.com/buildpacks/pack v0.38.2 h1:erS8Ymq9TFAOh05TcQjAqqnD7LbmHZKR10k/ncdy8CI= -github.com/buildpacks/pack v0.38.2/go.mod h1:MmoDsyW/AQ2y3TA9TUM9chj4hoH126TqsMFcmjCrA9M= +github.com/buildpacks/imgutil v0.0.0-20250909162057-9db16db815e3 h1:tm7oOjDEdtwfKL9ukn0cnCo7bgYNYCe0HFk9rbPAKNQ= +github.com/buildpacks/imgutil v0.0.0-20250909162057-9db16db815e3/go.mod h1:UH4th60x/wM1DdH7+eSgzbp0kgsJMhVgngWzXoF21cs= +github.com/buildpacks/lifecycle v0.20.19 h1:RyQe2QO524eiJNUpFNTdQKVgasPRP5Dl7zrqrFeJA6k= +github.com/buildpacks/lifecycle v0.20.19/go.mod h1:Sp2Gc7hPquJ0BivUJjn1FKMzdNNrIAFP0MjNlkwxNGc= +github.com/buildpacks/pack v0.39.0 h1:F7S1aW4oe8zY4zDJI1cvat4cKnX6A77I9GlU4Jp8iw0= +github.com/buildpacks/pack v0.39.0/go.mod h1:AKpFe3Nm2ij2XKkxdjbaOUmZBJveQuJkzGS9PFaroQo= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8= -github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chainguard-dev/kaniko v1.25.5 h1:JUM0B7eaVpgPBDIv/GdwKDGBGuMzc0gsUL9Jzcixkdg= +github.com/chainguard-dev/kaniko v1.25.5/go.mod h1:wZsVOPMpd5PIsVOpcTkAp/F6VBfzP1khMWRYCya/OJY= github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 h1:krfRl01rzPzxSxyLyrChD+U+MzsBXbm0OwYYB67uF+4= github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589/go.mod h1:OuDyvmLnMCwa2ep4Jkm6nyA0ocJuZlGyk2gGseVzERM= github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= @@ -166,8 +168,8 @@ github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBi github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= 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/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8= -github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo= +github.com/docker/docker-credential-helpers v0.9.4 h1:76ItO69/AP/V4yT9V4uuuItG0B1N8hvt0T0c0NN/DzI= +github.com/docker/docker-credential-helpers v0.9.4/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c= 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-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= @@ -204,12 +206,10 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= -github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/encoding v1.0.1 h1:YzKZckdBL6jVt2Gc+5p82qhrGiqMdG/eNs6Wy0u3Uhw= github.com/gdamore/encoding v1.0.1/go.mod h1:0Z0cMFinngz9kS1QfMjCP8TY7em3bZYeeklsSDPivEo= -github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= -github.com/gdamore/tcell/v2 v2.8.1 h1:KPNxyqclpWpWQlPLx6Xui1pMk8S+7+R37h3g07997NU= -github.com/gdamore/tcell/v2 v2.8.1/go.mod h1:bj8ori1BG3OYMjmb3IklZVWfZUJ1UBQt9JXrOCOhGWw= +github.com/gdamore/tcell/v2 v2.11.0 h1:ntVCx4v2M7ev2hMuAHad5ZRPymfpxb8VR3X3VRz+/YQ= +github.com/gdamore/tcell/v2 v2.11.0/go.mod h1:pytyB+bE6zrRVf6u/ZMWX9AZqSVcW4bpimuDiR5k2mU= github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= @@ -218,8 +218,8 @@ github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UN github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.16.2 h1:fT6ZIOjE5iEnkzKyxTHK1W4HGAsPhqEqiSAssSO77hM= -github.com/go-git/go-git/v5 v5.16.2/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= +github.com/go-git/go-git/v5 v5.16.3 h1:Z8BtvxZ09bYm/yYNgPKCzgWtaRqDTgIKRgIRHBfU6Z8= +github.com/go-git/go-git/v5 v5.16.3/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= github.com/go-jose/go-jose/v4 v4.1.2 h1:TK/7NqRQZfgAh+Td8AlsrvtPoUyiHh0LqVvokh+1vHI= github.com/go-jose/go-jose/v4 v4.1.2/go.mod h1:22cg9HWM1pOlnRiY+9cQYJ9XHmya1bYW8OeDM6Ku6Oo= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -273,7 +273,6 @@ github.com/google/cel-go v0.26.0/go.mod h1:A9O8OU9rdvrK5MQyrqfIxo1a0u4g3sF8KB6PU github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo= github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 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-containerregistry v0.20.7 h1:24VGNpS0IwrOZ2ms2P1QE3Xa5X9p4phx0aUgzYzHW6I= @@ -281,8 +280,8 @@ github.com/google/go-containerregistry v0.20.7/go.mod h1:Lx5LCZQjLH1QBaMPeGwsME9 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a h1://KbezygeMJZCSHH+HgUZiTeSoiuFspbMg1ge+eFj18= -github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= +github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6 h1:EEHtgt9IwisQ2AZ4pIsMjahcegHh6rmhqxzIRQIyepY= +github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6/go.mod h1:I6V7YzU0XDpsHqbsyrghnFZLO1gwK6NPTNvmetQIk9U= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -300,8 +299,8 @@ github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4z github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2/go.mod h1:wd1YpapPLivG6nQgbf7ZkG1hhSOXDhhn4MLTknx2aAc= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 h1:X5VWvz21y3gzm9Nw/kaUeku/1+uBhcekkmy4IkffJww= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -370,8 +369,8 @@ github.com/lestrrat-go/jwx v1.2.31/go.mod h1:eQJKoRwWcLg4PfD5CFA5gIZGxhPgoPYq9pZ github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag= +github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= @@ -382,7 +381,6 @@ github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -397,8 +395,8 @@ github.com/mitchellh/ioprogress v0.0.0-20180201004757-6a23b12fa88e h1:Qa6dnn8Dla github.com/mitchellh/ioprogress v0.0.0-20180201004757-6a23b12fa88e/go.mod h1:waEya8ee1Ro/lgxpVhkJI4BVASzkm3UZqkx/cFJiYHM= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/buildkit v0.23.2 h1:gt/dkfcpgTXKx+B9I310kV767hhVqTvEyxGgI3mqsGQ= -github.com/moby/buildkit v0.23.2/go.mod h1:iEjAfPQKIuO+8y6OcInInvzqTMiKMbb2RdJz1K/95a0= +github.com/moby/buildkit v0.26.1 h1:Cf/AB/8/5N+GBQnVPBW+hR2tDWoImuZ28ciqaF+mzgs= +github.com/moby/buildkit v0.26.1/go.mod h1:ylDa7IqzVJgLdi/wO7H1qLREFQpmhFbw2fbn4yoTw40= 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/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ= @@ -492,10 +490,9 @@ github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7D github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= github.com/prometheus/prometheus v0.305.0 h1:UO/LsM32/E9yBDtvQj8tN+WwhbyWKR10lO35vmFLx0U= github.com/prometheus/prometheus v0.305.0/go.mod h1:JG+jKIDUJ9Bn97anZiCjwCxRyAx+lpcEQ0QnZlUlbwY= -github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 h1:xe+mmCnDN82KhC010l3NfYlA8ZbOuzbXAzSYBa6wbMc= -github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk= +github.com/rivo/tview v0.42.0 h1:b/ftp+RxtDsHSaynXTbJb+/n/BxDEi+W3UfF5jILK6c= +github.com/rivo/tview v0.42.0/go.mod h1:cSfIYfhpSGCjp3r/ECJb+GKS7cGJnqV8vfjQPwoXyfY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -579,28 +576,28 @@ github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWSnwW9hGObjkIdmlnWSydO+Qs8OwzfzXLUPg4xOc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0 h1:bDMKF3RUSxshZ5OjOTi8rsHGaPKsAt76FaqgvIUySLc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0/go.mod h1:dDT67G/IkA46Mr2l9Uj7HsQVwsjASyV9SjGofsiUZDA= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4= go.opentelemetry.io/otel/exporters/prometheus v0.59.1 h1:HcpSkTkJbggT8bjYP+BjyqPWlD17BH9C5CYNKeDzmcA= go.opentelemetry.io/otel/exporters/prometheus v0.59.1/go.mod h1:0FJL+gjuUoM07xzik3KPBaN+nz/CoB15kV6WLMiXZag= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= -go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= -go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= @@ -625,10 +622,7 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/exp v0.0.0-20251017212417-90e834f514db h1:by6IehL4BH5k3e3SJmcoNbOobMey2SLpAF79iPOEBvw= @@ -637,9 +631,6 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -654,9 +645,6 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo= @@ -669,10 +657,6 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -686,7 +670,6 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w 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-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/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-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -696,25 +679,14 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -724,10 +696,7 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= @@ -738,8 +707,6 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -752,8 +719,8 @@ gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/genproto/googleapis/api v0.0.0-20251020155222-88f65dc88635 h1:1wvBeYv+A2zfEbxROscJl69OP0m74S8wGEO+Syat26o= google.golang.org/genproto/googleapis/api v0.0.0-20251020155222-88f65dc88635/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251020155222-88f65dc88635 h1:3uycTxukehWrxH4HtPRtn1PDABTU331ViDjyqrUbaog= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251020155222-88f65dc88635/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 h1:tRPGkdGHuewF4UisLzzHHr1spKw92qLM98nIzxbC0wY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= From f1aa4e7a19ac374c16b5dacaaedb5a5799f55a2c Mon Sep 17 00:00:00 2001 From: grego952 Date: Wed, 3 Dec 2025 10:36:58 +0100 Subject: [PATCH 15/18] Fix tests continues --- internal/modules/disable_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/modules/disable_test.go b/internal/modules/disable_test.go index 496e3da34..9c7a6a8a3 100644 --- a/internal/modules/disable_test.go +++ b/internal/modules/disable_test.go @@ -51,7 +51,7 @@ func TestDisableCore(t *testing.T) { err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Nil(t, err) require.Equal(t, []string{"keda"}, fakeKymaClient.DisabledModules) - require.Equal(t, "removing the Keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) + require.Equal(t, "removing the keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) t.Run("disable the module with Ignore policy for module with no CR", func(t *testing.T) { @@ -78,7 +78,7 @@ func TestDisableCore(t *testing.T) { err := disable(out.NewToWriter(buffer), context.Background(), &fakeKubeClient, "keda") require.Nil(t, err) require.Equal(t, []string{"keda"}, fakeKymaClient.DisabledModules) - require.Equal(t, "removing the Keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) + require.Equal(t, "removing the keda module from the target Kyma environment\nkeda module disabled\n", buffer.String()) }) t.Run("disable the module with Ignore policy for module", func(t *testing.T) { From 358325bb5f736430aab942d43fd41ad966bf829c Mon Sep 17 00:00:00 2001 From: Filip Strozik Date: Wed, 3 Dec 2025 09:19:06 +0100 Subject: [PATCH 16/18] Improve `module delete` example (#2764) --- docs/user/gen-docs/kyma_module_delete.md | 2 +- internal/cmd/module/delete.go | 2 +- internal/cmd/module/pull.go | 2 +- internal/modules/enable.go | 1 - internal/modules/enable_test.go | 3 --- 5 files changed, 3 insertions(+), 7 deletions(-) diff --git a/docs/user/gen-docs/kyma_module_delete.md b/docs/user/gen-docs/kyma_module_delete.md index 9166fa842..6b91b2409 100644 --- a/docs/user/gen-docs/kyma_module_delete.md +++ b/docs/user/gen-docs/kyma_module_delete.md @@ -18,7 +18,7 @@ kyma module delete [flags] ## Delete a community module and auto-approve the deletion # passed argument must be in the format / - # the module must be pulled from the catalog first using the 'kyma module pull' command + # the format of the passed argument can be read from the 'kyma module catalog' command from the 'origin' column kyma module delete my-namespace/my-community-module-1.0.0 --auto-approve ``` diff --git a/internal/cmd/module/delete.go b/internal/cmd/module/delete.go index 7d4175a88..13e216d80 100644 --- a/internal/cmd/module/delete.go +++ b/internal/cmd/module/delete.go @@ -38,7 +38,7 @@ func newDeleteCMD(kymaConfig *cmdcommon.KymaConfig) *cobra.Command { ## Delete a community module and auto-approve the deletion # passed argument must be in the format / - # the module must be pulled from the catalog first using the 'kyma module pull' command + # the format of the passed argument can be read from the 'kyma module catalog' command from the 'origin' column kyma module delete my-namespace/my-community-module-1.0.0 --auto-approve`, Aliases: []string{"del"}, diff --git a/internal/cmd/module/pull.go b/internal/cmd/module/pull.go index 7cbb006b2..fb56c38a7 100644 --- a/internal/cmd/module/pull.go +++ b/internal/cmd/module/pull.go @@ -104,6 +104,6 @@ func getWarningTextForCommunityModuleUsage(moduleTemplate *kyma.ModuleTemplate) "Next Steps:\n" + "To install this module on your cluster, you can use the sample command:\n" + " # Install with default configuration:\n" + - fmt.Sprintf(" kyma module add %s --origin %s/%s --default-cr\n\n", moduleTemplate.Spec.ModuleName, moduleTemplate.Namespace, moduleTemplate.Name) + + fmt.Sprintf(" kyma module add %s/%s --default-cr\n\n", moduleTemplate.Namespace, moduleTemplate.Name) + "For more information about module installation, run: kyma module add --help\n" } diff --git a/internal/modules/enable.go b/internal/modules/enable.go index 8ba77e05c..76efa0f64 100644 --- a/internal/modules/enable.go +++ b/internal/modules/enable.go @@ -26,7 +26,6 @@ func enable(printer *out.Printer, ctx context.Context, client kube.Client, repo "make sure you provide a valid module name and channel (or version)", "to list available modules, call the `kyma module catalog` command", "to pull available modules, call the `kyma module pull` command", - "to add a community module, use the `--origin` flag", } return clierror.Wrap(err, clierror.New("unknown module name or channel", hints...)) } diff --git a/internal/modules/enable_test.go b/internal/modules/enable_test.go index 6252fae15..2358bbf66 100644 --- a/internal/modules/enable_test.go +++ b/internal/modules/enable_test.go @@ -164,7 +164,6 @@ func TestEnable(t *testing.T) { "make sure you provide a valid module name and channel (or version)", "to list available modules, call the `kyma module catalog` command", "to pull available modules, call the `kyma module pull` command", - "to add a community module, use the `--origin` flag", } expectedCliErr := clierror.Wrap( @@ -194,7 +193,6 @@ func TestEnable(t *testing.T) { "make sure you provide a valid module name and channel (or version)", "to list available modules, call the `kyma module catalog` command", "to pull available modules, call the `kyma module pull` command", - "to add a community module, use the `--origin` flag", } expectedCliErr := clierror.Wrap( @@ -227,7 +225,6 @@ func TestEnable(t *testing.T) { "make sure you provide valid module name and channel (or version)", "list available modules by calling the `kyma module catalog` command", "pull available modules by calling the `kyma module pull` command", - "if you want to add a community module, use the `--origin` flag", } expectedCliErr := clierror.Wrap( From 5d2192e53abb06ec891323a79e46948915eb1780 Mon Sep 17 00:00:00 2001 From: Marcin Dobrochowski <39153236+anoipm@users.noreply.github.com> Date: Wed, 3 Dec 2025 09:32:59 +0100 Subject: [PATCH 17/18] add filtering istio messages by level (#2756) --- .../gen-docs/kyma_alpha_diagnose_istio.md | 4 ++ internal/cmd/alpha/diagnose/istio.go | 24 +++++++++ internal/cmdcommon/types/format.go | 4 +- internal/cmdcommon/types/istiolevel.go | 52 +++++++++++++++++++ 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 internal/cmdcommon/types/istiolevel.go diff --git a/docs/user/gen-docs/kyma_alpha_diagnose_istio.md b/docs/user/gen-docs/kyma_alpha_diagnose_istio.md index 62c96873f..eef00cfbb 100644 --- a/docs/user/gen-docs/kyma_alpha_diagnose_istio.md +++ b/docs/user/gen-docs/kyma_alpha_diagnose_istio.md @@ -21,6 +21,9 @@ kyma alpha diagnose istio [flags] # Analyze Istio configuration in a specific namespace kyma alpha diagnose istio --namespace my-namespace + # Print only warnings and errors + kyma alpha diagnose istio --level warning + # Output as JSON to a file kyma alpha diagnose istio --format json --output istio-diagnostics.json ``` @@ -30,6 +33,7 @@ kyma alpha diagnose istio [flags] ```text -A, --all-namespaces Analyzes all namespaces -f, --format string Output format (possible values: json, yaml) + --level string Output message level (possible values: info, warning, error) -n, --namespace string The namespace that the workload instances belongs to -o, --output string Path to the diagnostic output file. If not provided the output is printed to stdout --timeout duration Timeout for diagnosis (default "30s") diff --git a/internal/cmd/alpha/diagnose/istio.go b/internal/cmd/alpha/diagnose/istio.go index 6ca8c2d0b..2fbdae998 100644 --- a/internal/cmd/alpha/diagnose/istio.go +++ b/internal/cmd/alpha/diagnose/istio.go @@ -4,6 +4,8 @@ import ( "context" "fmt" "os" + "regexp" + "strings" "time" "github.com/kyma-project/cli.v3/internal/clierror" @@ -14,6 +16,7 @@ import ( "github.com/kyma-project/cli.v3/internal/out" "github.com/spf13/cobra" istioformatting "istio.io/istio/istioctl/pkg/util/formatting" + istioanalysisdiag "istio.io/istio/pkg/config/analysis/diag" istioresource "istio.io/istio/pkg/config/resource" istiolog "istio.io/istio/pkg/log" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -28,6 +31,7 @@ type diagnoseIstioConfig struct { namespace string allNamespaces bool outputFormat types.Format + outputLevel types.IstioLevel outputPath string verbose bool timeout time.Duration @@ -49,6 +53,9 @@ func NewDiagnoseIstioCMD(kymaConfig *cmdcommon.KymaConfig) *cobra.Command { # Analyze Istio configuration in a specific namespace kyma alpha diagnose istio --namespace my-namespace + # Print only warnings and errors + kyma alpha diagnose istio --level warning + # Output as JSON to a file kyma alpha diagnose istio --format json --output istio-diagnostics.json`, @@ -66,6 +73,7 @@ func NewDiagnoseIstioCMD(kymaConfig *cmdcommon.KymaConfig) *cobra.Command { cmd.Flags().BoolVarP(&cfg.allNamespaces, "all-namespaces", "A", false, "Analyzes all namespaces") cmd.Flags().StringVarP(&cfg.namespace, "namespace", "n", "", "The namespace that the workload instances belongs to") cmd.Flags().VarP(&cfg.outputFormat, "format", "f", "Output format (possible values: json, yaml)") + cmd.Flags().Var(&cfg.outputLevel, "level", "Output message level (possible values: info, warning, error)") cmd.Flags().StringVarP(&cfg.outputPath, "output", "o", "", "Path to the diagnostic output file. If not provided the output is printed to stdout") cmd.Flags().BoolVar(&cfg.verbose, "verbose", false, "Displays verbose output, including error details during diagnostics collection") cmd.Flags().DurationVar(&cfg.timeout, "timeout", 30*time.Second, "Timeout for diagnosis") @@ -95,6 +103,8 @@ func diagnoseIstio(cfg *diagnoseIstioConfig) clierror.Error { return err } + diagnosticData.Messages = filterDataByLevel(diagnosticData.Messages, cfg.outputLevel.ToInternalIstioLevel()) + err = printIstioOutput(diagnosticData, cfg.outputFormat, cfg.outputPath) if err != nil { return err @@ -102,6 +112,16 @@ func diagnoseIstio(cfg *diagnoseIstioConfig) clierror.Error { return nil } +func filterDataByLevel(messages istioanalysisdiag.Messages, minLevel istioanalysisdiag.Level) istioanalysisdiag.Messages { + var filtered []istioanalysisdiag.Message + for _, msg := range messages { + if msg.Type.Level().IsWorseThanOrEqualTo(minLevel) { + filtered = append(filtered, msg) + } + } + return filtered +} + func calculateNamespace(allNamespaces bool, namespace string) string { if allNamespaces { return metav1.NamespaceAll @@ -190,6 +210,10 @@ func printIstioOutput(analysisResult *istioanalysislocal.AnalysisResult, format if err != nil { return clierror.Wrap(err, clierror.New("failed to format output")) } + re := regexp.MustCompile(`(?m)^\t+`) + output = re.ReplaceAllStringFunc(output, func(match string) string { + return strings.Repeat(" ", len(match)) + }) printer.Msgfln(output) return nil } diff --git a/internal/cmdcommon/types/format.go b/internal/cmdcommon/types/format.go index 945477b18..1191acef3 100644 --- a/internal/cmdcommon/types/format.go +++ b/internal/cmdcommon/types/format.go @@ -38,13 +38,13 @@ func (f *Format) String() string { func (f *Format) Set(v string) error { for _, format := range availableFormats { - if *f == format { + if v == format.String() { *f = Format(v) return nil } } - return errors.New(fmt.Sprintf("invalid output format '%s'", *f)) + return errors.New(fmt.Sprintf("invalid output format '%s'", v)) } func (f *Format) Type() string { diff --git a/internal/cmdcommon/types/istiolevel.go b/internal/cmdcommon/types/istiolevel.go new file mode 100644 index 000000000..ba1bad250 --- /dev/null +++ b/internal/cmdcommon/types/istiolevel.go @@ -0,0 +1,52 @@ +package types + +import ( + "fmt" + "strings" + + "github.com/pkg/errors" + istioanalysisdiag "istio.io/istio/pkg/config/analysis/diag" +) + +const ( + InfoIstioLevel IstioLevel = "info" + WarningIstioLevel IstioLevel = "warning" + ErrorIstioLevel IstioLevel = "error" +) + +var ( + availableIstioLevels = []IstioLevel{ + InfoIstioLevel, + WarningIstioLevel, + ErrorIstioLevel, + } +) + +type IstioLevel string + +func (f *IstioLevel) String() string { + return string(*f) +} + +func (f *IstioLevel) Set(v string) error { + for _, format := range availableIstioLevels { + if v == format.String() { + *f = IstioLevel(v) + return nil + } + } + + return errors.New(fmt.Sprintf("invalid istio level '%s'", v)) +} + +func (f *IstioLevel) Type() string { + return "string" +} + +func (f *IstioLevel) ToInternalIstioLevel() istioanalysisdiag.Level { + levelName := f.String() + if levelName == "" { + return istioanalysisdiag.Info + } + return istioanalysisdiag.GetUppercaseStringToLevelMap()[strings.ToUpper(levelName)] +} From fe8a9ba575150053498e8317a6b94459413e773c Mon Sep 17 00:00:00 2001 From: grego952 Date: Wed, 3 Dec 2025 11:15:37 +0100 Subject: [PATCH 18/18] Fix hints --- internal/modules/enable_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/modules/enable_test.go b/internal/modules/enable_test.go index ed97726cc..cacbba781 100644 --- a/internal/modules/enable_test.go +++ b/internal/modules/enable_test.go @@ -190,9 +190,9 @@ func TestEnable(t *testing.T) { repo := &modulesfake.ModuleTemplatesRepo{} hints := []string{ - "make sure you provide valid module name and channel (or version)", - "list available modules by calling the `kyma module catalog` command", - "pull available modules by calling the `kyma module pull` command", + "make sure you provide a valid module name and channel (or version)", + "to list available modules, call the `kyma module catalog` command", + "to pull available modules, call the `kyma module pull` command", } expectedCliErr := clierror.Wrap( @@ -222,9 +222,9 @@ func TestEnable(t *testing.T) { repo := &modulesfake.ModuleTemplatesRepo{} hints := []string{ - "make sure you provide valid module name and channel (or version)", - "list available modules by calling the `kyma module catalog` command", - "pull available modules by calling the `kyma module pull` command", + "make sure you provide a valid module name and channel (or version)", + "to list available modules, call the `kyma module catalog` command", + "to pull available modules, call the `kyma module pull` command", } expectedCliErr := clierror.Wrap(