2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-05 15:57:17 +08:00

feat: panel update

This commit is contained in:
耗子
2023-07-07 19:09:46 +08:00
parent 9769715295
commit 92f84d278e
2 changed files with 83 additions and 0 deletions

View File

@@ -73,6 +73,15 @@ func (receiver *Panel) Handle(ctx console.Context) error {
color.Greenln("初始化成功")
case "update":
err := helpers.UpdatePanel()
if err != nil {
color.Redln("更新失败: " + err.Error())
return nil
}
color.Greenln("更新成功")
case "getInfo":
var user models.User
err := facades.Orm().Query().Where("id", 1).FirstOrFail(&user)

View File

@@ -2,6 +2,9 @@
package helpers
import (
"errors"
"os"
"os/exec"
"strings"
"time"
@@ -51,3 +54,74 @@ func GetMonitoringInfo() MonitoringInfo {
return res
}
type PanelInfo struct {
Name string `json:"name"`
Version string `json:"version"`
DownloadUrl string `json:"download_url"`
Body string `json:"body"`
Date string `json:"date"`
}
// GetLatestPanelVersion 获取最新版本
func GetLatestPanelVersion() (PanelInfo, error) {
var info PanelInfo
cmd := exec.Command("/bin/bash", "-c", "curl \"https://api.github.com/repos/HaoZi-Team/Panel/releases/latest\"")
output, err := cmd.Output()
if err != nil {
return info, errors.New("获取最新版本失败")
}
file, err := os.CreateTemp("", "panel")
if err != nil {
return info, errors.New("创建临时文件失败")
}
defer os.Remove(file.Name())
_, err = file.Write(output)
err = file.Close()
if err != nil {
return info, errors.New("关闭临时文件失败")
}
fileName := file.Name()
name := exec.Command("/bin/bash", "-c", "jq -r '.name' "+fileName)
version := exec.Command("/bin/bash", "-c", "jq -r '.tag_name' "+fileName)
body := exec.Command("/bin/bash", "-c", "jq -r '.body' "+fileName)
date := exec.Command("/bin/bash", "-c", "jq -r '.published_at' "+fileName)
nameOutput, _ := name.Output()
versionOutput, _ := version.Output()
bodyOutput, _ := body.Output()
dateOutput, _ := date.Output()
info.Name = strings.TrimSpace(string(nameOutput))
info.Version = strings.TrimSpace(string(versionOutput))
info.Body = strings.TrimSpace(string(bodyOutput))
info.Date = strings.TrimSpace(string(dateOutput))
if IsArm() {
downloadUrl := exec.Command("/bin/bash", "-c", "jq -r '.assets[] | select(.name | contains(\"arm64\")) | .browser_download_url' "+fileName)
downloadUrlOutput, _ := downloadUrl.Output()
info.DownloadUrl = strings.TrimSpace(string(downloadUrlOutput))
} else {
downloadUrl := exec.Command("/bin/bash", "-c", "jq -r '.assets[] | select(.name | contains(\"amd64v3\")) | .browser_download_url' "+fileName)
downloadUrlOutput, _ := downloadUrl.Output()
info.DownloadUrl = strings.TrimSpace(string(downloadUrlOutput))
}
return info, nil
}
// UpdatePanel 更新面板
func UpdatePanel() error {
panelInfo, err := GetLatestPanelVersion()
if err != nil {
return err
}
cmd := exec.Command("/bin/bash", "-c", "wget -O panel.tar.gz "+panelInfo.DownloadUrl+" && tar -zxvf panel.tar.gz && rm -rf panel.tar.gz && chmod +x panel && ./panel artisan migrate")
_, err = cmd.Output()
if err != nil {
return errors.New("更新面板失败")
}
return nil
}