From 802fb41583ea80a792608918c4d39044f5404637 Mon Sep 17 00:00:00 2001 From: Matt Landis Date: Thu, 5 May 2022 16:51:50 -0400 Subject: [PATCH] tiltfile: actually ignore invalid resource deps (#5775) --- internal/tiltfile/tiltfile_state.go | 16 ++++++++++------ internal/tiltfile/tiltfile_test.go | 6 +++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/internal/tiltfile/tiltfile_state.go b/internal/tiltfile/tiltfile_state.go index 9f8d77d9b3..7c9bbb572d 100644 --- a/internal/tiltfile/tiltfile_state.go +++ b/internal/tiltfile/tiltfile_state.go @@ -323,7 +323,7 @@ to your Tiltfile. Otherwise, switch k8s contexts and restart Tilt.`, kubeContext manifests = append(manifests, yamlManifest) } - err = s.validateResourceDependencies(manifests) + err = s.sanitizeDependencies(manifests) if err != nil { return nil, starkit.Model{}, err } @@ -1626,10 +1626,9 @@ func (s *tiltfileState) tempDir() (*fwatch.TempDir, error) { return s.scratchDir, nil } -func (s *tiltfileState) validateResourceDependencies(ms []model.Manifest) error { - // make sure that: - // 1. all deps exist - // 2. we have a DAG +func (s *tiltfileState) sanitizeDependencies(ms []model.Manifest) error { + // warn + delete resource deps that don't exist + // error if resource deps are not a DAG knownResources := make(map[model.ManifestName]bool) for _, m := range ms { @@ -1638,7 +1637,8 @@ func (s *tiltfileState) validateResourceDependencies(ms []model.Manifest) error // construct the graph and make sure all edges are valid edges := make(map[interface{}][]interface{}) - for _, m := range ms { + for i, m := range ms { + var sanitizedDeps []model.ManifestName for _, b := range m.ResourceDependencies { if m.Name == b { return fmt.Errorf("resource %s specified a dependency on itself", m.Name) @@ -1648,7 +1648,11 @@ func (s *tiltfileState) validateResourceDependencies(ms []model.Manifest) error continue } edges[m.Name] = append(edges[m.Name], b) + sanitizedDeps = append(sanitizedDeps, b) } + + m.ResourceDependencies = sanitizedDeps + ms[i] = m } // check for cycles diff --git a/internal/tiltfile/tiltfile_test.go b/internal/tiltfile/tiltfile_test.go index 5210f4298e..91b532527c 100644 --- a/internal/tiltfile/tiltfile_test.go +++ b/internal/tiltfile/tiltfile_test.go @@ -4694,10 +4694,14 @@ func TestDependsOnMissingResource(t *testing.T) { f := newFixture(t) f.file("Tiltfile", ` -local_resource('bar', 'echo bar', resource_deps=['foo']) +local_resource('baz', 'echo baz') +local_resource('bar', 'echo bar', resource_deps=['foo', 'baz']) `) f.loadAssertWarnings("resource bar specified a dependency on unknown resource foo - dependency ignored") + f.assertNumManifests(2) + f.assertNextManifest("baz", resourceDeps()) + f.assertNextManifest("bar", resourceDeps("baz")) } func TestDependsOnSelf(t *testing.T) {