13e0ba6d47
- gen_l10n_dart.mjs 去掉 dart format:其输出依赖包解析状态、跨环境不稳(首次 4 空格、 重跑 8 空格),会让漂移闸误报。改为确定性终态格式(list 单行 const [])。 analyze 不校验格式,不影响;gen 现零 dart 依赖、纯 node 确定。 - ci/check-codegen-drift.sh 增 l10n 段:重生成 strings_*.dart → git diff 非空即 fail (与 token 段同法,纯 node)。 - 验证:往返无损、重生成零 diff(闸稳定)、flutter analyze 0 issue、244 测试全绿。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A79VtQA1BwTuQN1ThpvYpo
49 lines
2.4 KiB
Bash
Executable File
49 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# check-codegen-drift.sh — codegen 漂移检查(支柱 2:契约单源 / token 单源)。
|
|
#
|
|
# design/prototype/tokens.css 是唯一 token 真相源,client/lib/pangolin_tokens.gen.dart
|
|
# 由 design/codegen/gen_flutter_tokens.mjs 生成、勿手改(CLAUDE.md 铁律)。本检查重新
|
|
# 生成一遍,若生成物与已提交版本不一致 → 漂移:要么改了 CSS 没重生成,要么手改了
|
|
# 生成物。两者都会让"单源"失效、契约悄悄分叉。
|
|
#
|
|
# 依赖: node(零依赖纯脚本) + git。CI 在 node:20 镜像内跑(含 git/bash)。
|
|
# 发现漂移 → 非零退出码(CI fail)。
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
cd "$REPO_ROOT"
|
|
|
|
# docker 内挂载目录 owner 与进程 uid 不一致时 git 会拒绝;本地是 owner 时此行无副作用。
|
|
git config --global --add safe.directory "$REPO_ROOT" 2>/dev/null || true
|
|
|
|
GEN="client/lib/pangolin_tokens.gen.dart"
|
|
|
|
echo "→ 重新生成 Flutter token (design/codegen/gen_flutter_tokens.mjs) ..."
|
|
node design/codegen/gen_flutter_tokens.mjs
|
|
|
|
if ! git diff --quiet -- "$GEN"; then
|
|
echo "❌ codegen 漂移:$GEN 与 design/prototype/tokens.css 不一致。" >&2
|
|
echo " 原因:改了 CSS 真相源却没重生成,或手改了生成物(铁律:勿手改 *.gen.dart)。" >&2
|
|
echo " 修复:node design/codegen/gen_flutter_tokens.mjs 后提交生成物。" >&2
|
|
echo " ── diff(前 40 行)──" >&2
|
|
git --no-pager diff -- "$GEN" | head -40 >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ codegen 无漂移:token 生成物与 CSS 真相源一致。"
|
|
|
|
# ── l10n 单源:design/i18n/strings.json → client/lib/l10n/strings_*.dart ──
|
|
# gen 为纯 node 确定性输出(不跑 dart format),故本段与 token 段一样零 dart 依赖。
|
|
L10N_GEN="client/lib/l10n"
|
|
echo "→ 重新生成 l10n (design/codegen/gen_l10n_dart.mjs) ..."
|
|
node design/codegen/gen_l10n_dart.mjs
|
|
if ! git diff --quiet -- "$L10N_GEN"/strings_*.dart; then
|
|
echo "❌ l10n 漂移:strings_*.dart 与 design/i18n/strings.json 不一致。" >&2
|
|
echo " 原因:改了 strings.json 却没重生成,或手改了生成物(勿手改 strings_*.dart)。" >&2
|
|
echo " 修复:node design/codegen/gen_l10n_dart.mjs 后提交生成物。" >&2
|
|
echo " ── diff(前 40 行)──" >&2
|
|
git --no-pager diff -- "$L10N_GEN"/strings_*.dart | head -40 >&2
|
|
exit 1
|
|
fi
|
|
echo "✅ l10n 无漂移:strings_*.dart 与 strings.json 单源一致。"
|