// Package cli is the simplexcalc command tree: the run and version // commands, and the exit status the program ends with. package cli import ( "fmt" "github.com/spf13/cobra" ) // 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. // // It leaves cobra's output streams at their defaults. cobra writes the // usage and an unknown help topic to stderr, but SetOut moves them onto // the stream it is given. func Main(version string) int { return execute(rootCmd(version)) } // execute runs root and returns the exit status. It takes the command // so that a test can set its arguments and output streams first. func execute(root *cobra.Command) int { 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(root.ErrOrStderr(), "exiting: "+err.Error()) return 1 } return 0 }