|
|
|
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"
|
|
|
|
)
|
|
|
|
|
|
|
|
// TODO: GoGet
|
|
|
|
// TODO: Build
|
|
|
|
// TODO: Clean
|
|
|
|
|
|
|
|
type Protobuf mg.Namespace
|
|
|
|
|
|
|
|
func (Protobuf) InstallGoPlugin(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 (Protobuf) InstallPlugins(ctx context.Context) {
|
|
|
|
mg.CtxDeps(ctx, Protobuf.InstallGoPlugin)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (Protobuf) Build(ctx context.Context) error {
|
|
|
|
mg.CtxDeps(ctx, Protobuf.Clean, Protobuf.InstallPlugins)
|
|
|
|
tooldir, err := build.GetBuildToolsDir()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
goPluginPathFlag := fmt.Sprintf("--plugin=%s", path.Join(tooldir, "protoc-gen-go"))
|
|
|
|
cmd := exec.CommandContext(ctx, "protoc", goPluginPathFlag, "-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
|
|
|
|
if mg.Verbose() {
|
|
|
|
cmd.Stdout = os.Stdout
|
|
|
|
}
|
|
|
|
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
|
|
|
|
})
|
|
|
|
}
|