代码质量检查与CI验证技能Skill ci-validator

这个技能用于自动化执行代码质量检查和CI/CD验证,确保项目代码符合标准,提高开发效率。关键词:CI/CD, 代码质量, 测试, 自动化检查, 开发流程, 质量保障, 工具链集成。

CI/CD 0 次安装 0 次浏览 更新于 3/11/2026

name: ci-validator description: CI检查验证和质量保障

我是CI检查验证和质量保障技能,专门确保xiaozhi-client项目的代码质量符合标准,同时遵循务实开发理念。

技能使用原则

  • 保证质量,但避免过度工程化:维持代码质量,但不追求理论上的完美
  • 实用功能优先,理论完美次之:解决实际问题比预防各种可能更重要
  • 简单解决方案优于复杂方案:优先选择直接有效的解决方案
  • 务实开发指导:检查代码是否符合“如无必要勿增实体”的原则

技能能力

1. 完整代码质量检查流程

核心能力:自动执行项目要求的所有代码质量检查,确保代码符合CI标准。

检查流程

# 1. 执行完整检查(xiaozhi-client项目)
pnpm check:all

# 2. 运行测试套件
pnpm test

# 3. (可选)生成覆盖率报告
pnpm test:coverage

检查内容详解

  • pnpm check:all 包含:

    • pnpm lint - Biome代码规范和格式检查
    • pnpm check:type - TypeScript严格类型检查
    • pnpm check:spell - 拼写检查
    • pnpm check:cpd - 重复代码检查
  • pnpm test 包含:

    • Vitest单元测试执行
    • 集成测试验证
    • 功能测试覆盖

2. 智能问题诊断与修复建议

当检查失败时,自动分析失败原因并提供针对性修复建议。

类型检查失败诊断

// 常见问题1:any类型使用
// ❌ 错误示例
function processData(data: any): any {
  return data.value;
}

// ✅ 修复建议
function processData<T extends Record<string, unknown>>(data: T): T[keyof T] {
  return data.value as T[keyof T];
}

// 常见问题2:类型定义缺失
// ❌ 错误示例
const config = {
  apiEndpoint: "https://api.home-assistant.local",
  timeout: 5000,
};

// ✅ 修复建议
interface Config {
  apiEndpoint: string;
  timeout: number;
}

const config: Config = {
  apiEndpoint: "https://api.home-assistant.local",
  timeout: 5000,
};

代码规范失败诊断

# 常见问题及修复命令

# 问题:Biome检查失败
# 解决方案:运行自动修复
pnpm lint

# 问题:导入路径不规范
# 解决方案:使用路径别名系统
import { UnifiedMCPServer } from "@core/unified-server"; // ✅
import { StartCommand } from "@cli/commands/start";       // ✅
import { UnifiedMCPServer } from "./core/unified-server"; // ❌

# 问题:未使用的导入
# 解决方案:移除未使用的导入
pnpm lint  # 会自动清理

拼写检查失败诊断

# 常见问题:技术术语被标记为拼写错误
# 解决方案1:确认确实是错误,修正拼写
# 解决方案2:如果是专业术语,添加到项目词典
echo "homeassistant" >> .cspell.json

# 解决方案3:忽略特定文件或目录
# 在.cspell.json中配置ignorePaths

测试失败诊断

// 常见问题1:测试覆盖率不足
// 解决方案:补充测试用例,覆盖未测试的代码路径

// 常见问题2:异步测试处理不当
// ❌ 错误示例
test("should fetch data", () => {
  const result = await fetchData();
  expect(result).toBeDefined();
});

// ✅ 修复建议
test("should fetch data", async () => {
  const result = await fetchData();
  expect(result).toBeDefined();
});

// 常见问题3:Mock设置不完整
// ❌ 错误示例
vi.mock("@/services/light-service");

// ✅ 修复建议
vi.mock("@/services/light-service", () => ({
  LightService: {
    turnOn: vi.fn(),
    turnOff: vi.fn(),
  },
}));

3. CI/CD流水线标准验证

确保代码符合项目的CI/CD要求,避免流水线失败。

CI检查清单

# GitHub Actions CI流程检查项
- ✅ 类型检查通过 (pnpm check:type)
- ✅ 代码规范检查通过 (pnpm lint)
- ✅ 拼写检查通过 (pnpm check:spell)
- ✅ 构建成功 (pnpm build)
- ✅ 测试通过 (pnpm test:coverage)
- ✅ 覆盖率达到要求

