12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package protoc
- import (
- "archive/zip"
- "fmt"
- "os"
- "path/filepath"
- "runtime"
- "strings"
- "github.com/zeromicro/go-zero/tools/goctl/pkg/downloader"
- "github.com/zeromicro/go-zero/tools/goctl/pkg/goctl"
- "github.com/zeromicro/go-zero/tools/goctl/rpc/execx"
- "github.com/zeromicro/go-zero/tools/goctl/util/env"
- "github.com/zeromicro/go-zero/tools/goctl/util/zipx"
- "github.com/zeromicro/go-zero/tools/goctl/vars"
- )
- var url = map[string]string{
- "linux_32": "https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-linux-x86_32.zip",
- "linux_64": "https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-linux-x86_64.zip",
- "darwin": "https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-osx-x86_64.zip",
- "windows_32": "https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-win32.zip",
- "windows_64": "https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-win64.zip",
- }
- const (
- Name = "protoc"
- ZipFileName = Name + ".zip"
- )
- func Install(cacheDir string) (string, error) {
- return goctl.Install(cacheDir, Name, func(dest string) (string, error) {
- goos := runtime.GOOS
- tempFile := filepath.Join(os.TempDir(), ZipFileName)
- bit := 32 << (^uint(0) >> 63)
- var downloadUrl string
- switch goos {
- case vars.OsMac:
- downloadUrl = url[vars.OsMac]
- case vars.OsWindows:
- downloadUrl = url[fmt.Sprintf("%s_%d", vars.OsWindows, bit)]
- case vars.OsLinux:
- downloadUrl = url[fmt.Sprintf("%s_%d", vars.OsLinux, bit)]
- default:
- return "", fmt.Errorf("unsupport OS: %q", goos)
- }
- err := downloader.Download(downloadUrl, tempFile)
- if err != nil {
- return "", err
- }
- return dest, zipx.Unpacking(tempFile, filepath.Dir(dest), func(f *zip.File) bool {
- return filepath.Base(f.Name) == filepath.Base(dest)
- })
- })
- }
- func Exists() bool {
- _, err := env.LookUpProtoc()
- return err == nil
- }
- func Version() (string, error) {
- path, err := env.LookUpProtoc()
- if err != nil {
- return "", err
- }
- version, err := execx.Run(path+" --version", "")
- if err != nil {
- return "", err
- }
- fields := strings.Fields(version)
- if len(fields) > 1 {
- return fields[1], nil
- }
- return "", nil
- }
|