diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 5f245aa1..d166db11 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -48,6 +48,14 @@ jobs: rm -rf game/.godot/imported /usr/local/bin/godot --headless --path game --editor --quit + - name: 棋盘黄金图自愈补采(full 批——缺基准时 runner 会话渲染→提交回 master→下一轮拉取生效) + if: steps.route.outputs.mode == 'full' + env: + GODOT_BIN: /usr/local/bin/godot + run: | + cd "$GITHUB_WORKSPACE/repo" + bash tools/ci/golden_selfheal.sh + - name: 跑闸 if: steps.route.outputs.mode != 'skip' env: diff --git a/tools/ci/golden_selfheal.sh b/tools/ci/golden_selfheal.sh new file mode 100644 index 00000000..7d7a0193 --- /dev/null +++ b/tools/ci/golden_selfheal.sh @@ -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 拉取生效"