feat: add platform suffix to script names + test suite
Rename scripts with -Windows/-Mac/-Linux suffix so users can easily identify which file to double-click on the USB drive. Add tests/test-scripts.sh with 93 checks covering: - File existence, bash syntax, portable mode, gateway run, security - Cross-platform consistency between .bat and .command versions
This commit is contained in:
230
tests/test-scripts.sh
Normal file
230
tests/test-scripts.sh
Normal file
@@ -0,0 +1,230 @@
|
||||
#!/bin/bash
|
||||
# ============================================================
|
||||
# U-Claw 脚本测试套件
|
||||
# 验证 Windows .bat 和 macOS .command 脚本的正确性
|
||||
# ============================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
UCLAW_SCRIPTS="$SCRIPT_DIR/uclaw-scripts"
|
||||
|
||||
PASS=0
|
||||
FAIL=0
|
||||
TOTAL=0
|
||||
|
||||
pass() {
|
||||
PASS=$((PASS + 1))
|
||||
TOTAL=$((TOTAL + 1))
|
||||
echo " ✓ $1"
|
||||
}
|
||||
|
||||
fail() {
|
||||
FAIL=$((FAIL + 1))
|
||||
TOTAL=$((TOTAL + 1))
|
||||
echo " ✗ $1"
|
||||
}
|
||||
|
||||
check() {
|
||||
local desc="$1"
|
||||
local file="$2"
|
||||
local pattern="$3"
|
||||
if grep -q "$pattern" "$file" 2>/dev/null; then
|
||||
pass "$desc"
|
||||
else
|
||||
fail "$desc"
|
||||
fi
|
||||
}
|
||||
|
||||
check_not() {
|
||||
local desc="$1"
|
||||
local file="$2"
|
||||
local pattern="$3"
|
||||
if grep -q "$pattern" "$file" 2>/dev/null; then
|
||||
fail "$desc"
|
||||
else
|
||||
pass "$desc"
|
||||
fi
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo " U-Claw 脚本测试套件"
|
||||
echo "=========================================="
|
||||
|
||||
# ── 文件存在性测试 ──
|
||||
echo ""
|
||||
echo "── 文件存在性 ──"
|
||||
|
||||
for f in "运行-Windows.bat" "运行-Mac.command" "启动菜单-Windows.bat" "启动菜单-Mac.command" "安装到电脑-Windows.bat" "安装到电脑-Mac.command" "使用说明.txt" "中国用户指南.txt"; do
|
||||
if [ -f "$UCLAW_SCRIPTS/$f" ]; then
|
||||
pass "存在: $f"
|
||||
else
|
||||
fail "缺失: $f"
|
||||
fi
|
||||
done
|
||||
|
||||
# ── macOS .command 语法检查 ──
|
||||
echo ""
|
||||
echo "── macOS 脚本语法检查 ──"
|
||||
|
||||
for f in "运行-Mac.command" "启动菜单-Mac.command" "安装到电脑-Mac.command"; do
|
||||
if bash -n "$UCLAW_SCRIPTS/$f" 2>/dev/null; then
|
||||
pass "语法正确: $f"
|
||||
else
|
||||
fail "语法错误: $f"
|
||||
fi
|
||||
done
|
||||
|
||||
# ── 运行.bat 测试 ──
|
||||
echo ""
|
||||
echo "── 运行.bat ──"
|
||||
BAT_RUN="$UCLAW_SCRIPTS/运行-Windows.bat"
|
||||
|
||||
check "设置 UTF-8 编码" "$BAT_RUN" "chcp 65001"
|
||||
check "设置便携模式 OPENCLAW_HOME" "$BAT_RUN" "OPENCLAW_HOME"
|
||||
check "设置便携模式 OPENCLAW_STATE_DIR" "$BAT_RUN" "OPENCLAW_STATE_DIR"
|
||||
check "设置便携模式 OPENCLAW_CONFIG_PATH" "$BAT_RUN" "OPENCLAW_CONFIG_PATH"
|
||||
check "使用 gateway run" "$BAT_RUN" "gateway run"
|
||||
check "使用 --allow-unconfigured" "$BAT_RUN" "\-\-allow-unconfigured"
|
||||
check "使用 --force" "$BAT_RUN" "\-\-force"
|
||||
check "首次用户走 onboard" "$BAT_RUN" "onboard"
|
||||
check "检查 Node.js 存在" "$BAT_RUN" "NODE_BIN"
|
||||
check_not "不依赖 pnpm" "$BAT_RUN" "pnpm"
|
||||
check "版本号 v1.1" "$BAT_RUN" "v1.1"
|
||||
|
||||
# ── 运行.command 测试 ──
|
||||
echo ""
|
||||
echo "── 运行.command ──"
|
||||
CMD_RUN="$UCLAW_SCRIPTS/运行-Mac.command"
|
||||
|
||||
check "设置便携模式 OPENCLAW_HOME" "$CMD_RUN" "OPENCLAW_HOME"
|
||||
check "设置便携模式 OPENCLAW_STATE_DIR" "$CMD_RUN" "OPENCLAW_STATE_DIR"
|
||||
check "设置便携模式 OPENCLAW_CONFIG_PATH" "$CMD_RUN" "OPENCLAW_CONFIG_PATH"
|
||||
check "使用 gateway run" "$CMD_RUN" "gateway run"
|
||||
check "使用 --allow-unconfigured" "$CMD_RUN" "\-\-allow-unconfigured"
|
||||
check "使用 --force" "$CMD_RUN" "\-\-force"
|
||||
check "首次用户走 onboard" "$CMD_RUN" "onboard"
|
||||
check "自动打开浏览器" "$CMD_RUN" 'open "$URL"'
|
||||
check "检测 CPU 架构" "$CMD_RUN" "uname -m"
|
||||
check "支持 arm64" "$CMD_RUN" "arm64"
|
||||
check_not "不依赖 pnpm" "$CMD_RUN" "pnpm"
|
||||
|
||||
# ── 启动菜单.bat 测试 ──
|
||||
echo ""
|
||||
echo "── 启动菜单.bat ──"
|
||||
BAT_MENU="$UCLAW_SCRIPTS/启动菜单-Windows.bat"
|
||||
|
||||
check "设置 UTF-8 编码" "$BAT_MENU" "chcp 65001"
|
||||
check "便携模式 OPENCLAW_HOME" "$BAT_MENU" "OPENCLAW_HOME"
|
||||
check "有 QQ Bot 选项" "$BAT_MENU" "QQ Bot"
|
||||
check "QQ AppID 单独输入" "$BAT_MENU" "AppID"
|
||||
check "QQ AppSecret 单独输入" "$BAT_MENU" "AppSecret"
|
||||
check "DeepSeek 模型提示" "$BAT_MENU" "deepseek"
|
||||
check "Custom Provider 提示" "$BAT_MENU" "Custom Provider"
|
||||
check "有控制台入口" "$BAT_MENU" "控制台"
|
||||
check "gateway run 命令" "$BAT_MENU" "gateway run"
|
||||
check "版本号 v1.1" "$BAT_MENU" "v1.1"
|
||||
check_not "不依赖 pnpm" "$BAT_MENU" "pnpm"
|
||||
|
||||
# ── 启动菜单.command 测试 ──
|
||||
echo ""
|
||||
echo "── 启动菜单.command ──"
|
||||
CMD_MENU="$UCLAW_SCRIPTS/启动菜单-Mac.command"
|
||||
|
||||
check "便携模式 OPENCLAW_HOME" "$CMD_MENU" "OPENCLAW_HOME"
|
||||
check "有 QQ 选项" "$CMD_MENU" "QQ"
|
||||
check "QQ AppID 单独输入" "$CMD_MENU" "AppID"
|
||||
check "QQ AppSecret 单独输入" "$CMD_MENU" "AppSecret"
|
||||
check "DeepSeek 模型提示" "$CMD_MENU" "deepseek"
|
||||
check "Custom Provider 提示" "$CMD_MENU" "Custom Provider"
|
||||
check "有 dashboard 入口" "$CMD_MENU" "dashboard"
|
||||
check "gateway run 命令" "$CMD_MENU" "gateway run"
|
||||
check "自动打开浏览器" "$CMD_MENU" 'open "$URL"'
|
||||
|
||||
# ── 安装到电脑.bat 测试 ──
|
||||
echo ""
|
||||
echo "── 安装到电脑.bat ──"
|
||||
BAT_INSTALL="$UCLAW_SCRIPTS/安装到电脑-Windows.bat"
|
||||
|
||||
check "设置 UTF-8 编码" "$BAT_INSTALL" "chcp 65001"
|
||||
check "安全提醒" "$BAT_INSTALL" "安全提醒"
|
||||
check "共享电脑警告" "$BAT_INSTALL" "共享电脑"
|
||||
check "安装到 .uclaw" "$BAT_INSTALL" "\.uclaw"
|
||||
check "创建 uclaw.cmd" "$BAT_INSTALL" "uclaw.cmd"
|
||||
check "创建 openclaw.cmd" "$BAT_INSTALL" "openclaw.cmd"
|
||||
check "添加到 PATH" "$BAT_INSTALL" "setx PATH"
|
||||
check "PATH 长度检查" "$BAT_INSTALL" "1024"
|
||||
check "Node.js 安装检查" "$BAT_INSTALL" "node.exe"
|
||||
check "版本号 v1.1" "$BAT_INSTALL" "v1.1"
|
||||
check_not "不备份 .env" "$BAT_INSTALL" "env-backup"
|
||||
|
||||
# ── 安装到电脑.command 测试 ──
|
||||
echo ""
|
||||
echo "── 安装到电脑.command ──"
|
||||
CMD_INSTALL="$UCLAW_SCRIPTS/安装到电脑-Mac.command"
|
||||
|
||||
check "安全提醒" "$CMD_INSTALL" "安全提醒"
|
||||
check "共享电脑警告" "$CMD_INSTALL" "共享电脑"
|
||||
check "安装到 .uclaw" "$CMD_INSTALL" "\.uclaw"
|
||||
check "检测 CPU 架构" "$CMD_INSTALL" "uname -m"
|
||||
check "支持 arm64" "$CMD_INSTALL" "arm64"
|
||||
check "创建 symlink" "$CMD_INSTALL" "ln -sf"
|
||||
check "添加到 shell RC" "$CMD_INSTALL" "zshrc"
|
||||
check "spinner 动画" "$CMD_INSTALL" "run_with_spinner"
|
||||
check "set -euo pipefail" "$CMD_INSTALL" "set -euo pipefail"
|
||||
|
||||
# ── 安全检查(无敏感信息泄露)──
|
||||
echo ""
|
||||
echo "── 安全检查 ──"
|
||||
|
||||
for f in "$UCLAW_SCRIPTS"/*.bat "$UCLAW_SCRIPTS"/*.command "$UCLAW_SCRIPTS"/*.txt; do
|
||||
fname=$(basename "$f")
|
||||
check_not "无 API Key: $fname" "$f" "sk-[a-zA-Z0-9]\{20,\}"
|
||||
check_not "无硬编码密码: $fname" "$f" "password.*=.*['\"][^'\"]\{8,\}"
|
||||
done
|
||||
|
||||
# ── Windows/Mac 一致性检查 ──
|
||||
echo ""
|
||||
echo "── 跨平台一致性 ──"
|
||||
|
||||
# 两边都有 gateway run
|
||||
if grep -q "gateway run" "$BAT_RUN" && grep -q "gateway run" "$CMD_RUN"; then
|
||||
pass "运行脚本:两端都用 gateway run"
|
||||
else
|
||||
fail "运行脚本:gateway run 不一致"
|
||||
fi
|
||||
|
||||
# 两边都有 onboard
|
||||
if grep -q "onboard" "$BAT_RUN" && grep -q "onboard" "$CMD_RUN"; then
|
||||
pass "运行脚本:两端都有 onboard 流程"
|
||||
else
|
||||
fail "运行脚本:onboard 流程不一致"
|
||||
fi
|
||||
|
||||
# 两边菜单都有 QQ
|
||||
if grep -q "QQ" "$BAT_MENU" && grep -q "QQ" "$CMD_MENU"; then
|
||||
pass "启动菜单:两端都有 QQ 接入"
|
||||
else
|
||||
fail "启动菜单:QQ 接入不一致"
|
||||
fi
|
||||
|
||||
# 两边安装都有安全提醒
|
||||
if grep -q "安全提醒" "$BAT_INSTALL" && grep -q "安全提醒" "$CMD_INSTALL"; then
|
||||
pass "安装脚本:两端都有安全提醒"
|
||||
else
|
||||
fail "安装脚本:安全提醒不一致"
|
||||
fi
|
||||
|
||||
# ── 结果汇总 ──
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
if [ $FAIL -eq 0 ]; then
|
||||
echo " 全部通过! $PASS/$TOTAL"
|
||||
else
|
||||
echo " 失败 $FAIL 项 / 共 $TOTAL 项"
|
||||
fi
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
exit $FAIL
|
||||
Reference in New Issue
Block a user