play.wenpai.net/scripts/play-smoke
elementary-qa 6146665366 feat: 验收工具链入库 + play-verify 增强 --report/--post-forum
入库 4 个验收脚本(play-verify/play-smoke/play-daily-check/img-process),
play-verify 新增 markdown 报告生成和论坛发布功能。

同时完成但不在 git 跟踪范围的变更:
- ~/bin/session-end(会话收尾脚本)
- ~/bin/play-add-plugin(交互式添加插件)
- staging-watcher systemd user service
- cron 自动清理 test-results

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 15:38:43 +08:00

128 lines
4.2 KiB
Bash
Executable file

#!/usr/bin/env bash
# play-smoke — play.wenpai.net 快速冒烟测试
# 不启动浏览器,纯 HTTP 检查,几秒内完成
# 用法: play-smoke [plugin-id] 或 play-smoke --all
set -uo pipefail
SITE="https://play.wenpai.net"
PLUGINS_JSON="$HOME/play/plugins.json"
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
PASS=0; FAIL=0; WARN=0
check() {
local label="$1" ok="$2" detail="${3:-}"
if [ "$ok" = "true" ]; then
echo -e " ${GREEN}[✓]${NC} $label${detail:+: $detail}"
((PASS++))
else
echo -e " ${RED}[✗]${NC} $label${detail:+: $detail}"
((FAIL++))
fi
}
warn() {
local label="$1" detail="${2:-}"
echo -e " ${YELLOW}[!]${NC} $label${detail:+: $detail}"
((WARN++))
}
verify_plugin() {
local id="$1" name="${2:-$1}" version="${3:-}"
echo ""
echo "=== $name ($id) ==="
# 1. 快捷方式重定向
local headers
headers=$(curl -sI "$SITE/?plugin=$id" 2>&1)
local http_code
http_code=$(echo "$headers" | grep -i "^HTTP" | tail -1 | awk '{print $2}')
local location
location=$(echo "$headers" | grep -i "^location:" | tr -d '\r' | awk '{print $2}')
if [ "$http_code" = "302" ]; then
if echo "$location" | grep -q "blueprint-url=https"; then
check "302 重定向" "true" "完整 URL"
else
check "302 重定向" "false" "相对路径: $location"
fi
else
check "302 重定向" "false" "HTTP $http_code"
fi
# 2. Blueprint JSON 可访问且合法
local bp_url="$SITE/play/blueprints/$id.json"
local bp_code
bp_code=$(curl -sI -o /dev/null -w '%{http_code}' "$bp_url")
if [ "$bp_code" = "200" ]; then
local bp_content
bp_content=$(curl -s "$bp_url")
if echo "$bp_content" | jq . >/dev/null 2>&1; then
check "Blueprint JSON" "true" "有效 JSON"
# 检查 installPlugin step 里的 zip URL
local zip_url
zip_url=$(echo "$bp_content" | jq -r '.steps[]? | select(.step=="installPlugin") | .pluginData.url // empty' 2>/dev/null)
if [ -n "$zip_url" ]; then
local zip_code
zip_code=$(curl -sI -o /dev/null -w '%{http_code}' "$zip_url")
check "插件 ZIP" "$([ "$zip_code" = "200" ] && echo true || echo false)" "$zip_url → HTTP $zip_code"
else
warn "无 installPlugin step"
fi
# 检查 activatePlugin
local activate
activate=$(echo "$bp_content" | jq -r '.steps[]? | select(.step=="activatePlugin") | .pluginPath // empty' 2>/dev/null)
if [ -n "$activate" ]; then
check "activatePlugin" "true" "$activate"
else
warn "无 activatePlugin step"
fi
else
check "Blueprint JSON" "false" "无效 JSON"
fi
else
check "Blueprint JSON" "false" "HTTP $bp_code"
fi
# 3. plugins.json 中版本一致性
if [ -n "$version" ] && [ -f "$PLUGINS_JSON" ]; then
local pj_version
pj_version=$(jq -r ".[] | select(.id==\"$id\") | .version" "$PLUGINS_JSON" 2>/dev/null)
if [ "$pj_version" = "$version" ]; then
check "plugins.json 版本" "true" "$pj_version"
else
check "plugins.json 版本" "false" "期望 $version, 实际 $pj_version"
fi
fi
}
# 主入口
if [ "${1:-}" = "--all" ]; then
echo "=== play.wenpai.net 全量冒烟测试 ==="
# 站点可用性
SITE_CODE=$(curl -sI -o /dev/null -w '%{http_code}' "$SITE/")
check "站点可用" "$([ "$SITE_CODE" = "200" ] && echo true || echo false)" "HTTP $SITE_CODE"
PJ_CODE=$(curl -sI -o /dev/null -w '%{http_code}' "$SITE/plugins.json")
check "plugins.json" "$([ "$PJ_CODE" = "200" ] && echo true || echo false)" "HTTP $PJ_CODE"
# 遍历所有插件(用 process substitution 避免子 shell 丢失计数器)
while IFS='|' read -r id name version; do
verify_plugin "$id" "$name" "$version"
done < <(jq -r '.[] | select(.group=="plugin") | "\(.id)|\(.name)|\(.version)"' "$PLUGINS_JSON")
elif [ -n "${1:-}" ]; then
# 从 plugins.json 读取信息
name=$(jq -r ".[] | select(.id==\"$1\") | .name" "$PLUGINS_JSON" 2>/dev/null)
version=$(jq -r ".[] | select(.id==\"$1\") | .version" "$PLUGINS_JSON" 2>/dev/null)
verify_plugin "$1" "${name:-$1}" "${version:-}"
else
echo "用法: play-smoke <plugin-id> 或 play-smoke --all"
exit 0
fi
echo ""
echo "=== 结果: $PASS 通过, $FAIL 失败, $WARN 警告 ==="
[ "$FAIL" -gt 0 ] && exit 1 || exit 0