From 15701c6736834d9d79299f801d13f28228d1b9fc Mon Sep 17 00:00:00 2001 From: Lucas Heinlen Date: Tue, 23 Feb 2021 14:39:27 -0500 Subject: [PATCH] Retain hooks when a filtered helm test is interrupted Signed-off-by: Lucas Heinlen --- pkg/action/hooks.go | 8 +++++--- pkg/action/release_testing.go | 17 +++-------------- pkg/release/hook.go | 2 ++ 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/pkg/action/hooks.go b/pkg/action/hooks.go index 40c1ffdb6..47c76bda3 100644 --- a/pkg/action/hooks.go +++ b/pkg/action/hooks.go @@ -31,9 +31,11 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent, executingHooks := []*release.Hook{} for _, h := range rl.Hooks { - for _, e := range h.Events { - if e == hook { - executingHooks = append(executingHooks, h) + if !h.ExecutionDisabled { + for _, e := range h.Events { + if e == hook { + executingHooks = append(executingHooks, h) + } } } } diff --git a/pkg/action/release_testing.go b/pkg/action/release_testing.go index ecaeaf59f..ca0d9ced7 100644 --- a/pkg/action/release_testing.go +++ b/pkg/action/release_testing.go @@ -64,37 +64,26 @@ func (r *ReleaseTesting) Run(name string) (*release.Release, error) { return rel, err } - skippedHooks := []*release.Hook{} - executingHooks := []*release.Hook{} if len(r.Filters["!name"]) != 0 { for _, h := range rel.Hooks { if contains(r.Filters["!name"], h.Name) { - skippedHooks = append(skippedHooks, h) - } else { - executingHooks = append(executingHooks, h) + h.ExecutionDisabled = true } } - rel.Hooks = executingHooks } if len(r.Filters["name"]) != 0 { - executingHooks = nil for _, h := range rel.Hooks { - if contains(r.Filters["name"], h.Name) { - executingHooks = append(executingHooks, h) - } else { - skippedHooks = append(skippedHooks, h) + if !contains(r.Filters["name"], h.Name) { + h.ExecutionDisabled = true } } - rel.Hooks = executingHooks } if err := r.cfg.execHook(rel, release.HookTest, r.Timeout); err != nil { - rel.Hooks = append(skippedHooks, rel.Hooks...) r.cfg.Releases.Update(rel) return rel, err } - rel.Hooks = append(skippedHooks, rel.Hooks...) return rel, r.cfg.Releases.Update(rel) } diff --git a/pkg/release/hook.go b/pkg/release/hook.go index 662320f06..497c12cee 100644 --- a/pkg/release/hook.go +++ b/pkg/release/hook.go @@ -76,6 +76,8 @@ type Hook struct { Weight int `json:"weight,omitempty"` // DeletePolicies are the policies that indicate when to delete the hook DeletePolicies []HookDeletePolicy `json:"delete_policies,omitempty"` + // ExecutionDisabled is set to true when a hook has been filtered out and should not be executed + ExecutionDisabled bool `json:"-"` } // A HookExecution records the result for the last execution of a hook for a given release.