You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.9 KiB
76 lines
1.9 KiB
3 years ago
|
package server
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"git.reya.zone/reya/hexmap/build"
|
||
|
"github.com/magefile/mage/mg"
|
||
|
"io/fs"
|
||
|
"os"
|
||
|
"os/exec"
|
||
|
"path"
|
||
|
"path/filepath"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
|
||
|
func InstallZapMarshaler(ctx context.Context) error {
|
||
|
alreadyDone, err := build.HasExecutableInBuildtools("protoc-gen-zap-marshaler")
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if alreadyDone {
|
||
|
return nil
|
||
|
}
|
||
|
return build.InstallGoExecutable(ctx, "github.com/kazegusuri/go-proto-zap-marshaler/protoc-gen-zap-marshaler@latest")
|
||
|
}
|
||
|
|
||
|
func InstallGoProtoc(ctx context.Context) error {
|
||
|
alreadyDone, err := build.HasExecutableInBuildtools("protoc-gen-go")
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if alreadyDone {
|
||
|
return nil
|
||
|
}
|
||
|
return build.InstallGoExecutable(ctx, "google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1")
|
||
|
}
|
||
|
|
||
|
func InstallProtoDeps(ctx context.Context) {
|
||
|
mg.CtxDeps(ctx, InstallZapMarshaler, InstallGoProtoc)
|
||
|
}
|
||
|
|
||
|
type Protobuf mg.Namespace
|
||
|
|
||
|
func (Protobuf) BuildProtocolBuffers(ctx context.Context) error {
|
||
|
mg.CtxDeps(ctx, InstallProtoDeps)
|
||
|
tooldir, err := build.GetBuildToolsDir()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
pluginPathFlag := fmt.Sprintf("--plugin=%s", path.Join(tooldir, "protoc-gen-go"))
|
||
|
cmd := exec.CommandContext(ctx, "protoc", pluginPathFlag, "-I=proto", "--go_out=.", "--go_opt=module=git.reya.zone/reya/hexmap", "proto/action.proto", "proto/client.proto", "proto/coords.proto", "proto/map.proto", "proto/server.proto", "proto/user.proto")
|
||
|
cmd.Stderr = os.Stderr
|
||
|
return cmd.Run()
|
||
|
}
|
||
|
|
||
|
func (Protobuf) Clean(ctx context.Context) error {
|
||
|
return filepath.WalkDir("server", func(path string, d fs.DirEntry, dirErr error) error {
|
||
|
if ctx.Err() != nil {
|
||
|
return ctx.Err()
|
||
|
}
|
||
|
if dirErr != nil {
|
||
|
return dirErr
|
||
|
}
|
||
|
if strings.HasSuffix(path, ".pb.go") && !d.IsDir() {
|
||
|
if mg.Verbose() {
|
||
|
fmt.Printf("Removing generated protobuf code at %s\n", path)
|
||
|
}
|
||
|
err := os.Remove(path)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
})
|
||
|
}
|