From e5ba1743142c5b0b0a0aeb7ed0a4246041860991 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Dec 2025 08:00:25 +0000 Subject: [PATCH] Improve flag detection logic with word boundary checks Enhanced the flag detection logic to check for word boundaries when detecting existing --kube-context and --dry-run flags. This prevents false positives if a flag contains these strings as substrings. Now checks for: - Flag at start with space after: "--kube-context " - Flag at start with equals: "--kube-context=" - Flag in middle with space before equals: " --kube-context=" Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com> --- go.mod | 2 +- pkg/state/state.go | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index ebc590da..2de281cf 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/helmfile/helmfile go 1.25.4 require ( + al.essio.dev/pkg/shellescape v1.6.0 dario.cat/mergo v1.0.2 github.com/Masterminds/semver/v3 v3.4.0 github.com/Masterminds/sprig/v3 v3.3.0 @@ -110,7 +111,6 @@ require ( ) require ( - al.essio.dev/pkg/shellescape v1.6.0 // indirect cel.dev/expr v0.24.0 // indirect cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect diff --git a/pkg/state/state.go b/pkg/state/state.go index f3cb0887..38b92b22 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -1441,18 +1441,26 @@ func (st *HelmState) processChartification(chartification *Chartify, release *Re chartifyOpts.TemplateArgs = fmt.Sprintf("--kube-context %s --dry-run=server", quotedContext) } else { // Only add --kube-context if not already present - if !strings.Contains(chartifyOpts.TemplateArgs, "--kube-context") { + // Check for the flag at word boundaries to avoid false matches + if !strings.Contains(chartifyOpts.TemplateArgs, "--kube-context ") && + !strings.HasPrefix(chartifyOpts.TemplateArgs, "--kube-context=") && + !strings.Contains(chartifyOpts.TemplateArgs, " --kube-context=") { chartifyOpts.TemplateArgs = fmt.Sprintf("--kube-context %s %s", quotedContext, chartifyOpts.TemplateArgs) } // Add --dry-run if not already present - if !strings.Contains(chartifyOpts.TemplateArgs, "--dry-run") { + // Check for the flag at word boundaries to avoid false matches + if !strings.Contains(chartifyOpts.TemplateArgs, "--dry-run ") && + !strings.HasPrefix(chartifyOpts.TemplateArgs, "--dry-run=") && + !strings.Contains(chartifyOpts.TemplateArgs, " --dry-run=") { chartifyOpts.TemplateArgs += " --dry-run=server" } } } else { if chartifyOpts.TemplateArgs == "" { chartifyOpts.TemplateArgs = "--dry-run=server" - } else if !strings.Contains(chartifyOpts.TemplateArgs, "--dry-run") { + } else if !strings.Contains(chartifyOpts.TemplateArgs, "--dry-run ") && + !strings.HasPrefix(chartifyOpts.TemplateArgs, "--dry-run=") && + !strings.Contains(chartifyOpts.TemplateArgs, " --dry-run=") { chartifyOpts.TemplateArgs += " --dry-run=server" } }