Retain hooks when a filtered helm test is interrupted

Signed-off-by: Lucas Heinlen <lheinlen@onecause.com>
pull/9400/head
Lucas Heinlen 5 years ago
parent 02996b230d
commit 15701c6736
No known key found for this signature in database
GPG Key ID: 590AD23D7FBDFF2F

@ -31,9 +31,11 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
executingHooks := []*release.Hook{} executingHooks := []*release.Hook{}
for _, h := range rl.Hooks { for _, h := range rl.Hooks {
for _, e := range h.Events { if !h.ExecutionDisabled {
if e == hook { for _, e := range h.Events {
executingHooks = append(executingHooks, h) if e == hook {
executingHooks = append(executingHooks, h)
}
} }
} }
} }

@ -64,37 +64,26 @@ func (r *ReleaseTesting) Run(name string) (*release.Release, error) {
return rel, err return rel, err
} }
skippedHooks := []*release.Hook{}
executingHooks := []*release.Hook{}
if len(r.Filters["!name"]) != 0 { if len(r.Filters["!name"]) != 0 {
for _, h := range rel.Hooks { for _, h := range rel.Hooks {
if contains(r.Filters["!name"], h.Name) { if contains(r.Filters["!name"], h.Name) {
skippedHooks = append(skippedHooks, h) h.ExecutionDisabled = true
} else {
executingHooks = append(executingHooks, h)
} }
} }
rel.Hooks = executingHooks
} }
if len(r.Filters["name"]) != 0 { if len(r.Filters["name"]) != 0 {
executingHooks = nil
for _, h := range rel.Hooks { for _, h := range rel.Hooks {
if contains(r.Filters["name"], h.Name) { if !contains(r.Filters["name"], h.Name) {
executingHooks = append(executingHooks, h) h.ExecutionDisabled = true
} else {
skippedHooks = append(skippedHooks, h)
} }
} }
rel.Hooks = executingHooks
} }
if err := r.cfg.execHook(rel, release.HookTest, r.Timeout); err != nil { if err := r.cfg.execHook(rel, release.HookTest, r.Timeout); err != nil {
rel.Hooks = append(skippedHooks, rel.Hooks...)
r.cfg.Releases.Update(rel) r.cfg.Releases.Update(rel)
return rel, err return rel, err
} }
rel.Hooks = append(skippedHooks, rel.Hooks...)
return rel, r.cfg.Releases.Update(rel) return rel, r.cfg.Releases.Update(rel)
} }

@ -76,6 +76,8 @@ type Hook struct {
Weight int `json:"weight,omitempty"` Weight int `json:"weight,omitempty"`
// DeletePolicies are the policies that indicate when to delete the hook // DeletePolicies are the policies that indicate when to delete the hook
DeletePolicies []HookDeletePolicy `json:"delete_policies,omitempty"` 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. // A HookExecution records the result for the last execution of a hook for a given release.

Loading…
Cancel
Save