From 953447e1d5e89ddac92c00a0f81629612b6b4f10 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Tue, 3 Nov 2026 06:04:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D(CI=E7=BA=A2=E6=80=81=C2=B7?= =?UTF-8?q?=E5=9F=BA=E7=BA=BF=E5=88=B7=E6=96=B0=E8=84=9A=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E9=9B=B7):=20=E5=85=A8=E5=BA=9320=E5=A4=84$=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E7=B4=A7=E9=82=BB=E5=A4=9A=E5=AD=97=E8=8A=82=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=8A=A0=E8=8A=B1=E6=8B=AC=E5=8F=B7=E2=80=94?= =?UTF-8?q?=E2=80=94C-locale=20bash=E6=8A=8A=E5=A4=9A=E5=AD=97=E8=8A=82?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E5=B9=B6=E5=85=A5=E5=8F=98=E9=87=8F=E5=90=8D?= =?UTF-8?q?,=E5=A4=B1=E8=B4=A5=E8=B7=AF=E5=BE=84=E9=81=87set=20-u=E5=BF=85?= =?UTF-8?q?=E7=82=B8(golden=E5=9F=BA=E7=BA=BF=E9=87=8D=E5=88=B6board?= =?UTF-8?q?=E5=88=B7=E6=96=B0FAIL=E5=88=86=E6=94=AFline70=E5=AE=9E?= =?UTF-8?q?=E8=AF=81,=E7=9C=9F=E5=9B=A0=E8=A2=AB=E6=8E=A9=E7=9B=96);=20?= =?UTF-8?q?=E8=A6=86=E7=9B=96golden=5Fbaseline=5Frefresh/probe=5Fgate/rend?= =?UTF-8?q?er=5Fgate/run=5Fall=5Fgates/static=5Fscan/mac=5Fsetup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/tests/static_scan.sh | 2 +- tools/ci/mac_setup.sh | 2 +- tools/golden_baseline_refresh.sh | 8 ++++---- tools/probe_gate.sh | 6 +++--- tools/render_gate.sh | 12 ++++++------ tools/run_all_gates.sh | 4 ++-- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/game/tests/static_scan.sh b/game/tests/static_scan.sh index e17aaa93..c1e8a1c1 100755 --- a/game/tests/static_scan.sh +++ b/game/tests/static_scan.sh @@ -140,7 +140,7 @@ S11_TABLE="design/gdd/术语表.md" S11_FAIL_LOCAL=0 if [ ! -f "$S11_TABLE" ]; then - echo "[static_scan] S11 FAIL: 术语表文件不存在($S11_TABLE)" + echo "[static_scan] S11 FAIL: 术语表文件不存在(${S11_TABLE})" S11_FAIL_LOCAL=1 else # 解析词表:「退役词对照」第一列→去括号注→斜杠拆分 diff --git a/tools/ci/mac_setup.sh b/tools/ci/mac_setup.sh index ab8ab661..a8ba6a36 100644 --- a/tools/ci/mac_setup.sh +++ b/tools/ci/mac_setup.sh @@ -29,7 +29,7 @@ die() { echo "[mac_setup] ✗ $*" >&2; exit 1; } [ "$(uname -s)" = "Darwin" ] || die "仅支持 macOS" [ "$(id -u)" -eq 0 ] || die "请用 sudo 运行(建账户/写 /etc/kcpassword/装 /usr/local/bin 需要 root)" -for t in git curl python3 unzip dscl; do command -v "$t" >/dev/null 2>&1 || die "缺 $t(先 xcode-select --install)"; done +for t in git curl python3 unzip dscl; do command -v "$t" >/dev/null 2>&1 || die "缺 ${t}(先 xcode-select --install)"; done INVOKER="${SUDO_USER:-$(whoami)}" RUNNER_SRC="/Users/${INVOKER}/gitea-runner" [ -x "${RUNNER_SRC}/act_runner" ] || die "缺 ${RUNNER_SRC}/act_runner——先从 gitea.com/gitea/runner releases 下载 darwin 包" diff --git a/tools/golden_baseline_refresh.sh b/tools/golden_baseline_refresh.sh index 4753a2b7..8434c5d3 100755 --- a/tools/golden_baseline_refresh.sh +++ b/tools/golden_baseline_refresh.sh @@ -34,7 +34,7 @@ if [ "$MODE" = "menu" ]; then for a in assets/fonts/ui_font_fusion_pixel_zh_hans.ttf \ assets/art/ui/button_stone.png; do if [ ! -f "$GAME/$a" ]; then - echo "[golden_refresh] 拒跑 — 菜单素材缺位: $a(S3 停机点口径:基线禁锚回退态,先补素材+导入边车)" + echo "[golden_refresh] 拒跑 — 菜单素材缺位: ${a}(S3 停机点口径:基线禁锚回退态,先补素材+导入边车)" exit 1 fi done @@ -42,7 +42,7 @@ if [ "$MODE" = "menu" ]; then st=$? grep -E "\[shot_probe\]" "$TMP/run.log" | tail -3 if [ "$st" -ne 0 ] || [ ! -s "$TMP/shots/shot_menu.png" ]; then - echo "[golden_refresh] FAIL — shot_probe 退出码=$st(菜单截图缺失/探针自检红,见上)" + echo "[golden_refresh] FAIL — shot_probe 退出码=${st}(菜单截图缺失/探针自检红,见上)" exit 1 fi mkdir -p "$REPO/game/tests/golden/$PLAT" @@ -58,7 +58,7 @@ for a in assets/fonts/ui_font_fusion_pixel_zh_hans.ttf \ assets/art/board/terrain_wall_n_underdark.png assets/art/board/terrain_floor_underdark_1.png \ assets/art/board/terrain_wall_n_deep_underdark.png assets/art/board/terrain_floor_deep_underdark_1.png; do if [ ! -f "$GAME/$a" ]; then - echo "[golden_refresh] 拒跑 — 素材缺位: $a(S3 停机点口径:基线禁锚字形回退态,先补素材+导入边车)" + echo "[golden_refresh] 拒跑 — 素材缺位: ${a}(S3 停机点口径:基线禁锚字形回退态,先补素材+导入边车)" exit 1 fi done @@ -67,7 +67,7 @@ gate_run_timeout 180 "$TMP/run.log" "$G" --path "$GAME_WIN" res://probe/board_sh st=$? grep -E "\[board_shot\]" "$TMP/run.log" | tail -6 if [ "$st" -ne 0 ] || [ ! -s "$TMP/shots/board_meta.json" ]; then - echo "[golden_refresh] FAIL — board_shot_probe 退出码=$st(meta/截图缺失见上)" + echo "[golden_refresh] FAIL — board_shot_probe 退出码=${st}(meta/截图缺失见上)" exit 1 fi python tools/golden_board_crop.py "$TMP/shots/board_meta.json" "$TMP/shots" "$TMP/crop" || exit 1 diff --git a/tools/probe_gate.sh b/tools/probe_gate.sh index 94c0b03d..fb1a29e2 100755 --- a/tools/probe_gate.sh +++ b/tools/probe_gate.sh @@ -57,7 +57,7 @@ verdict() { # verdict <探针名> <日志路径> <退出码> [签名标记] echo "[probe_gate] FAIL — $name 超时挂死(exit=$st),孤儿已清"; return 1 fi if [ "$st" -ne 0 ]; then - echo "[probe_gate] FAIL — $name 退出码=$st(退出码为唯一权威判据,PASS 串不抵)"; return 1 + echo "[probe_gate] FAIL — $name 退出码=${st}(退出码为唯一权威判据,PASS 串不抵)"; return 1 fi if [ -n "$PY" ] && ! "$PY" "$REPO/tools/error_scan.py" "$log" >"$TMP/err.txt" 2>&1; then echo "[probe_gate] FAIL — $name 脚本错误扫描命中:" @@ -65,7 +65,7 @@ verdict() { # verdict <探针名> <日志路径> <退出码> [签名标记] return 1 fi if ! grep -q "$mark" "$log"; then - echo "[probe_gate] FAIL — $name 未见签名标记「$mark」(exit=$st——退出码 0 但零输出亦判红)"; return 1 + echo "[probe_gate] FAIL — $name 未见签名标记「${mark}」(exit=${st}——退出码 0 但零输出亦判红)"; return 1 fi return 0 } @@ -193,7 +193,7 @@ fi echo "======== 残留检查(批末闸) ========" left="$(orphans | wc -l | tr -d ' ')" total="$(gate_godot_count_all)" -echo "本闸残留 Godot=$left(必须0) 全局 Godot 进程=$total(其他会话的仅报数不算账)" +echo "本闸残留 Godot=${left}(必须0) 全局 Godot 进程=${total}(其他会话的仅报数不算账)" if [ "$left" -ne 0 ]; then echo "[probe_gate] FAIL — 本闸残留未清零"; kill_orphans; _rc=1; fi if [ "$_rc" -eq 0 ]; then echo "[probe_gate] 全绿"; else echo "[probe_gate] 存在 FAIL,见上"; fi exit "$_rc" diff --git a/tools/render_gate.sh b/tools/render_gate.sh index bd89674d..cf0d10fd 100755 --- a/tools/render_gate.sh +++ b/tools/render_gate.sh @@ -73,7 +73,7 @@ grep -E "\[shot_probe\]" "$TMP/shot.log" | tail -12 if [ "$st" -eq 124 ] || [ "$st" -eq 137 ]; then echo "[render_gate] FAIL — shot_probe 超时挂死(exit=$st),孤儿已清"; _rc=1 elif [ "$st" -ne 0 ] || ! grep -q "问题=0" "$TMP/shot.log"; then - echo "[render_gate] FAIL — shot_probe 未干净完成(exit=$st,缺失屏/空文件/路径断裂见上)"; _rc=1 + echo "[render_gate] FAIL — shot_probe 未干净完成(exit=${st},缺失屏/空文件/路径断裂见上)"; _rc=1 fi if [ "$_rc" -eq 0 ]; then python tools/shot_checker.py "$SHOT" shot_menu.png shot_settings.png shot_career.png shot_camp.png shot_level.png shot_battle.png shot_status.png | sed 's/^/[render_gate] /' @@ -90,7 +90,7 @@ grep -E "\[fx_shot_probe\]" "$TMP/fx.log" | tail -4 if [ "$st" -eq 124 ] || [ "$st" -eq 137 ]; then echo "[render_gate] FAIL — fx_shot_probe 超时挂死(exit=$st),孤儿已清"; _rc=1 elif [ "$st" -ne 0 ]; then - echo "[render_gate] FAIL — fx_shot_probe 退出码=$st(取证失败=闸红)"; _rc=1 + echo "[render_gate] FAIL — fx_shot_probe 退出码=${st}(取证失败=闸红)"; _rc=1 fi scan_log "fx_shot_probe" "$TMP/fx.log" fx_evidence() { # 取证双检:模式文件存在且非零字节(零字节/缺失任一即 FAIL——Q7) @@ -115,7 +115,7 @@ grep -E "\[board_shot\]" "$TMP/bd.log" | tail -6 if [ "$st" -eq 124 ] || [ "$st" -eq 137 ]; then echo "[render_gate] FAIL — board_shot_probe 超时挂死(exit=$st),孤儿已清"; _rc=1 elif [ "$st" -ne 0 ]; then - echo "[render_gate] FAIL — board_shot_probe 退出码=$st(取证失败=闸红)"; _rc=1 + echo "[render_gate] FAIL — board_shot_probe 退出码=${st}(取证失败=闸红)"; _rc=1 fi scan_log "board_shot_probe" "$TMP/bd.log" for b in board_L1_dungeon.png board_L2_underdark.png board_L3_deep_underdark.png board_meta.json; do @@ -124,7 +124,7 @@ done echo "======== 棋盘 golden 逐像素(T2——裁剪→对比,容差 provisional) ========" if [ ! -d "$GOLDEN" ]; then - echo "[render_gate] FAIL — 本平台($(gate_platform_id))基线目录缺失:$GOLDEN(基线按平台各存、在库=验收断言②)"; _rc=1 + echo "[render_gate] FAIL — 本平台($(gate_platform_id))基线目录缺失:${GOLDEN}(基线按平台各存、在库=验收断言②)"; _rc=1 elif [ ! -s "$BD/board_meta.json" ]; then echo "[render_gate] SKIP — board_meta.json 缺失(取证段已红),golden 对比不判" else @@ -137,7 +137,7 @@ else assets/art/board/terrain_wall_n_dungeon.png assets/art/board/terrain_floor_dungeon_1.png \ assets/art/board/terrain_wall_n_underdark.png assets/art/board/terrain_floor_underdark_1.png \ assets/art/board/terrain_wall_n_deep_underdark.png assets/art/board/terrain_floor_deep_underdark_1.png; do - [ -f "$GAME/$a" ] || { echo "[render_gate] FAIL — 棋盘素材缺位: $a(Q5:基线锚素材齐盘态,缺盘不得出验收结论)"; _asset_miss=1; } + [ -f "$GAME/$a" ] || { echo "[render_gate] FAIL — 棋盘素材缺位: ${a}(Q5:基线锚素材齐盘态,缺盘不得出验收结论)"; _asset_miss=1; } done if [ "$_asset_miss" -eq 0 ]; then CROP="$TMP/crop" @@ -174,7 +174,7 @@ fi echo "======== 残留检查(批末闸) ========" left="$(orphans | wc -l | tr -d ' ')" total="$(gate_godot_count_all)" -echo "本闸残留 Godot=$left(必须0) 全局 Godot 进程=$total(其他会话的仅报数不算账)" +echo "本闸残留 Godot=${left}(必须0) 全局 Godot 进程=${total}(其他会话的仅报数不算账)" if [ "$left" -ne 0 ]; then echo "[render_gate] FAIL — 本闸残留未清零"; kill_orphans; _rc=1; fi if [ "$_rc" -eq 0 ]; then echo "[render_gate] 全绿"; else echo "[render_gate] 存在 FAIL,见上"; fi exit "$_rc" diff --git a/tools/run_all_gates.sh b/tools/run_all_gates.sh index bc396897..b2ad7363 100755 --- a/tools/run_all_gates.sh +++ b/tools/run_all_gates.sh @@ -285,7 +285,7 @@ if in_domain code; then echo "[gates] 关联档选闸·申报:未找到在册需求卡片(diff 与 roadmap 进行中行均无),申报集为空——仅按 diff 推导" fi if [ "$SCOPE" = related ]; then - echo "[gates] 关联档选闸:02 选套件跑(--only=$ONLY_TERMS)" + echo "[gates] 关联档选闸:02 选套件跑(--only=${ONLY_TERMS})" fi fi fi @@ -341,7 +341,7 @@ gate_unit() { # run_all 是 --script 模式,退出码为唯一判据;分 local _shards="${GATE_SHARDS:-4}" echo "" echo "════════════════════════════════════════════" - echo " $name(--script 模式,退出码为唯一判据)" + echo " ${name}(--script 模式,退出码为唯一判据)" if [ "$SCOPE" = related ] && [ -n "$ONLY_TERMS" ]; then echo " 关联档选跑:--only=$ONLY_TERMS" fi