Fix array merging issue - distinguish CLI overrides from helmfile composition

- Add IsCLIOverride flag to Environment to track CLI overrides vs helmfile composition
- Add CLISet field to SubhelmfileEnvironmentSpec to pass CLI overrides separately
- Create MergeMapsWithArrayMerge for element-by-element array merging (CLI overrides)
- Keep MergeMaps with array replacement (helmfile composition - documented behavior)
- Preserve IsCLIOverride flag through Environment merges and copies
- Fix LoadOpts.DeepCopy to preserve CLISet field
- Add comprehensive unit tests for both behaviors

This fixes the issue where array merging behavior from issue #2281 broke helmfile composition

Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-01-07 01:46:14 +00:00
co-authored by yxxhero
parent 1802fd4888
commit e400a0b936
3 changed files with 63 additions and 0 deletions
+3
View File
@@ -29,6 +29,9 @@ func (o LoadOpts) DeepCopy() LoadOpts {
if err := yaml.Unmarshal(bytes, &new); err != nil {
panic(err)
}
// Preserve CLISet which has yaml:"-" tag
new.Environment.CLISet = o.Environment.CLISet
return new
}