From 4a5996d0831c04b73a63174013733a34df34fbfd Mon Sep 17 00:00:00 2001 From: Raj Perera Date: Sun, 26 May 2019 20:53:24 -0400 Subject: [PATCH] feat: ability to exit zero with no releases match selector (#618) - Change exit code from 2 to 3 when helmfiles have no releases that match a selector - Introduces new flag `--allow-no-matching-release` to exit 0 when no releases match a selector. Resolves: #597 --- cmd/cmd.go | 12 ++++++++---- main.go | 4 ++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 5ef9e717..5b855b86 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -27,7 +27,7 @@ func VisitAllDesiredStates(c *cli.Context, converge func(*state.HelmState, helme err = a.VisitDesiredStates(fileOrDir, a.Selectors, convergeWithHelmBinary) - return toCliError(err) + return toCliError(c, err) } func InitAppEntry(c *cli.Context, reverse bool) (*app.App, string, error) { @@ -76,14 +76,18 @@ func FindAndIterateOverDesiredStatesUsingFlagsWithReverse(c *cli.Context, revers err = a.VisitDesiredStatesWithReleasesFiltered(fileOrDir, convergeWithHelmBinary) - return toCliError(err) + return toCliError(c, err) } -func toCliError(err error) error { +func toCliError(c *cli.Context, err error) error { if err != nil { switch e := err.(type) { case *app.NoMatchingHelmfileError: - return cli.NewExitError(e.Error(), 2) + noMatchingExitCode := 3 + if c.GlobalBool("allow-no-matching-release") { + noMatchingExitCode = 0 + } + return cli.NewExitError(e.Error(), noMatchingExitCode) case *app.Error: return cli.NewExitError(e.Error(), e.Code()) default: diff --git a/main.go b/main.go index 66ed1ddd..2762d809 100644 --- a/main.go +++ b/main.go @@ -82,6 +82,10 @@ func main() { --selector tier=frontend,tier!=proxy --selector tier=backend. Will match all frontend, non-proxy releases AND all backend releases. The name of a release can be used as a label. --selector name=myrelease`, }, + cli.BoolFlag{ + Name: "allow-no-matching-release", + Usage: `Do not exit with an error code if the provided selector has no matching releases.`, + }, cli.BoolFlag{ Name: "interactive, i", Usage: "Request confirmation before attempting to modify clusters",