498bb3a3c8
- Move CI/CD configs to config/ci/ directory - Reorganize scripts into categorized directories (deployment, monitoring, testing, utils) - Consolidate documentation into docs/ directory with proper structure - Update linting and testing configurations - Remove obsolete test reports and performance summaries - Add new documentation for code quality tools and contact form security - Improve project organization and maintainability - Fix lint-staged config to only lint JS/TS files - Disable react/react-in-jsx-scope rule for Next.js compatibility - Ignore scripts and test config directories in ESLint
907 lines
17 KiB
Markdown
907 lines
17 KiB
Markdown
# 代码质量工具集成实施计划
|
||
|
||
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
||
|
||
**Goal:** 集成代码质量工具,建立自动化质量门禁,确保代码提交前自动检查
|
||
|
||
**Architecture:** 采用Husky管理Git hooks,lint-staged对暂存文件进行检查,commitlint规范提交信息,Jest生成覆盖率报告
|
||
|
||
**Tech Stack:** Husky 8+, lint-staged 15+, commitlint 19+, Jest 29+, @commitlint/config-conventional
|
||
|
||
---
|
||
|
||
## 前置条件
|
||
|
||
- Node.js 18+ 已安装
|
||
- Git 已配置
|
||
- 项目已克隆到本地
|
||
- package.json 已存在
|
||
|
||
## Task 1: 安装依赖包
|
||
|
||
**Files:**
|
||
- Modify: `package.json`
|
||
|
||
**Step 1: 安装Husky、lint-staged和commitlint**
|
||
|
||
```bash
|
||
npm install --save-dev husky lint-staged @commitlint/cli @commitlint/config-conventional
|
||
```
|
||
|
||
**Step 2: 验证安装**
|
||
|
||
Run: `npm list husky lint-staged @commitlint/cli`
|
||
|
||
Expected: 显示已安装的版本号
|
||
|
||
**Step 3: 提交安装**
|
||
|
||
```bash
|
||
git add package.json package-lock.json
|
||
git commit -m "chore: install husky, lint-staged and commitlint"
|
||
```
|
||
|
||
---
|
||
|
||
## Task 2: 配置Husky
|
||
|
||
**Files:**
|
||
- Create: `.husky/pre-commit`
|
||
- Create: `.husky/commit-msg`
|
||
- Modify: `package.json`
|
||
|
||
**Step 1: 初始化Husky**
|
||
|
||
```bash
|
||
npx husky install
|
||
```
|
||
|
||
**Step 2: 创建pre-commit钩子**
|
||
|
||
创建文件 `.husky/pre-commit`:
|
||
|
||
```bash
|
||
#!/usr/bin/env sh
|
||
. "$(dirname -- "$0")/_/husky.sh"
|
||
|
||
npx lint-staged
|
||
```
|
||
|
||
**Step 3: 创建commit-msg钩子**
|
||
|
||
创建文件 `.husky/commit-msg`:
|
||
|
||
```bash
|
||
#!/usr/bin/env sh
|
||
. "$(dirname -- "$0")/_/husky.sh"
|
||
|
||
npx --no -- commitlint --edit $1
|
||
```
|
||
|
||
**Step 4: 添加prepare脚本到package.json**
|
||
|
||
在package.json的scripts中添加:
|
||
|
||
```json
|
||
"prepare": "husky install"
|
||
```
|
||
|
||
**Step 5: 运行prepare脚本**
|
||
|
||
Run: `npm run prepare`
|
||
|
||
Expected: 创建.husky目录并设置Git hooks
|
||
|
||
**Step 6: 提交配置**
|
||
|
||
```bash
|
||
git add .husky/ package.json
|
||
git commit -m "chore: configure husky git hooks"
|
||
```
|
||
|
||
---
|
||
|
||
## Task 3: 配置lint-staged
|
||
|
||
**Files:**
|
||
- Create: `.lintstagedrc.json`
|
||
- Modify: `package.json`
|
||
|
||
**Step 1: 创建lint-staged配置文件**
|
||
|
||
创建文件 `.lintstagedrc.json`:
|
||
|
||
```json
|
||
{
|
||
"*.{js,jsx,ts,tsx}": [
|
||
"eslint --fix",
|
||
"prettier --write"
|
||
],
|
||
"*.{json,md}": [
|
||
"prettier --write"
|
||
],
|
||
"*.{css,scss}": [
|
||
"stylelint --fix",
|
||
"prettier --write"
|
||
]
|
||
}
|
||
```
|
||
|
||
**Step 2: 添加lint-staged脚本到package.json**
|
||
|
||
在package.json的scripts中添加:
|
||
|
||
```json
|
||
"lint-staged": "lint-staged"
|
||
```
|
||
|
||
**Step 3: 测试lint-staged**
|
||
|
||
Run: `npm run lint-staged`
|
||
|
||
Expected: 对所有暂存文件运行lint和prettier
|
||
|
||
**Step 4: 提交配置**
|
||
|
||
```bash
|
||
git add .lintstagedrc.json package.json
|
||
git commit -m "chore: configure lint-staged"
|
||
```
|
||
|
||
---
|
||
|
||
## Task 4: 配置commitlint
|
||
|
||
**Files:**
|
||
- Create: `commitlint.config.js`
|
||
- Create: `.commitlintrc.json`
|
||
|
||
**Step 1: 创建commitlint配置文件**
|
||
|
||
创建文件 `commitlint.config.js`:
|
||
|
||
```javascript
|
||
module.exports = {
|
||
extends: ['@commitlint/config-conventional'],
|
||
rules: {
|
||
'type-enum': [
|
||
2,
|
||
'always',
|
||
[
|
||
'feat',
|
||
'fix',
|
||
'docs',
|
||
'style',
|
||
'refactor',
|
||
'perf',
|
||
'test',
|
||
'chore',
|
||
'revert',
|
||
'build',
|
||
'ci'
|
||
]
|
||
],
|
||
'subject-case': [0]
|
||
}
|
||
};
|
||
```
|
||
|
||
**Step 2: 创建备用配置文件**
|
||
|
||
创建文件 `.commitlintrc.json`:
|
||
|
||
```json
|
||
{
|
||
"extends": ["@commitlint/config-conventional"],
|
||
"rules": {
|
||
"type-enum": [
|
||
2,
|
||
"always",
|
||
[
|
||
"feat",
|
||
"fix",
|
||
"docs",
|
||
"style",
|
||
"refactor",
|
||
"perf",
|
||
"test",
|
||
"chore",
|
||
"revert",
|
||
"build",
|
||
"ci"
|
||
]
|
||
],
|
||
"subject-case": [0]
|
||
}
|
||
}
|
||
```
|
||
|
||
**Step 3: 测试commitlint**
|
||
|
||
Run: `echo "feat: add new feature" | npx commitlint`
|
||
|
||
Expected: 通过验证
|
||
|
||
Run: `echo "invalid commit message" | npx commitlint`
|
||
|
||
Expected: 失败并显示错误信息
|
||
|
||
**Step 4: 提交配置**
|
||
|
||
```bash
|
||
git add commitlint.config.js .commitlintrc.json
|
||
git commit -m "chore: configure commitlint"
|
||
```
|
||
|
||
---
|
||
|
||
## Task 5: 配置代码覆盖率检查
|
||
|
||
**Files:**
|
||
- Modify: `jest.config.js` 或 `jest.config.ts`
|
||
- Modify: `package.json`
|
||
|
||
**Step 1: 检查现有Jest配置**
|
||
|
||
Run: `cat jest.config.js` 或 `cat jest.config.ts`
|
||
|
||
Expected: 查看现有配置
|
||
|
||
**Step 2: 更新Jest配置添加覆盖率**
|
||
|
||
如果使用jest.config.js:
|
||
|
||
```javascript
|
||
module.exports = {
|
||
// ... 现有配置
|
||
collectCoverage: true,
|
||
collectCoverageFrom: [
|
||
'src/**/*.{js,jsx,ts,tsx}',
|
||
'!src/**/*.d.ts',
|
||
'!src/**/*.stories.{js,jsx,ts,tsx}',
|
||
'!src/**/__tests__/**',
|
||
'!src/**/*.test.{js,jsx,ts,tsx}',
|
||
'!src/**/*.spec.{js,jsx,ts,tsx}'
|
||
],
|
||
coverageThreshold: {
|
||
global: {
|
||
branches: 70,
|
||
functions: 70,
|
||
lines: 70,
|
||
statements: 70
|
||
}
|
||
},
|
||
coverageReporters: ['json', 'lcov', 'text', 'html']
|
||
};
|
||
```
|
||
|
||
如果使用jest.config.ts:
|
||
|
||
```typescript
|
||
import type { Config } from 'jest';
|
||
|
||
const config: Config = {
|
||
// ... 现有配置
|
||
collectCoverage: true,
|
||
collectCoverageFrom: [
|
||
'src/**/*.{js,jsx,ts,tsx}',
|
||
'!src/**/*.d.ts',
|
||
'!src/**/*.stories.{js,jsx,ts,tsx}',
|
||
'!src/**/__tests__/**',
|
||
'!src/**/*.test.{js,jsx,ts,tsx}',
|
||
'!src/**/*.spec.{js,jsx,ts,tsx}'
|
||
],
|
||
coverageThreshold: {
|
||
global: {
|
||
branches: 70,
|
||
functions: 70,
|
||
lines: 70,
|
||
statements: 70
|
||
}
|
||
},
|
||
coverageReporters: ['json', 'lcov', 'text', 'html']
|
||
};
|
||
|
||
export default config;
|
||
```
|
||
|
||
**Step 3: 添加覆盖率脚本到package.json**
|
||
|
||
在package.json的scripts中添加:
|
||
|
||
```json
|
||
"test:coverage": "jest --coverage",
|
||
"test:coverage:watch": "jest --coverage --watch",
|
||
"coverage:report": "open coverage/lcov-report/index.html"
|
||
```
|
||
|
||
**Step 4: 运行覆盖率测试**
|
||
|
||
Run: `npm run test:coverage`
|
||
|
||
Expected: 生成覆盖率报告
|
||
|
||
**Step 5: 提交配置**
|
||
|
||
```bash
|
||
git add jest.config.js package.json
|
||
git commit -m "chore: configure jest coverage"
|
||
```
|
||
|
||
---
|
||
|
||
## Task 6: 集成覆盖率检查到pre-commit
|
||
|
||
**Files:**
|
||
- Modify: `.lintstagedrc.json`
|
||
- Create: `scripts/check-coverage.sh`
|
||
|
||
**Step 1: 创建覆盖率检查脚本**
|
||
|
||
创建文件 `scripts/check-coverage.sh`:
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
|
||
# 运行测试并生成覆盖率
|
||
npm run test:coverage -- --passWithNoTests
|
||
|
||
# 检查覆盖率是否达到阈值
|
||
if [ $? -ne 0 ]; then
|
||
echo "❌ 测试失败,请修复测试后再提交"
|
||
exit 1
|
||
fi
|
||
|
||
echo "✅ 测试通过"
|
||
```
|
||
|
||
**Step 2: 添加执行权限**
|
||
|
||
Run: `chmod +x scripts/check-coverage.sh`
|
||
|
||
**Step 3: 更新lint-staged配置**
|
||
|
||
修改 `.lintstagedrc.json`:
|
||
|
||
```json
|
||
{
|
||
"*.{js,jsx,ts,tsx}": [
|
||
"eslint --fix",
|
||
"prettier --write"
|
||
],
|
||
"*.{json,md}": [
|
||
"prettier --write"
|
||
],
|
||
"*.{css,scss}": [
|
||
"stylelint --fix",
|
||
"prettier --write"
|
||
],
|
||
"package.json": [
|
||
"bash scripts/check-coverage.sh"
|
||
]
|
||
}
|
||
```
|
||
|
||
**Step 4: 测试覆盖率检查**
|
||
|
||
Run: `bash scripts/check-coverage.sh`
|
||
|
||
Expected: 运行测试并检查覆盖率
|
||
|
||
**Step 5: 提交配置**
|
||
|
||
```bash
|
||
git add .lintstagedrc.json scripts/check-coverage.sh
|
||
git commit -m "chore: integrate coverage check to pre-commit"
|
||
```
|
||
|
||
---
|
||
|
||
## Task 7: 创建质量门禁文档
|
||
|
||
**Files:**
|
||
- Create: `docs/development/quality-gates.md`
|
||
|
||
**Step 1: 创建质量门禁文档**
|
||
|
||
创建文件 `docs/development/quality-gates.md`:
|
||
|
||
```markdown
|
||
# 代码质量门禁
|
||
|
||
## 概述
|
||
|
||
项目配置了自动化质量门禁,确保代码提交前通过所有质量检查。
|
||
|
||
## 质量检查
|
||
|
||
### 1. 代码风格检查
|
||
|
||
**工具**: ESLint + Prettier
|
||
|
||
**检查时机**: pre-commit hook
|
||
|
||
**检查内容**:
|
||
- 代码语法错误
|
||
- 代码风格规范
|
||
- 代码格式化
|
||
|
||
**通过标准**: 无错误,无警告
|
||
|
||
### 2. 提交信息规范
|
||
|
||
**工具**: commitlint
|
||
|
||
**检查时机**: commit-msg hook
|
||
|
||
**检查内容**:
|
||
- 提交信息格式
|
||
- 提交类型合法性
|
||
|
||
**通过标准**: 符合Conventional Commits规范
|
||
|
||
**提交类型**:
|
||
- `feat`: 新功能
|
||
- `fix`: 修复bug
|
||
- `docs`: 文档更新
|
||
- `style`: 代码格式调整
|
||
- `refactor`: 重构
|
||
- `perf`: 性能优化
|
||
- `test`: 测试相关
|
||
- `chore`: 构建/工具相关
|
||
- `revert`: 回滚提交
|
||
- `build`: 构建相关
|
||
- `ci`: CI/CD相关
|
||
|
||
**提交信息格式**:
|
||
```
|
||
<type>(<scope>): <subject>
|
||
|
||
<body>
|
||
|
||
<footer>
|
||
```
|
||
|
||
**示例**:
|
||
```
|
||
feat(auth): add JWT authentication
|
||
|
||
Implement JWT-based authentication with:
|
||
- Token generation
|
||
- Token validation
|
||
- Refresh token mechanism
|
||
|
||
Closes #123
|
||
```
|
||
|
||
### 3. 代码覆盖率检查
|
||
|
||
**工具**: Jest
|
||
|
||
**检查时机**: pre-commit hook(修改package.json时)
|
||
|
||
**检查内容**:
|
||
- 单元测试覆盖率
|
||
- 分支覆盖率
|
||
- 函数覆盖率
|
||
- 行覆盖率
|
||
- 语句覆盖率
|
||
|
||
**通过标准**:
|
||
- 分支覆盖率: ≥ 70%
|
||
- 函数覆盖率: ≥ 70%
|
||
- 行覆盖率: ≥ 70%
|
||
- 语句覆盖率: ≥ 70%
|
||
|
||
### 4. 类型检查
|
||
|
||
**工具**: TypeScript
|
||
|
||
**检查时机**: pre-commit hook
|
||
|
||
**检查内容**:
|
||
- 类型错误
|
||
- 类型推断
|
||
|
||
**通过标准**: 无类型错误
|
||
|
||
## 如何绕过质量门禁
|
||
|
||
⚠️ **警告**: 仅在紧急情况下绕过质量门禁
|
||
|
||
### 绕过pre-commit hook
|
||
|
||
```bash
|
||
git commit --no-verify -m "message"
|
||
```
|
||
|
||
### 绕过commit-msg hook
|
||
|
||
```bash
|
||
git commit --no-verify -m "message"
|
||
```
|
||
|
||
### 绕过所有hooks
|
||
|
||
```bash
|
||
git commit --no-verify -m "message"
|
||
```
|
||
|
||
## 故障排查
|
||
|
||
### ESLint错误
|
||
|
||
**问题**: pre-commit hook因ESLint错误失败
|
||
|
||
**解决方案**:
|
||
1. 查看错误详情
|
||
2. 修复代码或配置
|
||
3. 运行 `npm run lint` 检查
|
||
4. 重新提交
|
||
|
||
### Prettier错误
|
||
|
||
**问题**: pre-commit hook因Prettier格式化失败
|
||
|
||
**解决方案**:
|
||
1. 运行 `npm run lint` 自动修复
|
||
2. 手动修复无法自动修复的问题
|
||
3. 重新提交
|
||
|
||
### commitlint错误
|
||
|
||
**问题**: commit-msg hook因提交信息格式错误失败
|
||
|
||
**解决方案**:
|
||
1. 检查提交信息格式
|
||
2. 使用正确的提交类型
|
||
3. 重新提交
|
||
|
||
### 覆盖率不达标
|
||
|
||
**问题**: 覆盖率检查失败
|
||
|
||
**解决方案**:
|
||
1. 查看覆盖率报告
|
||
2. 补充测试用例
|
||
3. 重新提交
|
||
|
||
## 持续改进
|
||
|
||
### 提高覆盖率阈值
|
||
|
||
随着项目发展,逐步提高覆盖率阈值:
|
||
- Phase 1: 70% (当前)
|
||
- Phase 2: 75%
|
||
- Phase 3: 80%
|
||
- Phase 4: 85%
|
||
- Phase 5: 90%
|
||
|
||
### 添加更多质量检查
|
||
|
||
未来可以添加:
|
||
- 复杂度检查
|
||
- 重复代码检查
|
||
- 安全漏洞扫描
|
||
- 依赖漏洞检查
|
||
|
||
## 参考资料
|
||
|
||
- [Conventional Commits](https://www.conventionalcommits.org/)
|
||
- [ESLint文档](https://eslint.org/)
|
||
- [Prettier文档](https://prettier.io/)
|
||
- [Jest文档](https://jestjs.io/)
|
||
- [Husky文档](https://typicode.github.io/husky/)
|
||
- [lint-staged文档](https://github.com/okonet/lint-staged)
|
||
```
|
||
|
||
**Step 2: 提交文档**
|
||
|
||
```bash
|
||
git add docs/development/quality-gates.md
|
||
git commit -m "docs: add quality gates documentation"
|
||
```
|
||
|
||
---
|
||
|
||
## Task 8: 更新项目文档
|
||
|
||
**Files:**
|
||
- Modify: `README.md`
|
||
- Modify: `docs/development/getting-started.md`
|
||
|
||
**Step 1: 更新README.md添加质量门禁说明**
|
||
|
||
在README.md的"开发指南"部分添加:
|
||
|
||
```markdown
|
||
### 代码质量门禁
|
||
|
||
项目配置了自动化质量门禁,确保代码提交前通过所有质量检查:
|
||
|
||
- **ESLint**: 代码风格检查
|
||
- **Prettier**: 代码格式化
|
||
- **commitlint**: 提交信息规范
|
||
- **Jest**: 代码覆盖率检查
|
||
|
||
详细信息请查看 [质量门禁文档](docs/development/quality-gates.md)。
|
||
```
|
||
|
||
**Step 2: 更新快速开始指南**
|
||
|
||
在 `docs/development/getting-started.md` 添加:
|
||
|
||
```markdown
|
||
## 代码质量门禁
|
||
|
||
项目配置了自动化质量门禁,确保代码提交前通过所有质量检查。
|
||
|
||
### 质量检查
|
||
|
||
- **代码风格检查**: ESLint + Prettier
|
||
- **提交信息规范**: commitlint
|
||
- **代码覆盖率检查**: Jest
|
||
|
||
### 提交规范
|
||
|
||
使用Conventional Commits规范:
|
||
|
||
```
|
||
<type>(<scope>): <subject>
|
||
|
||
<body>
|
||
|
||
<footer>
|
||
```
|
||
|
||
**提交类型**:
|
||
- `feat`: 新功能
|
||
- `fix`: 修复bug
|
||
- `docs`: 文档更新
|
||
- `style`: 代码格式调整
|
||
- `refactor`: 重构
|
||
- `perf`: 性能优化
|
||
- `test`: 测试相关
|
||
- `chore`: 构建/工具相关
|
||
|
||
详细信息请查看 [质量门禁文档](quality-gates.md)。
|
||
```
|
||
|
||
**Step 3: 提交文档更新**
|
||
|
||
```bash
|
||
git add README.md docs/development/getting-started.md
|
||
git commit -m "docs: update documentation for quality gates"
|
||
```
|
||
|
||
---
|
||
|
||
## Task 9: 验证质量门禁
|
||
|
||
**Files:**
|
||
- Test: 创建测试文件验证所有hooks
|
||
|
||
**Step 1: 测试pre-commit hook**
|
||
|
||
创建测试文件:
|
||
|
||
```bash
|
||
echo "console.log('test');" > test-precommit.js
|
||
git add test-precommit.js
|
||
git commit -m "test: pre-commit hook"
|
||
```
|
||
|
||
Expected: pre-commit hook运行lint-staged,格式化代码
|
||
|
||
**Step 2: 测试commit-msg hook**
|
||
|
||
```bash
|
||
git commit --amend -m "invalid commit message"
|
||
```
|
||
|
||
Expected: commit-msg hook拒绝提交
|
||
|
||
```bash
|
||
git commit --amend -m "test: verify commit-msg hook"
|
||
```
|
||
|
||
Expected: commit-msg hook通过
|
||
|
||
**Step 3: 测试覆盖率检查**
|
||
|
||
修改package.json触发覆盖率检查:
|
||
|
||
```bash
|
||
echo "// modified" >> package.json
|
||
git add package.json
|
||
git commit -m "test: coverage check"
|
||
```
|
||
|
||
Expected: 运行测试并检查覆盖率
|
||
|
||
**Step 4: 清理测试文件**
|
||
|
||
```bash
|
||
rm test-precommit.js
|
||
git add -A
|
||
git commit -m "chore: remove test files"
|
||
```
|
||
|
||
**Step 5: 提交验证结果**
|
||
|
||
```bash
|
||
git log --oneline -5
|
||
```
|
||
|
||
Expected: 显示所有提交都通过了质量门禁
|
||
|
||
---
|
||
|
||
## Task 10: 创建CI/CD集成文档
|
||
|
||
**Files:**
|
||
- Create: `docs/deployment/quality-gates-ci.md`
|
||
|
||
**Step 1: 创建CI/CD集成文档**
|
||
|
||
创建文件 `docs/deployment/quality-gates-ci.md`:
|
||
|
||
```markdown
|
||
# CI/CD中的质量门禁
|
||
|
||
## 概述
|
||
|
||
质量门禁不仅在本地的Git hooks中运行,也在CI/CD流水线中执行,确保所有合并到主分支的代码都符合质量标准。
|
||
|
||
## Woodpecker CI配置
|
||
|
||
### 质量检查步骤
|
||
|
||
在 `.woodpecker.yml` 中添加质量检查步骤:
|
||
|
||
```yaml
|
||
pipeline:
|
||
quality-check:
|
||
image: node:18-alpine
|
||
environment:
|
||
NODE_ENV: test
|
||
commands:
|
||
- npm ci
|
||
- npm run lint
|
||
- npm run type-check
|
||
- npm run test:coverage
|
||
when:
|
||
event:
|
||
- push
|
||
- pull_request
|
||
|
||
coverage-report:
|
||
image: node:18-alpine
|
||
environment:
|
||
NODE_ENV: test
|
||
commands:
|
||
- npm ci
|
||
- npm run test:coverage
|
||
# 上传覆盖率报告到Codecov或其他服务
|
||
secrets: [codecov_token]
|
||
when:
|
||
event:
|
||
- pull_request
|
||
```
|
||
|
||
### 质量门禁规则
|
||
|
||
CI/CD中的质量门禁规则:
|
||
|
||
1. **代码检查**: ESLint必须通过,无错误
|
||
2. **类型检查**: TypeScript编译必须成功
|
||
3. **测试通过**: 所有测试必须通过
|
||
4. **覆盖率达标**: 代码覆盖率必须≥70%
|
||
|
||
### 失败处理
|
||
|
||
如果质量检查失败:
|
||
|
||
1. CI/CD流水线失败
|
||
2. 阻止合并到主分支
|
||
3. 发送通知给开发者
|
||
4. 显示详细的错误信息
|
||
|
||
## 本地开发 vs CI/CD
|
||
|
||
### 本地开发
|
||
|
||
- **优点**: 快速反馈,立即发现问题
|
||
- **缺点**: 可能被绕过(--no-verify)
|
||
|
||
### CI/CD
|
||
|
||
- **优点**: 强制执行,无法绕过
|
||
- **缺点**: 反馈延迟,需要等待CI运行
|
||
|
||
### 最佳实践
|
||
|
||
1. **本地优先**: 在本地运行质量检查,确保通过后再推送
|
||
2. **CI兜底**: CI/CD作为最后一道防线,确保质量
|
||
3. **快速反馈**: CI/CD配置为快速失败,尽早发现问题
|
||
|
||
## 持续改进
|
||
|
||
### 监控质量指标
|
||
|
||
定期监控以下指标:
|
||
|
||
- 代码覆盖率趋势
|
||
- ESLint错误数量
|
||
- TypeScript错误数量
|
||
- 测试失败率
|
||
- CI/CD通过率
|
||
|
||
### 优化质量门禁
|
||
|
||
根据监控数据优化质量门禁:
|
||
|
||
1. 调整覆盖率阈值
|
||
2. 添加新的质量检查
|
||
3. 优化检查性能
|
||
4. 改进错误提示
|
||
|
||
## 参考资料
|
||
|
||
- [Woodpecker CI文档](https://woodpecker-ci.org/)
|
||
- [Codecov文档](https://docs.codecov.com/)
|
||
- [GitHub Actions文档](https://docs.github.com/en/actions)
|
||
```
|
||
|
||
**Step 2: 提交文档**
|
||
|
||
```bash
|
||
git add docs/deployment/quality-gates-ci.md
|
||
git commit -m "docs: add CI/CD quality gates documentation"
|
||
```
|
||
|
||
---
|
||
|
||
## 验收标准
|
||
|
||
### 功能完整性
|
||
- ✅ Husky Git hooks正常工作
|
||
- ✅ lint-staged对暂存文件进行检查
|
||
- ✅ commitlint验证提交信息
|
||
- ✅ Jest生成覆盖率报告
|
||
- ✅ 覆盖率检查集成到pre-commit
|
||
|
||
### 代码质量
|
||
- ✅ 所有质量检查通过
|
||
- ✅ 覆盖率达到70%以上
|
||
- ✅ 提交信息符合规范
|
||
- ✅ 代码风格一致
|
||
|
||
### 文档完整性
|
||
- ✅ 质量门禁文档完整
|
||
- ✅ CI/CD集成文档完整
|
||
- ✅ 使用指南清晰
|
||
- ✅ 故障排查指南完整
|
||
|
||
### 可维护性
|
||
- ✅ 配置文件清晰易懂
|
||
- ✅ 脚本可维护
|
||
- ✅ 文档更新及时
|
||
- ✅ 团队培训完成
|
||
|
||
## 后续优化
|
||
|
||
1. **提高覆盖率阈值**: 逐步提高到80%、85%、90%
|
||
2. **添加更多检查**: 复杂度检查、重复代码检查、安全扫描
|
||
3. **集成更多工具**: SonarQube、CodeClimate等
|
||
4. **自动化更多流程**: 自动生成CHANGELOG、自动发布等
|
||
5. **性能优化**: 优化质量检查性能,减少等待时间
|
||
|
||
## 参考资料
|
||
|
||
- [Husky文档](https://typicode.github.io/husky/)
|
||
- [lint-staged文档](https://github.com/okonet/lint-staged)
|
||
- [commitlint文档](https://commitlint.js.org/)
|
||
- [Jest文档](https://jestjs.io/)
|
||
- [Conventional Commits](https://www.conventionalcommits.org/)
|