mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 10:17:17 +08:00
feat: 优化更新和重启流程
This commit is contained in:
@@ -3,7 +3,9 @@ package tools
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -82,6 +84,72 @@ func VersionCompare(ver1, ver2, operator string) bool {
|
||||
return operator == "==" || operator == ">=" || operator == "<="
|
||||
}
|
||||
|
||||
// GenerateVersions 获取版本列表
|
||||
func GenerateVersions(start, end string) ([]string, error) {
|
||||
var versions []string
|
||||
start = strings.TrimPrefix(start, "v")
|
||||
end = strings.TrimPrefix(end, "v")
|
||||
startParts := strings.Split(start, ".")
|
||||
endParts := strings.Split(end, ".")
|
||||
|
||||
if len(startParts) != 3 || len(endParts) != 3 {
|
||||
return nil, fmt.Errorf("版本格式错误")
|
||||
}
|
||||
|
||||
startMajor, err := strconv.Atoi(startParts[0])
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("无效的起始主版本号: %v", err)
|
||||
}
|
||||
startMinor, err := strconv.Atoi(startParts[1])
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("无效的起始次版本号: %v", err)
|
||||
}
|
||||
startPatch, err := strconv.Atoi(startParts[2])
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("无效的起始修订号: %v", err)
|
||||
}
|
||||
endMajor, err := strconv.Atoi(endParts[0])
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("无效的结束主版本号: %v", err)
|
||||
}
|
||||
endMinor, err := strconv.Atoi(endParts[1])
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("无效的结束次版本号: %v", err)
|
||||
}
|
||||
endPatch, err := strconv.Atoi(endParts[2])
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("无效的结束修订号: %v", err)
|
||||
}
|
||||
|
||||
for major := startMajor; major <= endMajor; major++ {
|
||||
for minor := 0; minor <= 99; minor++ {
|
||||
for patch := 0; patch <= 99; patch++ {
|
||||
if major == startMajor && minor < startMinor {
|
||||
continue
|
||||
}
|
||||
if major == startMajor && minor == startMinor && patch <= startPatch {
|
||||
continue
|
||||
}
|
||||
|
||||
if major == endMajor && minor > endMinor {
|
||||
return versions, nil
|
||||
}
|
||||
if major == endMajor && minor == endMinor && patch > endPatch {
|
||||
return versions, nil
|
||||
}
|
||||
|
||||
versions = append(versions, fmt.Sprintf("%d.%d.%d", major, minor, patch))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(versions) == 0 {
|
||||
return []string{}, nil
|
||||
}
|
||||
|
||||
return versions, nil
|
||||
}
|
||||
|
||||
type PanelInfo struct {
|
||||
Name string `json:"name"`
|
||||
Version string `json:"version"`
|
||||
@@ -217,13 +285,8 @@ func GetPanelVersion(version string) (PanelInfo, error) {
|
||||
}
|
||||
|
||||
// UpdatePanel 更新面板
|
||||
func UpdatePanel() error {
|
||||
panelInfo, err := GetLatestPanelVersion()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
color.Greenln("最新版本: " + panelInfo.Version)
|
||||
func UpdatePanel(panelInfo PanelInfo) error {
|
||||
color.Greenln("目标版本: " + panelInfo.Version)
|
||||
color.Greenln("下载链接: " + panelInfo.DownloadUrl)
|
||||
|
||||
color.Greenln("备份面板配置...")
|
||||
@@ -270,13 +333,15 @@ func UpdatePanel() error {
|
||||
Exec("rm -rf /tmp/panel.db.bak")
|
||||
Exec("rm -rf /tmp/panel.conf.bak")
|
||||
|
||||
color.Greenln("重启面板...")
|
||||
Exec("systemctl restart panel")
|
||||
color.Greenln("重启完成")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func RestartPanel() {
|
||||
color.Greenln("重启面板...")
|
||||
ExecAsync("sleep 2 && systemctl restart panel")
|
||||
color.Greenln("重启完成")
|
||||
}
|
||||
|
||||
// IsChina 是否中国大陆
|
||||
func IsChina() bool {
|
||||
client := req.C()
|
||||
|
||||
@@ -19,7 +19,6 @@ func (s *HelperTestSuite) TestGetMonitoringInfo() {
|
||||
}
|
||||
|
||||
func (s *HelperTestSuite) TestVersionCompare() {
|
||||
// 测试相等情况
|
||||
s.True(VersionCompare("1.0.0", "1.0.0", "=="))
|
||||
s.True(VersionCompare("1.0.0", "1.0.0", ">="))
|
||||
s.True(VersionCompare("1.0.0", "1.0.0", "<="))
|
||||
@@ -27,7 +26,6 @@ func (s *HelperTestSuite) TestVersionCompare() {
|
||||
s.False(VersionCompare("1.0.0", "1.0.0", "<"))
|
||||
s.False(VersionCompare("1.0.0", "1.0.0", "!="))
|
||||
|
||||
// 测试1.0.0小于1.0.1
|
||||
s.True(VersionCompare("1.0.0", "1.0.1", "<"))
|
||||
s.True(VersionCompare("1.0.0", "1.0.1", "<="))
|
||||
s.True(VersionCompare("1.0.0", "1.0.1", "!="))
|
||||
@@ -35,7 +33,6 @@ func (s *HelperTestSuite) TestVersionCompare() {
|
||||
s.False(VersionCompare("1.0.0", "1.0.1", ">="))
|
||||
s.False(VersionCompare("1.0.0", "1.0.1", ">"))
|
||||
|
||||
// 测试1.0.1大于1.0.0
|
||||
s.True(VersionCompare("1.0.1", "1.0.0", ">"))
|
||||
s.True(VersionCompare("1.0.1", "1.0.0", ">="))
|
||||
s.True(VersionCompare("1.0.1", "1.0.0", "!="))
|
||||
@@ -43,12 +40,49 @@ func (s *HelperTestSuite) TestVersionCompare() {
|
||||
s.False(VersionCompare("1.0.1", "1.0.0", "<="))
|
||||
s.False(VersionCompare("1.0.1", "1.0.0", "<"))
|
||||
|
||||
// 测试带有 'v' 前缀的版本号
|
||||
s.True(VersionCompare("v1.0.0", "1.0.0", "=="))
|
||||
s.True(VersionCompare("1.0.0", "v1.0.0", "=="))
|
||||
s.True(VersionCompare("v1.0.0", "v1.0.0", "=="))
|
||||
}
|
||||
|
||||
func (s *HelperTestSuite) TestGenerateVersions() {
|
||||
versions, err := GenerateVersions("1.0.0", "1.0.3")
|
||||
s.NoError(err)
|
||||
s.Equal([]string{"1.0.1", "1.0.2", "1.0.3"}, versions)
|
||||
|
||||
versions, err = GenerateVersions("v1.0.0", "v1.0.3")
|
||||
s.NoError(err)
|
||||
s.Equal([]string{"1.0.1", "1.0.2", "1.0.3"}, versions)
|
||||
|
||||
versions, err = GenerateVersions("1.0.0", "1.0.0")
|
||||
s.NoError(err)
|
||||
s.Equal([]string(nil), versions)
|
||||
|
||||
versions, err = GenerateVersions("1.0.0", "1.1.1")
|
||||
s.NoError(err)
|
||||
s.Equal([]string{
|
||||
"1.0.1", "1.0.2", "1.0.3", "1.0.4", "1.0.5", "1.0.6", "1.0.7", "1.0.8", "1.0.9", "1.0.10",
|
||||
"1.0.11", "1.0.12", "1.0.13", "1.0.14", "1.0.15", "1.0.16", "1.0.17", "1.0.18", "1.0.19", "1.0.20",
|
||||
"1.0.21", "1.0.22", "1.0.23", "1.0.24", "1.0.25", "1.0.26", "1.0.27", "1.0.28", "1.0.29", "1.0.30",
|
||||
"1.0.31", "1.0.32", "1.0.33", "1.0.34", "1.0.35", "1.0.36", "1.0.37", "1.0.38", "1.0.39", "1.0.40",
|
||||
"1.0.41", "1.0.42", "1.0.43", "1.0.44", "1.0.45", "1.0.46", "1.0.47", "1.0.48", "1.0.49", "1.0.50",
|
||||
"1.0.51", "1.0.52", "1.0.53", "1.0.54", "1.0.55", "1.0.56", "1.0.57", "1.0.58", "1.0.59", "1.0.60",
|
||||
"1.0.61", "1.0.62", "1.0.63", "1.0.64", "1.0.65", "1.0.66", "1.0.67", "1.0.68", "1.0.69", "1.0.70",
|
||||
"1.0.71", "1.0.72", "1.0.73", "1.0.74", "1.0.75", "1.0.76", "1.0.77", "1.0.78", "1.0.79", "1.0.80",
|
||||
"1.0.81", "1.0.82", "1.0.83", "1.0.84", "1.0.85", "1.0.86", "1.0.87", "1.0.88", "1.0.89", "1.0.90",
|
||||
"1.0.91", "1.0.92", "1.0.93", "1.0.94", "1.0.95", "1.0.96", "1.0.97", "1.0.98", "1.0.99", "1.1.0",
|
||||
"1.1.1",
|
||||
}, versions)
|
||||
|
||||
versions, err = GenerateVersions("1..0", "1.0.1")
|
||||
s.Error(err)
|
||||
s.Nil(versions)
|
||||
|
||||
versions, err = GenerateVersions("1.0.0", "1..1")
|
||||
s.Error(err)
|
||||
s.Nil(versions)
|
||||
}
|
||||
|
||||
func (s *HelperTestSuite) TestGetLatestPanelVersion() {
|
||||
version, err := GetLatestPanelVersion()
|
||||
s.NotEmpty(version)
|
||||
|
||||
Reference in New Issue
Block a user