mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-02 03:40:27 +08:00
79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cloud .
|
|
|
|
package apinodeutils
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"os"
|
|
"os/exec"
|
|
"regexp"
|
|
"runtime"
|
|
"strings"
|
|
|
|
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
|
|
"github.com/iwind/TeaGo/Tea"
|
|
stringutil "github.com/iwind/TeaGo/utils/string"
|
|
)
|
|
|
|
func CanUpgrade(apiVersion string, osName string, arch string) (canUpgrade bool, reason string) {
|
|
if len(apiVersion) == 0 {
|
|
return false, "current api version should not be empty"
|
|
}
|
|
|
|
if stringutil.VersionCompare(apiVersion, "0.6.4") < 0 {
|
|
return false, "api node version must greater than or equal to 0.6.4"
|
|
}
|
|
|
|
if osName != runtime.GOOS {
|
|
return false, "os not match: " + osName
|
|
}
|
|
if arch != runtime.GOARCH {
|
|
return false, "arch not match: " + arch
|
|
}
|
|
|
|
stat, err := os.Stat(apiExe())
|
|
if err != nil {
|
|
return false, "stat error: " + err.Error()
|
|
}
|
|
if stat.IsDir() {
|
|
return false, "is directory"
|
|
}
|
|
|
|
localVersion, err := lookupLocalVersion()
|
|
if err != nil {
|
|
return false, "lookup version failed: " + err.Error()
|
|
}
|
|
if localVersion != teaconst.APINodeVersion {
|
|
return false, "not newest api node"
|
|
}
|
|
if stringutil.VersionCompare(localVersion, apiVersion) <= 0 {
|
|
return false, "need not upgrade, local '" + localVersion + "' vs remote '" + apiVersion + "'"
|
|
}
|
|
|
|
return true, ""
|
|
}
|
|
|
|
func lookupLocalVersion() (string, error) {
|
|
var cmd = exec.Command(apiExe(), "-V")
|
|
var output = &bytes.Buffer{}
|
|
cmd.Stdout = output
|
|
err := cmd.Run()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
var localVersion = strings.TrimSpace(output.String())
|
|
|
|
// 检查版本号
|
|
var reg = regexp.MustCompile(`^[\d.]+$`)
|
|
if !reg.MatchString(localVersion) {
|
|
return "", errors.New("lookup version failed: " + localVersion)
|
|
}
|
|
|
|
return localVersion, nil
|
|
}
|
|
|
|
func apiExe() string {
|
|
return Tea.Root + "/edge-api/bin/edge-api"
|
|
}
|