新增 backstop-baseline.sh 脚本,支持 save/use/auto/list 操作, 通过符号链接切换 bitmaps_reference 指向不同版本基线。 WPMind v0.11.3 基线已保存。test-plugin 流程自动选择基线。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
137 lines
5 KiB
Bash
Executable file
137 lines
5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
||
# BackstopJS 基线版本管理
|
||
# 用法:
|
||
# backstop-baseline.sh save <plugin> <version> — 保存当前参考图为指定版本基线
|
||
# backstop-baseline.sh use <plugin> <version> — 切换到指定版本基线
|
||
# backstop-baseline.sh latest <plugin> — 切换到最新版本基线
|
||
# backstop-baseline.sh list [plugin] — 列出可用基线
|
||
# backstop-baseline.sh auto <plugin> <version> — 自动选择: 有上一版本用上一版本,没有则用最新
|
||
|
||
set -euo pipefail
|
||
|
||
BASELINES_DIR="$HOME/backstop_data/baselines"
|
||
REF_DIR="$HOME/backstop_data/bitmaps_reference"
|
||
|
||
mkdir -p "$BASELINES_DIR"
|
||
|
||
cmd="${1:-help}"
|
||
plugin="${2:-}"
|
||
version="${3:-}"
|
||
|
||
die() { echo "[baseline] ERROR: $1" >&2; exit 1; }
|
||
|
||
# 版本排序(semver 友好)
|
||
sorted_versions() {
|
||
local p="$1"
|
||
ls -1 "$BASELINES_DIR" 2>/dev/null \
|
||
| grep "^${p}-" \
|
||
| sed "s/^${p}-//" \
|
||
| sort -V
|
||
}
|
||
|
||
case "$cmd" in
|
||
save)
|
||
[ -z "$plugin" ] && die "用法: $0 save <plugin> <version>"
|
||
[ -z "$version" ] && die "用法: $0 save <plugin> <version>"
|
||
|
||
# 确认有参考图可保存
|
||
src="$REF_DIR"
|
||
[ -L "$src" ] && src="$(readlink -f "$src")"
|
||
count=$(find "$src" -maxdepth 1 -name "*.png" 2>/dev/null | wc -l)
|
||
[ "$count" -eq 0 ] && die "bitmaps_reference 中没有 PNG 文件"
|
||
|
||
dest="$BASELINES_DIR/${plugin}-${version}"
|
||
mkdir -p "$dest"
|
||
cp "$src"/*.png "$dest/"
|
||
echo "[baseline] 已保存 ${plugin} v${version} 基线 (${count} 张图片) → $dest"
|
||
;;
|
||
|
||
use)
|
||
[ -z "$plugin" ] && die "用法: $0 use <plugin> <version>"
|
||
[ -z "$version" ] && die "用法: $0 use <plugin> <version>"
|
||
|
||
target="$BASELINES_DIR/${plugin}-${version}"
|
||
[ ! -d "$target" ] && die "基线不存在: $target"
|
||
|
||
# 如果当前 bitmaps_reference 是真实目录且有内容,先备份
|
||
if [ -d "$REF_DIR" ] && [ ! -L "$REF_DIR" ]; then
|
||
count=$(find "$REF_DIR" -maxdepth 1 -name "*.png" 2>/dev/null | wc -l)
|
||
if [ "$count" -gt 0 ]; then
|
||
backup="$REF_DIR.backup.$(date +%Y%m%d%H%M%S)"
|
||
mv "$REF_DIR" "$backup"
|
||
echo "[baseline] 已备份原参考图 → $backup"
|
||
else
|
||
rm -rf "$REF_DIR"
|
||
fi
|
||
elif [ -L "$REF_DIR" ]; then
|
||
rm "$REF_DIR"
|
||
fi
|
||
|
||
ln -sf "$target" "$REF_DIR"
|
||
echo "[baseline] 已切换到 ${plugin} v${version} 基线"
|
||
;;
|
||
|
||
latest)
|
||
[ -z "$plugin" ] && die "用法: $0 latest <plugin>"
|
||
latest_ver=$(sorted_versions "$plugin" | tail -1)
|
||
[ -z "$latest_ver" ] && die "没有找到 ${plugin} 的基线"
|
||
exec "$0" use "$plugin" "$latest_ver"
|
||
;;
|
||
|
||
auto)
|
||
[ -z "$plugin" ] && die "用法: $0 auto <plugin> <new-version>"
|
||
[ -z "$version" ] && die "用法: $0 auto <plugin> <new-version>"
|
||
|
||
# 找到比当前版本小的最新版本
|
||
prev_ver=$(sorted_versions "$plugin" | grep -v "^${version}$" | tail -1 || true)
|
||
|
||
if [ -n "$prev_ver" ]; then
|
||
echo "[baseline] 找到上一版本基线: ${plugin} v${prev_ver}"
|
||
exec "$0" use "$plugin" "$prev_ver"
|
||
else
|
||
# 没有历史基线,尝试用最新的
|
||
any_ver=$(sorted_versions "$plugin" | tail -1 || true)
|
||
if [ -n "$any_ver" ]; then
|
||
echo "[baseline] 无上一版本,使用最新基线: ${plugin} v${any_ver}"
|
||
exec "$0" use "$plugin" "$any_ver"
|
||
else
|
||
echo "[baseline] 无可用基线,将以当前参考图运行(首次验收)"
|
||
exit 0
|
||
fi
|
||
fi
|
||
;;
|
||
|
||
list)
|
||
if [ -n "$plugin" ]; then
|
||
echo "[baseline] ${plugin} 可用基线:"
|
||
sorted_versions "$plugin" | while read -r v; do
|
||
count=$(find "$BASELINES_DIR/${plugin}-${v}" -name "*.png" | wc -l)
|
||
echo " v${v} (${count} 张)"
|
||
done
|
||
else
|
||
echo "[baseline] 所有基线:"
|
||
ls -1 "$BASELINES_DIR" 2>/dev/null | while read -r d; do
|
||
count=$(find "$BASELINES_DIR/$d" -name "*.png" | wc -l)
|
||
echo " $d (${count} 张)"
|
||
done
|
||
fi
|
||
|
||
# 显示当前激活的基线
|
||
if [ -L "$REF_DIR" ]; then
|
||
echo "[baseline] 当前激活: $(readlink "$REF_DIR" | xargs basename)"
|
||
else
|
||
echo "[baseline] 当前激活: 本地目录 (未关联版本)"
|
||
fi
|
||
;;
|
||
|
||
*)
|
||
echo "BackstopJS 基线版本管理"
|
||
echo ""
|
||
echo "用法:"
|
||
echo " $0 save <plugin> <version> 保存当前参考图为版本基线"
|
||
echo " $0 use <plugin> <version> 切换到指定版本基线"
|
||
echo " $0 latest <plugin> 切换到最新版本基线"
|
||
echo " $0 auto <plugin> <version> 自动选择上一版本基线"
|
||
echo " $0 list [plugin] 列出可用基线"
|
||
;;
|
||
esac
|