feat: add baihu notify
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
package builtininstall
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
|
||||
"github.com/engigu/baihu-panel/internal/logger"
|
||||
"github.com/engigu/baihu-panel/internal/utils"
|
||||
)
|
||||
|
||||
// Run 执行内建包安装逻辑
|
||||
func Run(args []string) {
|
||||
logger.Infof("[Builtin] 开始为 mise 环境安装内建包...")
|
||||
|
||||
// 1. 确定内建包路径
|
||||
// 优先使用 /www/builtin (Docker 环境),否则尝试相对于二进制文件的当前目录
|
||||
builtinPath := "/www/builtin"
|
||||
if _, err := os.Stat(builtinPath); os.IsNotExist(err) {
|
||||
// 回退到当前目录下的 builtin
|
||||
pwd, _ := os.Getwd()
|
||||
builtinPath = filepath.Join(pwd, "builtin")
|
||||
}
|
||||
|
||||
if _, err := os.Stat(builtinPath); os.IsNotExist(err) {
|
||||
logger.Errorf("[Builtin] 找不到内建包目录: %s", builtinPath)
|
||||
return
|
||||
}
|
||||
|
||||
// 2. 安装 Node.js 包
|
||||
installForLanguage("node", filepath.Join(builtinPath, "nodejs"), "npm install")
|
||||
|
||||
// 3. 安装 Python 包
|
||||
installForLanguage("python", filepath.Join(builtinPath, "python"), "pip install -e")
|
||||
|
||||
logger.Infof("[Builtin] 内建包安装流程完成")
|
||||
}
|
||||
|
||||
func installForLanguage(lang, pkgPath, installBaseCmd string) {
|
||||
if _, err := os.Stat(pkgPath); os.IsNotExist(err) {
|
||||
logger.Warnf("[Builtin] %s 的内建包目录不存在: %s", lang, pkgPath)
|
||||
return
|
||||
}
|
||||
|
||||
versions, err := utils.ListMiseInstalledVersions(lang)
|
||||
if err != nil {
|
||||
logger.Errorf("[Builtin] 获取 %s 的 mise 版本列表失败: %v", lang, err)
|
||||
return
|
||||
}
|
||||
|
||||
if len(versions) == 0 {
|
||||
logger.Infof("[Builtin] 未发现已安装的 %s 版本,跳过", lang)
|
||||
return
|
||||
}
|
||||
|
||||
for _, v := range versions {
|
||||
logger.Infof("[Builtin] 正在为 %s@%s 安装内建包...", lang, v)
|
||||
|
||||
var cmdStr string
|
||||
if lang == "node" {
|
||||
// npm install 不需要 -e
|
||||
cmdStr = fmt.Sprintf("npm install %s", pkgPath)
|
||||
} else {
|
||||
// python 建议使用 -e (editable) 或直接安装
|
||||
cmdStr = fmt.Sprintf("pip install -e %s", pkgPath)
|
||||
}
|
||||
|
||||
// 使用 mise exec 跨版本执行
|
||||
fullCmd := utils.BuildMiseCommandSimple(cmdStr, lang, v)
|
||||
|
||||
var cmd *exec.Cmd
|
||||
if runtime.GOOS == "windows" {
|
||||
cmd = exec.Command("cmd", "/c", fullCmd)
|
||||
} else {
|
||||
cmd = exec.Command("sh", "-c", fullCmd)
|
||||
}
|
||||
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
logger.Errorf("[Builtin] 为 %s@%s 安装失败: %v\n输出: %s", lang, v, err, string(out))
|
||||
} else {
|
||||
logger.Infof("[Builtin] 为 %s@%s 安装成功", lang, v)
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
-3
@@ -1,6 +1,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/engigu/baihu-panel/cmd/builtininstall"
|
||||
"github.com/engigu/baihu-panel/cmd/reposync"
|
||||
"github.com/engigu/baihu-panel/cmd/resetpwd"
|
||||
"github.com/engigu/baihu-panel/cmd/restore"
|
||||
@@ -12,8 +13,9 @@ type CommandHandler func(args []string)
|
||||
|
||||
// Handlers 维护了除了 server 之外的命令的执行入口
|
||||
var Handlers = map[string]CommandHandler{
|
||||
"reposync": reposync.Run,
|
||||
"resetpwd": resetpwd.Run,
|
||||
"restore": restore.Run,
|
||||
"reposync": reposync.Run,
|
||||
"resetpwd": resetpwd.Run,
|
||||
"restore": restore.Run,
|
||||
"builtininstall": builtininstall.Run,
|
||||
// "migrate": migrate.Run,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user