test(ci): L3 golden 权威环境脚本(进 CI 前置准备)
golden 真进 CI 卡两个硬约束:Linux/mac 渲染不一致(mac 基线在 CI 全红)+ 基线绑定 stats-overhaul dirty 工作区。本提交备好权威环境,不裹挟 dirty、不破坏: - scripts/update-goldens.sh:在 CI 同款镜像 cirruslabs/flutter 重生成 Linux 权威基线 (开发者改 UI 后用它刷新,而非裸 mac --update-goldens,保持与 CI 一致) - docs/test-architecture.html:L3 现状更新 + 列明启 CI 硬闸的两个前置条件 - 真启闸需:有 docker 的机器生成并提交 Linux 基线 + dirty 工作区合并(本机无 docker) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -260,7 +260,7 @@
|
||||
<li><b>测什么</b>:mobile/tablet/desktop × light/dark × zh/en 的渲染一致;以及实现 vs HTML 原型的像素差。</li>
|
||||
<li><b>工具</b>:Flutter golden(<code>flutter_test_config.dart</code> 字体锁定→host 无关,所以「每端效果一致」天然成立);design-distill <code>shoot-prototype.mjs</code> + <code>diff.mjs</code>(pixelmatch)。</li>
|
||||
<li><b>量化</b>:像素不一致比例 vs 阈值 <code>0.05</code>。</li>
|
||||
<li><b>现状</b>:<span class="tag t-ok">20+ golden 基准已有</span> <span class="tag t-warn">CI 未接 · pixel 闸未自动化</span>。</li>
|
||||
<li><b>现状</b>:<span class="tag t-ok">20+ golden 基准已有</span> <span class="tag t-warn">权威环境脚本 <code>scripts/update-goldens.sh</code> 已备</span> <span class="tag t-bad">CI 硬闸未启</span>。启用前置:① 有 docker 的机器跑 <code>update-goldens.sh</code> 提交一套 Linux 权威基线(mac 基线在 CI 必全红)② stats-overhaul dirty 工作区合并、基线落定 → 再加 <code>flutter test test/golden</code> CI job 转阻塞。</li>
|
||||
<li><b>可自定义</b>:新增屏 = 加一张基线;阈值按屏可调。</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
# update-goldens.sh — 在权威环境(Linux 容器)重生成 golden 基线。
|
||||
#
|
||||
# 为什么必须容器:golden 是「真实渲染截图」,Linux 与 mac 渲染(字体/抗锯齿)不一致。
|
||||
# 必须钉死一个权威环境统一生成 + CI 校验,否则 CI(Linux)对着 mac 生成的基线必全红。
|
||||
# 本仓库权威环境 = CI 同款镜像 ghcr.io/cirruslabs/flutter:stable。
|
||||
# 开发者改了 UI 后用本脚本(而非裸 mac `--update-goldens`)刷新基线,保持与 CI 一致。
|
||||
#
|
||||
# 用法: bash scripts/update-goldens.sh
|
||||
# 依赖: docker
|
||||
# 之后: git add client/test/golden/goldens && 提交(基线随代码进版本库)。
|
||||
#
|
||||
# ⚠️ 启用 golden CI 硬闸的前置(见 docs/test-architecture.html L3):
|
||||
# ① 在有 docker 的机器跑本脚本,提交一套 Linux 权威基线;
|
||||
# ② stats-overhaul 等在制工作区合并、基线落定后;
|
||||
# 再在 .gitea/workflows/ci.yml 加 `flutter test test/golden` job 转阻塞。
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
|
||||
if ! docker info >/dev/null 2>&1; then
|
||||
echo "✗ 需要 docker(权威 Linux 渲染环境)。本机无 docker 时无法生成与 CI 一致的基线。" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "→ 在 ghcr.io/cirruslabs/flutter:stable 重生成 golden 基线 ..."
|
||||
docker run --rm -v "$ROOT/client:/app" -w /app \
|
||||
ghcr.io/cirruslabs/flutter:stable \
|
||||
bash -c "flutter pub get && flutter test --update-goldens test/golden"
|
||||
|
||||
echo "✓ golden 基线已在 Linux 权威环境重生成。"
|
||||
echo " 下一步:git add client/test/golden/goldens && 提交。"
|
||||
Reference in New Issue
Block a user