// Package cli is the simplexcalc command tree: the run and version // commands, and the exit status the program ends with. package cli import ( "fmt" "io" "os" ) // appname is the name the program reports in its logs and its version. const appname = "simplexcalc" // Main runs the command named on the command line and returns the exit // status for main to pass to os.Exit. func Main(version string) int { return execute(version, os.Args[1:], os.Stdout, os.Stderr) } // execute is Main with the arguments and the output passed in, so that // a test can supply them. func execute(version string, args []string, stdout, stderr io.Writer) int { root := rootCmd(version) root.SetArgs(args) root.SetOut(stdout) root.SetErr(stderr) err := root.Execute() if err != nil { // cobra has already printed the error; this only sets the exit // status, which is what a supervisor and a shell script read. _, _ = fmt.Fprintln(stderr, "exiting: "+err.Error()) return 1 } return 0 }