add generate tool
This commit is contained in:
parent
0997b9c520
commit
b5349a9239
3
go.mod
3
go.mod
|
@ -11,6 +11,7 @@ require (
|
||||||
github.com/google/uuid v1.6.0
|
github.com/google/uuid v1.6.0
|
||||||
github.com/mattn/go-runewidth v0.0.16
|
github.com/mattn/go-runewidth v0.0.16
|
||||||
github.com/peterh/liner v1.2.2
|
github.com/peterh/liner v1.2.2
|
||||||
|
github.com/spf13/cobra v1.9.1
|
||||||
go.etcd.io/etcd/api/v3 v3.6.0
|
go.etcd.io/etcd/api/v3 v3.6.0
|
||||||
go.etcd.io/etcd/client/v3 v3.6.0
|
go.etcd.io/etcd/client/v3 v3.6.0
|
||||||
golang.org/x/sync v0.12.0
|
golang.org/x/sync v0.12.0
|
||||||
|
@ -36,6 +37,7 @@ require (
|
||||||
github.com/gogo/protobuf v1.3.2 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
github.com/golang/protobuf v1.5.4 // indirect
|
github.com/golang/protobuf v1.5.4 // indirect
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
|
||||||
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
github.com/jinzhu/now v1.1.5 // indirect
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
|
@ -46,6 +48,7 @@ require (
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
||||||
github.com/rivo/uniseg v0.2.0 // indirect
|
github.com/rivo/uniseg v0.2.0 // indirect
|
||||||
|
github.com/spf13/pflag v1.0.6 // indirect
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||||
github.com/ugorji/go/codec v1.2.12 // indirect
|
github.com/ugorji/go/codec v1.2.12 // indirect
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.6.0 // indirect
|
go.etcd.io/etcd/client/pkg/v3 v3.6.0 // indirect
|
||||||
|
|
8
go.sum
8
go.sum
|
@ -10,6 +10,7 @@ github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr
|
||||||
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
|
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
|
||||||
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
|
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
|
||||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
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=
|
||||||
|
@ -49,6 +50,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
|
||||||
|
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||||
|
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||||
|
@ -87,6 +90,11 @@ github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
||||||
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
|
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
|
||||||
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
|
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
|
||||||
|
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
|
||||||
|
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
||||||
|
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||||
|
|
|
@ -24,6 +24,8 @@ var (
|
||||||
".gitignore": GitIgnoreTemp,
|
".gitignore": GitIgnoreTemp,
|
||||||
"README.md": ReadmeTemp,
|
"README.md": ReadmeTemp,
|
||||||
"go.mod": GoModTemp,
|
"go.mod": GoModTemp,
|
||||||
|
"webhook.yaml": WebhookTemp,
|
||||||
|
"deploy/docker/deployment.yaml": DeploymentTemp,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -38,6 +40,7 @@ type (
|
||||||
PackageName string
|
PackageName string
|
||||||
Datetime string
|
Datetime string
|
||||||
Version string
|
Version string
|
||||||
|
ImageRegistry string
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -80,9 +83,13 @@ func Geerate(app *types.Applicetion) (err error) {
|
||||||
data := TemplateData{
|
data := TemplateData{
|
||||||
ShortName: shortName,
|
ShortName: shortName,
|
||||||
PackageName: app.Package,
|
PackageName: app.Package,
|
||||||
Version: "v0.0.1",
|
Version: app.Version,
|
||||||
|
ImageRegistry: "{{IMAGE_REGISTRY_URL}}",
|
||||||
Datetime: time.Now().Format(time.DateTime),
|
Datetime: time.Now().Format(time.DateTime),
|
||||||
}
|
}
|
||||||
|
if data.Version == "" {
|
||||||
|
data.Version = "v0.0.1"
|
||||||
|
}
|
||||||
var t *template.Template
|
var t *template.Template
|
||||||
writer := bytes.NewBuffer(nil)
|
writer := bytes.NewBuffer(nil)
|
||||||
for name, tmpl := range fileMap {
|
for name, tmpl := range fileMap {
|
||||||
|
|
|
@ -32,8 +32,8 @@ func main() {
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
app := aeus.New(
|
app := aeus.New(
|
||||||
aeus.WithName("{{.ShortName}}"),
|
aeus.WithName(version.ProductName),
|
||||||
aeus.WithVersion("{{.Version}}"),
|
aeus.WithVersion(version.Version),
|
||||||
aeus.WithServer(
|
aeus.WithServer(
|
||||||
http.New(),
|
http.New(),
|
||||||
grpc.New(),
|
grpc.New(),
|
||||||
|
@ -137,11 +137,19 @@ proto-clean:
|
||||||
rm -rf $(PROTO_OUT_DIR)/*.pb.go
|
rm -rf $(PROTO_OUT_DIR)/*.pb.go
|
||||||
rm -rf $(PROTO_OUT_DIR)/*.pb.validate.go
|
rm -rf $(PROTO_OUT_DIR)/*.pb.validate.go
|
||||||
|
|
||||||
|
.PHONY: docker
|
||||||
|
docker:
|
||||||
|
docker build . -t $(IMAGE_REGISTRY_URL)
|
||||||
|
|
||||||
|
.PHONY: deploy
|
||||||
|
deploy:
|
||||||
|
dkctl apply -f deployment.yaml
|
||||||
|
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
build:
|
build:
|
||||||
go mod tidy
|
go mod tidy
|
||||||
go mod vendor
|
go mod vendor
|
||||||
go build -ldflags "-s -w -X '{{.PackageName}}/version.Version=$(VERSION)' -X '{{.PackageName}}/version.BuildDate=$(DATETIME)'" -o bin/{{.ShortName}} cmd/main.go
|
CGO_ENABLED=0 go build -a -installsuffix cgo -ldflags "-s -w -X '{{.PackageName}}/version.Version=$(VERSION)' -X '{{.PackageName}}/version.BuildDate=$(DATETIME)'" -o bin/{{.ShortName}} cmd/main.go
|
||||||
`
|
`
|
||||||
|
|
||||||
GreeterTemp = `
|
GreeterTemp = `
|
||||||
|
@ -226,5 +234,38 @@ _test
|
||||||
module {{.PackageName}}
|
module {{.PackageName}}
|
||||||
|
|
||||||
go 1.23.0
|
go 1.23.0
|
||||||
|
`
|
||||||
|
WebhookTemp = `
|
||||||
|
name: {{.ShortName}}
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
run: "make build"
|
||||||
|
- name: docker
|
||||||
|
run: "make docker"
|
||||||
|
- name: deploy
|
||||||
|
run: "make deploy"
|
||||||
|
replacements:
|
||||||
|
- src: deploy/docker/deployment.yaml
|
||||||
|
dst: deployment.yaml
|
||||||
|
`
|
||||||
|
DeploymentTemp = `
|
||||||
|
name: {{.ShortName}}
|
||||||
|
image: {{.ImageRegistry}}
|
||||||
|
command: ["{{.ShortName}}"]
|
||||||
|
|
||||||
|
network:
|
||||||
|
name: employ
|
||||||
|
ip: 10.5.10.2
|
||||||
|
|
||||||
|
env:
|
||||||
|
- name: TZ
|
||||||
|
value: "Asia/Shanghai"
|
||||||
|
- name: APP_NAME
|
||||||
|
value: "{{.ShortName}}"
|
||||||
|
|
||||||
|
volume:
|
||||||
|
- name: config
|
||||||
|
path: /etc/{{.ShortName}}/
|
||||||
|
hostPath: /apps/{{.ShortName}}/conf/
|
||||||
`
|
`
|
||||||
)
|
)
|
||||||
|
|
|
@ -4,6 +4,7 @@ import "strings"
|
||||||
|
|
||||||
type Applicetion struct {
|
type Applicetion struct {
|
||||||
Package string
|
Package string
|
||||||
|
Version string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (app *Applicetion) ShortName() string {
|
func (app *Applicetion) ShortName() string {
|
||||||
|
|
|
@ -1,25 +1,69 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
"git.nobla.cn/golang/aeus/tools/gen/internal/generator"
|
"git.nobla.cn/golang/aeus/tools/gen/internal/generator"
|
||||||
"git.nobla.cn/golang/aeus/tools/gen/internal/types"
|
"git.nobla.cn/golang/aeus/tools/gen/internal/types"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
func waitingSignal(ctx context.Context, cancelFunc context.CancelFunc) {
|
||||||
packageFlag = flag.String("package", "", "package name")
|
ch := make(chan os.Signal, 1)
|
||||||
)
|
signals := []os.Signal{syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGKILL}
|
||||||
|
signal.Notify(ch, signals...)
|
||||||
func main() {
|
select {
|
||||||
flag.Parse()
|
case <-ctx.Done():
|
||||||
app := &types.Applicetion{
|
case <-ch:
|
||||||
Package: *packageFlag,
|
cancelFunc()
|
||||||
}
|
close(ch)
|
||||||
if err := generator.Geerate(app); err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createCommand() *cobra.Command {
|
||||||
|
var (
|
||||||
|
version string
|
||||||
|
)
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
Use: "new",
|
||||||
|
Short: "Create microservice application",
|
||||||
|
Long: "Create microservice application",
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) (err error) {
|
||||||
|
if len(args) == 0 {
|
||||||
|
return fmt.Errorf("Please specify the package name")
|
||||||
|
}
|
||||||
|
if version, err = cmd.Flags().GetString("version"); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return generator.Geerate(&types.Applicetion{
|
||||||
|
Package: args[0],
|
||||||
|
Version: version,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
cmd.Flags().StringP("version", "v", "v0.0.1", "Application version")
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
ctx, cancelFunc := context.WithCancel(context.Background())
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
Use: "aeus",
|
||||||
|
Short: "aeus is a tool for manager microservices",
|
||||||
|
Long: "aeus is a tool for manager microservice application",
|
||||||
|
SilenceErrors: true,
|
||||||
|
}
|
||||||
|
go waitingSignal(ctx, cancelFunc)
|
||||||
|
cmd.AddCommand(createCommand())
|
||||||
|
if err = cmd.ExecuteContext(ctx); err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
cancelFunc()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue