diff --git a/cmd/main.go b/cmd/main.go index da5c524..f2e1e14 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -22,6 +22,10 @@ var ( ) func main() { + os.Exit(run()) +} + +func run() int { factory := initFactory() rootCmd, err := root.NewCmdRoot(factory, version, commit, date) @@ -33,14 +37,15 @@ func main() { os.Args = append([]string{os.Args[0], "deploy"}, os.Args[1:]...) } - // log errors if err := rootCmd.Execute(); err != nil { // when some errors occur(such as args dis-match), the log may not be initialized if factory.Log == nil { factory.Log = log.NewInfoLevel() } factory.Log.Error(err) + return 1 } + return 0 } // init factory, including config, auth, etc. diff --git a/cmd/main_test.go b/cmd/main_test.go new file mode 100644 index 0000000..a474845 --- /dev/null +++ b/cmd/main_test.go @@ -0,0 +1,28 @@ +package main + +import ( + "os" + "testing" +) + +func TestRun_UnknownSubcommandReturnsNonZero(t *testing.T) { + oldArgs := os.Args + t.Cleanup(func() { os.Args = oldArgs }) + + os.Args = []string{"zeabur", "this-subcommand-does-not-exist-zeabur-cli-test"} + + if code := run(); code == 0 { + t.Fatalf("run() = %d, want non-zero when Cobra returns an error", code) + } +} + +func TestRun_VersionReturnsZero(t *testing.T) { + oldArgs := os.Args + t.Cleanup(func() { os.Args = oldArgs }) + + os.Args = []string{"zeabur", "version"} + + if code := run(); code != 0 { + t.Fatalf("run() = %d, want 0 for zeabur version", code) + } +}