diff --git a/.gitignore b/.gitignore index 8e93598b..b7c98174 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ release/ .envrc .idea docker-run-release-cache/ +.vscode/ diff --git a/cmd/upgrade.go b/cmd/upgrade.go index 0f8bfb8d..63933bb0 100644 --- a/cmd/upgrade.go +++ b/cmd/upgrade.go @@ -107,6 +107,7 @@ func newChartCommand() *cobra.Command { diff := diffCmd{ namespace: os.Getenv("HELM_NAMESPACE"), } + unknownFlags := os.Getenv("HELM_DIFF_IGNORE_UNKNOWN_FLAGS") == "true" cmd := &cobra.Command{ Use: "upgrade [flags] [RELEASE] [CHART]", @@ -164,13 +165,18 @@ func newChartCommand() *cobra.Command { " --dry-run=server enables the cluster access with helm-get and the lookup template function." ) + cmdFlags := cmd.Flags() + + // see: https://github.com/databus23/helm-diff/issues/537 + cmdFlags.ParseErrorsWhitelist.UnknownFlags = unknownFlags + legacyDryRunFlagSet := pflag.NewFlagSet("upgrade", pflag.ContinueOnError) legacyDryRun := legacyDryRunFlagSet.Bool("dry-run", false, dryRunUsage) if err := legacyDryRunFlagSet.Parse(args); err == nil && *legacyDryRun { diff.dryRunModeSpecified = true args = legacyDryRunFlagSet.Args() } else { - cmd.Flags().StringVar(&diff.dryRunMode, "dry-run", "", dryRunUsage) + cmdFlags.StringVar(&diff.dryRunMode, "dry-run", "", dryRunUsage) } // Here we parse the flags ourselves so that we can support @@ -181,11 +187,11 @@ func newChartCommand() *cobra.Command { // // This works becase we have `DisableFlagParsing: true`` above. // Never turn that off, or you'll get the error again. - if err := cmd.Flags().Parse(args); err != nil { + if err := cmdFlags.Parse(args); err != nil { return err } - args = cmd.Flags().Args() + args = cmdFlags.Args() if !diff.dryRunModeSpecified { dryRunModeSpecified := cmd.Flags().Changed("dry-run") @@ -254,7 +260,7 @@ func newChartCommand() *cobra.Command { return diff.runHelm3() }, FParseErrWhitelist: cobra.FParseErrWhitelist{ - UnknownFlags: os.Getenv("HELM_DIFF_IGNORE_UNKNOWN_FLAGS") == "true", + UnknownFlags: unknownFlags, }, }