#!/usr/bin/env python # -*- coding: utf-8 -*- """ 模块名称:UI 像素回归门禁包装器 模块功能:把模拟器增量构建 + 菜单/内容页两条 golden 回归串成单个 pre-commit 钩子 适用范围:提交门禁(仅 UI 源变更时触发,见 .pre-commit-config.yaml 的 files 白名单) 说明:pre-commit 会把本次变更的文件名作为参数传给钩子,而两条 golden 脚本是按 "整棵菜单树 + 全量参考图"工作的、不接受文件参数,故本包装器**有意忽略** argv, 只做"是否需要跑"的门禁适配与退出码传递。 作者:王建锋 创建日期:2026-10-20 修改记录: 2026-10-20 王建锋 创建(W6 UI 字符集与像素回归门禁收尾:golden 入提交门禁) """ import os import subprocess import sys ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BUILD_BAT = os.path.join(ROOT, 'simulator', 'build_sim.bat') PY = sys.executable CHECKS = [ os.path.join('simulator', 'tests', 'check_menu_rows.py'), os.path.join('simulator', 'tests', 'check_content_pages.py'), ] def run(cmd): """执行一条命令,透传输出,返回退出码。 参数:cmd - 命令列表 list[str] 返回值:子进程退出码 int """ return subprocess.call(cmd, cwd=ROOT) def main(): """先增量构建模拟器,再依次跑两条 golden 回归。 返回值:0 - 全部一致;1 - 任一环节失败(失败详情由被包装脚本自己打印) int """ print('[ui-golden] 增量构建模拟器 ...') if run([BUILD_BAT]) != 0: print('[ui-golden] FAIL 模拟器构建失败,无法做像素回归') return 1 rc_all = 0 for rel in CHECKS: print('[ui-golden] 跑 %s ...' % rel) rc = run([PY, os.path.join(ROOT, rel)]) if rc != 0: print('[ui-golden] FAIL %s 退出码 %d' % (rel, rc)) rc_all = 1 return rc_all if __name__ == '__main__': sys.exit(main())