diff --git a/pkg/skaffold/deploy/helm/dependencygraph.go b/pkg/skaffold/deploy/helm/dependencygraph.go index aa0e51fbae9..4f388ae6dfd 100644 --- a/pkg/skaffold/deploy/helm/dependencygraph.go +++ b/pkg/skaffold/deploy/helm/dependencygraph.go @@ -45,6 +45,9 @@ func NewDependencyGraph(releases []latest.HelmRelease) (*DependencyGraph, error) if !releaseNames[dep] { return nil, fmt.Errorf("release %s depends on non-existent release %s", r.Name, dep) } + if r.Name == dep { + return nil, fmt.Errorf("release %s cannot depend on itself", r.Name) + } hasDependencies = true } graph[r.Name] = r.DependsOn diff --git a/pkg/skaffold/deploy/helm/dependencygraph_test.go b/pkg/skaffold/deploy/helm/dependencygraph_test.go index 769806bc935..f3da1b0781e 100644 --- a/pkg/skaffold/deploy/helm/dependencygraph_test.go +++ b/pkg/skaffold/deploy/helm/dependencygraph_test.go @@ -26,10 +26,11 @@ import ( func TestNewDependencyGraph(t *testing.T) { tests := []struct { - description string - releases []latest.HelmRelease - expected map[string][]string - shouldErr bool + description string + releases []latest.HelmRelease + expected map[string][]string + shouldErr bool + errorMessage string }{ { description: "simple dependency graph", @@ -73,6 +74,15 @@ func TestNewDependencyGraph(t *testing.T) { {Name: "release2"}, }, shouldErr: true, + errorMessage: "release release1 depends on non-existent release release3", + }, + { + description: "dependency on self", + releases: []latest.HelmRelease{ + {Name: "release1", DependsOn: []string{"release1"}}, + }, + shouldErr: true, + errorMessage: "release release1 cannot depend on itself", }, } @@ -81,7 +91,7 @@ func TestNewDependencyGraph(t *testing.T) { graph, err := NewDependencyGraph(test.releases) if test.shouldErr { - t.CheckError(test.shouldErr, err) + t.CheckErrorContains(test.errorMessage, err) return } t.CheckDeepEqual(len(test.expected), len(graph.graph))