覆盖率要求验证

# 检查当前覆盖率
pnpm test:coverage

# 覆盖率要求(基于vitest.config.ts)
- 函数覆盖率: 80%
- 行覆盖率: 80%
- 语句覆盖率: 80%
- 分支覆盖率: 70%

4. 预提交检查自动化

在代码提交前自动执行所有必要的检查,确保只提交高质量的代码。

Git Hooks集成

# 安装husky(如果未安装)
pnpm add -D husky

# 设置pre-commit hook
npx husky add .husky/pre-commit "pnpm check:all && pnpm test"

# 设置pre-push hook
npx husky add .husky/pre-push "pnpm test:coverage"

手动预提交检查

# 完整预提交检查流程
function preCommitCheck() {
  echo "🔍 执行预提交检查..."

  # 1. 代码规范检查和修复(包括格式化)
  pnpm lint

  # 2. 类型检查
  pnpm check:type

  # 3. 拼写检查
  pnpm check:spell

  # 4. 运行测试
  pnpm test

  # 5. 生成覆盖率报告
  pnpm test:coverage

  echo "✅ 预提交检查完成"
}

检查规则详解

1. 强制检查时机

# 必须执行检查的时机
- ✅ 每次代码修改后
- ✅ 提交代码前 (git commit)
- ✅ 创建PR前
- ✅ 合并到main分支前
- ✅ 发布版本前

2. 检查失败处理流程

interface CheckFailure {
  type: 'type_error' | 'lint_error' | 'spell_error' | 'test_failure';
  severity: 'error' | 'warning';
  file: string;
  line?: number;
  message: string;
  fixCommand?: string;
  autoFixable: boolean;
}

function handleCheckFailure(failure: CheckFailure): void {
  switch (failure.type) {
    case 'type_error':
      console.log(`🔧 类型错误: ${failure.message}`);
      if (failure.autoFixable) {
        console.log(`💡 建议修复: ${failure.fixCommand}`);
      }
      break;

    case 'lint_error':
      console.log(`📝 代码规范错误: ${failure.message}`);
      console.log(`💡 自动修复: pnpm lint`);
      break;

    case 'spell_error':
      console.log(`📖 拼写错误: ${failure.message}`);
      console.log(`💡 检查拼写: pnpm check:spell`);
      break;

    case 'test_failure':
      console.log(`🧪 测试失败: ${failure.message}`);
      console.log(`💡 修复测试: /fix-test ${failure.file}`);
      break;
  }
}

3. 质量门禁标准

interface QualityGates {
  typeCheck: {
    anyTypesAllowed: 0;          // 0容忍度
    strictMode: true;            // 必须启用严格模式
    implicitAny: false;          // 禁止隐式any
  };

  lintCheck: {
    errorsAllowed: 0;            // 0错误容忍度
    warningsAllowed: 5;          // 最多5个警告
    autoFixRate: 0.95;           // 95%自动修复率
  };

  spellCheck: {
    spellingErrors: 0;           // 0拼写错误容忍度
    technicalTerms: 'verified';  // 技术术语必须验证
  };

  testCoverage: {
    functions: 80;               // 函数覆盖率80%
    lines: 80;                   // 行覆盖率80%
    statements: 80;              // 语句覆盖率80%
    branches: 70;                // 分支覆盖率70%
  };
}

自动化修复

1. 一键修复命令

# 修复所有可自动修复的问题
pnpm lint

# 如果仍有问题,运行详细诊断
pnpm check:all  # 查看具体错误
pnpm check:type  # 查看类型错误详情
pnpm check:spell  # 查看拼写错误详情

2. 智能修复脚本

#!/bin/bash
# auto-fix.sh - 智能修复脚本

echo "🚀 开始自动修复..."

# 1. 代码规范检查和自动修复(包括格式化)
echo "🔧 修复代码规范问题..."
pnpm lint

# 2. 类型检查(仅诊断,不自动修复)
echo "🔍 检查类型问题..."
TYPE_ERRORS=$(pnpm check:type 2>&1 | grep -c "error" || echo "0")
if [ "$TYPE_ERRORS" -gt 0 ]; then
  echo "❌ 发现 $TYPE_ERRORS 个类型错误,需要手动修复"
  pnpm check:type
  exit 1
fi

# 4. 拼写检查
echo "📖 检查拼写..."
SPELL_ERRORS=$(pnpm check:spell 2>&1 | grep -c "error" || echo "0")
if [ "$SPELL_ERRORS" -gt 0 ]; then
  echo "❌ 发现 $SPELL_ERRORS 个拼写错误,请检查"
  pnpm check:spell
  exit 1
fi

# 5. 运行测试
echo "🧪 运行测试..."
pnpm test

echo "✅ 自动修复完成!"

3. 渐进式修复策略

interface FixStrategy {
  priority: 'high' | 'medium' | 'low';
  autoFix: boolean;
  description: string;
}

const fixStrategies: FixStrategy[] = [
  {
    priority: 'high',
    autoFix: true,
    description: '代码格式和规范问题(使用pnpm lint)'
  },
  {
    priority: 'high',
    autoFix: false,
    description: 'TypeScript严重类型错误'
  },
  {
    priority: 'medium',
    autoFix: false,
    description: '测试用例修复(使用/fix-test)'
  },
  {
    priority: 'low',
    autoFix: true,
    description: '拼写错误(添加到词典或修正)'
  }
];

质量报告

1. 检查结果报告

interface QualityReport {
  timestamp: string;
  checkType: {
    passed: boolean;
    errors: number;
    warnings: number;
    issues: TypeIssue[];
  };
  lintCheck: {
    passed: boolean;
    errors: number;
    warnings: number;
    fixed: number;
  };
  spellCheck: {
    passed: boolean;
    errors: number;
    words: string[];
  };
  testCoverage: {
    passed: boolean;
    coverage: CoverageReport;
    failingTests: TestFailure[];
  };
  overall: {
    passed: boolean;
    score: number; // 0-100
    recommendations: string[];
  };
}

2. 质量趋势分析

# 生成质量报告
function generateQualityReport() {
  echo "📊 生成代码质量报告..."

  # 运行所有检查
  pnpm check:all > check-results.txt 2>&1
  pnpm test:coverage > coverage-results.txt 2>&1

  # 分析结果
  echo "📈 质量趋势分析:"
  echo "- 类型错误: $(grep -c "error" check-results.txt || echo "0")"
  echo "- 代码规范问题: $(grep -c "error" check-results.txt || echo "0")"
  echo "- 测试覆盖率: $(tail -10 coverage-results.txt | grep -o "[0-9]*%" | head -1)"

  # 生成改进建议
  echo "💡 改进建议:"
  echo "- 定期运行pnpm check:all进行预防性检查"
  echo "- 在提交前确保所有检查通过"
  echo "- 保持测试覆盖率在要求水平以上"
}

集成方式

1. CLI集成

# 使用技能验证代码质量
skill: ci-validator

# 手动执行完整检查
pnpm check:all && pnpm test

# 快速检查(仅核心检查)
pnpm lint && pnpm test

2. IDE集成建议

// .vscode/settings.json
{
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "quickfix.biome": "explicit",
    "source.organizeImports": "explicit"
  },
  "typescript.preferences.preferTypeOnlyAutoImports": true,
  "cSpell.enableFiletypes": ["typescript", "javascript", "markdown", "yaml"]
}

3. Git工作流集成

# 创建Git别名简化检查
git config --global alias.precheck '!pnpm check:all && pnpm test'
git config --global alias.quality '!pnpm check:all && pnpm test:coverage'

# 使用别名
git precheck    # 快速检查
git quality     # 完整质量检查

最佳实践

1. 预防性检查

  • 每次保存文件时:启用IDE自动格式化
  • 每完成一个功能:运行pnpm check:all
  • 每天结束开发前:运行完整质量检查

2. 渐进式改进

  • 优先修复高优先级问题
  • 保持代码始终可编译
  • 定期更新质量标准

3. 团队协作

  • 统一开发环境配置
  • 建立代码审查检查清单
  • 分享质量改进经验

4. 持续监控

  • 设置质量指标监控
  • 定期生成质量报告
  • 追踪质量趋势变化

通过这个技能,可以确保xiaozhi-client项目始终保持高质量的代码标准,减少CI/CD流水线失败,提升开发效率和代码质量。特别适配项目的MCP协议特性和复杂路径别名系统。