Merge pull request #199 from mumoshu/optional-detailed-exitcode-for-diff
feat: Optional detailed exitcodes for `helmfile diff`
This commit is contained in:
commit
6be52bfbbb
20
main.go
20
main.go
|
|
@ -15,6 +15,7 @@ import (
|
|||
"github.com/urfave/cli"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -166,6 +167,10 @@ func main() {
|
|||
Name: "sync-repos",
|
||||
Usage: "enable a repo sync prior to diffing",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "detailed-exitcode",
|
||||
Usage: "return a non-zero exit code when there are changes",
|
||||
},
|
||||
cli.IntFlag{
|
||||
Name: "concurrency",
|
||||
Value: 0,
|
||||
|
|
@ -190,8 +195,9 @@ func main() {
|
|||
|
||||
values := c.StringSlice("values")
|
||||
workers := c.Int("concurrency")
|
||||
detailedExitCode := c.Bool("detailed-exitcode")
|
||||
|
||||
return state.DiffReleases(helm, values, workers)
|
||||
return state.DiffReleases(helm, values, workers, detailedExitCode)
|
||||
})
|
||||
},
|
||||
},
|
||||
|
|
@ -367,8 +373,7 @@ func main() {
|
|||
|
||||
err := app.Run(os.Args)
|
||||
if err != nil {
|
||||
log.Printf("err: %s", err.Error())
|
||||
os.Exit(1)
|
||||
log.Panicf("[bug] this code path shouldn't be arrived: helmfile is expected to exit from within the `cleanup` func in main.go: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -517,7 +522,14 @@ func clean(state *state.HelmState, errs []error) error {
|
|||
for _, err := range errs {
|
||||
fmt.Printf("err: %s\n", err.Error())
|
||||
}
|
||||
os.Exit(1)
|
||||
switch e := errs[0].(type) {
|
||||
case *exec.ExitError:
|
||||
// Propagate any non-zero exit status from the external command like `helm` that is failed under the hood
|
||||
status := e.Sys().(syscall.WaitStatus)
|
||||
os.Exit(status.ExitStatus())
|
||||
default:
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -254,7 +254,7 @@ func (state *HelmState) SyncReleases(helm helmexec.Interface, additionalValues [
|
|||
}
|
||||
|
||||
// DiffReleases wrapper for executing helm diff on the releases
|
||||
func (state *HelmState) DiffReleases(helm helmexec.Interface, additionalValues []string, workerLimit int) []error {
|
||||
func (state *HelmState) DiffReleases(helm helmexec.Interface, additionalValues []string, workerLimit int, detailedExitCode bool) []error {
|
||||
var wgRelease sync.WaitGroup
|
||||
var wgError sync.WaitGroup
|
||||
errs := []error{}
|
||||
|
|
@ -289,6 +289,10 @@ func (state *HelmState) DiffReleases(helm helmexec.Interface, additionalValues [
|
|||
flags = append(flags, "--values", valfile)
|
||||
}
|
||||
|
||||
if detailedExitCode {
|
||||
flags = append(flags, "--detailed-exitcode")
|
||||
}
|
||||
|
||||
if len(errs) == 0 {
|
||||
if err := helm.DiffRelease(release.Name, normalizeChart(state.BaseChartPath, release.Chart), flags...); err != nil {
|
||||
errs = append(errs, err)
|
||||
|
|
|
|||
Loading…
Reference in New Issue