浏览代码

feat: 更新api

SongZihuan 1 年之前
父节点
当前提交
68d5e5b1ca
共有 65 个文件被更改,包括 265 次插入263 次删除
  1. 1 1
      README.md
  2. 1 1
      go.mod
  3. 1 1
      tools/goctlwt/api/apigen/gen.go
  4. 1 1
      tools/goctlwt/api/apigen/template.go
  5. 1 1
      tools/goctlwt/api/format/format_test.go
  6. 1 1
      tools/goctlwt/api/gogen/gen.go
  7. 1 1
      tools/goctlwt/api/gogen/genroutes.go
  8. 1 1
      tools/goctlwt/api/gogen/template.go
  9. 1 1
      tools/goctlwt/api/new/newservice.go
  10. 1 1
      tools/goctlwt/api/new/template.go
  11. 1 1
      tools/goctlwt/api/parser/g4/gen/api/apiparser_parser1.go
  12. 1 1
      tools/goctlwt/api/parser/g4/gen/api/apiparser_parser2.go
  13. 1 1
      tools/goctlwt/api/parser/g4/gen/api/apiparser_parser3.go
  14. 1 1
      tools/goctlwt/api/parser/g4/gen/api/apiparser_parser4.go
  15. 1 1
      tools/goctlwt/api/parser/g4/gen/api/apiparser_parser5.go
  16. 1 1
      tools/goctlwt/api/parser/g4/gen/api/apiparser_parser6.go
  17. 1 1
      tools/goctlwt/api/parser/g4/gen/api/apiparser_parser7.go
  18. 1 1
      tools/goctlwt/api/parser/g4/gen/api/apiparser_parser8.go
  19. 1 1
      tools/goctlwt/api/parser/g4/gen/api/apiparser_visitor.go
  20. 2 2
      tools/goctlwt/api/parser/g4/gen/api/file_splitor_test.go
  21. 3 3
      tools/goctlwt/api/parser/parser.go
  22. 3 3
      tools/goctlwt/bug/issue.go
  23. 1 1
      tools/goctlwt/compare/cmd/cmd.go
  24. 1 1
      tools/goctlwt/compare/compare.go
  25. 91 91
      tools/goctlwt/compare/testdata/testcase.go
  26. 6 6
      tools/goctlwt/compare/testdata/testdata.go
  27. 3 3
      tools/goctlwt/config/readme.md
  28. 1 1
      tools/goctlwt/docker/docker.go
  29. 14 14
      tools/goctlwt/env/check.go
  30. 1 1
      tools/goctlwt/example/rpc/hello/client/greet/greet.go
  31. 1 1
      tools/goctlwt/example/rpc/hello/internal/server/greet/greetserver.go
  32. 1 1
      tools/goctlwt/example/rpc/hi/client/event/event.go
  33. 1 1
      tools/goctlwt/example/rpc/hi/client/greet/greet.go
  34. 1 1
      tools/goctlwt/example/rpc/hi/internal/server/event/eventserver.go
  35. 1 1
      tools/goctlwt/example/rpc/hi/internal/server/greet/greetserver.go
  36. 1 1
      tools/goctlwt/gateway/template.go
  37. 4 2
      tools/goctlwt/go.mod
  38. 48 48
      tools/goctlwt/go.sum
  39. 1 1
      tools/goctlwt/goctlwt.go
  40. 4 4
      tools/goctlwt/internal/errorx/errorx.go
  41. 3 3
      tools/goctlwt/internal/version/version.go
  42. 1 1
      tools/goctlwt/kube/kube.go
  43. 1 1
      tools/goctlwt/migrate/mod.go
  44. 2 2
      tools/goctlwt/model/mongo/mongo.go
  45. 2 2
      tools/goctlwt/model/mongo/readme.md
  46. 8 8
      tools/goctlwt/model/sql/README.MD
  47. 1 1
      tools/goctlwt/model/sql/command/command.go
  48. 2 2
      tools/goctlwt/model/sql/command/migrationnotes/v1.3.4.go
  49. 1 1
      tools/goctlwt/model/sql/command/migrationnotes/v1.3.4_test.go
  50. 1 1
      tools/goctlwt/pkg/env/env.go
  51. 1 1
      tools/goctlwt/plugin/plugin.go
  52. 1 1
      tools/goctlwt/quickstart/micro.go
  53. 9 9
      tools/goctlwt/rpc/README.md
  54. 2 2
      tools/goctlwt/rpc/cli/cli.go
  55. 1 1
      tools/goctlwt/rpc/cli/zrpc.go
  56. 1 1
      tools/goctlwt/rpc/generator/genpb.go
  57. 1 1
      tools/goctlwt/rpc/generator/template.go
  58. 1 1
      tools/goctlwt/test/integration/model/mongo/Dockerfile
  59. 4 4
      tools/goctlwt/test/integration/model/mongo/mongo.sh
  60. 1 1
      tools/goctlwt/test/main.sh
  61. 1 1
      tools/goctlwt/update/config/config.go
  62. 1 1
      tools/goctlwt/update/update.go
  63. 3 3
      tools/goctlwt/upgrade/upgrade.go
  64. 1 1
      tools/goctlwt/util/head.go
  65. 7 7
      tools/goctlwt/util/pathx/file.go

+ 1 - 1
README.md

@@ -4,5 +4,5 @@
 新增若干功能  
 新增若干功能  
 
 
 ## 开源项目
 ## 开源项目
