package cli import ( "fmt" "os" "github.com/urfave/cli/v2" "golang.org/x/xerrors" ) type PrintHelpErr struct { Err error Ctx *cli.Context } func (e *PrintHelpErr) Error() string { return e.Err.Error() } func (e *PrintHelpErr) Unwrap() error { return e.Err } func (e *PrintHelpErr) Is(o error) bool { _, ok := o.(*PrintHelpErr) return ok } func ShowHelp(cctx *cli.Context, err error) error { return &PrintHelpErr{Err: err, Ctx: cctx} } func RunApp(app *cli.App) { if err := app.Run(os.Args); err != nil { if os.Getenv("LOTUS_DEV") != "" { log.Warnf("%+v", err) } else { fmt.Fprintf(os.Stderr, "ERROR: %s\n\n", err) // nolint:errcheck } var phe *PrintHelpErr if xerrors.As(err, &phe) { _ = cli.ShowCommandHelp(phe.Ctx, phe.Ctx.Command.Name) } os.Exit(1) } }