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:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user