工程(黄金图自愈补采·CI采集步): 用户裁补采自动化——渲染能力在runner会话,人手不做二进制搬运; 新增tools/ci/golden_selfheal.sh+ci.yml采集步(full批·导入后跑闸前): 缺棋盘三件基线→golden_baseline_refresh棋盘模式渲染→提交回master推送→下一轮full批拉取后渲染闸绿; 护栏三道: GITHUB_WORKSPACE必在(本地误跑即拒·实测guard_exit=1)/三件齐盘零动作(幂等无循环)/四失败点全置红不静默; 读数: bash -n过+guard实测过

This commit is contained in:
DKChan committed 2026-11-08 06:36:09 +08:00
1 parent db7719ca47
commit e0103d82ef
2 files changed
+51

No files matched your search

+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env bash
# 棋盘黄金图 CI 自愈补采(2026-11-08 用户裁:补采自动化——渲染能力在 runner 会话里,人手不做二进制搬运)。
# 背景:golden 基线按平台分目录(render_gate.sh:37 gate_platform_id),改版批只能重制本平台侧;
# 他平台基线缺失=渲染闸红(基准未建),而补采必须在他平台真实渲染——只有 runner 会话做得到。
# 本件挂 CI full 批(ci.yml 导入步之后、跑闸步之前):缺棋盘三件基线时跑 golden_baseline_refresh
# 棋盘模式,产物提交回 master 并推送,下一轮 full 批拉取后渲染闸绿。
# 护栏:
# - 只认 CI 跑批环境(GITHUB_WORKSPACE 必在)——本地误跑立即拒(防人手把本平台基线提交出去)。
# - 三件基线齐盘即零动作退出(幂等——不会每轮提交,无循环)。
# - 只 add 三件 PNG;刷新红/落盘缺/提交败/push 败一律置红不静默,下一轮 full 批自动重试。
set -u
: "${GITHUB_WORKSPACE:?本件只属 CI 跑批环境(GITHUB_WORKSPACE 必在)——人手补采走 tools/golden_baseline_refresh.sh}"
REPO="$(cd "$(dirname "$0")/../.." && pwd)"
cd "$REPO"
. "$REPO/tools/gate_platform.sh"
PLAT="$(gate_platform_id)"
GOLDEN_DIR="game/tests/golden/$PLAT"
BOARD_FILES="board_L1_dungeon.png board_L2_underdark.png board_L3_deep_underdark.png"
_miss=0
for b in $BOARD_FILES; do
[ -s "$GOLDEN_DIR/$b" ] || { _miss=1; echo "[selfheal] 缺基准: $GOLDEN_DIR/$b"; }
done
if [ "$_miss" -eq 0 ]; then
echo "[selfheal] $PLAT 棋盘三件基线在库——零动作(幂等护栏)"
exit 0
fi
GODOT_BIN="${GODOT_BIN:?GODOT_BIN 必注(runner 自举件安装位)}" \
bash "$REPO/tools/golden_baseline_refresh.sh" game || {
echo "[selfheal] FAIL — 补采刷新脚本红(探针自检/裁剪失败见上)"; exit 1
}
for b in $BOARD_FILES; do
[ -s "$GOLDEN_DIR/$b" ] || { echo "[selfheal] FAIL — 刷新后仍缺: $b"; exit 1; }
done
for b in $BOARD_FILES; do
git add "$GOLDEN_DIR/$b"
done
git -c user.name="gitea-actions" -c user.email="actions@noreply.git.kuaimeo.com" \
commit -m "黄金图自愈补采($PLAT·棋盘三件): 渲染闸缺基准——golden_baseline_refresh棋盘模式在runner会话渲染产出,本提交由CI采集步自动落库,下一轮full批拉取后渲染闸绿;触发源提交见父提交" \
|| { echo "[selfheal] FAIL — git commit 失败(无差异或工作区异常)"; exit 1; }
git push origin HEAD:master || { echo "[selfheal] FAIL — push 失败(令牌权限/分支保护;修复前每轮 full 批会重试)"; exit 1; }
echo "[selfheal] 完成 — 基线已落库,下一轮 CI 拉取生效"