From e1a4fec22be7125e2e193c90a049708bcba95fed Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Thu, 25 Jun 2026 11:33:12 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E8=AE=BE=E8=AE=A1=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=97=B8=E6=94=B9=E6=9C=AC=E5=9C=B0=20pre-commit=EF=BC=88?= =?UTF-8?q?=E6=92=A4=20CI=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 撤 .gitea/workflows/ds-gate.yml,改本地钩子: - scripts/hooks/pre-commit:提交动了 .superpowers/prototype/ 才跑 check-ds.mjs (12 道),违规即 exit 1 阻止;--no-verify 可跳过。 - scripts/hooks/install.sh:每台机器跑一次,装 worktree-aware shim 到 git hooks。 原型仍入库(上一提交),仅执行处从 CI 移到本地。已测:违规阻止/无关跳过均正确。 Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX --- .gitea/workflows/ds-gate.yml | 22 ---------------------- scripts/hooks/install.sh | 22 ++++++++++++++++++++++ scripts/hooks/pre-commit | 29 +++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 22 deletions(-) delete mode 100644 .gitea/workflows/ds-gate.yml create mode 100755 scripts/hooks/install.sh create mode 100755 scripts/hooks/pre-commit diff --git a/.gitea/workflows/ds-gate.yml b/.gitea/workflows/ds-gate.yml deleted file mode 100644 index f82d190..0000000 --- a/.gitea/workflows/ds-gate.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Design System Gate - -# 原型设计系统守门闸(单一真源,12 道检查)。 -# 改了原型(tokens/atoms/screens/index)就跑,确保颜色/排版/层级/圆角/字体/图标 -# 全走 tokens.css/atoms.css,组件已在 index.html 登记且未 fork。 -on: - push: - branches: ['**'] - paths: - - '.superpowers/prototype/**' - pull_request: - paths: - - '.superpowers/prototype/**' - -jobs: - check-ds: - runs-on: mac - steps: - - uses: actions/checkout@v4 - - - name: 设计系统守门(check-ds.mjs · 12 道闸) - run: node .superpowers/prototype/tools/check-ds.mjs diff --git a/scripts/hooks/install.sh b/scripts/hooks/install.sh new file mode 100755 index 0000000..503feb7 --- /dev/null +++ b/scripts/hooks/install.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# 安装本地 git 钩子(每台机器跑一次)。把 git 的 pre-commit 接到仓库内 +# scripts/hooks/pre-commit(设计系统守门闸)。钩子是本地的,不随 git 同步—— +# 故需各机器各跑一次本脚本。 +set -e + +hooks_dir="$(git rev-parse --git-path hooks)" +mkdir -p "$hooks_dir" +target="$hooks_dir/pre-commit" + +cat > "$target" <<'SH' +#!/bin/sh +# 委托到仓库内 scripts/hooks/pre-commit(随当前 worktree 的 checkout 走; +# 不存在则放行,便于尚未合入该脚本的分支/worktree)。 +hook="$(git rev-parse --show-toplevel)/scripts/hooks/pre-commit" +[ -x "$hook" ] && exec "$hook" +exit 0 +SH +chmod +x "$target" + +echo "[ds-gate] ✓ 已安装 pre-commit 钩子 → $target" +echo "[ds-gate] 今后提交若动了 .superpowers/prototype/ 会自动跑 12 道设计系统闸。" diff --git a/scripts/hooks/pre-commit b/scripts/hooks/pre-commit new file mode 100755 index 0000000..da566f5 --- /dev/null +++ b/scripts/hooks/pre-commit @@ -0,0 +1,29 @@ +#!/bin/sh +# 原型设计系统守门闸(本地 pre-commit)。 +# 仅当本次提交动了原型(.superpowers/prototype/)时跑 check-ds.mjs 的 12 道检查; +# 任一违规 → 阻止提交。临时跳过:git commit --no-verify。 +# +# 安装(每台机器一次,把仓库内本脚本接到 git 钩子): +# sh scripts/hooks/install.sh +root="$(git rev-parse --show-toplevel)" +gate="$root/.superpowers/prototype/tools/check-ds.mjs" + +# 没动原型 → 直接放行 +if ! git diff --cached --name-only | grep -q '^\.superpowers/prototype/'; then + exit 0 +fi + +if [ ! -f "$gate" ]; then + echo "[ds-gate] ⚠ 找不到 $gate,跳过设计系统检查。" + exit 0 +fi + +echo "[ds-gate] 原型有改动,跑设计系统守门闸(12 道)…" +if ! node "$gate" >/dev/null 2>&1; then + echo "[ds-gate] ✗ 设计系统检查未通过,提交已阻止。" + echo "[ds-gate] 详情:node .superpowers/prototype/tools/check-ds.mjs" + echo "[ds-gate] 跳过:git commit --no-verify" + exit 1 +fi +echo "[ds-gate] ✓ 设计系统 12 道闸全过。" +exit 0