diff --git a/internal/chart/v3/util/dependencies.go b/internal/chart/v3/util/dependencies.go index cd7a8b78c..340c65252 100644 --- a/internal/chart/v3/util/dependencies.go +++ b/internal/chart/v3/util/dependencies.go @@ -47,7 +47,8 @@ func processDependencyConditions(reqs []*chart.Dependency, cvals common.Values, if err == nil { // if not bool, warn if bv, ok := vv.(bool); ok { - r.Enabled = bv + // Use AND logic: both tags and condition must be true + r.Enabled = r.Enabled && bv break } slog.Warn("returned non-bool value", "path", c, "chart", r.Name) diff --git a/internal/chart/v3/util/dependencies_test.go b/internal/chart/v3/util/dependencies_test.go index 3c5bb96f7..670515417 100644 --- a/internal/chart/v3/util/dependencies_test.go +++ b/internal/chart/v3/util/dependencies_test.go @@ -91,7 +91,7 @@ func TestDependencyEnabled(t *testing.T) { }, { "conditions enabling the parent charts, but back-end (b, c) is still disabled via values.yaml", M{"subchart1": M{"enabled": true}, "subchart2": M{"enabled": true}}, - []string{"parentchart", "parentchart.subchart1", "parentchart.subchart1.subcharta", "parentchart.subchart1.subchartb", "parentchart.subchart2"}, + []string{"parentchart", "parentchart.subchart1", "parentchart.subchart1.subcharta", "parentchart.subchart1.subchartb"}, }, { "conditions disabling the parent charts, effectively disabling children", M{"subchart1": M{"enabled": false}, "subchart2": M{"enabled": false}}, @@ -111,7 +111,15 @@ func TestDependencyEnabled(t *testing.T) { }, { "subcharts with alias also respect conditions", M{"subchart1": M{"enabled": false}, "subchart2alias": M{"enabled": true, "subchartb": M{"enabled": true}}}, - []string{"parentchart", "parentchart.subchart2alias", "parentchart.subchart2alias.subchartb"}, + []string{"parentchart", "parentchart.subchart2alias"}, + }, { + "tags disable chart even when condition is true (AND logic)", + M{"tags": M{"front-end": false}, "subchart1": M{"enabled": true}}, + []string{"parentchart"}, + }, { + "tags disable child charts even when their conditions are true (AND logic)", + M{"tags": M{"front-end": false, "subcharta": false}, "subchart1": M{"enabled": true, "subcharta": M{"enabled": true}}}, + []string{"parentchart"}, }} for _, tc := range tests { diff --git a/pkg/chart/v2/util/dependencies.go b/pkg/chart/v2/util/dependencies.go index 294b782f8..13707ca1e 100644 --- a/pkg/chart/v2/util/dependencies.go +++ b/pkg/chart/v2/util/dependencies.go @@ -47,7 +47,8 @@ func processDependencyConditions(reqs []*chart.Dependency, cvals common.Values, if err == nil { // if not bool, warn if bv, ok := vv.(bool); ok { - r.Enabled = bv + // Use AND logic: both tags and condition must be true + r.Enabled = r.Enabled && bv break } slog.Warn("returned non-bool value", "path", c, "chart", r.Name) diff --git a/pkg/chart/v2/util/dependencies_test.go b/pkg/chart/v2/util/dependencies_test.go index c817b0b89..33357d9e2 100644 --- a/pkg/chart/v2/util/dependencies_test.go +++ b/pkg/chart/v2/util/dependencies_test.go @@ -91,7 +91,7 @@ func TestDependencyEnabled(t *testing.T) { }, { "conditions enabling the parent charts, but back-end (b, c) is still disabled via values.yaml", M{"subchart1": M{"enabled": true}, "subchart2": M{"enabled": true}}, - []string{"parentchart", "parentchart.subchart1", "parentchart.subchart1.subcharta", "parentchart.subchart1.subchartb", "parentchart.subchart2"}, + []string{"parentchart", "parentchart.subchart1", "parentchart.subchart1.subcharta", "parentchart.subchart1.subchartb"}, }, { "conditions disabling the parent charts, effectively disabling children", M{"subchart1": M{"enabled": false}, "subchart2": M{"enabled": false}}, @@ -111,7 +111,15 @@ func TestDependencyEnabled(t *testing.T) { }, { "subcharts with alias also respect conditions", M{"subchart1": M{"enabled": false}, "subchart2alias": M{"enabled": true, "subchartb": M{"enabled": true}}}, - []string{"parentchart", "parentchart.subchart2alias", "parentchart.subchart2alias.subchartb"}, + []string{"parentchart", "parentchart.subchart2alias"}, + }, { + "tags disable chart even when condition is true (AND logic)", + M{"tags": M{"front-end": false}, "subchart1": M{"enabled": true}}, + []string{"parentchart"}, + }, { + "tags disable child charts even when their conditions are true (AND logic)", + M{"tags": M{"front-end": false, "subcharta": false}, "subchart1": M{"enabled": true, "subcharta": M{"enabled": true}}}, + []string{"parentchart"}, }} for _, tc := range tests {