-[go-zero](https://github.com/zeromicro/go-zero)  
+[go-zero](https://github.com/wuntsong-org/go-zero-plus)  
 [go-zero-superh](https://github.com/SuperH-0630/go-zero)  
 [go-zero-superh](https://github.com/SuperH-0630/go-zero)  

+ 1 - 1
go.mod

@@ -123,4 +123,4 @@ require (
 	sigs.k8s.io/yaml v1.3.0 // indirect
 	sigs.k8s.io/yaml v1.3.0 // indirect
 )
 )
 
 
-replace github.com/zeromicro/go-zero => ./
+replace github.com/wuntsong-org/go-zero-plus => ./

+ 1 - 1
tools/goctlwt/api/apigen/gen.go

@@ -20,7 +20,7 @@ var apiTemplate string
 var (
 var (
 	// VarStringOutput describes the output.
 	// VarStringOutput describes the output.
 	VarStringOutput string
 	VarStringOutput string
-	// VarStringHome describes the goctlwt home.
+	// VarStringHome describes the goctl home.
 	VarStringHome string
 	VarStringHome string
 	// VarStringRemote describes the remote git repository.
 	// VarStringRemote describes the remote git repository.
 	VarStringRemote string
 	VarStringRemote string

+ 1 - 1
tools/goctlwt/api/apigen/template.go

@@ -39,7 +39,7 @@ func RevertTemplate(name string) error {
 	return pathx.CreateTemplate(category, name, content)
 	return pathx.CreateTemplate(category, name, content)
 }
 }
 
 
-// Update updates the template files to the templates built in current goctlwt.
+// Update updates the template files to the templates built in current goctl.
 func Update() error {
 func Update() error {
 	err := Clean()
 	err := Clean()
 	if err != nil {
 	if err != nil {

+ 1 - 1
tools/goctlwt/api/format/format_test.go

@@ -62,7 +62,7 @@ func TestFormat(t *testing.T) {
 }
 }
 
 
 func Test_apiFormatReader_issue1721(t *testing.T) {
 func Test_apiFormatReader_issue1721(t *testing.T) {
-	dir, err := os.MkdirTemp("", "goctlwt-api-format")
+	dir, err := os.MkdirTemp("", "goctl-api-format")
 	require.NoError(t, err)
 	require.NoError(t, err)
 	defer os.RemoveAll(dir)
 	defer os.RemoveAll(dir)
 	subDir := path.Join(dir, "sub")
 	subDir := path.Join(dir, "sub")

+ 1 - 1
tools/goctlwt/api/gogen/gen.go

@@ -26,7 +26,7 @@ import (
 const tmpFile = "%s-%d"
 const tmpFile = "%s-%d"
 
 
 var (
 var (
-	tmpDir = path.Join(os.TempDir(), "goctlwt")
+	tmpDir = path.Join(os.TempDir(), "goctl")
 	// VarStringDir describes the directory.
 	// VarStringDir describes the directory.
 	VarStringDir string
 	VarStringDir string
 	// VarStringAPI describes the API.
 	// VarStringAPI describes the API.

+ 1 - 1
tools/goctlwt/api/gogen/genroutes.go

@@ -21,7 +21,7 @@ import (
 const (
 const (
 	jwtTransKey    = "jwtTransition"
 	jwtTransKey    = "jwtTransition"
 	routesFilename = "routes"
 	routesFilename = "routes"
-	routesTemplate = `// Code generated by goctlwt. DO NOT EDIT.
+	routesTemplate = `// Code generated by goctl. DO NOT EDIT.
 package handler
 package handler
 
 
 import (
 import (

+ 1 - 1
tools/goctlwt/api/gogen/template.go

@@ -57,7 +57,7 @@ func RevertTemplate(name string) error {
 	return pathx.CreateTemplate(category, name, content)
 	return pathx.CreateTemplate(category, name, content)
 }
 }
 
 
-// Update updates the template files to the templates built in current goctlwt.
+// Update updates the template files to the templates built in current goctl.
 func Update() error {
 func Update() error {
 	err := Clean()
 	err := Clean()
 	if err != nil {
 	if err != nil {

+ 1 - 1
tools/goctlwt/api/new/newservice.go

@@ -19,7 +19,7 @@ import (
 var apiTemplate string
 var apiTemplate string
 
 
 var (
 var (
-	// VarStringHome describes the goctlwt home.
+	// VarStringHome describes the goctl home.
 	VarStringHome string
 	VarStringHome string
 	// VarStringRemote describes the remote git repository.
 	// VarStringRemote describes the remote git repository.
 	VarStringRemote string
 	VarStringRemote string

+ 1 - 1
tools/goctlwt/api/new/template.go

@@ -39,7 +39,7 @@ func RevertTemplate(name string) error {
 	return pathx.CreateTemplate(category, name, content)
 	return pathx.CreateTemplate(category, name, content)
 }
 }
 
 
-// Update updates the template files to the templates built in current goctlwt.
+// Update updates the template files to the templates built in current goctl.
 func Update() error {
 func Update() error {
 	err := Clean()
 	err := Clean()
 	if err != nil {
 	if err != nil {

+ 1 - 1
tools/goctlwt/api/parser/g4/gen/api/apiparser_parser1.go

@@ -8,7 +8,7 @@ import (
 
 
 // Part 1
 // Part 1
 // The apiparser_parser.go file was split into multiple files because it
 // The apiparser_parser.go file was split into multiple files because it
-// was too large and caused a possible memory overflow during goctlwt installation.
+// was too large and caused a possible memory overflow during goctl installation.
 
 
 func (s *SyntaxLitContext) STRING() antlr.TerminalNode {
 func (s *SyntaxLitContext) STRING() antlr.TerminalNode {
 	return s.GetToken(ApiParserParserSTRING, 0)
 	return s.GetToken(ApiParserParserSTRING, 0)

+ 1 - 1
tools/goctlwt/api/parser/g4/gen/api/apiparser_parser2.go

@@ -8,7 +8,7 @@ import (
 
 
 // Part 2
 // Part 2
 // The apiparser_parser.go file was split into multiple files because it
 // The apiparser_parser.go file was split into multiple files because it
-// was too large and caused a possible memory overflow during goctlwt installation.
+// was too large and caused a possible memory overflow during goctl installation.
 
 
 type InfoSpecContext struct {
 type InfoSpecContext struct {
 	*antlr.BaseParserRuleContext
 	*antlr.BaseParserRuleContext

+ 1 - 1
tools/goctlwt/api/parser/g4/gen/api/apiparser_parser3.go

@@ -8,7 +8,7 @@ import (
 
 
 // Part 3
 // Part 3
 // The apiparser_parser.go file was split into multiple files because it
 // The apiparser_parser.go file was split into multiple files because it
-// was too large and caused a possible memory overflow during goctlwt installation.
+// was too large and caused a possible memory overflow during goctl installation.
 
 
 // ITypeBlockBodyContext is an interface to support dynamic dispatch.
 // ITypeBlockBodyContext is an interface to support dynamic dispatch.
 type ITypeBlockBodyContext interface {
 type ITypeBlockBodyContext interface {

+ 1 - 1
tools/goctlwt/api/parser/g4/gen/api/apiparser_parser4.go

@@ -8,7 +8,7 @@ import (
 
 
 // Part 4
 // Part 4
 // The apiparser_parser.go file was split into multiple files because it
 // The apiparser_parser.go file was split into multiple files because it
-// was too large and caused a possible memory overflow during goctlwt installation.
+// was too large and caused a possible memory overflow during goctl installation.
 
 
 // ITypeBlockAliasContext is an interface to support dynamic dispatch.
 // ITypeBlockAliasContext is an interface to support dynamic dispatch.
 type ITypeBlockAliasContext interface {
 type ITypeBlockAliasContext interface {

+ 1 - 1
tools/goctlwt/api/parser/g4/gen/api/apiparser_parser5.go

@@ -8,7 +8,7 @@ import (
 
 
 // Part 5
 // Part 5
 // The apiparser_parser.go file was split into multiple files because it
 // The apiparser_parser.go file was split into multiple files because it
-// was too large and caused a possible memory overflow during goctlwt installation.
+// was too large and caused a possible memory overflow during goctl installation.
 
 
 func (p *ApiParserParser) DataType() (localctx IDataTypeContext) {
 func (p *ApiParserParser) DataType() (localctx IDataTypeContext) {
 	localctx = NewDataTypeContext(p, p.GetParserRuleContext(), p.GetState())
 	localctx = NewDataTypeContext(p, p.GetParserRuleContext(), p.GetState())

+ 1 - 1
tools/goctlwt/api/parser/g4/gen/api/apiparser_parser6.go

@@ -8,7 +8,7 @@ import (
 
 
 // Part 6
 // Part 6
 // The apiparser_parser.go file was split into multiple files because it
 // The apiparser_parser.go file was split into multiple files because it
-// was too large and caused a possible memory overflow during goctlwt installation.
+// was too large and caused a possible memory overflow during goctl installation.
 
 
 type AtServerContext struct {
 type AtServerContext struct {
 	*antlr.BaseParserRuleContext
 	*antlr.BaseParserRuleContext

+ 1 - 1
tools/goctlwt/api/parser/g4/gen/api/apiparser_parser7.go

@@ -8,7 +8,7 @@ import (
 
 
 // Part 7
 // Part 7
 // The apiparser_parser.go file was split into multiple files because it
 // The apiparser_parser.go file was split into multiple files because it
-// was too large and caused a possible memory overflow during goctlwt installation.
+// was too large and caused a possible memory overflow during goctl installation.
 
 
 // IAtHandlerContext is an interface to support dynamic dispatch.
 // IAtHandlerContext is an interface to support dynamic dispatch.
 type IAtHandlerContext interface {
 type IAtHandlerContext interface {

+ 1 - 1
tools/goctlwt/api/parser/g4/gen/api/apiparser_parser8.go

@@ -9,7 +9,7 @@ import (
 
 
 // Part 8
 // Part 8
 // The apiparser_parser.go file was split into multiple files because it
 // The apiparser_parser.go file was split into multiple files because it
-// was too large and caused a possible memory overflow during goctlwt installation.
+// was too large and caused a possible memory overflow during goctl installation.
 
 
 func (s *KvLitContext) Accept(visitor antlr.ParseTreeVisitor) any {
 func (s *KvLitContext) Accept(visitor antlr.ParseTreeVisitor) any {
 	switch t := visitor.(type) {
 	switch t := visitor.(type) {

+ 1 - 1
tools/goctlwt/api/parser/g4/gen/api/apiparser_visitor.go

@@ -1,4 +1,4 @@
-// Code generated from C:/Users/keson/GolandProjects/go-zero/tools/goctlwt/api/parser/g4\ApiParser.g4 by ANTLR 4.9. DO NOT EDIT.
+// Code generated from C:/Users/keson/GolandProjects/go-zero/tools/goctl/api/parser/g4\ApiParser.g4 by ANTLR 4.9. DO NOT EDIT.
 
 
 package api // ApiParser
 package api // ApiParser
 import "github.com/zeromicro/antlr"
 import "github.com/zeromicro/antlr"

+ 2 - 2
tools/goctlwt/api/parser/g4/gen/api/file_splitor_test.go

@@ -1,7 +1,7 @@
 // DO NOT EDIT.
 // DO NOT EDIT.
 // Tool: split apiparser_parser.go
 // Tool: split apiparser_parser.go
 // The apiparser_parser.go file was split into multiple files because it
 // The apiparser_parser.go file was split into multiple files because it
-// was too large and caused a possible memory overflow during goctlwt installation.
+// was too large and caused a possible memory overflow during goctl installation.
 package api
 package api
 
 
 import (
 import (
@@ -42,7 +42,7 @@ import "github.com/zeromicro/antlr"
 
 
 // Part %s
 // Part %s
 // The apiparser_parser.go file was split into multiple files because it
 // The apiparser_parser.go file was split into multiple files because it
-// was too large and caused a possible memory overflow during goctlwt installation.
+// was too large and caused a possible memory overflow during goctl installation.
 `, part))
 `, part))
 		}
 		}
 
 

+ 3 - 3
tools/goctlwt/api/parser/parser.go

@@ -17,7 +17,7 @@ type parser struct {
 	spec *spec.ApiSpec
 	spec *spec.ApiSpec
 }
 }
 
 
-// Depreacted: use tools/goctlwt/pkg/parser/api/parser/parser.go:18 instead,
+// Depreacted: use tools/goctl/pkg/parser/api/parser/parser.go:18 instead,
 // it will be removed in the future.
 // it will be removed in the future.
 // Parse parses the api file.
 // Parse parses the api file.
 func Parse(filename string) (*spec.ApiSpec, error) {
 func Parse(filename string) (*spec.ApiSpec, error) {
@@ -63,14 +63,14 @@ func parseContent(content string, skipCheckTypeDeclaration bool, filename ...str
 	return apiSpec, nil
 	return apiSpec, nil
 }
 }
 
 
-// Depreacted: use tools/goctlwt/pkg/parser/api/parser/parser.go:18 instead,
+// Depreacted: use tools/goctl/pkg/parser/api/parser/parser.go:18 instead,
 // it will be removed in the future.
 // it will be removed in the future.
 // ParseContent parses the api content
 // ParseContent parses the api content
 func ParseContent(content string, filename ...string) (*spec.ApiSpec, error) {
 func ParseContent(content string, filename ...string) (*spec.ApiSpec, error) {
 	return parseContent(content, false, filename...)
 	return parseContent(content, false, filename...)
 }
 }
 
 
-// Depreacted: use tools/goctlwt/pkg/parser/api/parser/parser.go:18 instead,
+// Depreacted: use tools/goctl/pkg/parser/api/parser/parser.go:18 instead,
 // it will be removed in the future.
 // it will be removed in the future.
 // ParseContentWithParserSkipCheckTypeDeclaration parses the api content with skip check type declaration
 // ParseContentWithParserSkipCheckTypeDeclaration parses the api content with skip check type declaration
 func ParseContentWithParserSkipCheckTypeDeclaration(content string, filename ...string) (*spec.ApiSpec, error) {
 func ParseContentWithParserSkipCheckTypeDeclaration(content string, filename ...string) (*spec.ApiSpec, error) {

+ 3 - 3
tools/goctlwt/bug/issue.go

@@ -3,14 +3,14 @@ package bug
 const issueTemplate = `
 const issueTemplate = `
 <!-- Please answer these questions before submitting your issue. Thanks! -->
 <!-- Please answer these questions before submitting your issue. Thanks! -->
 
 
-### What category of issue (<code>goctlwt</code> or <code>sdk</code>)?
+### What category of issue (<code>goctl</code> or <code>sdk</code>)?
 
 
 ### What type of issue (<code>feature</code>|<code>bug</code>|<code>suggestion</code>)?
 ### What type of issue (<code>feature</code>|<code>bug</code>|<code>suggestion</code>)?
 
 
-### What version of Goctl are you using (<code>goctlwt --version</code>)?
+### What version of Goctl are you using (<code>goctl --version</code>)?
 
 
 <pre>
 <pre>
-$ goctlwt --version
+$ goctl --version
 %s
 %s
 </pre>
 </pre>
 
 

+ 1 - 1
tools/goctlwt/compare/cmd/cmd.go

@@ -8,7 +8,7 @@ import (
 
 
 var rootCmd = &cobra.Command{
 var rootCmd = &cobra.Command{
 	Use:   "compare",
 	Use:   "compare",
-	Short: "Compare the goctlwt commands generated results between urfave and cobra",
+	Short: "Compare the goctl commands generated results between urfave and cobra",
 	Args:  cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),
 	Args:  cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),
 	Run: func(cmd *cobra.Command, args []string) {
 	Run: func(cmd *cobra.Command, args []string) {
 		dir := args[0]
 		dir := args[0]

+ 1 - 1
tools/goctlwt/compare/compare.go

@@ -2,7 +2,7 @@ package main
 
 
 import "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/compare/cmd"
 import "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/compare/cmd"
 
 
-// EXPERIMENTAL: compare goctlwt generated code results between old and new, it will be removed in the feature.
+// EXPERIMENTAL: compare goctl generated code results between old and new, it will be removed in the feature.
 // TODO: BEFORE RUNNING: export DSN=$datasource, the database must be gozero, and there has no limit for tables.
 // TODO: BEFORE RUNNING: export DSN=$datasource, the database must be gozero, and there has no limit for tables.
 // TODO: AFTER RUNNING: diff --recursive old_fs new_fs
 // TODO: AFTER RUNNING: diff --recursive old_fs new_fs
 
 

+ 91 - 91
tools/goctlwt/compare/testdata/testcase.go

@@ -14,457 +14,457 @@ var (
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "version",
 			Path:  "version",
-			Cmd:   "goctlwt --version",
+			Cmd:   "goctl --version",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/sample_file/local",
 			Path:  "api/sample_file/local",
-			Cmd:   "goctlwt api --o sample.api",
+			Cmd:   "goctl api --o sample.api",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/sample_file/local/assign",
 			Path:  "api/sample_file/local/assign",
-			Cmd:   "goctlwt api --o=sample.api",
+			Cmd:   "goctl api --o=sample.api",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/sample_file/local/assign/shorthand",
 			Path:  "api/sample_file/local/assign/shorthand",
-			Cmd:   "goctlwt api -o=sample.api",
+			Cmd:   "goctl api -o=sample.api",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/sample_file/remote",
 			Path:  "api/sample_file/remote",
-			Cmd:   "goctlwt api --o sample.api --remote https://github.com/wuntsong-org/go-zero-plus-template --branch main",
+			Cmd:   "goctl api --o sample.api --remote https://github.com/wuntsong-org/go-zero-plus-template --branch main",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/sample_file/remote/shorthand",
 			Path:  "api/sample_file/remote/shorthand",
-			Cmd:   "goctlwt api -o sample.api -remote https://github.com/wuntsong-org/go-zero-plus-template -branch main",
+			Cmd:   "goctl api -o sample.api -remote https://github.com/wuntsong-org/go-zero-plus-template -branch main",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/sample_file/remote/assign",
 			Path:  "api/sample_file/remote/assign",
-			Cmd:   "goctlwt api --o=sample.api --remote https://github.com/wuntsong-org/go-zero-plus-template --branch=main",
+			Cmd:   "goctl api --o=sample.api --remote https://github.com/wuntsong-org/go-zero-plus-template --branch=main",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/sample_file/remote/assign/shorthand",
 			Path:  "api/sample_file/remote/assign/shorthand",
-			Cmd:   "goctlwt api -o=sample.api -remote https://github.com/wuntsong-org/go-zero-plus-template -branch=main",
+			Cmd:   "goctl api -o=sample.api -remote https://github.com/wuntsong-org/go-zero-plus-template -branch=main",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/dart/legacy/true",
 			Path:  "api/dart/legacy/true",
-			Cmd:   "goctlwt api --o sample.api && goctlwt api dart --api sample.api --dir . --hostname 127.0.0.1 --legacy true",
+			Cmd:   "goctl api --o sample.api && goctl api dart --api sample.api --dir . --hostname 127.0.0.1 --legacy true",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/dart/legacy/true/shorthand",
 			Path:  "api/dart/legacy/true/shorthand",
-			Cmd:   "goctlwt api -o sample.api && goctlwt api dart -api sample.api -dir . -hostname 127.0.0.1 -legacy true",
+			Cmd:   "goctl api -o sample.api && goctl api dart -api sample.api -dir . -hostname 127.0.0.1 -legacy true",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/dart/legacy/true/assign",
 			Path:  "api/dart/legacy/true/assign",
-			Cmd:   "goctlwt api --o=sample.api && goctlwt api dart --api=sample.api --dir=. --hostname=127.0.0.1 --legacy=true",
+			Cmd:   "goctl api --o=sample.api && goctl api dart --api=sample.api --dir=. --hostname=127.0.0.1 --legacy=true",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/dart/legacy/true/assign/shorthand",
 			Path:  "api/dart/legacy/true/assign/shorthand",
-			Cmd:   "goctlwt api -o=sample.api && goctlwt api dart -api=sample.api -dir=. -hostname=127.0.0.1 -legacy=true",
+			Cmd:   "goctl api -o=sample.api && goctl api dart -api=sample.api -dir=. -hostname=127.0.0.1 -legacy=true",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/dart/legacy/false",
 			Path:  "api/dart/legacy/false",
-			Cmd:   "goctlwt api --o sample.api && goctlwt api dart --api sample.api --dir . --hostname 127.0.0.1 --legacy true",
+			Cmd:   "goctl api --o sample.api && goctl api dart --api sample.api --dir . --hostname 127.0.0.1 --legacy true",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/dart/legacy/false/shorthand",
 			Path:  "api/dart/legacy/false/shorthand",
-			Cmd:   "goctlwt api -o sample.api && goctlwt api dart -api sample.api -dir . -hostname 127.0.0.1 -legacy true",
+			Cmd:   "goctl api -o sample.api && goctl api dart -api sample.api -dir . -hostname 127.0.0.1 -legacy true",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/dart/legacy/false/assign",
 			Path:  "api/dart/legacy/false/assign",
-			Cmd:   "goctlwt api --o=sample.api && goctlwt api dart --api=sample.api --dir=. --hostname=127.0.0.1 --legacy=true",
+			Cmd:   "goctl api --o=sample.api && goctl api dart --api=sample.api --dir=. --hostname=127.0.0.1 --legacy=true",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/dart/legacy/false/assign/shorthand",
 			Path:  "api/dart/legacy/false/assign/shorthand",
-			Cmd:   "goctlwt api -o=sample.api && goctlwt api dart -api=sample.api -dir=. -hostname=127.0.0.1 -legacy=true",
+			Cmd:   "goctl api -o=sample.api && goctl api dart -api=sample.api -dir=. -hostname=127.0.0.1 -legacy=true",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/doc",
 			Path:  "api/doc",
-			Cmd:   "goctlwt api --o sample.api && goctlwt api doc --dir . --o .",
+			Cmd:   "goctl api --o sample.api && goctl api doc --dir . --o .",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/doc/shorthand",
 			Path:  "api/doc/shorthand",
-			Cmd:   "goctlwt api -o sample.api && goctlwt api doc -dir . -o .",
+			Cmd:   "goctl api -o sample.api && goctl api doc -dir . -o .",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/doc/assign",
 			Path:  "api/doc/assign",
-			Cmd:   "goctlwt api --o=sample.api && goctlwt api doc --dir=. --o=.",
+			Cmd:   "goctl api --o=sample.api && goctl api doc --dir=. --o=.",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/doc/assign/shorthand",
 			Path:  "api/doc/assign/shorthand",
-			Cmd:   "goctlwt api -o=sample.api && goctlwt api doc -dir=. -o=.",
+			Cmd:   "goctl api -o=sample.api && goctl api doc -dir=. -o=.",
 		},
 		},
 		{
 		{
 			Path:    "api/format/unformat.api",
 			Path:    "api/format/unformat.api",
 			Content: unformatApi,
 			Content: unformatApi,
-			Cmd:     "goctlwt api format --dir . --iu",
+			Cmd:     "goctl api format --dir . --iu",
 		},
 		},
 		{
 		{
 			Path:    "api/format/shorthand/unformat.api",
 			Path:    "api/format/shorthand/unformat.api",
 			Content: unformatApi,
 			Content: unformatApi,
-			Cmd:     "goctlwt api format -dir . -iu",
+			Cmd:     "goctl api format -dir . -iu",
 		},
 		},
 		{
 		{
 			Path:    "api/format/assign/unformat.api",
 			Path:    "api/format/assign/unformat.api",
 			Content: unformatApi,
 			Content: unformatApi,
-			Cmd:     "goctlwt api format --dir=. --iu",
+			Cmd:     "goctl api format --dir=. --iu",
 		},
 		},
 		{
 		{
 			Path:    "api/format/assign/shorthand/unformat.api",
 			Path:    "api/format/assign/shorthand/unformat.api",
 			Content: unformatApi,
 			Content: unformatApi,
-			Cmd:     "goctlwt api format -dir=. -iu",
+			Cmd:     "goctl api format -dir=. -iu",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/go/style/default",
 			Path:  "api/go/style/default",
-			Cmd:   "goctlwt api --o sample.api && goctlwt api go --api sample.api --dir .",
+			Cmd:   "goctl api --o sample.api && goctl api go --api sample.api --dir .",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/go/style/default/shorthand",
 			Path:  "api/go/style/default/shorthand",
-			Cmd:   "goctlwt api -o sample.api && goctlwt api go -api sample.api -dir .",
+			Cmd:   "goctl api -o sample.api && goctl api go -api sample.api -dir .",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/go/style/assign/default",
 			Path:  "api/go/style/assign/default",
-			Cmd:   "goctlwt api --o=sample.api && goctlwt api go --api=sample.api --dir=.",
+			Cmd:   "goctl api --o=sample.api && goctl api go --api=sample.api --dir=.",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/go/style/assign/default/shorthand",
 			Path:  "api/go/style/assign/default/shorthand",
-			Cmd:   "goctlwt api -o=sample.api && goctlwt api go -api=sample.api -dir=.",
+			Cmd:   "goctl api -o=sample.api && goctl api go -api=sample.api -dir=.",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/go/style/goZero",
 			Path:  "api/go/style/goZero",
-			Cmd:   "goctlwt api --o sample.api && goctlwt api go --api sample.api --dir . --style goZero",
+			Cmd:   "goctl api --o sample.api && goctl api go --api sample.api --dir . --style goZero",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/go/style/goZero/shorthand",
 			Path:  "api/go/style/goZero/shorthand",
-			Cmd:   "goctlwt api -o sample.api && goctlwt api go -api sample.api -dir . -style goZero",
+			Cmd:   "goctl api -o sample.api && goctl api go -api sample.api -dir . -style goZero",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/go/style/goZero/assign",
 			Path:  "api/go/style/goZero/assign",
-			Cmd:   "goctlwt api --o=sample.api && goctlwt api go --api=sample.api --dir=. --style=goZero",
+			Cmd:   "goctl api --o=sample.api && goctl api go --api=sample.api --dir=. --style=goZero",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/go/style/goZero/assign/shorthand",
 			Path:  "api/go/style/goZero/assign/shorthand",
-			Cmd:   "goctlwt api -o=sample.api && goctlwt api go -api=sample.api -dir=. -style=goZero",
+			Cmd:   "goctl api -o=sample.api && goctl api go -api=sample.api -dir=. -style=goZero",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/java",
 			Path:  "api/java",
-			Cmd:   "goctlwt api --o sample.api && goctlwt api java --api sample.api --dir .",
+			Cmd:   "goctl api --o sample.api && goctl api java --api sample.api --dir .",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/java/shorthand",
 			Path:  "api/java/shorthand",
-			Cmd:   "goctlwt api -o sample.api && goctlwt api java -api sample.api -dir .",
+			Cmd:   "goctl api -o sample.api && goctl api java -api sample.api -dir .",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/java/assign",
 			Path:  "api/java/assign",
-			Cmd:   "goctlwt api --o=sample.api && goctlwt api java --api=sample.api --dir=.",
+			Cmd:   "goctl api --o=sample.api && goctl api java --api=sample.api --dir=.",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/java/shorthand/assign",
 			Path:  "api/java/shorthand/assign",
-			Cmd:   "goctlwt api -o=sample.api && goctlwt api java -api=sample.api -dir=.",
+			Cmd:   "goctl api -o=sample.api && goctl api java -api=sample.api -dir=.",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/new/style/default",
 			Path:  "api/new/style/default",
-			Cmd:   "goctlwt api new greet",
+			Cmd:   "goctl api new greet",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/new/style/goZero",
 			Path:  "api/new/style/goZero",
-			Cmd:   "goctlwt api new greet --style goZero",
+			Cmd:   "goctl api new greet --style goZero",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/new/style/goZero/assign",
 			Path:  "api/new/style/goZero/assign",
-			Cmd:   "goctlwt api new greet --style=goZero",
+			Cmd:   "goctl api new greet --style=goZero",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/new/style/goZero/shorthand",
 			Path:  "api/new/style/goZero/shorthand",
-			Cmd:   "goctlwt api new greet -style goZero",
+			Cmd:   "goctl api new greet -style goZero",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/new/style/goZero/shorthand/assign",
 			Path:  "api/new/style/goZero/shorthand/assign",
-			Cmd:   "goctlwt api new greet -style=goZero",
+			Cmd:   "goctl api new greet -style=goZero",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/ts",
 			Path:  "api/ts",
-			Cmd:   "goctlwt api --o sample.api && goctlwt api ts --api sample.api --dir . --unwrap --webapi .",
+			Cmd:   "goctl api --o sample.api && goctl api ts --api sample.api --dir . --unwrap --webapi .",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/ts/shorthand",
 			Path:  "api/ts/shorthand",
-			Cmd:   "goctlwt api -o sample.api && goctlwt api ts -api sample.api -dir . -unwrap -webapi .",
+			Cmd:   "goctl api -o sample.api && goctl api ts -api sample.api -dir . -unwrap -webapi .",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/ts/assign",
 			Path:  "api/ts/assign",
-			Cmd:   "goctlwt api --o=sample.api && goctlwt api ts --api=sample.api --dir=. --unwrap --webapi=.",
+			Cmd:   "goctl api --o=sample.api && goctl api ts --api=sample.api --dir=. --unwrap --webapi=.",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/ts/shorthand/assign",
 			Path:  "api/ts/shorthand/assign",
-			Cmd:   "goctlwt api -o=sample.api && goctlwt api ts -api=sample.api -dir=. -unwrap -webapi=.",
+			Cmd:   "goctl api -o=sample.api && goctl api ts -api=sample.api -dir=. -unwrap -webapi=.",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/validate",
 			Path:  "api/validate",
-			Cmd:   "goctlwt api --o sample.api && goctlwt api validate --api sample.api",
+			Cmd:   "goctl api --o sample.api && goctl api validate --api sample.api",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/validate/shorthand",
 			Path:  "api/validate/shorthand",
-			Cmd:   "goctlwt api -o sample.api && goctlwt api validate -api sample.api",
+			Cmd:   "goctl api -o sample.api && goctl api validate -api sample.api",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/validate/assign",
 			Path:  "api/validate/assign",
-			Cmd:   "goctlwt api --o=sample.api && goctlwt api validate --api=sample.api",
+			Cmd:   "goctl api --o=sample.api && goctl api validate --api=sample.api",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "api/validate/shorthand/assign",
 			Path:  "api/validate/shorthand/assign",
-			Cmd:   "goctlwt api -o=sample.api && goctlwt api validate -api=sample.api",
+			Cmd:   "goctl api -o=sample.api && goctl api validate -api=sample.api",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "env/show",
 			Path:  "env/show",
-			Cmd:   "goctlwt env > env.txt",
+			Cmd:   "goctl env > env.txt",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "env/check",
 			Path:  "env/check",
-			Cmd:   "goctlwt env check -f -v",
+			Cmd:   "goctl env check -f -v",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "env/install",
 			Path:  "env/install",
-			Cmd:   "goctlwt env install -v",
+			Cmd:   "goctl env install -v",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "kube",
 			Path:  "kube",
-			Cmd:   "goctlwt kube deploy --image alpine --name foo --namespace foo --o foo.yaml --port 8888",
+			Cmd:   "goctl kube deploy --image alpine --name foo --namespace foo --o foo.yaml --port 8888",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "kube/shorthand",
 			Path:  "kube/shorthand",
-			Cmd:   "goctlwt kube deploy -image alpine -name foo -namespace foo -o foo.yaml -port 8888",
+			Cmd:   "goctl kube deploy -image alpine -name foo -namespace foo -o foo.yaml -port 8888",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "kube/assign",
 			Path:  "kube/assign",
-			Cmd:   "goctlwt kube deploy --image=alpine --name=foo --namespace=foo --o=foo.yaml --port=8888",
+			Cmd:   "goctl kube deploy --image=alpine --name=foo --namespace=foo --o=foo.yaml --port=8888",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "kube/shorthand/assign",
 			Path:  "kube/shorthand/assign",
-			Cmd:   "goctlwt kube deploy -image=alpine -name=foo -namespace=foo -o=foo.yaml -port=8888",
+			Cmd:   "goctl kube deploy -image=alpine -name=foo -namespace=foo -o=foo.yaml -port=8888",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mongo/cache",
 			Path:  "model/mongo/cache",
-			Cmd:   "goctlwt model mongo --dir . --type user --style goZero -c",
+			Cmd:   "goctl model mongo --dir . --type user --style goZero -c",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mongo/cache/shorthand",
 			Path:  "model/mongo/cache/shorthand",
-			Cmd:   "goctlwt model mongo -dir . -type user -style goZero -c",
+			Cmd:   "goctl model mongo -dir . -type user -style goZero -c",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mongo/cache/assign",
 			Path:  "model/mongo/cache/assign",
-			Cmd:   "goctlwt model mongo --dir=. --type=user --style=goZero -c",
+			Cmd:   "goctl model mongo --dir=. --type=user --style=goZero -c",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mongo/cache/shorthand/assign",
 			Path:  "model/mongo/cache/shorthand/assign",
-			Cmd:   "goctlwt model mongo -dir=. -type=user -style=goZero -c",
+			Cmd:   "goctl model mongo -dir=. -type=user -style=goZero -c",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mongo/nocache",
 			Path:  "model/mongo/nocache",
-			Cmd:   "goctlwt model mongo --dir . --type user",
+			Cmd:   "goctl model mongo --dir . --type user",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mongo/nocache/shorthand",
 			Path:  "model/mongo/nocache/shorthand",
-			Cmd:   "goctlwt model mongo -dir . -type user",
+			Cmd:   "goctl model mongo -dir . -type user",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mongo/nocache/assign",
 			Path:  "model/mongo/nocache/assign",
-			Cmd:   "goctlwt model mongo --dir=. --type=user",
+			Cmd:   "goctl model mongo --dir=. --type=user",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mongo/nocache/shorthand/assign",
 			Path:  "model/mongo/nocache/shorthand/assign",
-			Cmd:   "goctlwt model mongo -dir=. -type=user",
+			Cmd:   "goctl model mongo -dir=. -type=user",
 		},
 		},
 		{
 		{
 			Content: userSql,
 			Content: userSql,
 			Path:    "model/mysql/ddl/user.sql",
 			Path:    "model/mysql/ddl/user.sql",
-			Cmd:     "goctlwt model mysql ddl --database user --dir cache --src user.sql -c",
+			Cmd:     "goctl model mysql ddl --database user --dir cache --src user.sql -c",
 		},
 		},
 		{
 		{
 			Content: userSql,
 			Content: userSql,
 			Path:    "model/mysql/ddl/shorthand/user.sql",
 			Path:    "model/mysql/ddl/shorthand/user.sql",
-			Cmd:     "goctlwt model mysql ddl -database user -dir cache -src user.sql -c",
+			Cmd:     "goctl model mysql ddl -database user -dir cache -src user.sql -c",
 		},
 		},
 		{
 		{
 			Content: userSql,
 			Content: userSql,
 			Path:    "model/mysql/ddl/assign/user.sql",
 			Path:    "model/mysql/ddl/assign/user.sql",
-			Cmd:     "goctlwt model mysql ddl --database=user --dir=cache --src=user.sql -c",
+			Cmd:     "goctl model mysql ddl --database=user --dir=cache --src=user.sql -c",
 		},
 		},
 		{
 		{
 			Content: userSql,
 			Content: userSql,
 			Path:    "model/mysql/ddl/shorthand/assign/user.sql",
 			Path:    "model/mysql/ddl/shorthand/assign/user.sql",
-			Cmd:     "goctlwt model mysql ddl -database=user -dir=cache -src=user.sql -c",
+			Cmd:     "goctl model mysql ddl -database=user -dir=cache -src=user.sql -c",
 		},
 		},
 		{
 		{
 			Content: userSql,
 			Content: userSql,
 			Path:    "model/mysql/ddl/user.sql",
 			Path:    "model/mysql/ddl/user.sql",
-			Cmd:     "goctlwt model mysql ddl --database user --dir nocache --src user.sql",
+			Cmd:     "goctl model mysql ddl --database user --dir nocache --src user.sql",
 		},
 		},
 		{
 		{
 			Content: userSql,
 			Content: userSql,
 			Path:    "model/mysql/ddl/shorthand/user.sql",
 			Path:    "model/mysql/ddl/shorthand/user.sql",
-			Cmd:     "goctlwt model mysql ddl -database user -dir nocache -src user.sql",
+			Cmd:     "goctl model mysql ddl -database user -dir nocache -src user.sql",
 		},
 		},
 		{
 		{
 			Content: userSql,
 			Content: userSql,
 			Path:    "model/mysql/ddl/assign/user.sql",
 			Path:    "model/mysql/ddl/assign/user.sql",
-			Cmd:     "goctlwt model mysql ddl --database=user --dir=nocache --src=user.sql",
+			Cmd:     "goctl model mysql ddl --database=user --dir=nocache --src=user.sql",
 		},
 		},
 		{
 		{
 			Content: userSql,
 			Content: userSql,
 			Path:    "model/mysql/ddl/shorthand/assign/user.sql",
 			Path:    "model/mysql/ddl/shorthand/assign/user.sql",
-			Cmd:     "goctlwt model mysql ddl -database=user -dir=nocache -src=user.sql",
+			Cmd:     "goctl model mysql ddl -database=user -dir=nocache -src=user.sql",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource",
 			Path:  "model/mysql/datasource",
-			Cmd:   `goctlwt model mysql datasource --url $DSN --dir cache --table "*" -c`,
+			Cmd:   `goctl model mysql datasource --url $DSN --dir cache --table "*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource/shorthand",
 			Path:  "model/mysql/datasource/shorthand",
-			Cmd:   `goctlwt model mysql datasource -url $DSN -dir cache -table "*" -c`,
+			Cmd:   `goctl model mysql datasource -url $DSN -dir cache -table "*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource/shorthand2",
 			Path:  "model/mysql/datasource/shorthand2",
-			Cmd:   `goctlwt model mysql datasource -url $DSN -dir cache -t "*" -c`,
+			Cmd:   `goctl model mysql datasource -url $DSN -dir cache -t "*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource/assign",
 			Path:  "model/mysql/datasource/assign",
-			Cmd:   `goctlwt model mysql datasource --url=$DSN --dir=cache --table="*" -c`,
+			Cmd:   `goctl model mysql datasource --url=$DSN --dir=cache --table="*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource/shorthand/assign",
 			Path:  "model/mysql/datasource/shorthand/assign",
-			Cmd:   `goctlwt model mysql datasource -url=$DSN -dir=cache -table="*" -c`,
+			Cmd:   `goctl model mysql datasource -url=$DSN -dir=cache -table="*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource/shorthand2/assign",
 			Path:  "model/mysql/datasource/shorthand2/assign",
-			Cmd:   `goctlwt model mysql datasource -url=$DSN -dir=cache -t="*" -c`,
+			Cmd:   `goctl model mysql datasource -url=$DSN -dir=cache -t="*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource",
 			Path:  "model/mysql/datasource",
-			Cmd:   `goctlwt model mysql datasource --url $DSN --dir nocache --table "*" -c`,
+			Cmd:   `goctl model mysql datasource --url $DSN --dir nocache --table "*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource/shorthand",
 			Path:  "model/mysql/datasource/shorthand",
-			Cmd:   `goctlwt model mysql datasource -url $DSN -dir nocache -table "*" -c`,
+			Cmd:   `goctl model mysql datasource -url $DSN -dir nocache -table "*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource/shorthand2",
 			Path:  "model/mysql/datasource/shorthand2",
-			Cmd:   `goctlwt model mysql datasource -url $DSN -dir nocache -t "*" -c`,
+			Cmd:   `goctl model mysql datasource -url $DSN -dir nocache -t "*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource/assign",
 			Path:  "model/mysql/datasource/assign",
-			Cmd:   `goctlwt model mysql datasource --url=$DSN --dir=nocache --table="*" -c`,
+			Cmd:   `goctl model mysql datasource --url=$DSN --dir=nocache --table="*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource/shorthand/assign",
 			Path:  "model/mysql/datasource/shorthand/assign",
-			Cmd:   `goctlwt model mysql datasource -url=$DSN -dir=nocache -table="*" -c`,
+			Cmd:   `goctl model mysql datasource -url=$DSN -dir=nocache -table="*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "model/mysql/datasource/shorthand2/assign",
 			Path:  "model/mysql/datasource/shorthand2/assign",
-			Cmd:   `goctlwt model mysql datasource -url=$DSN -dir=nocache -t="*" -c`,
+			Cmd:   `goctl model mysql datasource -url=$DSN -dir=nocache -t="*" -c`,
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "rpc/new",
 			Path:  "rpc/new",
-			Cmd:   "goctlwt rpc new greet",
+			Cmd:   "goctl rpc new greet",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "rpc/template",
 			Path:  "rpc/template",
-			Cmd:   "goctlwt rpc template --o greet.proto",
+			Cmd:   "goctl rpc template --o greet.proto",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "rpc/template/shorthand",
 			Path:  "rpc/template/shorthand",
-			Cmd:   "goctlwt rpc template -o greet.proto",
+			Cmd:   "goctl rpc template -o greet.proto",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "rpc/template/assign",
 			Path:  "rpc/template/assign",
-			Cmd:   "goctlwt rpc template --o=greet.proto",
+			Cmd:   "goctl rpc template --o=greet.proto",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "rpc/template/shorthand/assign",
 			Path:  "rpc/template/shorthand/assign",
-			Cmd:   "goctlwt rpc template -o=greet.proto",
+			Cmd:   "goctl rpc template -o=greet.proto",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "rpc/protoc",
 			Path:  "rpc/protoc",
-			Cmd:   "goctlwt rpc template --o greet.proto && goctlwt rpc protoc greet.proto --go_out . --go-grpc_out . --zrpc_out .",
+			Cmd:   "goctl rpc template --o greet.proto && goctl rpc protoc greet.proto --go_out . --go-grpc_out . --zrpc_out .",
 		},
 		},
 		{
 		{
 			IsDir: true,
 			IsDir: true,
 			Path:  "rpc/protoc/assign",
 			Path:  "rpc/protoc/assign",
-			Cmd:   "goctlwt rpc template --o=greet.proto && goctlwt rpc protoc greet.proto --go_out=. --go-grpc_out=. --zrpc_out=.",
+			Cmd:   "goctl rpc template --o=greet.proto && goctl rpc protoc greet.proto --go_out=. --go-grpc_out=. --zrpc_out=.",
 		},
 		},
 	}
 	}
 )
 )

+ 6 - 6
tools/goctlwt/compare/testdata/testdata.go

@@ -31,8 +31,8 @@ func (f File) execute(goctl string) error {
 		printDir = filepath.Dir(printDir)
 		printDir = filepath.Dir(printDir)
 		dir = filepath.Dir(dir)
 		dir = filepath.Dir(dir)
 	}
 	}
-	printCommand := strings.ReplaceAll(fmt.Sprintf("cd %s && %s", printDir, f.Cmd), "goctlwt", filepath.Base(goctl))
-	command := strings.ReplaceAll(fmt.Sprintf("cd %s && %s", dir, f.Cmd), "goctlwt", goctl)
+	printCommand := strings.ReplaceAll(fmt.Sprintf("cd %s && %s", printDir, f.Cmd), "goctl", filepath.Base(goctl))
+	command := strings.ReplaceAll(fmt.Sprintf("cd %s && %s", dir, f.Cmd), "goctl", goctl)
 	fmt.Println(color.LightGreen.Render(printCommand))
 	fmt.Println(color.LightGreen.Render(printCommand))
 	cmd := exec.Command("sh", "-c", command)
 	cmd := exec.Command("sh", "-c", command)
 	cmd.Env = os.Environ()
 	cmd.Env = os.Environ()
@@ -101,14 +101,14 @@ func mustGetTestData(baseDir string) (Files, Files) {
 
 
 func MustRun(baseDir string) {
 func MustRun(baseDir string) {
 	oldFiles, newFiles := mustGetTestData(baseDir)
 	oldFiles, newFiles := mustGetTestData(baseDir)
-	goctlOld, err := exec.LookPath("goctlwt.old")
+	goctlOld, err := exec.LookPath("goctl.old")
 	must(err)
 	must(err)
-	goctlNew, err := exec.LookPath("goctlwt")
+	goctlNew, err := exec.LookPath("goctl")
 	must(err)
 	must(err)
-	fmt.Println(color.LightBlue.Render("========================goctlwt.old======================="))
+	fmt.Println(color.LightBlue.Render("========================goctl.old======================="))
 	must(oldFiles.execute(goctlOld))
 	must(oldFiles.execute(goctlOld))
 	fmt.Println()
 	fmt.Println()
-	fmt.Println(color.LightBlue.Render("========================goctlwt.new======================="))
+	fmt.Println(color.LightBlue.Render("========================goctl.new======================="))
 	must(newFiles.execute(goctlNew))
 	must(newFiles.execute(goctlNew))
 }
 }
 
 

+ 3 - 3
tools/goctlwt/config/readme.md

@@ -37,13 +37,13 @@
 # 使用方法
 # 使用方法
 目前可通过在生成api、rpc、model时通过`--style`参数指定format格式,如:
 目前可通过在生成api、rpc、model时通过`--style`参数指定format格式,如:
 ```shell script
 ```shell script
-goctlwt api go test.api -dir . -style gozero
+goctl api go test.api -dir . -style gozero
 ```
 ```
 ```shell script
 ```shell script
- goctlwt rpc proto -src test.proto -dir . -style go_zero
+ goctl rpc proto -src test.proto -dir . -style go_zero
 ```
 ```
 ```shell script
 ```shell script
-goctlwt model mysql datasource -url="" -table="*" -dir ./snake -style GoZero
+goctl model mysql datasource -url="" -table="*" -dir ./snake -style GoZero
 ```
 ```
 
 
 # 默认值
 # 默认值

+ 1 - 1
tools/goctlwt/docker/docker.go

@@ -38,7 +38,7 @@ type Docker struct {
 	Timezone    string
 	Timezone    string
 }
 }
 
 
-// dockerCommand provides the entry for goctlwt docker
+// dockerCommand provides the entry for goctl docker
 func dockerCommand(_ *cobra.Command, _ []string) (err error) {
 func dockerCommand(_ *cobra.Command, _ []string) (err error) {
 	defer func() {
 	defer func() {
 		if err == nil {
 		if err == nil {

+ 14 - 14
tools/goctlwt/env/check.go

@@ -44,46 +44,46 @@ func check(_ *cobra.Command, _ []string) error {
 func Prepare(install, force, verbose bool) error {
 func Prepare(install, force, verbose bool) error {
 	log := console.NewColorConsole(verbose)
 	log := console.NewColorConsole(verbose)
 	pending := true
 	pending := true
-	log.Info("[goctlwt-env]: preparing to check env")
+	log.Info("[goctl-env]: preparing to check env")
 	defer func() {
 	defer func() {
 		if p := recover(); p != nil {
 		if p := recover(); p != nil {
 			log.Error("%+v", p)
 			log.Error("%+v", p)
 			return
 			return
 		}
 		}
 		if pending {
 		if pending {
-			log.Success("\n[goctlwt-env]: congratulations! your goctlwt environment is ready!")
+			log.Success("\n[goctl-env]: congratulations! your goctl environment is ready!")
 		} else {
 		} else {
 			log.Error(`
 			log.Error(`
-[goctlwt-env]: check env finish, some dependencies is not found in PATH, you can execute
-command 'goctlwt env check --install' to install it, for details, please execute command 
-'goctlwt env check --help'`)
+[goctl-env]: check env finish, some dependencies is not found in PATH, you can execute
+command 'goctl env check --install' to install it, for details, please execute command 
+'goctl env check --help'`)
 		}
 		}
 	}()
 	}()
 	for _, e := range bins {
 	for _, e := range bins {
 		time.Sleep(200 * time.Millisecond)
 		time.Sleep(200 * time.Millisecond)
 		log.Info("")
 		log.Info("")
-		log.Info("[goctlwt-env]: looking up %q", e.name)
+		log.Info("[goctl-env]: looking up %q", e.name)
 		if e.exists {
 		if e.exists {
-			log.Success("[goctlwt-env]: %q is installed", e.name)
+			log.Success("[goctl-env]: %q is installed", e.name)
 			continue
 			continue
 		}
 		}
-		log.Warning("[goctlwt-env]: %q is not found in PATH", e.name)
+		log.Warning("[goctl-env]: %q is not found in PATH", e.name)
 		if install {
 		if install {
 			install := func() {
 			install := func() {
-				log.Info("[goctlwt-env]: preparing to install %q", e.name)
+				log.Info("[goctl-env]: preparing to install %q", e.name)
 				path, err := e.get(env.Get(env.GoctlCache))
 				path, err := e.get(env.Get(env.GoctlCache))
 				if err != nil {
 				if err != nil {
-					log.Error("[goctlwt-env]: an error interrupted the installation: %+v", err)
+					log.Error("[goctl-env]: an error interrupted the installation: %+v", err)
 					pending = false
 					pending = false
 				} else {
 				} else {
-					log.Success("[goctlwt-env]: %q is already installed in %q", e.name, path)
+					log.Success("[goctl-env]: %q is already installed in %q", e.name, path)
 				}
 				}
 			}
 			}
 			if force {
 			if force {
 				install()
 				install()
 				continue
 				continue
 			}
 			}
-			console.Info("[goctlwt-env]: do you want to install %q [y: YES, n: No]", e.name)
+			console.Info("[goctl-env]: do you want to install %q [y: YES, n: No]", e.name)
 			for {
 			for {
 				var in string
 				var in string
 				fmt.Scanln(&in)
 				fmt.Scanln(&in)
@@ -94,10 +94,10 @@ command 'goctlwt env check --install' to install it, for details, please execute
 					brk = true
 					brk = true
 				case strings.EqualFold(in, "n"):
 				case strings.EqualFold(in, "n"):
 					pending = false
 					pending = false
-					console.Info("[goctlwt-env]: %q installation is ignored", e.name)
+					console.Info("[goctl-env]: %q installation is ignored", e.name)
 					brk = true
 					brk = true
 				default:
 				default:
-					console.Error("[goctlwt-env]: invalid input, input 'y' for yes, 'n' for no")
+					console.Error("[goctl-env]: invalid input, input 'y' for yes, 'n' for no")
 				}
 				}
 				if brk {
 				if brk {
 					break
 					break

+ 1 - 1
tools/goctlwt/example/rpc/hello/client/greet/greet.go

@@ -1,4 +1,4 @@
-// Code generated by goctlwt. DO NOT EDIT!
+// Code generated by goctl. DO NOT EDIT!
 // Source: hello.proto
 // Source: hello.proto
 
 
 package client
 package client

+ 1 - 1
tools/goctlwt/example/rpc/hello/internal/server/greet/greetserver.go

@@ -1,4 +1,4 @@
-// Code generated by goctlwt. DO NOT EDIT!
+// Code generated by goctl. DO NOT EDIT!
 // Source: hello.proto
 // Source: hello.proto
 
 
 package server
 package server

+ 1 - 1
tools/goctlwt/example/rpc/hi/client/event/event.go

@@ -1,4 +1,4 @@
-// Code generated by goctlwt. DO NOT EDIT!
+// Code generated by goctl. DO NOT EDIT!
 // Source: hi.proto
 // Source: hi.proto
 
 
 package client
 package client

+ 1 - 1
tools/goctlwt/example/rpc/hi/client/greet/greet.go

@@ -1,4 +1,4 @@
-// Code generated by goctlwt. DO NOT EDIT!
+// Code generated by goctl. DO NOT EDIT!
 // Source: hi.proto
 // Source: hi.proto
 
 
 package client
 package client

+ 1 - 1
tools/goctlwt/example/rpc/hi/internal/server/event/eventserver.go

@@ -1,4 +1,4 @@
-// Code generated by goctlwt. DO NOT EDIT!
+// Code generated by goctl. DO NOT EDIT!
 // Source: hi.proto
 // Source: hi.proto
 
 
 package server
 package server

+ 1 - 1
tools/goctlwt/example/rpc/hi/internal/server/greet/greetserver.go

@@ -1,4 +1,4 @@
-// Code generated by goctlwt. DO NOT EDIT!
+// Code generated by goctl. DO NOT EDIT!
 // Source: hi.proto
 // Source: hi.proto
 
 
 package server
 package server

+ 1 - 1
tools/goctlwt/gateway/template.go

@@ -24,7 +24,7 @@ var templates = map[string]string{
 	mainTemplateFile:    mainTemplate,
 	mainTemplateFile:    mainTemplate,
 }
 }
 
 
-// GenTemplates is the entry for command goctlwt template,
+// GenTemplates is the entry for command goctl template,
 // it will create the specified category
 // it will create the specified category
 func GenTemplates() error {
 func GenTemplates() error {
 	return pathx.InitTemplates(category, templates)
 	return pathx.InitTemplates(category, templates)

+ 4 - 2
tools/goctlwt/go.mod

@@ -1,4 +1,4 @@
-module github.com/wuntsong-org/go-zero-plus/tools/goctlwt
+module github.com/wuntsong-org/go-zero-plus/tools/goctlwtwt
 
 
 go 1.21
 go 1.21
 
 
@@ -16,6 +16,7 @@ require (
 	github.com/stretchr/testify v1.8.4
 	github.com/stretchr/testify v1.8.4
 	github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1
 	github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1
 	github.com/wuntsong-org/go-zero-plus v1.5.0
 	github.com/wuntsong-org/go-zero-plus v1.5.0
+	github.com/wuntsong-org/go-zero-plus/tools/goctlwt v0.0.0-20231214074533-4b2d014bef4f
 	github.com/zeromicro/antlr v0.0.1
 	github.com/zeromicro/antlr v0.0.1
 	github.com/zeromicro/ddl-parser v1.0.5
 	github.com/zeromicro/ddl-parser v1.0.5
 	golang.org/x/text v0.14.0
 	golang.org/x/text v0.14.0
@@ -36,7 +37,6 @@ require (
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
 	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
 	github.com/fatih/color v1.16.0 // indirect
 	github.com/fatih/color v1.16.0 // indirect
-	github.com/fsnotify/fsnotify v1.6.0 // indirect
 	github.com/go-logr/logr v1.3.0 // indirect
 	github.com/go-logr/logr v1.3.0 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-openapi/jsonpointer v0.19.6 // indirect
 	github.com/go-openapi/jsonpointer v0.19.6 // indirect
@@ -55,6 +55,7 @@ require (
 	github.com/jackc/pgpassfile v1.0.0 // indirect
 	github.com/jackc/pgpassfile v1.0.0 // indirect
 	github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
 	github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
 	github.com/jackc/pgx/v5 v5.5.1 // indirect
 	github.com/jackc/pgx/v5 v5.5.1 // indirect
+	github.com/jackc/puddle/v2 v2.2.1 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/logrusorgru/aurora v2.0.3+incompatible // indirect
 	github.com/logrusorgru/aurora v2.0.3+incompatible // indirect
@@ -96,6 +97,7 @@ require (
 	golang.org/x/crypto v0.16.0 // indirect
 	golang.org/x/crypto v0.16.0 // indirect
 	golang.org/x/net v0.19.0 // indirect
 	golang.org/x/net v0.19.0 // indirect
 	golang.org/x/oauth2 v0.12.0 // indirect
 	golang.org/x/oauth2 v0.12.0 // indirect
+	golang.org/x/sync v0.3.0 // indirect
 	golang.org/x/sys v0.15.0 // indirect
 	golang.org/x/sys v0.15.0 // indirect
 	golang.org/x/term v0.15.0 // indirect
 	golang.org/x/term v0.15.0 // indirect
 	golang.org/x/time v0.5.0 // indirect
 	golang.org/x/time v0.5.0 // indirect

+ 48 - 48
tools/goctlwt/go.sum

@@ -9,6 +9,7 @@ github.com/alicebob/miniredis/v2 v2.31.0/go.mod h1:UB/T2Uztp7MlFSDakaX1sTXUv5CAS
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec h1:EEyRvzmpEUZ+I8WmD5cw/vY8EqhambkOqy5iFr0908A=
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec h1:EEyRvzmpEUZ+I8WmD5cw/vY8EqhambkOqy5iFr0908A=
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
 github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
 github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
+github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
 github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
@@ -29,22 +30,18 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
-github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
-github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
 github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/emicklei/proto v1.12.2 h1:ZDyDzrfMt7ncmyor/j07uoOCGLKtU5F87vTPwIzLe/o=
 github.com/emicklei/proto v1.12.2 h1:ZDyDzrfMt7ncmyor/j07uoOCGLKtU5F87vTPwIzLe/o=
 github.com/emicklei/proto v1.12.2/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
 github.com/emicklei/proto v1.12.2/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
-github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
-github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
+github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
 github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
 github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
 github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
 github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
 github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
 github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
 github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
 github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
-github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
-github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
 github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
@@ -60,10 +57,12 @@ github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq
 github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
 github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
 github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
 github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
 github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
+github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
 github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
 github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
 github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
@@ -75,13 +74,14 @@ github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu
 github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
 github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
 github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
 github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
+github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
 github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
 github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
 github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
@@ -89,6 +89,7 @@ github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/Q
 github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk=
 github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk=
 github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0/go.mod h1:TzP6duP4Py2pHLVPPQp42aoYI92+PCrVotyR5e8Vqlk=
 github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0/go.mod h1:TzP6duP4Py2pHLVPPQp42aoYI92+PCrVotyR5e8Vqlk=
 github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
 github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
+github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
 github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
 github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
 github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
 github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
@@ -97,9 +98,10 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI
 github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
 github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
 github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
 github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
 github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
 github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
-github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY=
-github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA=
+github.com/jackc/pgx/v5 v5.5.1 h1:5I9etrGkLrN+2XPCsi6XLlV5DITbSL/xBZdmAxFcXPI=
 github.com/jackc/pgx/v5 v5.5.1/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA=
 github.com/jackc/pgx/v5 v5.5.1/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA=
+github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
+github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
 github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -108,6 +110,7 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -131,17 +134,23 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
 github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
+github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
-github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU=
-github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
+github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
+github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
+github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
+github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg=
+github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
 github.com/openzipkin/zipkin-go v0.4.2 h1:zjqfqHjUpPmB3c1GlCvvgsM1G4LkvqQbBDueDOCg/jA=
 github.com/openzipkin/zipkin-go v0.4.2 h1:zjqfqHjUpPmB3c1GlCvvgsM1G4LkvqQbBDueDOCg/jA=
 github.com/openzipkin/zipkin-go v0.4.2/go.mod h1:ZeVkFjuuBiSy13y8vpSDCjMi9GoI3hPpCJSBx/EYFhY=
 github.com/openzipkin/zipkin-go v0.4.2/go.mod h1:ZeVkFjuuBiSy13y8vpSDCjMi9GoI3hPpCJSBx/EYFhY=
 github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
 github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
 github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
 github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
 github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
+github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
 github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
 github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
 github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
 github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
 github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM=
 github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM=
@@ -151,6 +160,7 @@ github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO
 github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
 github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
 github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
 github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
 github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
 github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
@@ -171,10 +181,10 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1 h1:+dBg5k7nuTE38VVdoroRsT0Z88fmvdYrI2EjzJst35I=
 github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1 h1:+dBg5k7nuTE38VVdoroRsT0Z88fmvdYrI2EjzJst35I=
 github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1/go.mod h1:nmuySobZb4kFgFy6BptpXp/BBw+xFSyvVPP6auoJB4k=
 github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1/go.mod h1:nmuySobZb4kFgFy6BptpXp/BBw+xFSyvVPP6auoJB4k=
-github.com/wuntsong-org/go-zero-plus v1.0.1/go.mod h1:YpodKGBb0wC8K+Qor1Yc9J3BlOfEq8LnqcVrbX5jBo8=
-github.com/wuntsong-org/go-zero-plus v1.2.1/go.mod h1:RWspL3Y+03ifu1zRtOMlvI0sws4lnAWAM3e09IAOlMY=
-github.com/wuntsong-org/go-zero-plus v1.3.0/go.mod h1:YpodKGBb0wC8K+Qor1Yc9J3BlOfEq8LnqcVrbX5jBo8=
+github.com/wuntsong-org/go-zero-plus v1.5.0 h1:rTXMvRUN9x47ejeTxQzGqB/ZFSwgNEbYledwh5k5PFY=
 github.com/wuntsong-org/go-zero-plus v1.5.0/go.mod h1:vbITb92SYHhIF1ME6c2OTCjF9Mny4TsQZvxw2oDBVTg=
 github.com/wuntsong-org/go-zero-plus v1.5.0/go.mod h1:vbITb92SYHhIF1ME6c2OTCjF9Mny4TsQZvxw2oDBVTg=
+github.com/wuntsong-org/go-zero-plus/tools/goctlwt v0.0.0-20231214074533-4b2d014bef4f h1:NAWv3LgWQ2PoX08dCLMZ6G1muba1ZjE2ijavsb+2arE=
+github.com/wuntsong-org/go-zero-plus/tools/goctlwt v0.0.0-20231214074533-4b2d014bef4f/go.mod h1:JJkghDb6Cgw3BmDdeRPdJUcLSeVnWCPnRO2i9bmA3Ag=
 github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8=
 github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8=
 github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs=
 github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -183,16 +193,15 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 github.com/yuin/gopher-lua v1.1.0 h1:BojcDhfyDWgU2f2TOzYK/g5p2gxMrku8oupLDqlnSqE=
 github.com/yuin/gopher-lua v1.1.0 h1:BojcDhfyDWgU2f2TOzYK/g5p2gxMrku8oupLDqlnSqE=
 github.com/yuin/gopher-lua v1.1.0/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
 github.com/yuin/gopher-lua v1.1.0/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
+github.com/zeromicro/antlr v0.0.1 h1:CQpIn/dc0pUjgGQ81y98s/NGOm2Hfru2NNio2I9mQgk=
 github.com/zeromicro/antlr v0.0.1/go.mod h1:nfpjEwFR6Q4xGDJMcZnCL9tEfQRgszMwu3rDz2Z+p5M=
 github.com/zeromicro/antlr v0.0.1/go.mod h1:nfpjEwFR6Q4xGDJMcZnCL9tEfQRgszMwu3rDz2Z+p5M=
+github.com/zeromicro/ddl-parser v1.0.5 h1:LaVqHdzMTjasua1yYpIYaksxKqRzFrEukj2Wi2EbWaQ=
 github.com/zeromicro/ddl-parser v1.0.5/go.mod h1:ISU/8NuPyEpl9pa17Py9TBPetMjtsiHrb9f5XGiYbo8=
 github.com/zeromicro/ddl-parser v1.0.5/go.mod h1:ISU/8NuPyEpl9pa17Py9TBPetMjtsiHrb9f5XGiYbo8=
-go.etcd.io/etcd/api/v3 v3.5.10 h1:szRajuUUbLyppkhs9K6BRtjY37l66XQQmw7oZRANE4k=
-go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI=
+go.etcd.io/etcd/api/v3 v3.5.11 h1:B54KwXbWDHyD3XYAwprxNzTe7vlhR69LuBgZnMVvS7E=
 go.etcd.io/etcd/api/v3 v3.5.11/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4=
 go.etcd.io/etcd/api/v3 v3.5.11/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4=
-go.etcd.io/etcd/client/pkg/v3 v3.5.10 h1:kfYIdQftBnbAq8pUWFXfpuuxFSKzlmM5cSn76JByiT0=
-go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U=
+go.etcd.io/etcd/client/pkg/v3 v3.5.11 h1:bT2xVspdiCj2910T0V+/KHcVKjkUrCZVtk8J2JF2z1A=
 go.etcd.io/etcd/client/pkg/v3 v3.5.11/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4=
 go.etcd.io/etcd/client/pkg/v3 v3.5.11/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4=
-go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao=
-go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc=
+go.etcd.io/etcd/client/v3 v3.5.11 h1:ajWtgoNSZJ1gmS8k+icvPtqsqEav+iUorF7b0qozgUU=
 go.etcd.io/etcd/client/v3 v3.5.11/go.mod h1:a6xQUEqFJ8vztO1agJh/KQKOMfFI8og52ZconzcDJwE=
 go.etcd.io/etcd/client/v3 v3.5.11/go.mod h1:a6xQUEqFJ8vztO1agJh/KQKOMfFI8og52ZconzcDJwE=
 go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs=
 go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs=
 go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY=
 go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY=
@@ -221,6 +230,7 @@ go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0
 go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8=
 go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8=
 go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0=
 go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0=
 go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
 go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
 go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
 go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
 go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
 go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
 go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
 go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
@@ -229,8 +239,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
-golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
+golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
 golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
 golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -243,8 +252,7 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
-golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
 golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
 golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
 golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
 golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
 golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
 golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
@@ -254,6 +262,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
+golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
 golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -265,15 +275,12 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
-golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
 golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
-golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
+golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
 golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
 golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -281,8 +288,7 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
 golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
-golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
 golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -290,7 +296,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM=
+golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss=
+golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -313,39 +320,32 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
 gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY=
 gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY=
+gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.28.3 h1:Gj1HtbSdB4P08C8rs9AR94MfSGpRhJgsS+GF9V26xMM=
-k8s.io/api v0.28.3/go.mod h1:MRCV/jr1dW87/qJnZ57U5Pak65LGmQVkKTzf3AtKFHc=
-k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0=
+k8s.io/api v0.29.0 h1:NiCdQMY1QOp1H8lfRyeEf8eOwV6+0xA6XEE44ohDX2A=
 k8s.io/api v0.29.0/go.mod h1:sdVmXoz2Bo/cb77Pxi71IPTSErEW32xa4aXwKH7gfBA=
 k8s.io/api v0.29.0/go.mod h1:sdVmXoz2Bo/cb77Pxi71IPTSErEW32xa4aXwKH7gfBA=
-k8s.io/apimachinery v0.28.3 h1:B1wYx8txOaCQG0HmYF6nbpU8dg6HvA06x5tEffvOe7A=
-k8s.io/apimachinery v0.28.3/go.mod h1:uQTKmIqs+rAYaq+DFaoD2X7pcjLOqbQX2AOiO0nIpb8=
-k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg=
+k8s.io/apimachinery v0.29.0 h1:+ACVktwyicPz0oc6MTMLwa2Pw3ouLAfAon1wPLtG48o=
 k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis=
 k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis=
-k8s.io/client-go v0.28.3 h1:2OqNb72ZuTZPKCl+4gTKvqao0AMOl9f3o2ijbAj3LI4=
-k8s.io/client-go v0.28.3/go.mod h1:LTykbBp9gsA7SwqirlCXBWtK0guzfhpoW4qSm7i9dxo=
-k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4=
+k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8=
 k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38=
 k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38=
-k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
-k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0=
 k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo=
 k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo=
 k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
 k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
 k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
 k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
-k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
-k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI=
 k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
-sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
-sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=

+ 1 - 1
tools/goctlwt/goctlwt.go

@@ -3,7 +3,7 @@ package main
 import (
 import (
 	"github.com/wuntsong-org/go-zero-plus/core/load"
 	"github.com/wuntsong-org/go-zero-plus/core/load"
 	"github.com/wuntsong-org/go-zero-plus/core/logx"
 	"github.com/wuntsong-org/go-zero-plus/core/logx"
-	"github.com/wuntsong-org/go-zero-plus/tools/goctlwt/cmd"
+	"github.com/wuntsong-org/go-zero-plus/tools/goctlwtwt/cmd"
 )
 )
 
 
 func main() {
 func main() {

+ 4 - 4
tools/goctlwt/internal/errorx/errorx.go

@@ -7,12 +7,12 @@ import (
 	"github.com/wuntsong-org/go-zero-plus/tools/goctlwt/pkg/env"
 	"github.com/wuntsong-org/go-zero-plus/tools/goctlwt/pkg/env"
 )
 )
 
 
-var errorFormat = `goctlwt error: %+v
-goctlwt env:
+var errorFormat = `goctl error: %+v
+goctl env:
 %s
 %s
 %s`
 %s`
 
 
-// GoctlError represents a goctlwt error.
+// GoctlError represents a goctl error.
 type GoctlError struct {
 type GoctlError struct {
 	message []string
 	message []string
 	err     error
 	err     error
@@ -23,7 +23,7 @@ func (e *GoctlError) Error() string {
 	return fmt.Sprintf(errorFormat, e.err, env.Print(), detail)
 	return fmt.Sprintf(errorFormat, e.err, env.Print(), detail)
 }
 }
 
 
-// Wrap wraps an error with goctlwt version and message.
+// Wrap wraps an error with goctl version and message.
 func Wrap(err error, message ...string) error {
 func Wrap(err error, message ...string) error {
 	e, ok := err.(*GoctlError)
 	e, ok := err.(*GoctlError)
 	if ok {
 	if ok {

+ 3 - 3
tools/goctlwt/internal/version/version.go

@@ -5,7 +5,7 @@ import (
 	"strings"
 	"strings"
 )
 )
 
 
-// BuildVersion is the version of goctlwt.
+// BuildVersion is the version of goctl.
 const BuildVersion = "1.6.0"
 const BuildVersion = "1.6.0"
 
 
 var tag = map[string]int{"pre-alpha": 0, "alpha": 1, "pre-bata": 2, "beta": 3, "released": 4, "": 5}
 var tag = map[string]int{"pre-alpha": 0, "alpha": 1, "pre-bata": 2, "beta": 3, "released": 4, "": 5}
@@ -15,7 +15,7 @@ func GetGoctlVersion() string {
 	return BuildVersion
 	return BuildVersion
 }
 }
 
 
-// IsVersionGreaterThan compares whether the current goctlwt version
+// IsVersionGreaterThan compares whether the current goctl version
 // is greater than the target version
 // is greater than the target version
 func IsVersionGreaterThan(version, target string) bool {
 func IsVersionGreaterThan(version, target string) bool {
 	versionNumber, versionTag := convertVersion(version)
 	versionNumber, versionTag := convertVersion(version)
@@ -25,7 +25,7 @@ func IsVersionGreaterThan(version, target string) bool {
 	} else if versionNumber < targetVersionNumber {
 	} else if versionNumber < targetVersionNumber {
 		return false
 		return false
 	} else {
 	} else {
-		// unchecked case, in normal, the goctlwt version does not contain suffix in release.
+		// unchecked case, in normal, the goctl version does not contain suffix in release.
 		return tag[versionTag] > tag[targetTag]
 		return tag[versionTag] > tag[targetTag]
 	}
 	}
 }
 }

+ 1 - 1
tools/goctlwt/kube/kube.go

@@ -138,7 +138,7 @@ func RevertTemplate(name string) error {
 	return pathx.CreateTemplate(category, name, deploymentTemplate)
 	return pathx.CreateTemplate(category, name, deploymentTemplate)
 }
 }
 
 
-// Update updates the template files to the templates built in current goctlwt.
+// Update updates the template files to the templates built in current goctl.
 func Update() error {
 func Update() error {
 	err := Clean()
 	err := Clean()
 	if err != nil {
 	if err != nil {

+ 1 - 1
tools/goctlwt/migrate/mod.go

@@ -14,7 +14,7 @@ import (
 
 
 const (
 const (
 	deprecatedGoZeroMod = "github.com/tal-tech/go-zero"
 	deprecatedGoZeroMod = "github.com/tal-tech/go-zero"
-	deprecatedBuilderx  = "github.com/tal-tech/go-zero/tools/goctlwt/model/sql/builderx"
+	deprecatedBuilderx  = "github.com/tal-tech/go-zero/tools/goctl/model/sql/builderx"
 	replacementBuilderx = "github.com/wuntsong-org/go-zero-plus/core/stores/builder"
 	replacementBuilderx = "github.com/wuntsong-org/go-zero-plus/core/stores/builder"
 	goZeroMod           = "github.com/wuntsong-org/go-zero-plus"
 	goZeroMod           = "github.com/wuntsong-org/go-zero-plus"
 )
 )

+ 2 - 2
tools/goctlwt/model/mongo/mongo.go

@@ -23,7 +23,7 @@ var (
 	VarBoolEasy bool
 	VarBoolEasy bool
 	// VarStringStyle describes the style.
 	// VarStringStyle describes the style.
 	VarStringStyle string
 	VarStringStyle string
-	// VarStringHome describes the goctlwt home.
+	// VarStringHome describes the goctl home.
 	VarStringHome string
 	VarStringHome string
 	// VarStringRemote describes the remote git repository.
 	// VarStringRemote describes the remote git repository.
 	VarStringRemote string
 	VarStringRemote string
@@ -31,7 +31,7 @@ var (
 	VarStringBranch string
 	VarStringBranch string
 )
 )
 
 
-// Action provides the entry for goctlwt mongo code generation.
+// Action provides the entry for goctl mongo code generation.
 func Action(_ *cobra.Command, _ []string) error {
 func Action(_ *cobra.Command, _ []string) error {
 	tp := VarStringSliceType
 	tp := VarStringSliceType
 	c := VarBoolCache
 	c := VarBoolCache

+ 2 - 2
tools/goctlwt/model/mongo/readme.md

@@ -17,7 +17,7 @@ mongo的生成不同于mysql,mysql可以从scheme_information库中读取到
 ## 使用示例
 ## 使用示例
 为 User 生成 mongo model
 为 User 生成 mongo model
 ```bash
 ```bash
-$ goctlwt model mongo -t User -c --dir .
+$ goctl model mongo -t User -c --dir .
 ```
 ```
 
 
 ### 生成示例代码
 ### 生成示例代码
@@ -57,7 +57,7 @@ func NewUserModel(url, db, collection string, c cache.CacheConf) UserModel {
 
 
 #### usermodelgen.go
 #### usermodelgen.go
 ```go
 ```go
-// Code generated by goctlwt. DO NOT EDIT.
+// Code generated by goctl. DO NOT EDIT.
 package model
 package model
 
 
 import (
 import (

+ 8 - 8
tools/goctlwt/model/sql/README.MD

@@ -7,7 +7,7 @@ goctl model 为go-zero下的工具模块中的组件之一,目前支持识别m
 * 通过ddl生成
 * 通过ddl生成
 
 
     ```shell script
     ```shell script
-    goctlwt model mysql ddl -src="./*.sql" -dir="./sql/model" -c
+    goctl model mysql ddl -src="./*.sql" -dir="./sql/model" -c
     ```
     ```
 
 
     执行上述命令后即可快速生成CURD代码。
     执行上述命令后即可快速生成CURD代码。
@@ -21,7 +21,7 @@ goctl model 为go-zero下的工具模块中的组件之一,目前支持识别m
 * 通过datasource生成
 * 通过datasource生成
 
 
     ```shell script
     ```shell script
-    goctlwt model mysql datasource -url="user:password@tcp(127.0.0.1:3306)/database" -table="*"  -dir="./model"
+    goctl model mysql datasource -url="user:password@tcp(127.0.0.1:3306)/database" -table="*"  -dir="./model"
     ```
     ```
 
 
 * 生成代码示例
 * 生成代码示例
@@ -246,7 +246,7 @@ OPTIONS:
   * ddl
   * ddl
 
 
 	```shell script
 	```shell script
-	goctlwt model mysql -src={patterns} -dir={dir} -cache
+	goctl model mysql -src={patterns} -dir={dir} -cache
 	```
 	```
 
 
 	help
 	help
@@ -270,7 +270,7 @@ OPTIONS:
   * datasource
   * datasource
 
 
 	```shell script
 	```shell script
-	goctlwt model mysql datasource -url={datasource} -table={patterns}  -dir={dir} -cache=true
+	goctl model mysql datasource -url={datasource} -table={patterns}  -dir={dir} -cache=true
 	```
 	```
 
 
 	help
 	help
@@ -304,26 +304,26 @@ OPTIONS:
   * ddl
   * ddl
   
   
       ```shell script
       ```shell script
-        goctlwt model -src={patterns} -dir={dir}
+        goctl model -src={patterns} -dir={dir}
       ```
       ```
 
 
   * datasource
   * datasource
   
   
       ```shell script
       ```shell script
-        goctlwt model mysql datasource -url={datasource} -table={patterns}  -dir={dir}
+        goctl model mysql datasource -url={datasource} -table={patterns}  -dir={dir}
       ```
       ```
 
 
   or
   or
   * ddl
   * ddl
 
 
       ```shell script
       ```shell script
-        goctlwt model -src={patterns} -dir={dir}
+        goctl model -src={patterns} -dir={dir}
       ```
       ```
 
 
   * datasource
   * datasource
   
   
       ```shell script
       ```shell script
-        goctlwt model mysql datasource -url={datasource} -table={patterns}  -dir={dir}
+        goctl model mysql datasource -url={datasource} -table={patterns}  -dir={dir}
       ```
       ```
   
   
 生成代码仅基本的CURD结构。
 生成代码仅基本的CURD结构。

+ 1 - 1
tools/goctlwt/model/sql/command/command.go

@@ -41,7 +41,7 @@ var (
 	VarStringDatabase string
 	VarStringDatabase string
 	// VarStringSchema describes the schema of postgresql.
 	// VarStringSchema describes the schema of postgresql.
 	VarStringSchema string
 	VarStringSchema string
-	// VarStringHome describes the goctlwt home.
+	// VarStringHome describes the goctl home.
 	VarStringHome string
 	VarStringHome string
 	// VarStringRemote describes the remote git repository.
 	// VarStringRemote describes the remote git repository.
 	VarStringRemote string
 	VarStringRemote string

+ 2 - 2
tools/goctlwt/model/sql/command/migrationnotes/v1.3.4.go

@@ -15,10 +15,10 @@ func migrateBefore1_3_4(dir, style string) error {
 		return nil
 		return nil
 	}
 	}
 
 
-	fmt.Println(`It seems like that your goctlwt has just been upgraded to version 1.3.4 or later, which refactored the code of the model module. The original XXXmodel.go has been split into XXXmodel_gen.go (read-only) and XXXmodel.go. You just need to follow these steps to complete the migration:
+	fmt.Println(`It seems like that your goctl has just been upgraded to version 1.3.4 or later, which refactored the code of the model module. The original XXXmodel.go has been split into XXXmodel_gen.go (read-only) and XXXmodel.go. You just need to follow these steps to complete the migration:
 1. back up the original XXXmodel.go (make sure the file name is no longer in the current directory)
 1. back up the original XXXmodel.go (make sure the file name is no longer in the current directory)
 2. re-run the generate command (a new XXXmodel.go will be created)
 2. re-run the generate command (a new XXXmodel.go will be created)
-3. populate XXXmodel.go with the code that is not generated by goctlwt according to the comments in XXXmodel_gen.go`)
+3. populate XXXmodel.go with the code that is not generated by goctl according to the comments in XXXmodel_gen.go`)
 
 
 	return nil
 	return nil
 }
 }

+ 1 - 1
tools/goctlwt/model/sql/command/migrationnotes/v1.3.4_test.go

@@ -11,7 +11,7 @@ import (
 )
 )
 
 
 func Test_needShow1_3_4(t *testing.T) {
 func Test_needShow1_3_4(t *testing.T) {
-	root, err := os.MkdirTemp("", "goctlwt-model")
+	root, err := os.MkdirTemp("", "goctl-model")
 	require.NoError(t, err)
 	require.NoError(t, err)
 	defer os.RemoveAll(root)
 	defer os.RemoveAll(root)
 
 

+ 1 - 1
tools/goctlwt/pkg/env/env.go

@@ -36,7 +36,7 @@ const (
 	ExperimentalOff = "off"
 	ExperimentalOff = "off"
 )
 )
 
 
-// init initializes the goctlwt environment variables, the environment variables of the function are set in order,
+// init initializes the goctl environment variables, the environment variables of the function are set in order,
 // please do not change the logic order of the code.
 // please do not change the logic order of the code.
 func init() {
 func init() {
 	defaultGoctlHome, err := pathx.GetDefaultGoctlHome()
 	defaultGoctlHome, err := pathx.GetDefaultGoctlHome()

+ 1 - 1
tools/goctlwt/plugin/plugin.go

@@ -40,7 +40,7 @@ var (
 	VarStringStyle string
 	VarStringStyle string
 )
 )
 
 
-// PluginCommand is the entry of goctlwt api plugin
+// PluginCommand is the entry of goctl api plugin
 func PluginCommand(_ *cobra.Command, _ []string) error {
 func PluginCommand(_ *cobra.Command, _ []string) error {
 	ex, err := os.Executable()
 	ex, err := os.Executable()
 	if err != nil {
 	if err != nil {

+ 1 - 1
tools/goctlwt/quickstart/micro.go

@@ -52,7 +52,7 @@ func newMicroService() micro {
 func (m micro) mustStartRPCProject() {
 func (m micro) mustStartRPCProject() {
 	logx.Must(initRPCProto())
 	logx.Must(initRPCProto())
 	log.Debug(">> Generating quickstart zRPC project...")
 	log.Debug(">> Generating quickstart zRPC project...")
-	arg := "goctlwt rpc protoc " + protoName + " --go_out=. --go-grpc_out=. --zrpc_out=. --verbose"
+	arg := "goctl rpc protoc " + protoName + " --go_out=. --go-grpc_out=. --zrpc_out=. --verbose"
 	execCommand(zrpcWorkDir, arg)
 	execCommand(zrpcWorkDir, arg)
 	etcFile := filepath.Join(zrpcWorkDir, "etc", "greet.yaml")
 	etcFile := filepath.Join(zrpcWorkDir, "etc", "greet.yaml")
 	logx.Must(os.WriteFile(etcFile, []byte(rpcEtcContent), 0o666))
 	logx.Must(os.WriteFile(etcFile, []byte(rpcEtcContent), 0o666))

+ 9 - 9
tools/goctlwt/rpc/README.md

@@ -19,7 +19,7 @@ Goctl Rpc是`goctl`脚手架下的一个rpc服务代码生成模块,支持prot
   如生成greet rpc服务:
   如生成greet rpc服务:
 
 
   ```Bash
   ```Bash
-  goctlwt rpc new greet
+  goctl rpc new greet
   ```
   ```
 
 
   执行后代码结构如下:
   执行后代码结构如下:
@@ -51,7 +51,7 @@ Goctl Rpc是`goctl`脚手架下的一个rpc服务代码生成模块,支持prot
 * 生成proto模板
 * 生成proto模板
 
 
 ```Bash
 ```Bash
-$ goctlwt rpc template -o=user.proto
+$ goctl rpc template -o=user.proto
 ```
 ```
   
   
 ```proto
 ```proto
@@ -77,7 +77,7 @@ service User {
 * 生成rpc服务代码
 * 生成rpc服务代码
 
 
 ```bash
 ```bash
-$ goctlwt rpc protoc  user.proto --go_out=. --go-grpc_out=. --zrpc_out=.
+$ goctl rpc protoc  user.proto --go_out=. --go-grpc_out=. --zrpc_out=.
 ```
 ```
 
 
 
 
@@ -86,23 +86,23 @@ $ goctlwt rpc protoc  user.proto --go_out=. --go-grpc_out=. --zrpc_out=.
 ### rpc 服务生成用法
 ### rpc 服务生成用法
 
 
 ```Bash
 ```Bash
-$ goctlwt rpc protoc -h
+$ goctl rpc protoc -h
 Generate grpc code
 Generate grpc code
 
 
 Usage:
 Usage:
-  goctlwt rpc protoc [flags]
+  goctl rpc protoc [flags]
 
 
 Examples:
 Examples:
-goctlwt rpc protoc xx.proto --go_out=./pb --go-grpc_out=./pb --zrpc_out=.
+goctl rpc protoc xx.proto --go_out=./pb --go-grpc_out=./pb --zrpc_out=.
 
 
 Flags:
 Flags:
       --branch string     The branch of the remote repo, it does work with --remote
       --branch string     The branch of the remote repo, it does work with --remote
   -h, --help              help for protoc
   -h, --help              help for protoc
-      --home string       The goctlwt home path of the template, --home and --remote cannot be set at the same time, if they are, --remote has higher priority
+      --home string       The goctl home path of the template, --home and --remote cannot be set at the same time, if they are, --remote has higher priority
   -m, --multiple          Generated in multiple rpc service mode
   -m, --multiple          Generated in multiple rpc service mode
       --remote string     The remote git repo of the template, --home and --remote cannot be set at the same time, if they are, --remote has higher priority
       --remote string     The remote git repo of the template, --home and --remote cannot be set at the same time, if they are, --remote has higher priority
                           	The git repo directory must be consistent with the https://github.com/wuntsong-org/go-zero-plus-template directory structure
                           	The git repo directory must be consistent with the https://github.com/wuntsong-org/go-zero-plus-template directory structure
-      --style string      The file naming format, see [https://github.com/wuntsong-org/go-zero-plus/tree/master/tools/goctlwt/config/README.md] (default "gozero")
+      --style string      The file naming format, see [https://github.com/wuntsong-org/go-zero-plus/tree/master/tools/goctl/config/readme.md] (default "gozero")
   -v, --verbose           Enable log output
   -v, --verbose           Enable log output
       --zrpc_out string   The zrpc output directory
       --zrpc_out string   The zrpc output directory
 ```
 ```
@@ -127,7 +127,7 @@ Flags:
 
 
 
 
 ## rpc 服务生成 example
 ## rpc 服务生成 example
-详情见 [example/rpc](https://github.com/zeromicro/go-zero/tree/master/tools/goctl/example)
+详情见 [example/rpc](https://github.com/wuntsong-org/go-zero-plus/tree/master/tools/goctl/example)
 
 
 ## --multiple 为 true 和 false 的目录区别
 ## --multiple 为 true 和 false 的目录区别
 源 proto 文件
 源 proto 文件

+ 2 - 2
tools/goctlwt/rpc/cli/cli.go

@@ -16,7 +16,7 @@ import (
 var (
 var (
 	// VarStringOutput describes the output.
 	// VarStringOutput describes the output.
 	VarStringOutput string
 	VarStringOutput string
-	// VarStringHome describes the goctlwt home.
+	// VarStringHome describes the goctl home.
 	VarStringHome string
 	VarStringHome string
 	// VarStringRemote describes the remote git repository.
 	// VarStringRemote describes the remote git repository.
 	VarStringRemote string
 	VarStringRemote string
@@ -109,7 +109,7 @@ func RPCNew(_ *cobra.Command, args []string) error {
 // RPCTemplate is the entry for generate rpc template
 // RPCTemplate is the entry for generate rpc template
 func RPCTemplate(latest bool) error {
 func RPCTemplate(latest bool) error {
 	if !latest {
 	if !latest {
-		console.Warning("deprecated: goctlwt rpc template -o is deprecated and will be removed in the future, use goctlwt rpc -o instead")
+		console.Warning("deprecated: goctl rpc template -o is deprecated and will be removed in the future, use goctl rpc -o instead")
 	}
 	}
 	protoFile := VarStringOutput
 	protoFile := VarStringOutput
 	home := VarStringHome
 	home := VarStringHome

+ 1 - 1
tools/goctlwt/rpc/cli/zrpc.go

@@ -19,7 +19,7 @@ var (
 )
 )
 
 
 // ZRPC generates grpc code directly by protoc and generates
 // ZRPC generates grpc code directly by protoc and generates
-// zrpc code by goctlwt.
+// zrpc code by goctl.
 func ZRPC(_ *cobra.Command, args []string) error {
 func ZRPC(_ *cobra.Command, args []string) error {
 	protocArgs := wrapProtocCmd("protoc", args)
 	protocArgs := wrapProtocCmd("protoc", args)
 	pwd, err := os.Getwd()
 	pwd, err := os.Getwd()

+ 1 - 1
tools/goctlwt/rpc/generator/genpb.go

@@ -11,7 +11,7 @@ import (
 )
 )
 
 
 // GenPb generates the pb.go file, which is a layer of packaging for protoc to generate gprc,
 // GenPb generates the pb.go file, which is a layer of packaging for protoc to generate gprc,
-// but the commands and flags in protoc are not completely joined in goctlwt. At present, proto_path(-I) is introduced
+// but the commands and flags in protoc are not completely joined in goctl. At present, proto_path(-I) is introduced
 func (g *Generator) GenPb(ctx DirContext, c *ZRpcContext) error {
 func (g *Generator) GenPb(ctx DirContext, c *ZRpcContext) error {
 	return g.genPbDirect(ctx, c)
 	return g.genPbDirect(ctx, c)
 }
 }

+ 1 - 1
tools/goctlwt/rpc/generator/template.go

@@ -35,7 +35,7 @@ var templates = map[string]string{
 	rpcTemplateFile:           rpcTemplateText,
 	rpcTemplateFile:           rpcTemplateText,
 }
 }
 
 
-// GenTemplates is the entry for command goctlwt template,
+// GenTemplates is the entry for command goctl template,
 // it will create the specified category
 // it will create the specified category
 func GenTemplates() error {
 func GenTemplates() error {
 	return pathx.InitTemplates(category, templates)
 	return pathx.InitTemplates(category, templates)

+ 1 - 1
tools/goctlwt/test/integration/model/mongo/Dockerfile

@@ -7,6 +7,6 @@ WORKDIR /app
 ADD goctl /usr/bin/goctl
 ADD goctl /usr/bin/goctl
 ADD cmd.sh .
 ADD cmd.sh .
 
 
-RUN chmod +x /usr/bin/goctlwt
+RUN chmod +x /usr/bin/goctl
 RUN chmod +x cmd.sh
 RUN chmod +x cmd.sh
 CMD ["/bin/bash", "cmd.sh"]
 CMD ["/bin/bash", "cmd.sh"]

+ 4 - 4
tools/goctlwt/test/integration/model/mongo/mongo.sh

@@ -7,12 +7,12 @@ source ../../../common/echo.sh
 
 
 console_tip "mongo  test"
 console_tip "mongo  test"
 
 
-# build goctlwt
+# build goctl
 console_step "goctl building"
 console_step "goctl building"
 
 
-buildFile=goctlwt
-CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o $buildFile ../../../../goctlwt.go
-image=goctlwt-mongo:latest
+buildFile=goctl
+CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o $buildFile ../../../../goctl.go
+image=goctl-mongo:latest
 
 
 # docker build
 # docker build
 console_step "docker building"
 console_step "docker building"

+ 1 - 1
tools/goctlwt/test/main.sh

@@ -1,6 +1,6 @@
 #!/bin/bash
 #!/bin/bash
 
 
-# main.sh is the entry point for the goctlwt tests.
+# main.sh is the entry point for the goctl tests.
 
 
 # testing mongo code generation.
 # testing mongo code generation.
 /bin/bash integration/model/mongo/mongo.sh
 /bin/bash integration/model/mongo/mongo.sh

+ 1 - 1
tools/goctlwt/update/config/config.go

@@ -2,7 +2,7 @@ package config
 
 
 import "github.com/wuntsong-org/go-zero-plus/core/logx"
 import "github.com/wuntsong-org/go-zero-plus/core/logx"
 
 
-// Config defines a service configure for goctlwt update
+// Config defines a service configure for goctl update
 type Config struct {
 type Config struct {
 	logx.LogConf
 	logx.LogConf
 	ListenOn string
 	ListenOn string

+ 1 - 1
tools/goctlwt/update/update.go

@@ -15,7 +15,7 @@ import (
 
 
 const (
 const (
 	contentMd5Header = "Content-Md5"
 	contentMd5Header = "Content-Md5"
-	filename         = "goctlwt"
+	filename         = "goctl"
 )
 )
 
 
 var configFile = flag.String("f", "etc/update-api.json", "the config file")
 var configFile = flag.String("f", "etc/update-api.json", "the config file")

+ 3 - 3
tools/goctlwt/upgrade/upgrade.go

@@ -8,12 +8,12 @@ import (
 	"github.com/wuntsong-org/go-zero-plus/tools/goctlwt/rpc/execx"
 	"github.com/wuntsong-org/go-zero-plus/tools/goctlwt/rpc/execx"
 )
 )
 
 
-// upgrade gets the latest goctlwt by
+// upgrade gets the latest goctl by
 // go install github.com/wuntsong-org/go-zero-plus/tools/goctlwt@latest
 // go install github.com/wuntsong-org/go-zero-plus/tools/goctlwt@latest
 func upgrade(_ *cobra.Command, _ []string) error {
 func upgrade(_ *cobra.Command, _ []string) error {
-	cmd := `GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go install github.com/wuntsong-org/go-zero-plus/tools/goctlwtwt@latest`
+	cmd := `GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go install github.com/wuntsong-org/go-zero-plus/tools/goctlwt@latest`
 	if runtime.GOOS == "windows" {
 	if runtime.GOOS == "windows" {
-		cmd = `set GOPROXY=https://goproxy.cn,direct && go install github.com/wuntsong-org/go-zero-plus/tools/goctlwtwt@latest`
+		cmd = `set GOPROXY=https://goproxy.cn,direct && go install github.com/wuntsong-org/go-zero-plus/tools/goctlwt@latest`
 	}
 	}
 	info, err := execx.Run(cmd, "")
 	info, err := execx.Run(cmd, "")
 	if err != nil {
 	if err != nil {

+ 1 - 1
tools/goctlwt/util/head.go

@@ -2,7 +2,7 @@ package util
 
 
 const (
 const (
 	// DoNotEditHead added to the beginning of a file to prompt the user not to edit
 	// DoNotEditHead added to the beginning of a file to prompt the user not to edit
-	DoNotEditHead = "// Code generated by goctlwt. DO NOT EDIT."
+	DoNotEditHead = "// Code generated by goctl. DO NOT EDIT."
 
 
 	headTemplate = DoNotEditHead + `
 	headTemplate = DoNotEditHead + `
 // Source: {{.source}}`
 // Source: {{.source}}`

+ 7 - 7
tools/goctlwt/util/pathx/file.go

@@ -19,7 +19,7 @@ import (
 // NL defines a new line.
 // NL defines a new line.
 const (
 const (
 	NL              = "\n"
 	NL              = "\n"
-	goctlDir        = ".goctlwt"
+	goctlDir        = ".goctl"
 	gitDir          = ".git"
 	gitDir          = ".git"
 	autoCompleteDir = ".auto_complete"
 	autoCompleteDir = ".auto_complete"
 	cacheDir        = "cache"
 	cacheDir        = "cache"
@@ -27,7 +27,7 @@ const (
 
 
 var goctlHome string
 var goctlHome string
 
 
-// RegisterGoctlHome register goctlwt home path.
+// RegisterGoctlHome register goctl home path.
 func RegisterGoctlHome(home string) {
 func RegisterGoctlHome(home string) {
 	goctlHome = home
 	goctlHome = home
 }
 }
@@ -75,7 +75,7 @@ func FileNameWithoutExt(file string) string {
 	return strings.TrimSuffix(file, filepath.Ext(file))
 	return strings.TrimSuffix(file, filepath.Ext(file))
 }
 }
 
 
-// GetGoctlHome returns the path value of the goctlwt, the default path is ~/.goctlwt, if the path has
+// GetGoctlHome returns the path value of the goctl, the default path is ~/.goctl, if the path has
 // been set by calling the RegisterGoctlHome method, the user-defined path refers to.
 // been set by calling the RegisterGoctlHome method, the user-defined path refers to.
 func GetGoctlHome() (home string, err error) {
 func GetGoctlHome() (home string, err error) {
 	defer func() {
 	defer func() {
@@ -96,7 +96,7 @@ func GetGoctlHome() (home string, err error) {
 	return
 	return
 }
 }
 
 
-// GetDefaultGoctlHome returns the path value of the goctlwt home where Join $HOME with .goctlwt.
+// GetDefaultGoctlHome returns the path value of the goctl home where Join $HOME with .goctl.
 func GetDefaultGoctlHome() (string, error) {
 func GetDefaultGoctlHome() (string, error) {
 	home, err := os.UserHomeDir()
 	home, err := os.UserHomeDir()
 	if err != nil {
 	if err != nil {
@@ -105,7 +105,7 @@ func GetDefaultGoctlHome() (string, error) {
 	return filepath.Join(home, goctlDir), nil
 	return filepath.Join(home, goctlDir), nil
 }
 }
 
 
-// GetGitHome returns the git home of goctlwt.
+// GetGitHome returns the git home of goctl.
 func GetGitHome() (string, error) {
 func GetGitHome() (string, error) {
 	goctlH, err := GetGoctlHome()
 	goctlH, err := GetGoctlHome()
 	if err != nil {
 	if err != nil {
@@ -115,7 +115,7 @@ func GetGitHome() (string, error) {
 	return filepath.Join(goctlH, gitDir), nil
 	return filepath.Join(goctlH, gitDir), nil
 }
 }
 
 
-// GetAutoCompleteHome returns the auto_complete home of goctlwt.
+// GetAutoCompleteHome returns the auto_complete home of goctl.
 func GetAutoCompleteHome() (string, error) {
 func GetAutoCompleteHome() (string, error) {
 	goctlH, err := GetGoctlHome()
 	goctlH, err := GetGoctlHome()
 	if err != nil {
 	if err != nil {
@@ -125,7 +125,7 @@ func GetAutoCompleteHome() (string, error) {
 	return filepath.Join(goctlH, autoCompleteDir), nil
 	return filepath.Join(goctlH, autoCompleteDir), nil
 }
 }
 
 
-// GetCacheDir returns the cache dit of goctlwt.
+// GetCacheDir returns the cache dit of goctl.
 func GetCacheDir() (string, error) {
 func GetCacheDir() (string, error) {
 	goctlH, err := GetGoctlHome()
 	goctlH, err := GetGoctlHome()
 	if err != nil {
 	if err != nil {