From c5223af4a12e0b2848041c642438a291ea24d06a Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Thu, 25 Jun 2026 12:16:16 +0800 Subject: [PATCH] =?UTF-8?q?test(ci):=20L3=20golden=20=E6=9D=83=E5=A8=81?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E8=84=9A=E6=9C=AC(=E8=BF=9B=20CI=20=E5=89=8D?= =?UTF-8?q?=E7=BD=AE=E5=87=86=E5=A4=87)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- docs/test-architecture.html | 2 +- scripts/update-goldens.sh | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100755 scripts/update-goldens.sh diff --git a/docs/test-architecture.html b/docs/test-architecture.html index ca61f05..0f66023 100644 --- a/docs/test-architecture.html +++ b/docs/test-architecture.html @@ -260,7 +260,7 @@
  • 测什么:mobile/tablet/desktop × light/dark × zh/en 的渲染一致;以及实现 vs HTML 原型的像素差。
  • 工具:Flutter golden(flutter_test_config.dart 字体锁定→host 无关,所以「每端效果一致」天然成立);design-distill shoot-prototype.mjs + diff.mjs(pixelmatch)。
  • 量化:像素不一致比例 vs 阈值 0.05
  • -
  • 现状20+ golden 基准已有 CI 未接 · pixel 闸未自动化
  • +
  • 现状20+ golden 基准已有 权威环境脚本 scripts/update-goldens.sh 已备 CI 硬闸未启。启用前置:① 有 docker 的机器跑 update-goldens.sh 提交一套 Linux 权威基线(mac 基线在 CI 必全红)② stats-overhaul dirty 工作区合并、基线落定 → 再加 flutter test test/golden CI job 转阻塞。
  • 可自定义:新增屏 = 加一张基线;阈值按屏可调。
  • diff --git a/scripts/update-goldens.sh b/scripts/update-goldens.sh new file mode 100755 index 0000000..d08a860 --- /dev/null +++ b/scripts/update-goldens.sh @@ -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 && 提交。"