From c6348b98552e0aa1be5d6881c4b34ec678db0fa5 Mon Sep 17 00:00:00 2001 From: kesonan Date: Sat, 3 Aug 2024 12:26:24 +0800 Subject: [PATCH] refactor goctl-compare (#4290) --- tools/goctl/compare/.gitignore | 1 + tools/goctl/compare/api/test.api | 151 ++++++ tools/goctl/compare/cmd/cmd.go | 23 - tools/goctl/compare/compare.go | 11 - tools/goctl/compare/compare.sh | 97 ++++ tools/goctl/compare/make.sh | 7 - .../compare/{testdata => model}/user.sql | 18 +- tools/goctl/compare/rpc/base/common.proto | 8 + tools/goctl/compare/rpc/test.proto | 65 +++ tools/goctl/compare/testdata/kotlin.api | 17 - tools/goctl/compare/testdata/testcase.go | 470 ------------------ tools/goctl/compare/testdata/testdata.go | 119 ----- tools/goctl/compare/testdata/unformat.api | 3 - 13 files changed, 332 insertions(+), 658 deletions(-) create mode 100644 tools/goctl/compare/.gitignore create mode 100644 tools/goctl/compare/api/test.api delete mode 100644 tools/goctl/compare/cmd/cmd.go delete mode 100644 tools/goctl/compare/compare.go create mode 100644 tools/goctl/compare/compare.sh delete mode 100644 tools/goctl/compare/make.sh rename tools/goctl/compare/{testdata => model}/user.sql (69%) create mode 100644 tools/goctl/compare/rpc/base/common.proto create mode 100644 tools/goctl/compare/rpc/test.proto delete mode 100644 tools/goctl/compare/testdata/kotlin.api delete mode 100644 tools/goctl/compare/testdata/testcase.go delete mode 100644 tools/goctl/compare/testdata/testdata.go delete mode 100644 tools/goctl/compare/testdata/unformat.api diff --git a/tools/goctl/compare/.gitignore b/tools/goctl/compare/.gitignore new file mode 100644 index 00000000..378eac25 --- /dev/null +++ b/tools/goctl/compare/.gitignore @@ -0,0 +1 @@ +build diff --git a/tools/goctl/compare/api/test.api b/tools/goctl/compare/api/test.api new file mode 100644 index 00000000..f9737f8b --- /dev/null +++ b/tools/goctl/compare/api/test.api @@ -0,0 +1,151 @@ +syntax = "v1" + +@server ( + group: base +) +service test { + @handler root + get / + + @handler ping + get /ping + + @handler postRoot + post / + + @handler postPing + post /ping +} + +type ( + Subject { + Id int64 `json:"id"` + Name string `json:"name"` + } + Grade { + Id int64 `json:"id"` + Name string `json:"name"` + } + Class { + Id int64 `json:"id"` + Name string `json:"name"` + GradeId int64 `json:"gradeId"` + Teachers []*Teacher `json:"teachers"` + Master { + UserId int64 `json:"userId"` + Temp bool `json:"temp"` + } `json:"master"` + } + User { + Id int64 `json:"id"` + Name string `json:"name"` + Gender int `json:"gender"` + Active bool `json:"active"` + Hobby []string `json:"hobby"` + } + Teacher { + UserId int64 `json:"userId"` + Id int64 `json:"id"` + Name string `json:"name"` + SubjectId int64 `json:"subjectId"` + Class map[int64]*Class `json:"class"` + } + Student { + UserId int64 `json:"userId"` + StudentId int64 `json:"studentId"` + Number string `json:"number"` + ClassId int64 `json:"classId"` + SubjectId []int64 `json:"subjectId"` + SubjectTop3 [3]int64 `json:"subjectTop3"` + Extra map[string]interface{} `json:"extra"` + } + Base { + Code int64 `json:"code"` + Msg string `json:"msg"` + } +) + +type ( + LoginReq { + Username string `json:"username"` + Password string `json:"password"` + } + LoginResp { + Base + Data *User `json:"data"` + } +) + +@server ( + group: user + prefix: /user +) +service test { + @handler login + post /login (LoginReq) returns (LoginReq) +} + +type ( + UserInfoReq { + Id int64 `path:"id"` + } + UserInfoResp { + Base + Data *User `json:"data"` + } +) + +@server ( + group: user + prefix: /user + jwt: JWT + middleware: Auth +) +service test { + @handler userInfo + post /info/:id (UserInfoReq) returns (UserInfoResp) +} + +type ( + StudentClassNameListReq { + Id int64 `string:"id"` + } + StudentInfoReq { + Id int64 `path:"id"` + } + SutdentInfoResp { + Base + Data *Student `json:"data"` + } + UpdateStudentInfoReq { + UserId int64 `form:"userId"` + StudentId int64 `form:"studentId"` + Number string `form:"number"` + ClassId int64 `form:"classId"` + SubjectId []int64 `form:"subjectId"` + SubjectTop3 [3]int64 `form:"subjectTop3"` + Extra map[string]interface{} `form:"extra"` + } + UpdateSutdentInfoResp { + Base + Data *Student `json:"data"` + } +) + +@server ( + group: student + prefix: /student + jwt: JWT + middleware: Auth +) +service test { + @handler studentInfo + get /info/:id (StudentInfoReq) returns (SutdentInfoResp) + + @handler updateStudentInfo + post /info/update (UpdateStudentInfoReq) returns (UpdateSutdentInfoResp) + + @handler studentClassNameList + post /class/name/list (StudentClassNameListReq) returns ([]string) +} + diff --git a/tools/goctl/compare/cmd/cmd.go b/tools/goctl/compare/cmd/cmd.go deleted file mode 100644 index ea349b85..00000000 --- a/tools/goctl/compare/cmd/cmd.go +++ /dev/null @@ -1,23 +0,0 @@ -package cmd - -import ( - "github.com/spf13/cobra" - "github.com/zeromicro/go-zero/tools/goctl/compare/testdata" - "github.com/zeromicro/go-zero/tools/goctl/util/console" -) - -var rootCmd = &cobra.Command{ - Use: "compare", - Short: "Compare the goctl commands generated results between urfave and cobra", - Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs), - Run: func(cmd *cobra.Command, args []string) { - dir := args[0] - testdata.MustRun(dir) - }, -} - -func Execute() { - if err := rootCmd.Execute(); err != nil { - console.Error("%+v", err) - } -} diff --git a/tools/goctl/compare/compare.go b/tools/goctl/compare/compare.go deleted file mode 100644 index 715ccbcc..00000000 --- a/tools/goctl/compare/compare.go +++ /dev/null @@ -1,11 +0,0 @@ -package main - -import "github.com/zeromicro/go-zero/tools/goctl/compare/cmd" - -// 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: AFTER RUNNING: diff --recursive old_fs new_fs - -func main() { - cmd.Execute() -} diff --git a/tools/goctl/compare/compare.sh b/tools/goctl/compare/compare.sh new file mode 100644 index 00000000..8788b1ef --- /dev/null +++ b/tools/goctl/compare/compare.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +# local compare test +# compare goctl between latest and newest version if exists different. + +execute_command() { + local command="$1" + + echo "=> $command" + eval "$command" +} + +has_diff (){ + local command="$1" + if $command &> /dev/null; then + return 0 + else + return 1 + fi +} + +echo "=======================env init=============================" +WD=$(readlink -f $(dirname $0))/build +BIN=$WD/bin +PROJECT_DIR=$WD/project +OLD_CODE=$PROJECT_DIR/old +NEW_CODE=$PROJECT_DIR/new + +if [ -d $WD ]; then + execute_command "rm -rf $WD" +fi + +execute_command "mkdir -p $BIN $PROJECT_DIR $OLD_CODE $NEW_CODE" +execute_command 'export GOPROXY="https://goproxy.cn,direct"' +execute_command "export GOBIN=$BIN" + +echo "=======================install goctl=============================" +# install latest goctl +execute_command "go install github.com/zeromicro/go-zero/tools/goctl@master" +execute_command "mv $BIN/goctl $BIN/goctl.old" +execute_command "$BIN/goctl.old env" +execute_command "$BIN/goctl.old env -w GOCTL_EXPERIMENTAL=on" + +# install newest goctl +execute_command "cd .." +execute_command "go build -o goctl.new ." +execute_command "mv goctl.new $BIN/goctl.new" +execute_command "cd -" +execute_command "$BIN/goctl.new env" +execute_command "$BIN/goctl.new env -w GOCTL_EXPERIMENTAL=on" + +echo "=======================go mod tidy=============================" +# go mod init +execute_command "cd $OLD_CODE" +execute_command "go mod init demo" +execute_command "cd -" + +execute_command "cd $NEW_CODE" +execute_command "go mod init demo" +execute_command "cd -" + +echo "=======================generate api=============================" +execute_command "cd api" +# generate api by goctl.old +execute_command "$BIN/goctl.old api go --api test.api --dir $OLD_CODE/api" +# generate api by goctl.new +execute_command "$BIN/goctl.new api go --api test.api --dir $NEW_CODE/api" +execute_command "cd -" + +echo "=======================generate rpc=============================" +execute_command "cd rpc" +# generate rpc by goctl.old +execute_command "$BIN/goctl.old rpc protoc test.proto --go_out=$OLD_CODE/rpc --go-grpc_out=$OLD_CODE/rpc --zrpc_out=$OLD_CODE/rpc" +# generate rpc by goctl.new +execute_command "$BIN/goctl.new rpc protoc test.proto --go_out=$NEW_CODE/rpc --go-grpc_out=$NEW_CODE/rpc --zrpc_out=$NEW_CODE/rpc" +execute_command "cd -" + +echo "=======================generate model=============================" +execute_command "cd model" +# generate model by goctl.old +execute_command "$BIN/goctl.old model mysql ddl --src user.sql --dir $OLD_CODE/cache -c" +execute_command "$BIN/goctl.old model mysql ddl --src user.sql --dir $OLD_CODE/nocache" +# generate model by goctl.new +execute_command "$BIN/goctl.new model mysql ddl --src user.sql --dir $NEW_CODE/cache -c" +execute_command "$BIN/goctl.new model mysql ddl --src user.sql --dir $NEW_CODE/nocache" +execute_command "cd -" + +echo "=======================diff compare=============================" +# compare and diff +if has_diff "diff -rq $OLD_CODE $NEW_CODE"; then + echo "no diff" + exit 0 +else + echo "a diff found" + execute_command "diff -r $OLD_CODE $NEW_CODE" + exit 1 +fi \ No newline at end of file diff --git a/tools/goctl/compare/make.sh b/tools/goctl/compare/make.sh deleted file mode 100644 index 7fb3d824..00000000 --- a/tools/goctl/compare/make.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -wd=`dirname $0` -GOBIN="$GOPATH/bin" -EXE=goctl-compare -go build -o $EXE $wd -mv $EXE $GOBIN diff --git a/tools/goctl/compare/testdata/user.sql b/tools/goctl/compare/model/user.sql similarity index 69% rename from tools/goctl/compare/testdata/user.sql rename to tools/goctl/compare/model/user.sql index 48531dc3..ba59b5de 100644 --- a/tools/goctl/compare/testdata/user.sql +++ b/tools/goctl/compare/model/user.sql @@ -4,11 +4,12 @@ CREATE TABLE `user` `id` bigint(10) NOT NULL AUTO_INCREMENT, `user` varchar(50) NOT NULL DEFAULT '' COMMENT '用户', `name` varchar(255) COLLATE utf8mb4_general_ci NULL COMMENT '用户\t名称', + `age` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '年龄', `password` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户\n密码', `mobile` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '手机号', `gender` char(5) COLLATE utf8mb4_general_ci NOT NULL COMMENT '男|女|未公\r开', `nickname` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户昵称', - `type` tinyint(1) COLLATE utf8mb4_general_ci DEFAULT 0 COMMENT '用户类型', + `type` tinyint(1) COLLATE utf8mb4_general_ci DEFAULT 0 COMMENT '用户类型', `create_time` timestamp NULL, `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), @@ -21,14 +22,15 @@ CREATE TABLE `user` CREATE TABLE `student` ( - `type` bigint NOT NULL, - `class` varchar(255) COLLATE utf8mb4_bin NOT NULL DEFAULT '', - `name` varchar(255) COLLATE utf8mb4_bin NOT NULL DEFAULT '', - `age` tinyint DEFAULT NULL, + `type` bigint NOT NULL, + `class` varchar(255) NOT NULL DEFAULT '', + `name` varchar(255) NOT NULL DEFAULT '', + `age` tinyint DEFAULT NULL, `score` float(10, 0 ) DEFAULT NULL, + `amount` decimal DEFAULT NULL, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`type`) USING BTREE, - UNIQUE KEY `class_name_index` (`class`,`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; \ No newline at end of file + `delete_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`type`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; diff --git a/tools/goctl/compare/rpc/base/common.proto b/tools/goctl/compare/rpc/base/common.proto new file mode 100644 index 00000000..883c65fe --- /dev/null +++ b/tools/goctl/compare/rpc/base/common.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; + +package common; +option go_package="./common"; + +message User { + string name = 1; +} diff --git a/tools/goctl/compare/rpc/test.proto b/tools/goctl/compare/rpc/test.proto new file mode 100644 index 00000000..5ee8ae40 --- /dev/null +++ b/tools/goctl/compare/rpc/test.proto @@ -0,0 +1,65 @@ +// test proto +syntax = "proto3"; + +package test; + +import "base/common.proto"; +option go_package = "github.com/test"; + +message Req { + string in = 1; + common.User user = 2; +} + +message Reply { + string out = 1; +} + +message snake_req {} + +message snake_reply {} + +message CamelReq{} + +message CamelReply{} + +message EnumMessage { + enum Enum { + unknown = 0; + male = 1; + female = 2; + } +} + +message CommonReply{} + +message MapReq{ + map m = 1; +} + +message RepeatedReq{ + repeated string id = 1; +} + +service Test_Service { + // service + rpc Service (Req) returns (Reply); + // greet service + rpc GreetService (Req) returns (Reply); + // case snake + rpc snake_service (snake_req) returns (snake_reply); + // case camel + rpc CamelService (CamelReq) returns (CamelReply); + // case enum + rpc EnumService (EnumMessage) returns (CommonReply); + // case map + rpc MapService (MapReq) returns (CommonReply); + // case repeated + rpc RepeatedService (RepeatedReq) returns (CommonReply); + // server stream + rpc ServerStream (Req) returns (stream Reply); + // client stream + rpc ClientStream (stream Req) returns (Reply); + // stream + rpc Stream(stream Req) returns (stream Reply); +} \ No newline at end of file diff --git a/tools/goctl/compare/testdata/kotlin.api b/tools/goctl/compare/testdata/kotlin.api deleted file mode 100644 index 6eed57ed..00000000 --- a/tools/goctl/compare/testdata/kotlin.api +++ /dev/null @@ -1,17 +0,0 @@ -syntax = "v1" - -info( - title: "type title here" - desc: "type desc here" - author: "type author here" - email: "type email here" - version: "type version here" -) - -type req{} -type reply{} - -service kotlin-api{ - @handler ping - post /ping -} diff --git a/tools/goctl/compare/testdata/testcase.go b/tools/goctl/compare/testdata/testcase.go deleted file mode 100644 index 772346d7..00000000 --- a/tools/goctl/compare/testdata/testcase.go +++ /dev/null @@ -1,470 +0,0 @@ -package testdata - -import _ "embed" - -var ( - //go:embed unformat.api - unformatApi string - //go:embed kotlin.api - kotlinApi string - //go:embed user.sql - userSql string - - list = Files{ - { - IsDir: true, - Path: "version", - Cmd: "goctl --version", - }, - { - IsDir: true, - Path: "api/sample_file/local", - Cmd: "goctl api --o sample.api", - }, - { - IsDir: true, - Path: "api/sample_file/local/assign", - Cmd: "goctl api --o=sample.api", - }, - { - IsDir: true, - Path: "api/sample_file/local/assign/shorthand", - Cmd: "goctl api -o=sample.api", - }, - { - IsDir: true, - Path: "api/sample_file/remote", - Cmd: "goctl api --o sample.api --remote https://github.com/zeromicro/go-zero-template --branch main", - }, - { - IsDir: true, - Path: "api/sample_file/remote/shorthand", - Cmd: "goctl api -o sample.api -remote https://github.com/zeromicro/go-zero-template -branch main", - }, - { - IsDir: true, - Path: "api/sample_file/remote/assign", - Cmd: "goctl api --o=sample.api --remote https://github.com/zeromicro/go-zero-template --branch=main", - }, - { - IsDir: true, - Path: "api/sample_file/remote/assign/shorthand", - Cmd: "goctl api -o=sample.api -remote https://github.com/zeromicro/go-zero-template -branch=main", - }, - { - IsDir: true, - Path: "api/dart/legacy/true", - Cmd: "goctl api --o sample.api && goctl api dart --api sample.api --dir . --hostname 127.0.0.1 --legacy true", - }, - { - IsDir: true, - Path: "api/dart/legacy/true/shorthand", - Cmd: "goctl api -o sample.api && goctl api dart -api sample.api -dir . -hostname 127.0.0.1 -legacy true", - }, - { - IsDir: true, - Path: "api/dart/legacy/true/assign", - Cmd: "goctl api --o=sample.api && goctl api dart --api=sample.api --dir=. --hostname=127.0.0.1 --legacy=true", - }, - { - IsDir: true, - Path: "api/dart/legacy/true/assign/shorthand", - Cmd: "goctl api -o=sample.api && goctl api dart -api=sample.api -dir=. -hostname=127.0.0.1 -legacy=true", - }, - { - IsDir: true, - Path: "api/dart/legacy/false", - Cmd: "goctl api --o sample.api && goctl api dart --api sample.api --dir . --hostname 127.0.0.1 --legacy true", - }, - { - IsDir: true, - Path: "api/dart/legacy/false/shorthand", - Cmd: "goctl api -o sample.api && goctl api dart -api sample.api -dir . -hostname 127.0.0.1 -legacy true", - }, - { - IsDir: true, - Path: "api/dart/legacy/false/assign", - Cmd: "goctl api --o=sample.api && goctl api dart --api=sample.api --dir=. --hostname=127.0.0.1 --legacy=true", - }, - { - IsDir: true, - Path: "api/dart/legacy/false/assign/shorthand", - Cmd: "goctl api -o=sample.api && goctl api dart -api=sample.api -dir=. -hostname=127.0.0.1 -legacy=true", - }, - { - IsDir: true, - Path: "api/doc", - Cmd: "goctl api --o sample.api && goctl api doc --dir . --o .", - }, - { - IsDir: true, - Path: "api/doc/shorthand", - Cmd: "goctl api -o sample.api && goctl api doc -dir . -o .", - }, - { - IsDir: true, - Path: "api/doc/assign", - Cmd: "goctl api --o=sample.api && goctl api doc --dir=. --o=.", - }, - { - IsDir: true, - Path: "api/doc/assign/shorthand", - Cmd: "goctl api -o=sample.api && goctl api doc -dir=. -o=.", - }, - { - Path: "api/format/unformat.api", - Content: unformatApi, - Cmd: "goctl api format --dir . --iu", - }, - { - Path: "api/format/shorthand/unformat.api", - Content: unformatApi, - Cmd: "goctl api format -dir . -iu", - }, - { - Path: "api/format/assign/unformat.api", - Content: unformatApi, - Cmd: "goctl api format --dir=. --iu", - }, - { - Path: "api/format/assign/shorthand/unformat.api", - Content: unformatApi, - Cmd: "goctl api format -dir=. -iu", - }, - { - IsDir: true, - Path: "api/go/style/default", - Cmd: "goctl api --o sample.api && goctl api go --api sample.api --dir .", - }, - { - IsDir: true, - Path: "api/go/style/default/shorthand", - Cmd: "goctl api -o sample.api && goctl api go -api sample.api -dir .", - }, - { - IsDir: true, - Path: "api/go/style/assign/default", - Cmd: "goctl api --o=sample.api && goctl api go --api=sample.api --dir=.", - }, - { - IsDir: true, - Path: "api/go/style/assign/default/shorthand", - Cmd: "goctl api -o=sample.api && goctl api go -api=sample.api -dir=.", - }, - { - IsDir: true, - Path: "api/go/style/goZero", - Cmd: "goctl api --o sample.api && goctl api go --api sample.api --dir . --style goZero", - }, - { - IsDir: true, - Path: "api/go/style/goZero/shorthand", - Cmd: "goctl api -o sample.api && goctl api go -api sample.api -dir . -style goZero", - }, - { - IsDir: true, - Path: "api/go/style/goZero/assign", - Cmd: "goctl api --o=sample.api && goctl api go --api=sample.api --dir=. --style=goZero", - }, - { - IsDir: true, - Path: "api/go/style/goZero/assign/shorthand", - Cmd: "goctl api -o=sample.api && goctl api go -api=sample.api -dir=. -style=goZero", - }, - { - IsDir: true, - Path: "api/java", - Cmd: "goctl api --o sample.api && goctl api java --api sample.api --dir .", - }, - { - IsDir: true, - Path: "api/java/shorthand", - Cmd: "goctl api -o sample.api && goctl api java -api sample.api -dir .", - }, - { - IsDir: true, - Path: "api/java/assign", - Cmd: "goctl api --o=sample.api && goctl api java --api=sample.api --dir=.", - }, - { - IsDir: true, - Path: "api/java/shorthand/assign", - Cmd: "goctl api -o=sample.api && goctl api java -api=sample.api -dir=.", - }, - { - IsDir: true, - Path: "api/new/style/default", - Cmd: "goctl api new greet", - }, - { - IsDir: true, - Path: "api/new/style/goZero", - Cmd: "goctl api new greet --style goZero", - }, - { - IsDir: true, - Path: "api/new/style/goZero/assign", - Cmd: "goctl api new greet --style=goZero", - }, - { - IsDir: true, - Path: "api/new/style/goZero/shorthand", - Cmd: "goctl api new greet -style goZero", - }, - { - IsDir: true, - Path: "api/new/style/goZero/shorthand/assign", - Cmd: "goctl api new greet -style=goZero", - }, - { - IsDir: true, - Path: "api/ts", - Cmd: "goctl api --o sample.api && goctl api ts --api sample.api --dir . --unwrap --webapi .", - }, - { - IsDir: true, - Path: "api/ts/shorthand", - Cmd: "goctl api -o sample.api && goctl api ts -api sample.api -dir . -unwrap -webapi .", - }, - { - IsDir: true, - Path: "api/ts/assign", - Cmd: "goctl api --o=sample.api && goctl api ts --api=sample.api --dir=. --unwrap --webapi=.", - }, - { - IsDir: true, - Path: "api/ts/shorthand/assign", - Cmd: "goctl api -o=sample.api && goctl api ts -api=sample.api -dir=. -unwrap -webapi=.", - }, - { - IsDir: true, - Path: "api/validate", - Cmd: "goctl api --o sample.api && goctl api validate --api sample.api", - }, - { - IsDir: true, - Path: "api/validate/shorthand", - Cmd: "goctl api -o sample.api && goctl api validate -api sample.api", - }, - { - IsDir: true, - Path: "api/validate/assign", - Cmd: "goctl api --o=sample.api && goctl api validate --api=sample.api", - }, - { - IsDir: true, - Path: "api/validate/shorthand/assign", - Cmd: "goctl api -o=sample.api && goctl api validate -api=sample.api", - }, - { - IsDir: true, - Path: "env/show", - Cmd: "goctl env > env.txt", - }, - { - IsDir: true, - Path: "env/check", - Cmd: "goctl env check -f -v", - }, - { - IsDir: true, - Path: "env/install", - Cmd: "goctl env install -v", - }, - { - IsDir: true, - Path: "kube", - Cmd: "goctl kube deploy --image alpine --name foo --namespace foo --o foo.yaml --port 8888", - }, - { - IsDir: true, - Path: "kube/shorthand", - Cmd: "goctl kube deploy -image alpine -name foo -namespace foo -o foo.yaml -port 8888", - }, - { - IsDir: true, - Path: "kube/assign", - Cmd: "goctl kube deploy --image=alpine --name=foo --namespace=foo --o=foo.yaml --port=8888", - }, - { - IsDir: true, - Path: "kube/shorthand/assign", - Cmd: "goctl kube deploy -image=alpine -name=foo -namespace=foo -o=foo.yaml -port=8888", - }, - { - IsDir: true, - Path: "model/mongo/cache", - Cmd: "goctl model mongo --dir . --type user --style goZero -c", - }, - { - IsDir: true, - Path: "model/mongo/cache/shorthand", - Cmd: "goctl model mongo -dir . -type user -style goZero -c", - }, - { - IsDir: true, - Path: "model/mongo/cache/assign", - Cmd: "goctl model mongo --dir=. --type=user --style=goZero -c", - }, - { - IsDir: true, - Path: "model/mongo/cache/shorthand/assign", - Cmd: "goctl model mongo -dir=. -type=user -style=goZero -c", - }, - { - IsDir: true, - Path: "model/mongo/nocache", - Cmd: "goctl model mongo --dir . --type user", - }, - { - IsDir: true, - Path: "model/mongo/nocache/shorthand", - Cmd: "goctl model mongo -dir . -type user", - }, - { - IsDir: true, - Path: "model/mongo/nocache/assign", - Cmd: "goctl model mongo --dir=. --type=user", - }, - { - IsDir: true, - Path: "model/mongo/nocache/shorthand/assign", - Cmd: "goctl model mongo -dir=. -type=user", - }, - { - Content: userSql, - Path: "model/mysql/ddl/user.sql", - Cmd: "goctl model mysql ddl --database user --dir cache --src user.sql -c", - }, - { - Content: userSql, - Path: "model/mysql/ddl/shorthand/user.sql", - Cmd: "goctl model mysql ddl -database user -dir cache -src user.sql -c", - }, - { - Content: userSql, - Path: "model/mysql/ddl/assign/user.sql", - Cmd: "goctl model mysql ddl --database=user --dir=cache --src=user.sql -c", - }, - { - Content: userSql, - Path: "model/mysql/ddl/shorthand/assign/user.sql", - Cmd: "goctl model mysql ddl -database=user -dir=cache -src=user.sql -c", - }, - { - Content: userSql, - Path: "model/mysql/ddl/user.sql", - Cmd: "goctl model mysql ddl --database user --dir nocache --src user.sql", - }, - { - Content: userSql, - Path: "model/mysql/ddl/shorthand/user.sql", - Cmd: "goctl model mysql ddl -database user -dir nocache -src user.sql", - }, - { - Content: userSql, - Path: "model/mysql/ddl/assign/user.sql", - Cmd: "goctl model mysql ddl --database=user --dir=nocache --src=user.sql", - }, - { - Content: userSql, - Path: "model/mysql/ddl/shorthand/assign/user.sql", - Cmd: "goctl model mysql ddl -database=user -dir=nocache -src=user.sql", - }, - { - IsDir: true, - Path: "model/mysql/datasource", - Cmd: `goctl model mysql datasource --url $DSN --dir cache --table "*" -c`, - }, - { - IsDir: true, - Path: "model/mysql/datasource/shorthand", - Cmd: `goctl model mysql datasource -url $DSN -dir cache -table "*" -c`, - }, - { - IsDir: true, - Path: "model/mysql/datasource/shorthand2", - Cmd: `goctl model mysql datasource -url $DSN -dir cache -t "*" -c`, - }, - { - IsDir: true, - Path: "model/mysql/datasource/assign", - Cmd: `goctl model mysql datasource --url=$DSN --dir=cache --table="*" -c`, - }, - { - IsDir: true, - Path: "model/mysql/datasource/shorthand/assign", - Cmd: `goctl model mysql datasource -url=$DSN -dir=cache -table="*" -c`, - }, - { - IsDir: true, - Path: "model/mysql/datasource/shorthand2/assign", - Cmd: `goctl model mysql datasource -url=$DSN -dir=cache -t="*" -c`, - }, - { - IsDir: true, - Path: "model/mysql/datasource", - Cmd: `goctl model mysql datasource --url $DSN --dir nocache --table "*" -c`, - }, - { - IsDir: true, - Path: "model/mysql/datasource/shorthand", - Cmd: `goctl model mysql datasource -url $DSN -dir nocache -table "*" -c`, - }, - { - IsDir: true, - Path: "model/mysql/datasource/shorthand2", - Cmd: `goctl model mysql datasource -url $DSN -dir nocache -t "*" -c`, - }, - { - IsDir: true, - Path: "model/mysql/datasource/assign", - Cmd: `goctl model mysql datasource --url=$DSN --dir=nocache --table="*" -c`, - }, - { - IsDir: true, - Path: "model/mysql/datasource/shorthand/assign", - Cmd: `goctl model mysql datasource -url=$DSN -dir=nocache -table="*" -c`, - }, - { - IsDir: true, - Path: "model/mysql/datasource/shorthand2/assign", - Cmd: `goctl model mysql datasource -url=$DSN -dir=nocache -t="*" -c`, - }, - { - IsDir: true, - Path: "rpc/new", - Cmd: "goctl rpc new greet", - }, - { - IsDir: true, - Path: "rpc/template", - Cmd: "goctl rpc template --o greet.proto", - }, - { - IsDir: true, - Path: "rpc/template/shorthand", - Cmd: "goctl rpc template -o greet.proto", - }, - { - IsDir: true, - Path: "rpc/template/assign", - Cmd: "goctl rpc template --o=greet.proto", - }, - { - IsDir: true, - Path: "rpc/template/shorthand/assign", - Cmd: "goctl rpc template -o=greet.proto", - }, - { - IsDir: true, - Path: "rpc/protoc", - Cmd: "goctl rpc template --o greet.proto && goctl rpc protoc greet.proto --go_out . --go-grpc_out . --zrpc_out .", - }, - { - IsDir: true, - Path: "rpc/protoc/assign", - Cmd: "goctl rpc template --o=greet.proto && goctl rpc protoc greet.proto --go_out=. --go-grpc_out=. --zrpc_out=.", - }, - } -) diff --git a/tools/goctl/compare/testdata/testdata.go b/tools/goctl/compare/testdata/testdata.go deleted file mode 100644 index c11b3d0a..00000000 --- a/tools/goctl/compare/testdata/testdata.go +++ /dev/null @@ -1,119 +0,0 @@ -package testdata - -import ( - "fmt" - "log" - "os" - "os/exec" - "path/filepath" - "strings" - - "github.com/gookit/color" - "github.com/zeromicro/go-zero/tools/goctl/util/pathx" -) - -type ( - File struct { - IsDir bool - Path string - AbsolutePath string - Content string - Cmd string - } - - Files []File -) - -func (f File) execute(goctl string) error { - printDir := f.Path - dir := f.AbsolutePath - if !f.IsDir { - printDir = filepath.Dir(printDir) - dir = filepath.Dir(dir) - } - 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)) - cmd := exec.Command("sh", "-c", command) - cmd.Env = os.Environ() - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - return cmd.Run() -} - -func (fs Files) execute(goctl string) error { - for _, f := range fs { - err := f.execute(goctl) - if err != nil { - return err - } - } - return nil -} - -func mustGetTestData(baseDir string) (Files, Files) { - if len(baseDir) == 0 { - dir, err := os.Getwd() - if err != nil { - log.Fatalln(err) - } - baseDir = dir - } - baseDir, err := filepath.Abs(baseDir) - if err != nil { - return nil, nil - } - createFile := func(baseDir string, data File) (File, error) { - fp := filepath.Join(baseDir, data.Path) - dir := filepath.Dir(fp) - if data.IsDir { - dir = fp - } - if err := pathx.MkdirIfNotExist(dir); err != nil { - return data, err - } - data.AbsolutePath = fp - if data.IsDir { - return data, nil - } - - return data, os.WriteFile(fp, []byte(data.Content), os.ModePerm) - } - oldDir := filepath.Join(baseDir, "old_fs") - newDir := filepath.Join(baseDir, "new_fs") - os.RemoveAll(oldDir) - os.RemoveAll(newDir) - var oldFiles, newFiles []File - for _, data := range list { - od, err := createFile(oldDir, data) - if err != nil { - log.Fatalln(err) - } - oldFiles = append(oldFiles, od) - nd, err := createFile(newDir, data) - if err != nil { - log.Fatalln(err) - } - newFiles = append(newFiles, nd) - } - return oldFiles, newFiles -} - -func MustRun(baseDir string) { - oldFiles, newFiles := mustGetTestData(baseDir) - goctlOld, err := exec.LookPath("goctl.old") - must(err) - goctlNew, err := exec.LookPath("goctl") - must(err) - fmt.Println(color.LightBlue.Render("========================goctl.old=======================")) - must(oldFiles.execute(goctlOld)) - fmt.Println() - fmt.Println(color.LightBlue.Render("========================goctl.new=======================")) - must(newFiles.execute(goctlNew)) -} - -func must(err error) { - if err != nil { - log.Fatalln(err) - } -} diff --git a/tools/goctl/compare/testdata/unformat.api b/tools/goctl/compare/testdata/unformat.api deleted file mode 100644 index debea8e3..00000000 --- a/tools/goctl/compare/testdata/unformat.api +++ /dev/null @@ -1,3 +0,0 @@ -syntax = "v1" - -type Foo struct{}