# ============================================================================= # Gitea Actions · Design Tokens WCAG 2AA 对比度自动校验 # ============================================================================= # 触发:PR + push to main # 目的:PRD-REQ-通用-001 v1.2 §6 + §7.4 实施要求 # "颜色对比度纳入 CI 或视觉回归检查; # 普通文字最低 4.5:1,大文字最低 3:1。" # # 工作流: # 1. 拉取代码 # 2. 配置 Node 22 # 3. 跑 scripts/check-wcag-tokens.mjs 校验所有前端 tokens.css # 4. 失败 → 阻断 PR # # 依赖:零外部 npm 依赖(脚本自包含 WCAG 2.x 算法) # ============================================================================= name: WCAG 2AA Tokens Check on: pull_request: paths: - 'src/frontend-*/src/styles/tokens.css' - 'scripts/check-wcag-tokens.mjs' - '.gitea/workflows/wcag-a11y.yml' push: branches: [main, feature/**, develop] paths: - 'src/frontend-*/src/styles/tokens.css' - 'scripts/check-wcag-tokens.mjs' - '.gitea/workflows/wcag-a11y.yml' jobs: wcag-tokens: name: Design Tokens WCAG 2AA runs-on: ubuntu-latest timeout-minutes: 3 steps: - name: 检出代码 uses: actions/checkout@v4 - name: 配置 Node.js 22 uses: actions/setup-node@v4 with: node-version: '22' - name: 列出待扫描 tokens.css run: | echo "━━━ 待扫描文件 ━━━" find src -path "*/styles/tokens.css" -type f 2>/dev/null || echo "(无)" - name: 跑 WCAG 2AA 对比度校验 run: node scripts/check-wcag-tokens.mjs - name: 失败时注释 PR if: failure() && github.event_name == 'pull_request' uses: actions/github-script@v7 with: script: | const comment = [ '## ❌ WCAG 2AA Design Tokens 校验失败', '', '`scripts/check-wcag-tokens.mjs` 检测到关键 token 组合不满足 WCAG 2AA 阈值:', '- 普通文字 ≥ 4.5:1', '- 大文字(≥ 18pt regular / ≥ 14pt bold)/ UI 组件 ≥ 3:1', '', '**修复路径**:', '1. 查看上方日志中的失败项(`fg × bg`)', '2. 调整 `src/frontend-*/src/styles/tokens.css` 中的颜色值', '3. 或在组件层强制使用大字号 / 加粗(触发大文字 3:1 阈值)', '4. 重新 push 触发 CI', '', '参考:PRD-REQ-通用-001-前端设计系统 v1.2 §4.1.6 + §7.4', ].join('\n'); github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: comment, }); - name: 校验通过总结 if: success() run: | echo "✅ 所有关键 token 组合满足 WCAG 2AA 阈值(普通文字 4.5:1 / 大文字 3:1)" echo "详见上方日志中的 ✅ PASS 项"