代码质量门禁Skill quality-gates

代码质量门禁是一个自动化代码质量检查工具,用于在代码提交、合并或部署前强制执行质量标准。它通过运行代码检查、类型检查、单元测试、安全审计等一系列自动化检查,确保代码库的一致性和可靠性,防止低质量代码进入生产环境。关键词:代码质量,自动化检查,持续集成,安全审计,单元测试,代码规范,DevOps,质量门禁,CI/CD,代码审查。

DevOps 0 次安装 4 次浏览 更新于 3/2/2026

name: quality-gates description: 在提交或部署前运行全面的质量检查,包括代码检查、类型检查、测试和安全审计 version: 1.0.0 author: AI-Vibe-Prompts tags: [质量, 测试, 代码检查, 安全, 持续集成持续部署] auto_invoke: true

质量门禁技能

目标

通过运行自动化检查来强制执行代码质量标准,这些检查必须在代码提交、合并或部署之前通过。充当代码库一致质量的守护者。

何时使用此技能

自动触发时机:

  • 用户完成功能实现时
  • 创建提交或拉取请求之前
  • 用户要求“测试”、“验证”、“检查质量”或“确认”时
  • 部署或发布之前
  • 重大重构之后

质量门禁级别

级别 1:提交前门禁(快速,< 30 秒)

每次提交前运行的基本检查。

级别 2:推送前门禁(中等,< 2 分钟)

推送到远程仓库前的全面检查。

级别 3:部署前门禁(彻底,< 5 分钟)

生产部署前的完整验证。

门禁执行工作流

门禁 1:代码检查(JavaScript/TypeScript)

目的:强制执行代码风格并捕获常见错误

工具:Bash, Read

流程

  1. 检测检查器,通过检查:

    • ESLint: .eslintrc*, eslint.config.*
    • Biome: biome.json
    • 无:跳过此门禁
  2. 读取 package.json 以查找检查脚本:

    "scripts": {
      "lint": "eslint .",
      "lint:fix": "eslint . --fix"
    }
    
  3. 执行检查器

    # 尝试运行检查脚本
    npm run lint
    
    # 如果失败,尝试直接命令
    npx eslint . || npx biome check .
    
  4. 解析结果

    • 退出码 0:✅ 通过
    • 退出码非零:❌ 失败
    • 提取错误数量和文件位置
  5. 自动修复尝试(如果发现失败):

    npm run lint:fix || npx eslint . --fix
    

成功标准:零个检查错误(警告可接受)

门禁 2:类型检查(TypeScript)

目的:验证类型安全并捕获类型错误

工具:Bash, Read, Grep

流程

  1. 检测 TypeScript,通过检查:

    • tsconfig.json
    • 依赖项中的 TypeScript
  2. 读取 tsconfig.json 以检查严格性:

    • strict: true
    • noImplicitAny, strictNullChecks
  3. 执行类型检查器

    # 尝试运行类型检查脚本
    npm run typecheck || npm run type-check
    
    # 如果没有脚本,直接运行
    npx tsc --noEmit
    
  4. 解析结果

    • 退出码 0:✅ 通过
    • 退出码非零:❌ 失败
    • 提取错误数量和位置

成功标准:零个类型错误

门禁 3:单元与集成测试

目的:验证代码功能并防止回归

工具:Bash, Read, Grep

流程

  1. 检测测试框架

    • Vitest: vitest.config.*, 依赖项中的 vitest
    • Jest: jest.config.*, 依赖项中的 jest
    • 原生测试:Node.js 20+ 的 --test 标志
  2. 统计测试文件

    # 使用 Grep 查找测试文件
    find . -name "*.test.*" -o -name "*.spec.*" | wc -l
    
  3. 执行测试

    # 运行单元测试(快速)
    npm run test || npm run test:unit
    
    # 或直接命令
    npx vitest run || npx jest --ci
    
  4. 解析结果

    • 运行的总测试数
    • 通过 / 失败 / 跳过的数量
    • 覆盖率百分比(如果可用)
  5. 覆盖率检查(如果已配置):

    npm run test:coverage
    
    # 检查是否达到阈值(例如,80%)
    

成功标准

  • 所有测试通过(100%)
  • 覆盖率 ≥ 配置的阈值(如果设置)

门禁 4:构建验证

目的:确保代码编译和构建无错误

工具:Bash

流程

  1. 检测构建系统

    • Next.js: next build
    • Vite: vite build
    • Webpack: webpack --mode production
    • TypeScript: tsc
  2. 执行构建

    npm run build
    
  3. 检查构建产物

    • 验证输出目录是否存在:dist/, build/, .next/
    • 检查日志中的构建错误
  4. 清理(可选):

    # 删除构建产物以节省空间
    rm -rf dist/ build/ .next/
    

成功标准:构建以退出码 0 完成

门禁 5:安全审计

目的:识别依赖项中的已知漏洞

工具:Bash, Read

流程

  1. 运行 npm/pnpm 审计

    npm audit --json || pnpm audit --json
    
  2. 解析审计结果

    • 严重漏洞:0
    • 高危漏洞:0
    • 中危漏洞:< 阈值
    • 低危漏洞:信息性
  3. 检查特定漏洞

    • 原型污染
    • 远程代码执行 (RCE)
    • SQL 注入
    • 跨站脚本 (XSS)
  4. 建议修复

    npm audit fix
    # 或
    npm audit fix --force  # (如果安全)
    

成功标准

  • 零个严重/高危漏洞
  • 中危漏洞已确认或修复

门禁 6:代码复杂度分析(可选)

目的:标记可能需要进行重构的过于复杂的代码

工具:Grep, Bash

