root.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package cmd
  2. import (
  3. "fmt"
  4. "os"
  5. "runtime"
  6. "strings"
  7. "github.com/logrusorgru/aurora"
  8. "github.com/spf13/cobra"
  9. "github.com/zeromicro/go-zero/tools/goctl/api"
  10. "github.com/zeromicro/go-zero/tools/goctl/bug"
  11. "github.com/zeromicro/go-zero/tools/goctl/docker"
  12. "github.com/zeromicro/go-zero/tools/goctl/env"
  13. "github.com/zeromicro/go-zero/tools/goctl/internal/version"
  14. "github.com/zeromicro/go-zero/tools/goctl/kube"
  15. "github.com/zeromicro/go-zero/tools/goctl/migrate"
  16. "github.com/zeromicro/go-zero/tools/goctl/model"
  17. "github.com/zeromicro/go-zero/tools/goctl/rpc"
  18. "github.com/zeromicro/go-zero/tools/goctl/tpl"
  19. "github.com/zeromicro/go-zero/tools/goctl/upgrade"
  20. )
  21. const (
  22. codeFailure = 1
  23. dash = "-"
  24. doubleDash = "--"
  25. assign = "="
  26. )
  27. var rootCmd = &cobra.Command{
  28. Use: "goctl",
  29. Short: "A cli tool to generate go-zero code",
  30. Long: "A cli tool to generate api, zrpc, model code",
  31. }
  32. // Execute executes the given command
  33. func Execute() {
  34. os.Args = supportGoStdFlag(os.Args)
  35. if err := rootCmd.Execute(); err != nil {
  36. fmt.Println(aurora.Red(err.Error()))
  37. os.Exit(codeFailure)
  38. }
  39. }
  40. func supportGoStdFlag(args []string) []string {
  41. copyArgs := append([]string(nil), args...)
  42. parentCmd, _, err := rootCmd.Traverse(args[:1])
  43. if err != nil { // ignore it to let cobra handle the error.
  44. return copyArgs
  45. }
  46. for idx, arg := range copyArgs[0:] {
  47. parentCmd, _, err = parentCmd.Traverse([]string{arg})
  48. if err != nil { // ignore it to let cobra handle the error.
  49. break
  50. }
  51. if !strings.HasPrefix(arg, dash) {
  52. continue
  53. }
  54. flagExpr := strings.TrimPrefix(arg, doubleDash)
  55. flagExpr = strings.TrimPrefix(flagExpr, dash)
  56. flagName, flagValue := flagExpr, ""
  57. assignIndex := strings.Index(flagExpr, assign)
  58. if assignIndex > 0 {
  59. flagName = flagExpr[:assignIndex]
  60. flagValue = flagExpr[assignIndex:]
  61. }
  62. f := parentCmd.Flag(flagName)
  63. if f == nil {
  64. continue
  65. }
  66. if f.Shorthand == flagName {
  67. continue
  68. }
  69. goStyleFlag := doubleDash + f.Name
  70. if assignIndex > 0 {
  71. goStyleFlag += flagValue
  72. }
  73. copyArgs[idx] = goStyleFlag
  74. }
  75. return copyArgs
  76. }
  77. func init() {
  78. rootCmd.Version = fmt.Sprintf("%s %s/%s", version.BuildVersion, runtime.GOOS, runtime.GOARCH)
  79. rootCmd.AddCommand(api.Cmd)
  80. rootCmd.AddCommand(bug.Cmd)
  81. rootCmd.AddCommand(docker.Cmd)
  82. rootCmd.AddCommand(kube.Cmd)
  83. rootCmd.AddCommand(env.Cmd)
  84. rootCmd.AddCommand(model.Cmd)
  85. rootCmd.AddCommand(migrate.Cmd)
  86. rootCmd.AddCommand(rpc.Cmd)
  87. rootCmd.AddCommand(tpl.Cmd)
  88. rootCmd.AddCommand(upgrade.Cmd)
  89. }