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
This commit is contained in:
		
							parent
							
								
									f6264bfa9d
								
							
						
					
					
						commit
						4a5996d083
					
				
							
								
								
									
										12
									
								
								cmd/cmd.go
								
								
								
								
							
							
						
						
									
										12
									
								
								cmd/cmd.go
								
								
								
								
							| 
						 | 
					@ -27,7 +27,7 @@ func VisitAllDesiredStates(c *cli.Context, converge func(*state.HelmState, helme
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = a.VisitDesiredStates(fileOrDir, a.Selectors, convergeWithHelmBinary)
 | 
						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) {
 | 
					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)
 | 
						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 {
 | 
						if err != nil {
 | 
				
			||||||
		switch e := err.(type) {
 | 
							switch e := err.(type) {
 | 
				
			||||||
		case *app.NoMatchingHelmfileError:
 | 
							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:
 | 
							case *app.Error:
 | 
				
			||||||
			return cli.NewExitError(e.Error(), e.Code())
 | 
								return cli.NewExitError(e.Error(), e.Code())
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								main.go
								
								
								
								
							
							
						
						
									
										4
									
								
								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.
 | 
						--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`,
 | 
						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{
 | 
							cli.BoolFlag{
 | 
				
			||||||
			Name:  "interactive, i",
 | 
								Name:  "interactive, i",
 | 
				
			||||||
			Usage: "Request confirmation before attempting to modify clusters",
 | 
								Usage: "Request confirmation before attempting to modify clusters",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue