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>
This commit is contained in:
copilot-swe-agent[bot] 2025-12-08 08:00:25 +00:00
parent e11ef412f5
commit e5ba174314
2 changed files with 12 additions and 4 deletions

2
go.mod
View File

@ -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

View File

@ -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"
}
}