pkg/cli/cli.go

58 lines
1.1 KiB
Go

// Package cli provides the common boilerplate code around executing a cobra command.
package cli
import (
"context"
"errors"
"fmt"
"os"
"os/signal"
"syscall"
"git.ifooth.com/common/pkg/version"
"github.com/spf13/cobra"
)
var (
// SignalChan ...
SignalChan = make(chan os.Signal, 1)
// ErrSignal ...
ErrSignal = errors.New("signal")
)
// Run provides the common boilerplate code around executing a cobra command.
func Run(cmd *cobra.Command) int {
// 不开启 自动排序
cobra.EnableCommandSorting = false
cmd.CompletionOptions.DisableDefaultCmd = true
cmd.SilenceErrors = true
cmd.SilenceUsage = true
// 添加版本
cmd.SetVersionTemplate(`{{println .Version}}`)
cmd.Version = version.GetVersion()
if err := execute(cmd); err != nil {
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
return 1
}
return 0
}
func execute(cmd *cobra.Command) error {
ctx := context.Background()
// graceful shutdown signal
signal.Notify(SignalChan, syscall.SIGINT, syscall.SIGTERM)
err := cmd.ExecuteContext(ctx)
if err == nil {
return nil
}
if errors.Is(err, ErrSignal) {
return nil
}
return err
}