remove tools
This commit is contained in:
parent
673d22fcff
commit
9dc6735a61
|
@ -11,6 +11,7 @@ _posts
|
||||||
.vscode
|
.vscode
|
||||||
vendor
|
vendor
|
||||||
cmd/
|
cmd/
|
||||||
|
tools/
|
||||||
third_party/
|
third_party/
|
||||||
|
|
||||||
# Go.gitignore
|
# Go.gitignore
|
||||||
|
|
|
@ -1,122 +0,0 @@
|
||||||
package generator
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"embed"
|
|
||||||
"html/template"
|
|
||||||
"io"
|
|
||||||
"io/fs"
|
|
||||||
"os"
|
|
||||||
"path"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"git.nobla.cn/golang/aeus/tools/gen/internal/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
fileMap = map[string]string{
|
|
||||||
"cmd/main.go": MainTemp,
|
|
||||||
"internal/scope/scope.go": ScopeTemp,
|
|
||||||
"internal/service/service.go": ServiceLoaderTemp,
|
|
||||||
"api/v1/pb/greeter.proto": GreeterTemp,
|
|
||||||
"version/version.go": VersionTemp,
|
|
||||||
"Makefile": MakefileTemp,
|
|
||||||
".gitignore": GitIgnoreTemp,
|
|
||||||
"README.md": ReadmeTemp,
|
|
||||||
"go.mod": GoModTemp,
|
|
||||||
"webhook.yaml": WebhookTemp,
|
|
||||||
"deploy/docker/deployment.yaml": DeploymentTemp,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
//go:embed third_party
|
|
||||||
protoDir embed.FS
|
|
||||||
)
|
|
||||||
|
|
||||||
type (
|
|
||||||
TemplateData struct {
|
|
||||||
ShortName string
|
|
||||||
PackageName string
|
|
||||||
Datetime string
|
|
||||||
Version string
|
|
||||||
ImageRegistry string
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func writeFile(file string, buf []byte) (err error) {
|
|
||||||
dirname := path.Dir(file)
|
|
||||||
if _, err = os.Stat(dirname); err != nil {
|
|
||||||
if err = os.MkdirAll(dirname, 0755); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = os.WriteFile(file, buf, 0644)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func scanDir(s embed.FS, dirname string, callback func(file string) error) (err error) {
|
|
||||||
var (
|
|
||||||
entities []fs.DirEntry
|
|
||||||
)
|
|
||||||
if entities, err = s.ReadDir(dirname); err != nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
for _, entity := range entities {
|
|
||||||
if entity.Name() == "." || entity.Name() == ".." {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
name := path.Join(dirname, entity.Name())
|
|
||||||
if entity.IsDir() {
|
|
||||||
scanDir(s, name, callback)
|
|
||||||
} else {
|
|
||||||
if err = callback(name); err != nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func Geerate(app *types.Applicetion) (err error) {
|
|
||||||
shortName := app.ShortName()
|
|
||||||
data := TemplateData{
|
|
||||||
ShortName: shortName,
|
|
||||||
PackageName: app.Package,
|
|
||||||
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 {
|
|
||||||
if t, err = template.New(name).Parse(tmpl); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err = t.Execute(writer, data); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err = writeFile(path.Join(shortName, name), writer.Bytes()); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
writer.Reset()
|
|
||||||
}
|
|
||||||
if err = writeFile(path.Join(shortName, shortName+".go"), []byte("package "+shortName)); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err = scanDir(protoDir, "third_party", func(filename string) error {
|
|
||||||
if fp, openerr := protoDir.Open(filename); openerr != nil {
|
|
||||||
return openerr
|
|
||||||
} else {
|
|
||||||
if buf, readerr := io.ReadAll(fp); readerr == nil {
|
|
||||||
writeFile(path.Join(shortName, filename), buf)
|
|
||||||
}
|
|
||||||
fp.Close()
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
|
@ -1,271 +0,0 @@
|
||||||
package generator
|
|
||||||
|
|
||||||
var (
|
|
||||||
MainTemp = `
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"flag"
|
|
||||||
"git.nobla.cn/golang/aeus"
|
|
||||||
"git.nobla.cn/golang/aeus/transport/cli"
|
|
||||||
"git.nobla.cn/golang/aeus/transport/grpc"
|
|
||||||
"git.nobla.cn/golang/aeus/transport/http"
|
|
||||||
|
|
||||||
"{{.PackageName}}/version"
|
|
||||||
"{{.PackageName}}/internal/scope"
|
|
||||||
"{{.PackageName}}/internal/service"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
versionFlag = flag.Bool("version", false, "Show version")
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
var (
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
flag.Parse()
|
|
||||||
if *versionFlag{
|
|
||||||
fmt.Println(version.Info())
|
|
||||||
os.Exit(0)
|
|
||||||
}
|
|
||||||
app := aeus.New(
|
|
||||||
aeus.WithName(version.ProductName),
|
|
||||||
aeus.WithVersion(version.Version),
|
|
||||||
aeus.WithServer(
|
|
||||||
http.New(),
|
|
||||||
grpc.New(),
|
|
||||||
cli.New(),
|
|
||||||
),
|
|
||||||
aeus.WithScope(scope.NewScope()),
|
|
||||||
aeus.WithServiceLoader(service.NewLoader()),
|
|
||||||
)
|
|
||||||
|
|
||||||
if err = app.Run(); err != nil {
|
|
||||||
fmt.Println("app run error:", err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
ScopeTemp = `
|
|
||||||
package scope
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"git.nobla.cn/golang/aeus/transport/cli"
|
|
||||||
"git.nobla.cn/golang/aeus/transport/grpc"
|
|
||||||
"git.nobla.cn/golang/aeus/transport/http"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ScopeContext struct {
|
|
||||||
ctx context.Context
|
|
||||||
Http *http.Server
|
|
||||||
Grpc *grpc.Server
|
|
||||||
Cli *cli.Server
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *ScopeContext) Init(ctx context.Context) (err error) {
|
|
||||||
s.ctx = ctx
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewScope() *ScopeContext {
|
|
||||||
return &ScopeContext{}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
ServiceLoaderTemp = `
|
|
||||||
package service
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"{{.PackageName}}/internal/scope"
|
|
||||||
"git.nobla.cn/golang/aeus/transport/cli"
|
|
||||||
"git.nobla.cn/golang/aeus/transport/grpc"
|
|
||||||
"git.nobla.cn/golang/aeus/transport/http"
|
|
||||||
)
|
|
||||||
|
|
||||||
type serviceLoader struct {
|
|
||||||
Sope *scope.ScopeContext
|
|
||||||
Http *http.Server
|
|
||||||
Grpc *grpc.Server
|
|
||||||
Cli *cli.Server
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *serviceLoader) Init(ctx context.Context) (err error) {
|
|
||||||
// bind services here
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *serviceLoader) Run(ctx context.Context) (err error) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewLoader() *serviceLoader {
|
|
||||||
return &serviceLoader{}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
MakefileTemp = `
|
|
||||||
GOHOSTOS:=$(shell go env GOHOSTOS)
|
|
||||||
GOPATH:=$(shell go env GOPATH)
|
|
||||||
VERSION=$(shell git describe --tags --always)
|
|
||||||
DATETIME:=$(shell date "+%Y-%m-%d %H:%M:%S")
|
|
||||||
|
|
||||||
|
|
||||||
PROTO_DIR="api/v1/pb"
|
|
||||||
PROTO_OUT_DIR="api/v1/pb"
|
|
||||||
PROTO_FILES=$(shell find api -name *.proto)
|
|
||||||
|
|
||||||
.PHONY: proto
|
|
||||||
proto:
|
|
||||||
protoc --proto_path=$(PROTO_DIR) \
|
|
||||||
--proto_path=./third_party \
|
|
||||||
--go_out=paths=source_relative:$(PROTO_OUT_DIR) \
|
|
||||||
--go-grpc_out=paths=source_relative:$(PROTO_OUT_DIR) \
|
|
||||||
--go-aeus_out=paths=source_relative:$(PROTO_OUT_DIR) \
|
|
||||||
--validate_out=paths=source_relative,lang=go:$(PROTO_OUT_DIR) \
|
|
||||||
$(PROTO_FILES)
|
|
||||||
|
|
||||||
.PHONY: proto-clean
|
|
||||||
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
|
|
||||||
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 = `
|
|
||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package greeter;
|
|
||||||
|
|
||||||
import "google/api/annotations.proto";
|
|
||||||
import "aeus/command.proto";
|
|
||||||
import "aeus/rest.proto";
|
|
||||||
import "validate/validate.proto";
|
|
||||||
|
|
||||||
option go_package = "{{.PackageName}}/api/v1/pb;pb";
|
|
||||||
|
|
||||||
// The greeting service definition.
|
|
||||||
service Greeter {
|
|
||||||
// Sends a greeting
|
|
||||||
rpc SayHello (HelloRequest) returns (HelloReply) {
|
|
||||||
option (google.api.http) = {
|
|
||||||
get: "/helloworld/{name}"
|
|
||||||
};
|
|
||||||
option (aeus.command) = {
|
|
||||||
path: "/helloworld/:name",
|
|
||||||
description: "Greeter"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// The request message containing the user's name.
|
|
||||||
message HelloRequest {
|
|
||||||
option (aeus.rest) = {
|
|
||||||
table: "users"
|
|
||||||
};
|
|
||||||
int64 id = 1 [(aeus.field)={gorm:"primary_key"},(validate.rules).int64.gt = 999];
|
|
||||||
string name = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The response message containing the greetings
|
|
||||||
message HelloReply {
|
|
||||||
string message = 1;
|
|
||||||
}
|
|
||||||
`
|
|
||||||
VersionTemp = `
|
|
||||||
package version
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
var (
|
|
||||||
Version = "{{.Version}}"
|
|
||||||
BuildDate = "{{.Datetime}}"
|
|
||||||
ProductName = "{{.ShortName}}"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Info() string {
|
|
||||||
return fmt.Sprintf("%s version: %s (built at %s)", ProductName, Version, BuildDate)
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
GitIgnoreTemp = `
|
|
||||||
.vscode
|
|
||||||
.idea
|
|
||||||
|
|
||||||
bin/
|
|
||||||
.svn/
|
|
||||||
.godeps
|
|
||||||
./build
|
|
||||||
.cover/
|
|
||||||
*.dat
|
|
||||||
vendor
|
|
||||||
|
|
||||||
*.o
|
|
||||||
*.a
|
|
||||||
*.so
|
|
||||||
|
|
||||||
# Folders
|
|
||||||
_obj
|
|
||||||
_test
|
|
||||||
`
|
|
||||||
ReadmeTemp = ``
|
|
||||||
|
|
||||||
GoModTemp = `
|
|
||||||
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/
|
|
||||||
`
|
|
||||||
)
|
|
|
@ -1,16 +0,0 @@
|
||||||
package types
|
|
||||||
|
|
||||||
import "strings"
|
|
||||||
|
|
||||||
type Applicetion struct {
|
|
||||||
Package string
|
|
||||||
Version string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (app *Applicetion) ShortName() string {
|
|
||||||
pos := strings.LastIndex(app.Package, "/")
|
|
||||||
if pos > -1 {
|
|
||||||
return app.Package[pos+1:]
|
|
||||||
}
|
|
||||||
return app.Package
|
|
||||||
}
|
|
|
@ -1,69 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"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 (
|
|
||||||
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