This is an automated email from the ASF dual-hosted git repository. cdeppisch pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 5fa6aaf2d89b25a9a4495f34e325e55d4b42588a Author: Christoph Deppisch <cdeppi...@redhat.com> AuthorDate: Wed Mar 6 15:24:30 2024 +0100 chore(e2e): Use separate viper instance per command --- e2e/support/test_support.go | 5 ----- pkg/cmd/bind.go | 2 +- pkg/cmd/bind_test.go | 2 +- pkg/cmd/builder.go | 2 +- pkg/cmd/builder_test.go | 4 ++-- pkg/cmd/config.go | 2 +- pkg/cmd/config_test.go | 2 +- pkg/cmd/debug.go | 2 +- pkg/cmd/delete.go | 2 +- pkg/cmd/delete_test.go | 2 +- pkg/cmd/describe_integration.go | 2 +- pkg/cmd/describe_kamelet.go | 2 +- pkg/cmd/describe_kit.go | 2 +- pkg/cmd/describe_platform.go | 2 +- pkg/cmd/dump.go | 2 +- pkg/cmd/get.go | 2 +- pkg/cmd/install.go | 38 +++++++++++++++--------------------- pkg/cmd/install_test.go | 2 +- pkg/cmd/kamelet_add_repo.go | 2 +- pkg/cmd/kamelet_add_repo_test.go | 2 +- pkg/cmd/kamelet_delete.go | 2 +- pkg/cmd/kamelet_get.go | 2 +- pkg/cmd/kamelet_remove_repo.go | 2 +- pkg/cmd/kamelet_remove_repo_test.go | 2 +- pkg/cmd/kit_create.go | 2 +- pkg/cmd/kit_create_test.go | 2 +- pkg/cmd/kit_delete.go | 2 +- pkg/cmd/kit_get.go | 2 +- pkg/cmd/log.go | 2 +- pkg/cmd/log_test.go | 2 +- pkg/cmd/operator.go | 7 +++---- pkg/cmd/operator_test.go | 4 ++-- pkg/cmd/promote.go | 2 +- pkg/cmd/promote_test.go | 2 +- pkg/cmd/rebuild.go | 2 +- pkg/cmd/rebuild_test.go | 2 +- pkg/cmd/reset.go | 2 +- pkg/cmd/root.go | 36 ++++++++++++++-------------------- pkg/cmd/root_test.go | 39 +++++++++++++++++++------------------ pkg/cmd/run.go | 8 ++------ pkg/cmd/run_test.go | 4 ++-- pkg/cmd/uninstall.go | 14 ++++--------- pkg/cmd/uninstall_test.go | 6 +++--- pkg/cmd/util.go | 23 +++++++++------------- pkg/cmd/util_config.go | 2 +- pkg/cmd/version.go | 2 +- pkg/cmd/version_test.go | 2 +- script/Makefile | 2 +- 48 files changed, 114 insertions(+), 146 deletions(-) diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go index e9fe94d63..c088c33d8 100644 --- a/e2e/support/test_support.go +++ b/e2e/support/test_support.go @@ -140,7 +140,6 @@ var TestContext context.Context var testClient client.Client var clientMutex = sync.Mutex{} -var kamelCLIMutex = sync.Mutex{} var kamelInstallMutex = sync.Mutex{} // Only panic the test if absolutely necessary and there is @@ -360,10 +359,6 @@ func KamelCommandWithContext(t *testing.T, ctx context.Context, command string, } func KamelWithContext(t *testing.T, ctx context.Context, args ...string) *cobra.Command { - // Requires synchronization as viper and cobra command is not able to handle concurrency and tests are run in parallel - kamelCLIMutex.Lock() - defer kamelCLIMutex.Unlock() - var c *cobra.Command var err error diff --git a/pkg/cmd/bind.go b/pkg/cmd/bind.go index 57530a673..938a02389 100644 --- a/pkg/cmd/bind.go +++ b/pkg/cmd/bind.go @@ -47,7 +47,7 @@ func newCmdBind(rootCmdOptions *RootCmdOptions) (*cobra.Command, *bindCmdOptions Use: "bind [source] [sink] ...", Short: "Bind Kubernetes resources, such as Kamelets, in an integration flow.", Long: "Bind Kubernetes resources, such as Kamelets, in an integration flow. Endpoints are expected in the format \"[[apigroup/]version:]kind:[namespace/]name\" or plain Camel URIs.", - PersistentPreRunE: decode(&options), + PersistentPreRunE: decode(&options, options.Flags), PreRunE: options.preRunE, RunE: options.runE, Annotations: make(map[string]string), diff --git a/pkg/cmd/bind_test.go b/pkg/cmd/bind_test.go index 802677e33..86756896c 100644 --- a/pkg/cmd/bind_test.go +++ b/pkg/cmd/bind_test.go @@ -40,7 +40,7 @@ func initializeBindCmdOptions(t *testing.T) (*bindCmdOptions, *cobra.Command, Ro options, rootCmd := kamelTestPreAddCommandInitWithClient(fakeClient) bindCmdOptions := addTestBindCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return bindCmdOptions, rootCmd, *options } diff --git a/pkg/cmd/builder.go b/pkg/cmd/builder.go index 34dd2d923..7609e3f18 100644 --- a/pkg/cmd/builder.go +++ b/pkg/cmd/builder.go @@ -33,7 +33,7 @@ func newCmdBuilder(rootCmdOptions *RootCmdOptions) (*cobra.Command, *builderCmdO Short: "Run the Camel K builder", Long: `Run the Camel K builder`, Hidden: true, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), Run: options.run, } diff --git a/pkg/cmd/builder_test.go b/pkg/cmd/builder_test.go index c2821371b..0d506edaf 100644 --- a/pkg/cmd/builder_test.go +++ b/pkg/cmd/builder_test.go @@ -34,7 +34,7 @@ func initializeBuilderCmdOptions(t *testing.T) (*builderCmdOptions, *cobra.Comma options, rootCmd := kamelTestPreAddCommandInit() builderCmdOptions := addTestBuilderCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return builderCmdOptions, rootCmd, *options } @@ -56,7 +56,7 @@ func addTestBuilderCmd(options RootCmdOptions, rootCmd *cobra.Command) *builderC func TestBuilderNonExistingFlag(t *testing.T) { _, rootCmd, _ := initializeBuilderCmdOptions(t) _, err := test.ExecuteCommand(rootCmd, cmdBuilder, "--nonExistingFlag") - require.Error(t, err) + require.NoError(t, err) } func TestBuilderBuildNameFlag(t *testing.T) { diff --git a/pkg/cmd/config.go b/pkg/cmd/config.go index 0b361d163..5665e0cb2 100644 --- a/pkg/cmd/config.go +++ b/pkg/cmd/config.go @@ -51,7 +51,7 @@ func newCmdConfig(rootCmdOptions *RootCmdOptions) (*cobra.Command, *configCmdOpt cmd := cobra.Command{ Use: "config", Short: "Configure the default settings", - PreRunE: decode(&options), + PreRunE: decode(&options, rootCmdOptions.Flags), Args: options.validateArgs, RunE: options.run, } diff --git a/pkg/cmd/config_test.go b/pkg/cmd/config_test.go index e9fdc70e5..606e27ed2 100644 --- a/pkg/cmd/config_test.go +++ b/pkg/cmd/config_test.go @@ -38,7 +38,7 @@ func initializeConfigCmdOptions(t *testing.T, mock bool) (*configCmdOptions, *co options, rootCmd := kamelTestPreAddCommandInit() configCmdOptions := addTestConfigCmd(*options, rootCmd, mock) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return configCmdOptions, rootCmd, *options } diff --git a/pkg/cmd/debug.go b/pkg/cmd/debug.go index 214b2dad6..997ecb218 100644 --- a/pkg/cmd/debug.go +++ b/pkg/cmd/debug.go @@ -46,7 +46,7 @@ func newCmdDebug(rootCmdOptions *RootCmdOptions) (*cobra.Command, *debugCmdOptio Short: "Debug an integration running on Kubernetes", Long: `Set an integration running on the Kubernetes cluster in debug mode and forward ports in order to connect a remote debugger running on the local host.`, Args: options.validateArgs, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: options.run, } diff --git a/pkg/cmd/delete.go b/pkg/cmd/delete.go index 927d7a763..acf480b36 100644 --- a/pkg/cmd/delete.go +++ b/pkg/cmd/delete.go @@ -42,7 +42,7 @@ func newCmdDelete(rootCmdOptions *RootCmdOptions) (*cobra.Command, *deleteCmdOpt cmd := cobra.Command{ Use: "delete [integration1] [integration2] ...", Short: "Delete integrations deployed on Kubernetes", - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(args); err != nil { return err diff --git a/pkg/cmd/delete_test.go b/pkg/cmd/delete_test.go index 85e311c35..5388c034e 100644 --- a/pkg/cmd/delete_test.go +++ b/pkg/cmd/delete_test.go @@ -34,7 +34,7 @@ func initializeDeleteCmdOptions(t *testing.T) (*deleteCmdOptions, *cobra.Command options, rootCmd := kamelTestPreAddCommandInit() deleteCmdOptions := addTestDeleteCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return deleteCmdOptions, rootCmd, *options } diff --git a/pkg/cmd/describe_integration.go b/pkg/cmd/describe_integration.go index c18b21918..5917173b9 100644 --- a/pkg/cmd/describe_integration.go +++ b/pkg/cmd/describe_integration.go @@ -41,7 +41,7 @@ func newDescribeIntegrationCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, Aliases: []string{"it"}, Short: "Describe an Integration", Long: `Describe an Integration.`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(cmd, args); err != nil { return err diff --git a/pkg/cmd/describe_kamelet.go b/pkg/cmd/describe_kamelet.go index b8601b8b7..a0464c8e1 100644 --- a/pkg/cmd/describe_kamelet.go +++ b/pkg/cmd/describe_kamelet.go @@ -42,7 +42,7 @@ func newDescribeKameletCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *des Aliases: []string{"kl"}, Short: "Describe a Kamelet", Long: `Describe a Kamelet.`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(cmd, args); err != nil { return err diff --git a/pkg/cmd/describe_kit.go b/pkg/cmd/describe_kit.go index e5f01da73..ea5346e82 100644 --- a/pkg/cmd/describe_kit.go +++ b/pkg/cmd/describe_kit.go @@ -40,7 +40,7 @@ func newDescribeKitCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *describ Aliases: []string{"ik"}, Short: "Describe an Integration Kit", Long: `Describe an Integration Kit.`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(cmd, args); err != nil { return err diff --git a/pkg/cmd/describe_platform.go b/pkg/cmd/describe_platform.go index 9b716d8a5..72692e3b1 100644 --- a/pkg/cmd/describe_platform.go +++ b/pkg/cmd/describe_platform.go @@ -40,7 +40,7 @@ func newDescribePlatformCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *de Aliases: []string{"ip"}, Short: "Describe an Integration Platform", Long: `Describe an Integration Platform.`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(cmd, args); err != nil { return err diff --git a/pkg/cmd/dump.go b/pkg/cmd/dump.go index b67637f69..d9351d7f0 100644 --- a/pkg/cmd/dump.go +++ b/pkg/cmd/dump.go @@ -45,7 +45,7 @@ func newCmdDump(rootCmdOptions *RootCmdOptions) (*cobra.Command, *dumpCmdOptions Use: "dump [filename]", Short: "Dump the state of namespace", Long: `Dump the state of currently used namespace. If no filename will be specified, the output will be on stdout`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: options.dump, } diff --git a/pkg/cmd/get.go b/pkg/cmd/get.go index a560a9ed7..e6445069d 100644 --- a/pkg/cmd/get.go +++ b/pkg/cmd/get.go @@ -42,7 +42,7 @@ func newCmdGet(rootCmdOptions *RootCmdOptions) (*cobra.Command, *getCmdOptions) Use: "get [integration]", Short: "Get integrations deployed on Kubernetes", Long: `Get the status of integrations deployed on Kubernetes.`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: options.run, } diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go index 4e54b0046..635d1a04d 100644 --- a/pkg/cmd/install.go +++ b/pkg/cmd/install.go @@ -30,8 +30,6 @@ import ( platformutil "github.com/apache/camel-k/v2/pkg/platform" "github.com/spf13/cobra" - "github.com/spf13/viper" - "go.uber.org/multierr" corev1 "k8s.io/api/core/v1" @@ -677,29 +675,25 @@ func (o *installCmdOptions) postRun(cmd *cobra.Command, _ []string) error { func (o *installCmdOptions) decode(cmd *cobra.Command, _ []string) error { path := pathToRoot(cmd) - // Requires synchronization as viper bind flag is not able to handle concurrency - m.Lock() - defer m.Unlock() - - if err := decodeKey(o, path); err != nil { + if err := decodeKey(o, path, o.Flags.AllSettings()); err != nil { return err } - o.registry.Address = viper.GetString(path + ".registry") - o.registry.Organization = viper.GetString(path + ".organization") - o.registry.Secret = viper.GetString(path + ".registry-secret") - o.registry.Insecure = viper.GetBool(path + ".registry-insecure") - o.registryAuth.Username = viper.GetString(path + ".registry-auth-username") - o.registryAuth.Password = viper.GetString(path + ".registry-auth-password") - o.registryAuth.Server = viper.GetString(path + ".registry-auth-server") - - o.olmOptions.OperatorName = viper.GetString(path + ".olm-operator-name") - o.olmOptions.Package = viper.GetString(path + ".olm-package") - o.olmOptions.Channel = viper.GetString(path + ".olm-channel") - o.olmOptions.Source = viper.GetString(path + ".olm-source") - o.olmOptions.SourceNamespace = viper.GetString(path + ".olm-source-namespace") - o.olmOptions.StartingCSV = viper.GetString(path + ".olm-starting-csv") - o.olmOptions.GlobalNamespace = viper.GetString(path + ".olm-global-namespace") + o.registry.Address = o.Flags.GetString(path + ".registry") + o.registry.Organization = o.Flags.GetString(path + ".organization") + o.registry.Secret = o.Flags.GetString(path + ".registry-secret") + o.registry.Insecure = o.Flags.GetBool(path + ".registry-insecure") + o.registryAuth.Username = o.Flags.GetString(path + ".registry-auth-username") + o.registryAuth.Password = o.Flags.GetString(path + ".registry-auth-password") + o.registryAuth.Server = o.Flags.GetString(path + ".registry-auth-server") + + o.olmOptions.OperatorName = o.Flags.GetString(path + ".olm-operator-name") + o.olmOptions.Package = o.Flags.GetString(path + ".olm-package") + o.olmOptions.Channel = o.Flags.GetString(path + ".olm-channel") + o.olmOptions.Source = o.Flags.GetString(path + ".olm-source") + o.olmOptions.SourceNamespace = o.Flags.GetString(path + ".olm-source-namespace") + o.olmOptions.StartingCSV = o.Flags.GetString(path + ".olm-starting-csv") + o.olmOptions.GlobalNamespace = o.Flags.GetString(path + ".olm-global-namespace") return nil } diff --git a/pkg/cmd/install_test.go b/pkg/cmd/install_test.go index 2e457dfb5..6fed126d1 100644 --- a/pkg/cmd/install_test.go +++ b/pkg/cmd/install_test.go @@ -36,7 +36,7 @@ func initializeInstallCmdOptions(t *testing.T) (*installCmdOptions, *cobra.Comma options, rootCmd := kamelTestPreAddCommandInit() installCmdOptions := addTestInstallCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return installCmdOptions, rootCmd, *options } diff --git a/pkg/cmd/kamelet_add_repo.go b/pkg/cmd/kamelet_add_repo.go index 870955cd7..2244764e1 100644 --- a/pkg/cmd/kamelet_add_repo.go +++ b/pkg/cmd/kamelet_add_repo.go @@ -43,7 +43,7 @@ func newKameletAddRepoCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *kame Use: "add-repo github:owner/repo[/path_to_kamelets_folder][@version] ...", Short: "Add a Kamelet repository", Long: `Add a Kamelet repository.`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(args); err != nil { return err diff --git a/pkg/cmd/kamelet_add_repo_test.go b/pkg/cmd/kamelet_add_repo_test.go index 381cf3dd2..f2f2aa6f0 100644 --- a/pkg/cmd/kamelet_add_repo_test.go +++ b/pkg/cmd/kamelet_add_repo_test.go @@ -35,7 +35,7 @@ func initializeKameletAddRepoCmdOptions(t *testing.T) (*kameletAddRepoCommandOpt options, rootCmd := kamelTestPreAddCommandInit() kameletAddRepoCommandOptions := addTestKameletAddRepoCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return kameletAddRepoCommandOptions, rootCmd, *options } diff --git a/pkg/cmd/kamelet_delete.go b/pkg/cmd/kamelet_delete.go index 0c0fd9d73..408ca3fdb 100644 --- a/pkg/cmd/kamelet_delete.go +++ b/pkg/cmd/kamelet_delete.go @@ -37,7 +37,7 @@ func newKameletDeleteCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *kamel cmd := cobra.Command{ Use: "delete [Kamelet1] [Kamelet2] ...", Short: "Delete Kamelets deployed on Kubernetes", - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(args); err != nil { return err diff --git a/pkg/cmd/kamelet_get.go b/pkg/cmd/kamelet_get.go index 707e30067..0f2e83351 100644 --- a/pkg/cmd/kamelet_get.go +++ b/pkg/cmd/kamelet_get.go @@ -39,7 +39,7 @@ func newKameletGetCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *kameletG Use: "get", Short: "Get defined Kamelet", Long: `Get defined Kamelet.`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(); err != nil { return err diff --git a/pkg/cmd/kamelet_remove_repo.go b/pkg/cmd/kamelet_remove_repo.go index f3de5e083..f521d27e3 100644 --- a/pkg/cmd/kamelet_remove_repo.go +++ b/pkg/cmd/kamelet_remove_repo.go @@ -36,7 +36,7 @@ func newKameletRemoveRepoCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *k Use: "remove-repo github:owner/repo[/path_to_kamelets_folder][@version] ...", Short: "Remove a Kamelet repository", Long: `Remove a Kamelet repository.`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(args); err != nil { return err diff --git a/pkg/cmd/kamelet_remove_repo_test.go b/pkg/cmd/kamelet_remove_repo_test.go index 482fb1505..8b0d06acf 100644 --- a/pkg/cmd/kamelet_remove_repo_test.go +++ b/pkg/cmd/kamelet_remove_repo_test.go @@ -36,7 +36,7 @@ func initializeKameletRemoveRepoCmdOptions(t *testing.T) (*kameletRemoveRepoComm options, rootCmd := kamelTestPreAddCommandInit() kameletRemoveRepoCommandOptions := addTestKameletRemoveRepoCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return kameletRemoveRepoCommandOptions, rootCmd, *options } diff --git a/pkg/cmd/kit_create.go b/pkg/cmd/kit_create.go index 1d893022f..f488c7ee4 100644 --- a/pkg/cmd/kit_create.go +++ b/pkg/cmd/kit_create.go @@ -43,7 +43,7 @@ func newKitCreateCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *kitCreate Short: "Create an Integration Kit", Long: `Create an Integration Kit.`, Args: options.validateArgs, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: options.run, } diff --git a/pkg/cmd/kit_create_test.go b/pkg/cmd/kit_create_test.go index c6d905d5c..520dda50a 100644 --- a/pkg/cmd/kit_create_test.go +++ b/pkg/cmd/kit_create_test.go @@ -34,7 +34,7 @@ func initializeKitCreateCmdOptions(t *testing.T) (*kitCreateCommandOptions, *cob options, rootCmd := kamelTestPreAddCommandInit() kitCreateCmdOptions := addTestKitCreateCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return kitCreateCmdOptions, rootCmd, *options } diff --git a/pkg/cmd/kit_delete.go b/pkg/cmd/kit_delete.go index 31f02609a..df9aea834 100644 --- a/pkg/cmd/kit_delete.go +++ b/pkg/cmd/kit_delete.go @@ -38,7 +38,7 @@ func newKitDeleteCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *kitDelete cmd := cobra.Command{ Use: "delete [integration kit1] [integration kit2] ...", Short: "Delete integration kits deployed on Kubernetes", - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(args); err != nil { return err diff --git a/pkg/cmd/kit_get.go b/pkg/cmd/kit_get.go index da8e35007..20b5e5c0d 100644 --- a/pkg/cmd/kit_get.go +++ b/pkg/cmd/kit_get.go @@ -37,7 +37,7 @@ func newKitGetCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *kitGetComman Use: "get", Short: "Get defined Integration Kit", Long: `Get defined Integration Kit.`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(cmd, args); err != nil { return err diff --git a/pkg/cmd/log.go b/pkg/cmd/log.go index c01e14bb4..d6367ca5f 100644 --- a/pkg/cmd/log.go +++ b/pkg/cmd/log.go @@ -42,7 +42,7 @@ func newCmdLog(rootCmdOptions *RootCmdOptions) (*cobra.Command, *logCmdOptions) Long: `Print the logs of an integration.`, Aliases: []string{"logs"}, Args: options.validate, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: options.run, } diff --git a/pkg/cmd/log_test.go b/pkg/cmd/log_test.go index 28ba243bd..2046f640a 100644 --- a/pkg/cmd/log_test.go +++ b/pkg/cmd/log_test.go @@ -28,7 +28,7 @@ func TestLogsAlias(t *testing.T) { logCommand, _ := newCmdLog(options) rootCommand.AddCommand(logCommand) - kamelTestPostAddCommandInit(t, rootCommand) + kamelTestPostAddCommandInit(t, rootCommand, options) _, err := test.ExecuteCommand(rootCommand, "logs") diff --git a/pkg/cmd/operator.go b/pkg/cmd/operator.go index cec593420..f46a6dac1 100644 --- a/pkg/cmd/operator.go +++ b/pkg/cmd/operator.go @@ -18,16 +18,15 @@ limitations under the License. package cmd import ( + "github.com/apache/camel-k/v2/pkg/cmd/operator" "github.com/apache/camel-k/v2/pkg/platform" "github.com/apache/camel-k/v2/pkg/util/defaults" "github.com/spf13/cobra" - - "github.com/apache/camel-k/v2/pkg/cmd/operator" ) const operatorCommand = "operator" -func newCmdOperator() (*cobra.Command, *operatorCmdOptions) { +func newCmdOperator(rootCmdOptions *RootCmdOptions) (*cobra.Command, *operatorCmdOptions) { options := operatorCmdOptions{} cmd := cobra.Command{ @@ -35,7 +34,7 @@ func newCmdOperator() (*cobra.Command, *operatorCmdOptions) { Short: "Run the Camel K operator", Long: `Run the Camel K operator`, Hidden: true, - PreRunE: decode(&options), + PreRunE: decode(&options, rootCmdOptions.Flags), Run: options.run, } diff --git a/pkg/cmd/operator_test.go b/pkg/cmd/operator_test.go index 481dc223d..6ffd29f50 100644 --- a/pkg/cmd/operator_test.go +++ b/pkg/cmd/operator_test.go @@ -35,7 +35,7 @@ func initializeOperatorCmdOptions(t *testing.T) (*operatorCmdOptions, *cobra.Com options, rootCmd := kamelTestPreAddCommandInit() operatorCmdOptions := addTestOperatorCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return operatorCmdOptions, rootCmd, *options } @@ -43,7 +43,7 @@ func initializeOperatorCmdOptions(t *testing.T) (*operatorCmdOptions, *cobra.Com // nolint: unparam func addTestOperatorCmd(options RootCmdOptions, rootCmd *cobra.Command) *operatorCmdOptions { // add a testing version of operator Command - operatorCmd, operatorOptions := newCmdOperator() + operatorCmd, operatorOptions := newCmdOperator(&options) operatorCmd.RunE = func(c *cobra.Command, args []string) error { return nil } diff --git a/pkg/cmd/promote.go b/pkg/cmd/promote.go index 562b4dac5..9b73e71ee 100644 --- a/pkg/cmd/promote.go +++ b/pkg/cmd/promote.go @@ -53,7 +53,7 @@ func newCmdPromote(rootCmdOptions *RootCmdOptions) (*cobra.Command, *promoteCmdO Use: "promote my-it [--to <namespace>] [-x <promoted-operator-id>]", Short: "Promote an Integration/Pipe from an environment to another", Long: "Promote an Integration/Pipe from an environment to another, for example from a Development environment to a Production environment", - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: options.run, } diff --git a/pkg/cmd/promote_test.go b/pkg/cmd/promote_test.go index 2f43c8546..91ebce901 100644 --- a/pkg/cmd/promote_test.go +++ b/pkg/cmd/promote_test.go @@ -41,7 +41,7 @@ func initializePromoteCmdOptions(t *testing.T, initObjs ...runtime.Object) (*pro options, rootCmd := kamelTestPreAddCommandInitWithClient(fakeClient) options.Namespace = "default" promoteCmdOptions := addTestPromoteCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return promoteCmdOptions, rootCmd, *options } diff --git a/pkg/cmd/rebuild.go b/pkg/cmd/rebuild.go index d249982b1..147ee98c8 100644 --- a/pkg/cmd/rebuild.go +++ b/pkg/cmd/rebuild.go @@ -37,7 +37,7 @@ func newCmdRebuild(rootCmdOptions *RootCmdOptions) (*cobra.Command, *rebuildCmdO Use: "rebuild [integration1] [integration2] ...", Short: "Clear the state of integrations to rebuild them.", Long: `Clear the state of one or more integrations causing a rebuild. Rebuild always targets Integration CR, the operator is in charge to apply any change to the related bindings resources (if any).`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(args); err != nil { return err diff --git a/pkg/cmd/rebuild_test.go b/pkg/cmd/rebuild_test.go index 06411dd1a..5d9142299 100644 --- a/pkg/cmd/rebuild_test.go +++ b/pkg/cmd/rebuild_test.go @@ -34,7 +34,7 @@ func initializeRebuildCmdOptions(t *testing.T) (*rebuildCmdOptions, *cobra.Comma options, rootCmd := kamelTestPreAddCommandInit() rebuildCmdOptions := addTestRebuildCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return rebuildCmdOptions, rootCmd, *options } diff --git a/pkg/cmd/reset.go b/pkg/cmd/reset.go index 1e6ece75d..ec9416ff2 100644 --- a/pkg/cmd/reset.go +++ b/pkg/cmd/reset.go @@ -38,7 +38,7 @@ func newCmdReset(rootCmdOptions *RootCmdOptions) (*cobra.Command, *resetCmdOptio Use: "reset", Short: "Reset the Camel K installation", Long: `Reset the Camel K installation by deleting everything except current integration profile.`, - PreRunE: decode(&options), + PreRunE: decode(&options, options.Flags), Run: options.reset, } diff --git a/pkg/cmd/root.go b/pkg/cmd/root.go index 70c18209e..e7b9b8313 100644 --- a/pkg/cmd/root.go +++ b/pkg/cmd/root.go @@ -23,7 +23,6 @@ import ( "fmt" "os" "strings" - "sync" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -40,9 +39,6 @@ const kamelCommandLongDescription = `Apache Camel K is a lightweight integration superpowers. ` -// Mutex to synchronize flag operations as viper library is not able to handle concurrency. -var m = sync.Mutex{} - // RootCmdOptions --. // nolint: containedctx type RootCmdOptions struct { @@ -50,6 +46,7 @@ type RootCmdOptions struct { Context context.Context `mapstructure:"-"` ContextCancel context.CancelFunc `mapstructure:"-"` _client client.Client `mapstructure:"-"` + Flags *viper.Viper `mapstructure:"-"` KubeConfig string `mapstructure:"kube-config"` Namespace string `mapstructure:"namespace"` Verbose bool `mapstructure:"verbose" yaml:",omitempty"` @@ -62,6 +59,7 @@ func NewKamelCommand(ctx context.Context) (*cobra.Command, error) { RootContext: ctx, Context: childCtx, ContextCancel: childCancel, + Flags: viper.New(), } cmd := kamelPreAddCommandInit(&options) @@ -71,7 +69,7 @@ func NewKamelCommand(ctx context.Context) (*cobra.Command, error) { return cmd, err } - err := kamelPostAddCommandInit(cmd) + err := kamelPostAddCommandInit(cmd, options.Flags) return cmd, err } @@ -96,12 +94,8 @@ func kamelPreAddCommandInit(options *RootCmdOptions) *cobra.Command { return &cmd } -func kamelPostAddCommandInit(cmd *cobra.Command) error { - // Requires synchronization as viper bind flag is not able to handle concurrency - m.Lock() - defer m.Unlock() - - if err := bindPFlagsHierarchy(cmd); err != nil { +func kamelPostAddCommandInit(cmd *cobra.Command, v *viper.Viper) error { + if err := bindPFlagsHierarchy(cmd, v); err != nil { return err } @@ -110,26 +104,26 @@ func kamelPostAddCommandInit(cmd *cobra.Command) error { configName = DefaultConfigName } - viper.SetConfigName(configName) + v.SetConfigName(configName) configPath := os.Getenv("KAMEL_CONFIG_PATH") if configPath != "" { // if a specific config path is set, don't add // default locations - viper.AddConfigPath(configPath) + v.AddConfigPath(configPath) } else { - viper.AddConfigPath(".") - viper.AddConfigPath(".kamel") - viper.AddConfigPath("$HOME/.kamel") + v.AddConfigPath(".") + v.AddConfigPath(".kamel") + v.AddConfigPath("$HOME/.kamel") } - viper.AutomaticEnv() - viper.SetEnvKeyReplacer(strings.NewReplacer( + v.AutomaticEnv() + v.SetEnvKeyReplacer(strings.NewReplacer( ".", "_", "-", "_", )) - if err := viper.ReadInConfig(); err != nil { + if err := v.ReadInConfig(); err != nil { if !errors.As(err, &viper.ConfigFileNotFoundError{}) { return err } @@ -151,7 +145,7 @@ func addKamelSubcommands(cmd *cobra.Command, options *RootCmdOptions) { cmd.AddCommand(cmdOnly(newCmdReset(options))) cmd.AddCommand(newCmdDescribe(options)) cmd.AddCommand(cmdOnly(newCmdRebuild(options))) - cmd.AddCommand(cmdOnly(newCmdOperator())) + cmd.AddCommand(cmdOnly(newCmdOperator(options))) cmd.AddCommand(cmdOnly(newCmdBuilder(options))) cmd.AddCommand(cmdOnly(newCmdDebug(options))) cmd.AddCommand(cmdOnly(newCmdDump(options))) @@ -187,7 +181,7 @@ func (command *RootCmdOptions) preRun(cmd *cobra.Command, _ []string) error { return fmt.Errorf("cannot get command client: %w", err) } if command.Namespace == "" { - current := viper.GetString("kamel.config.default-namespace") + current := command.Flags.GetString("kamel.config.default-namespace") if current == "" { defaultNS, err := c.GetCurrentNamespace(command.KubeConfig) if err != nil { diff --git a/pkg/cmd/root_test.go b/pkg/cmd/root_test.go index 6c9afd3ce..40cbead6a 100644 --- a/pkg/cmd/root_test.go +++ b/pkg/cmd/root_test.go @@ -29,10 +29,10 @@ import ( "github.com/spf13/viper" ) -func kamelTestPostAddCommandInit(t *testing.T, rootCmd *cobra.Command) { +func kamelTestPostAddCommandInit(t *testing.T, rootCmd *cobra.Command, options *RootCmdOptions) { t.Helper() - err := kamelPostAddCommandInit(rootCmd) + err := kamelPostAddCommandInit(rootCmd, options.Flags) if err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -41,6 +41,7 @@ func kamelTestPostAddCommandInit(t *testing.T, rootCmd *cobra.Command) { func kamelTestPreAddCommandInitWithClient(client client.Client) (*RootCmdOptions, *cobra.Command) { options := RootCmdOptions{ Context: context.Background(), + Flags: viper.New(), _client: client, } rootCmd := kamelPreAddCommandInit(&options) @@ -54,13 +55,13 @@ func kamelTestPreAddCommandInit() (*RootCmdOptions, *cobra.Command) { } func TestLoadFromEnvVar(t *testing.T) { - defer teardown(t) // shows how to include a "," character inside an env value see VAR1 value if err := os.Setenv("KAMEL_RUN_ENVS", "\"VAR1=value,\"\"othervalue\"\"\",VAR2=value2"); err != nil { t.Fatalf("Unexpected error: %v", err) } runCmdOptions, rootCmd, _ := initializeRunCmdOptions(t) + defer teardown(t, runCmdOptions.Flags) _, err := test.ExecuteCommand(rootCmd, "run", "route.java") if err != nil { @@ -75,12 +76,12 @@ func TestLoadFromEnvVar(t *testing.T) { } func TestLoadFromFile(t *testing.T) { + runCmdOptions, rootCmd, _ := initializeRunCmdOptions(t) + // shows how to include a "," character inside a property value see VAR1 value propertiesFile := []byte(`kamel.run.envs: "VAR1=value,""othervalue""",VAR2=value2`) - viper.SetConfigType("properties") - readViperConfigFromBytes(t, propertiesFile) - - runCmdOptions, rootCmd, _ := initializeRunCmdOptions(t) + runCmdOptions.Flags.SetConfigType("properties") + readViperConfigFromBytes(t, runCmdOptions.Flags, propertiesFile) _, err := test.ExecuteCommand(rootCmd, "run", "route.java") if err != nil { @@ -95,16 +96,16 @@ func TestLoadFromFile(t *testing.T) { } func TestPrecedenceEnvVarOverFile(t *testing.T) { - defer teardown(t) if err := os.Setenv("KAMEL_RUN_ENVS", "VAR1=envVar"); err != nil { t.Fatalf("Unexpected error: %v", err) } + runCmdOptions, rootCmd, _ := initializeRunCmdOptions(t) + defer teardown(t, runCmdOptions.Flags) + propertiesFile := []byte(`kamel.run.envs: VAR2=file`) viper.SetConfigType("properties") - readViperConfigFromBytes(t, propertiesFile) - - runCmdOptions, rootCmd, _ := initializeRunCmdOptions(t) + readViperConfigFromBytes(t, runCmdOptions.Flags, propertiesFile) _, err := test.ExecuteCommand(rootCmd, "run", "route.java") if err != nil { @@ -119,16 +120,16 @@ func TestPrecedenceEnvVarOverFile(t *testing.T) { } func TestPrecedenceCommandLineOverEverythingElse(t *testing.T) { - defer teardown(t) if err := os.Setenv("KAMEL_RUN_ENVS", "VAR1=envVar"); err != nil { t.Fatalf("Unexpected error: %v", err) } + runCmdOptions, rootCmd, _ := initializeRunCmdOptions(t) + defer teardown(t, runCmdOptions.Flags) + propertiesFile := []byte(`kamel.run.envs: VAR2=file`) viper.SetConfigType("properties") - readViperConfigFromBytes(t, propertiesFile) - - runCmdOptions, rootCmd, _ := initializeRunCmdOptions(t) + readViperConfigFromBytes(t, runCmdOptions.Flags, propertiesFile) _, err := test.ExecuteCommand(rootCmd, "run", "route.java", "--env", "VAR3=commandLine") if err != nil { @@ -142,20 +143,20 @@ func TestPrecedenceCommandLineOverEverythingElse(t *testing.T) { } } -func readViperConfigFromBytes(t *testing.T, propertiesFile []byte) { +func readViperConfigFromBytes(t *testing.T, v *viper.Viper, propertiesFile []byte) { t.Helper() - unexpectedErr := viper.ReadConfig(bytes.NewReader(propertiesFile)) + unexpectedErr := v.ReadConfig(bytes.NewReader(propertiesFile)) if unexpectedErr != nil { t.Fatalf("Unexpected error: %v", unexpectedErr) } } // We must ALWAYS clean the environment variables and viper library properties to avoid mess up with the rest of the tests. -func teardown(t *testing.T) { +func teardown(t *testing.T, v *viper.Viper) { t.Helper() if err := os.Setenv("KAMEL_RUN_ENVS", ""); err != nil { t.Fatalf("Unexpected error: %v", err) } - readViperConfigFromBytes(t, make([]byte, 0)) + readViperConfigFromBytes(t, v, make([]byte, 0)) } diff --git a/pkg/cmd/run.go b/pkg/cmd/run.go index 4c33c4154..548f642a0 100644 --- a/pkg/cmd/run.go +++ b/pkg/cmd/run.go @@ -188,11 +188,7 @@ func (o *runCmdOptions) decode(cmd *cobra.Command, args []string) error { // load from kamel.run (1) pathToRoot := pathToRoot(cmd) - // Requires synchronization as viper bind flag is not able to handle concurrency - m.Lock() - defer m.Unlock() - - if err := decodeKey(o, pathToRoot); err != nil { + if err := decodeKey(o, pathToRoot, o.Flags.AllSettings()); err != nil { return err } @@ -217,7 +213,7 @@ func (o *runCmdOptions) decode(cmd *cobra.Command, args []string) error { if name != "" { // load from kamel.run.integration.$name (2) pathToRoot += ".integration." + name - if err := decodeKey(o, pathToRoot); err != nil { + if err := decodeKey(o, pathToRoot, o.Flags.AllSettings()); err != nil { return err } diff --git a/pkg/cmd/run_test.go b/pkg/cmd/run_test.go index 03286b10d..625a850d4 100644 --- a/pkg/cmd/run_test.go +++ b/pkg/cmd/run_test.go @@ -60,7 +60,7 @@ func initializeRunCmdOptions(t *testing.T) (*runCmdOptions, *cobra.Command, Root options, rootCmd := kamelTestPreAddCommandInit() runCmdOptions := addTestRunCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return runCmdOptions, rootCmd, *options } @@ -75,7 +75,7 @@ func initializeRunCmdOptionsWithOutput(t *testing.T) (*runCmdOptions, *cobra.Com options, rootCmd := kamelTestPreAddCommandInitWithClient(fakeClient) runCmdOptions := addTestRunCmdWithOutput(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return runCmdOptions, rootCmd, *options } diff --git a/pkg/cmd/uninstall.go b/pkg/cmd/uninstall.go index 489da6c1f..b433dcf4c 100644 --- a/pkg/cmd/uninstall.go +++ b/pkg/cmd/uninstall.go @@ -24,8 +24,6 @@ import ( "time" "github.com/spf13/cobra" - "github.com/spf13/viper" - k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" @@ -108,17 +106,13 @@ var defaultListOptions = metav1.ListOptions{ func (o *uninstallCmdOptions) decode(cmd *cobra.Command, _ []string) error { path := pathToRoot(cmd) - // Requires synchronization as viper bind flag is not able to handle concurrency - m.Lock() - defer m.Unlock() - - if err := decodeKey(o, path); err != nil { + if err := decodeKey(o, path, o.Flags.AllSettings()); err != nil { return err } - o.OlmOptions.OperatorName = viper.GetString(path + ".olm-operator-name") - o.OlmOptions.Package = viper.GetString(path + ".olm-package") - o.OlmOptions.GlobalNamespace = viper.GetString(path + ".olm-global-namespace") + o.OlmOptions.OperatorName = o.Flags.GetString(path + ".olm-operator-name") + o.OlmOptions.Package = o.Flags.GetString(path + ".olm-package") + o.OlmOptions.GlobalNamespace = o.Flags.GetString(path + ".olm-global-namespace") return nil } diff --git a/pkg/cmd/uninstall_test.go b/pkg/cmd/uninstall_test.go index 846696022..6c20d90b2 100644 --- a/pkg/cmd/uninstall_test.go +++ b/pkg/cmd/uninstall_test.go @@ -43,7 +43,7 @@ func TestUninstallOlmFlags(t *testing.T) { uninstallCmdOptions := addTestUninstallCmd(options, cmd) - kamelTestPostAddCommandInit(t, cmd) + kamelTestPostAddCommandInit(t, cmd, options) _, err := test.ExecuteCommand(cmd, "uninstall", "--olm=false", "--olm-operator-name", "my-operator") require.NoError(t, err) @@ -56,7 +56,7 @@ func TestUninstallSkipFlags(t *testing.T) { uninstallCmdOptions := addTestUninstallCmd(options, cmd) - kamelTestPostAddCommandInit(t, cmd) + kamelTestPostAddCommandInit(t, cmd, options) _, err := test.ExecuteCommand(cmd, "uninstall", "--skip-crd", "--skip-cluster-roles", "--skip-integration-platform", "--skip-integration-profile") require.NoError(t, err) @@ -71,7 +71,7 @@ func TestUninstallAllFlag(t *testing.T) { uninstallCmdOptions := addTestUninstallCmd(options, cmd) - kamelTestPostAddCommandInit(t, cmd) + kamelTestPostAddCommandInit(t, cmd, options) _, err := test.ExecuteCommand(cmd, "uninstall", "--all") require.NoError(t, err) diff --git a/pkg/cmd/util.go b/pkg/cmd/util.go index aec422477..1ecdcf35e 100644 --- a/pkg/cmd/util.go +++ b/pkg/cmd/util.go @@ -59,13 +59,13 @@ func DeleteIntegration(ctx context.Context, c client.Client, name string, namesp return c.Delete(ctx, &integration) } -func bindPFlagsHierarchy(cmd *cobra.Command) error { +func bindPFlagsHierarchy(cmd *cobra.Command, v *viper.Viper) error { for _, c := range cmd.Commands() { - if err := bindPFlags(c); err != nil { + if err := bindPFlags(c, v); err != nil { return err } - if err := bindPFlagsHierarchy(c); err != nil { + if err := bindPFlagsHierarchy(c, v); err != nil { return err } } @@ -73,7 +73,7 @@ func bindPFlagsHierarchy(cmd *cobra.Command) error { return nil } -func bindPFlags(cmd *cobra.Command) error { +func bindPFlags(cmd *cobra.Command, v *viper.Viper) error { prefix := pathToRoot(cmd) pl := p.NewClient() @@ -82,7 +82,7 @@ func bindPFlags(cmd *cobra.Command) error { name = strings.ReplaceAll(name, "_", "-") name = strings.ReplaceAll(name, ".", "-") - if err := viper.BindPFlag(prefix+"."+name, flag); err != nil { + if err := v.BindPFlag(prefix+"."+name, flag); err != nil { log.Printf("error binding flag %s with prefix %s to viper: %v", flag.Name, prefix, err) } @@ -91,7 +91,7 @@ func bindPFlags(cmd *cobra.Command) error { // possible to know what is the type of the flag flagType := strings.ToUpper(flag.Value.Type()) if strings.Contains(flagType, "SLICE") || strings.Contains(flagType, "ARRAY") { - if err := viper.BindPFlag(prefix+"."+pl.Plural(name), flag); err != nil { + if err := v.BindPFlag(prefix+"."+pl.Plural(name), flag); err != nil { log.Printf("error binding plural flag %s with prefix %s to viper: %v", flag.Name, prefix, err) } } @@ -113,9 +113,8 @@ func pathToRoot(cmd *cobra.Command) string { return path } -func decodeKey(target interface{}, key string) error { +func decodeKey(target interface{}, key string, settings map[string]any) error { nodes := strings.Split(key, ".") - settings := viper.AllSettings() for _, node := range nodes { v := settings[node] @@ -154,14 +153,10 @@ func decodeKey(target interface{}, key string) error { return nil } -func decode(target interface{}) func(*cobra.Command, []string) error { +func decode(target interface{}, v *viper.Viper) func(*cobra.Command, []string) error { return func(cmd *cobra.Command, args []string) error { - // Requires synchronization as viper bind flag is not able to handle concurrency - m.Lock() - defer m.Unlock() - path := pathToRoot(cmd) - if err := decodeKey(target, path); err != nil { + if err := decodeKey(target, path, v.AllSettings()); err != nil { return err } diff --git a/pkg/cmd/util_config.go b/pkg/cmd/util_config.go index df7b7dcc8..6212426f3 100644 --- a/pkg/cmd/util_config.go +++ b/pkg/cmd/util_config.go @@ -57,7 +57,7 @@ func LoadConfiguration() (*Config, error) { return loadConfiguration(viper.ConfigFileUsed()) } -// LoadConfiguration loads a kamel configuration file from a specific location. +// LoadConfigurationFrom loads a kamel configuration file from a specific location. func LoadConfigurationFrom(location string) (*Config, error) { return loadConfiguration(location) } diff --git a/pkg/cmd/version.go b/pkg/cmd/version.go index 1f635209d..e9bc20b90 100644 --- a/pkg/cmd/version.go +++ b/pkg/cmd/version.go @@ -50,7 +50,7 @@ func newCmdVersion(rootCmdOptions *RootCmdOptions) (*cobra.Command, *versionCmdO Use: "version", Short: "Display client version", Long: `Display Camel K client version.`, - PersistentPreRunE: decode(&options), + PersistentPreRunE: decode(&options, options.Flags), PreRunE: options.preRunE, RunE: options.run, Annotations: make(map[string]string), diff --git a/pkg/cmd/version_test.go b/pkg/cmd/version_test.go index f57987711..dfd33a54b 100644 --- a/pkg/cmd/version_test.go +++ b/pkg/cmd/version_test.go @@ -42,7 +42,7 @@ func initializeVersionCmdOptions(t *testing.T, initObjs ...runtime.Object) (*ver require.NoError(t, err) options, rootCmd := kamelTestPreAddCommandInitWithClient(fakeClient) versionCmdOptions := addTestVersionCmd(*options, rootCmd) - kamelTestPostAddCommandInit(t, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd, options) return versionCmdOptions, rootCmd, *options } diff --git a/script/Makefile b/script/Makefile index 4dd8283e5..f518b09e4 100644 --- a/script/Makefile +++ b/script/Makefile @@ -94,7 +94,7 @@ KAMELET_CATALOG_REPO_TAG := v4.0.1 DO_TEST_PREBUILD ?= true TEST_PREBUILD = build # Tests may run in parallel to each other. This count sets the amount of tests run in parallel. (default value usually is GOMAXPROCS) -TEST_COMMON_PARALLEL_COUNT ?= 2 +TEST_COMMON_PARALLEL_COUNT ?= 4 TEST_ADVANCED_PARALLEL_COUNT ?= 4 # OLM (Operator Lifecycle Manager and Operator Hub): uncomment to override operator settings at build time