流程

  1. 检测代码复杂度工具

    • eslint-plugin-complexity
    • SonarQube
    • CodeClimate
  2. 基本复杂度检查

    # 查找行数过多的文件
    find src -name "*.{ts,tsx,js,jsx}" -exec wc -l {} \; | awk '$1 > 500'
    
    # 查找深度嵌套的代码(>5 层)
    grep -rn "^[[:space:]]\{20,\}" src/
    
    # 统计 TODO/FIXME
    grep -rn "TODO\|FIXME\|HACK" src/ | wc -l
    

成功标准

  • 无文件 > 500 行(仅警告)
  • 无嵌套 > 5 层(仅警告)

门禁 7:Git 提交前检查

目的:确保提交质量并防止敏感数据泄露

工具:Bash, Grep

流程

  1. 检查敏感数据

    # 搜索 API 密钥、密钥、令牌
    git diff --cached | grep -i "api[_-]key\|secret\|password\|token"
    
    # 检查是否提交了 .env 文件
    git diff --cached --name-only | grep "\.env$"
    
  2. 验证提交消息(如果使用约定式提交):

    • 格式:type(scope): description
    • 类型:feat, fix, docs, style, refactor, test, chore
  3. 检查文件大小

    # 标记 > 1MB 的文件
    git diff --cached --name-only | xargs ls -lh | awk '$5 > 1000000'
    

成功标准

  • 差异中无密钥
  • 无 .env 文件
  • 无大文件 (> 1MB)

执行策略

顺序执行(默认)

按顺序运行门禁,在首次失败时停止:

检查 → 类型检查 → 测试 → 构建 → 审计

并行执行(快速模式)

同时运行独立门禁:

[检查 + 类型检查 + 测试] → 构建 → 审计

选择性执行

仅基于变更运行相关门禁:

  • .ts/.tsx 文件变更 → 类型检查
  • 依赖项更新 → 审计
  • 测试文件变更 → 仅测试

输出格式

# 质量门禁结果

## 摘要
✅ 5/7 门禁通过 | ❌ 2/7 门禁失败

## 门禁详情

### ✅ 门禁 1:代码检查
- **状态**:通过
- **耗时**:3.2秒
- **详情**:0 个错误,2 个警告

### ❌ 门禁 2:类型检查
- **状态**:失败
- **耗时**:5.1秒
- **错误**:发现 3 个类型错误
  - `src/components/Button.tsx:15` - 属性 'onClick' 缺失
  - `src/utils/api.ts:42` - 类型 'string' 无法分配给类型 'number'
  - `src/hooks/useAuth.ts:8` - 找不到名称 'User'

### ✅ 门禁 3:测试
- **状态**:通过
- **耗时**:12.4秒
- **测试**:124 个通过,0 个失败,2 个跳过
- **覆盖率**:87%(目标:80%)

### ⏭️ 门禁 4:构建
- **状态**:已跳过(前一门禁失败)

### ⏭️ 门禁 5:安全审计
- **状态**:已跳过(前一门禁失败)

## 需要采取的行动
在继续之前修复门禁 2 中的 3 个类型错误。

## 建议
1. 本地运行 `npm run typecheck` 以查看完整的错误详情
2. 考虑添加提交前钩子以更早地捕获这些错误
3. 当前代码覆盖率(87%)超过目标 - 干得漂亮!

与 Git 钩子集成

设置 Husky + lint-staged(推荐)

检查是否已安装

test -d .husky && echo "Husky 已安装" || echo "未找到 Husky"

如果缺失,建议安装

npm install --save-dev husky lint-staged
npx husky init

配置 .husky/pre-commit

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

# 运行质量门禁
npm run lint
npm run typecheck
npm run test

替代方案:使用手动检查的 git commit -m

如果没有钩子,提示用户:

⚠️  未检测到提交前钩子。
您希望我在提交前运行质量门禁吗?(推荐)

渐进式质量门禁

级别 1:基本(始终运行)

  • 代码检查
  • 类型检查

级别 2:标准(推送前)

  • 基本 +
  • 单元测试
  • 安全审计

级别 3:全面(部署前)

  • 标准 +
  • 集成测试
  • 端到端测试
  • 构建验证
  • 性能测试

错误恢复

自动修复能力

  • 检查错误:运行 eslint --fixbiome check --apply
  • 格式错误:运行 prettier --write
  • 安全漏洞:运行 npm audit fix

需要手动修复

  • 类型错误
  • 测试失败
  • 构建错误

绕过(谨慎使用)

# 仅在紧急修复时跳过钩子
git commit --no-verify -m "紧急:修复关键错误"

最佳实践

  1. 快速失败:在首次关键失败时停止以节省时间
  2. 清晰反馈:始终显示哪个门禁失败及原因
  3. 可操作:提供修复问题的确切命令
  4. 可配置:尊重项目的质量阈值
  5. 性能:尽可能缓存结果
  6. 增量:在适当时仅检查已更改的文件

配置

从 package.json 读取

{
  "qualityGates": {
    "coverage": {
      "minimum": 80,
      "enabled": true
    },
    "audit": {
      "level": "moderate",
      "enabled": true
    },
    "complexity": {
      "maxLines": 500,
      "maxDepth": 5
    }
  }
}

默认设置

如果未找到配置,使用合理的默认值:

  • 最低覆盖率:70%
  • 审计级别:仅高危/严重
  • 最大文件行数:500
  • 最大嵌套层数:5 层

与其他技能的集成

  • codebase-analysis - 用于检测可用的质量工具
  • git-workflow - 与提交/推送流程集成
  • ci-cd-setup - 为 CI 流水线配置门禁

版本历史

  • 1.0.0 (2025-01-03):初始技能,包含 7 个质量门禁和渐进式执行