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/mattn/go-runewidth v0.0.16
|
||||
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/client/v3 v3.6.0
|
||||
golang.org/x/sync v0.12.0
|
||||
|
@ -36,6 +37,7 @@ require (
|
|||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang/protobuf v1.5.4 // 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/now v1.1.5 // 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/pelletier/go-toml/v2 v2.2.2 // 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/ugorji/go/codec v1.2.12 // 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-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
|
||||
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.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
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/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/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/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||
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/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/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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
|
|
|
@ -24,6 +24,8 @@ var (
|
|||
".gitignore": GitIgnoreTemp,
|
||||
"README.md": ReadmeTemp,
|
||||
"go.mod": GoModTemp,
|
||||
"webhook.yaml": WebhookTemp,
|
||||
"deploy/docker/deployment.yaml": DeploymentTemp,
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -38,6 +40,7 @@ type (
|
|||
PackageName string
|
||||
Datetime string
|
||||
Version string
|
||||
ImageRegistry string
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -80,9 +83,13 @@ func Geerate(app *types.Applicetion) (err error) {
|
|||
data := TemplateData{
|
||||
ShortName: shortName,
|
||||
PackageName: app.Package,
|
||||
Version: "v0.0.1",
|
||||
Version: app.Version,
|
||||
ImageRegistry: "{{IMAGE_REGISTRY_URL}}",
|
||||
Datetime: time.Now().Format(time.DateTime),
|
||||
}
|
||||
if data.Version == "" {
|
||||
data.Version = "v0.0.1"
|
||||
}
|
||||
var t *template.Template
|
||||
writer := bytes.NewBuffer(nil)
|
||||
for name, tmpl := range fileMap {
|
||||
|
|
|
@ -32,8 +32,8 @@ func main() {
|
|||
os.Exit(0)
|
||||
}
|
||||
app := aeus.New(
|
||||
aeus.WithName("{{.ShortName}}"),
|
||||
aeus.WithVersion("{{.Version}}"),
|
||||
aeus.WithName(version.ProductName),
|
||||
aeus.WithVersion(version.Version),
|
||||
aeus.WithServer(
|
||||
http.New(),
|
||||
grpc.New(),
|
||||
|
@ -137,11 +137,19 @@ proto-clean:
|
|||
rm -rf $(PROTO_OUT_DIR)/*.pb.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
|
||||
build:
|
||||
go mod tidy
|
||||
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 = `
|
||||
|
@ -226,5 +234,38 @@ _test
|
|||
module {{.PackageName}}
|
||||
|
||||
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 {
|
||||
Package string
|
||||
Version string
|
||||
}
|
||||
|
||||
func (app *Applicetion) ShortName() string {
|
||||
|
|
|
@ -1,25 +1,69 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"git.nobla.cn/golang/aeus/tools/gen/internal/generator"
|
||||
"git.nobla.cn/golang/aeus/tools/gen/internal/types"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func waitingSignal(ctx context.Context, cancelFunc context.CancelFunc) {
|
||||
ch := make(chan os.Signal, 1)
|
||||
signals := []os.Signal{syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGKILL}
|
||||
signal.Notify(ch, signals...)
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
case <-ch:
|
||||
cancelFunc()
|
||||
close(ch)
|
||||
}
|
||||
}
|
||||
|
||||
func createCommand() *cobra.Command {
|
||||
var (
|
||||
packageFlag = flag.String("package", "", "package name")
|
||||
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() {
|
||||
flag.Parse()
|
||||
app := &types.Applicetion{
|
||||
Package: *packageFlag,
|
||||
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,
|
||||
}
|
||||
if err := generator.Geerate(app); err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
go waitingSignal(ctx, cancelFunc)
|
||||
cmd.AddCommand(createCommand())
|
||||
if err = cmd.ExecuteContext(ctx); err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
cancelFunc()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue