我构建了 QualityHub:AI 驱动的质量智能,为你的发布
I’m ready to translate the article for you, but I need the text you’d like translated. Could you please provide the content (or paste the article) you want converted to Simplified Chinese? Once I have it, I’ll keep the source link unchanged and translate the rest while preserving all formatting and technical terms.
🎯 The Problem
作为 Renault 的开发者,我每天都会面对这个问题:
“我们可以把这个版本发布到生产环境吗?”
我们拥有测试结果、覆盖率指标、SonarQube 报告……但 没有唯一的真相来源 能够回答这个简单的问题。
于是我创建了 QualityHub —— 一个由 AI 驱动的平台,能够分析你的质量指标并即时给出是否发布的决定。
🚀 什么是 QualityHub?
QualityHub 是一个 开源质量情报平台,它:
- 📊 聚合 来自任何框架(Jest、JUnit、JaCoCo…)的测试结果
- 🤖 使用 AI 分析 质量指标
- ✅ 决定 是否可以发布到生产环境
- 📈 在美观的仪表盘中 跟踪 随时间变化的趋势
技术栈
| 组件 | 技术 |
|---|---|
| 后端 | TypeScript, Express, PostgreSQL, Redis |
| 前端 | Next.js 14, Tailwind CSS |
| CLI | TypeScript with parsers for Jest, JaCoCo, JUnit |
| 部署 | Docker Compose (self‑hostable) |
| 许可证 | MIT |
💡 工作原理
1. 通用格式 – qa-result.json
而不是强制使用特定工具,QualityHub 采用 开放标准格式:
{
"version": "1.0.0",
"project": {
"name": "my-app",
"version": "2.3.1",
"commit": "a3f4d2c",
"branch": "main",
"timestamp": "2026-01-31T14:30:00Z"
},
"quality": {
"tests": {
"total": 1247,
"passed": 1245,
"failed": 2,
"skipped": 0,
"duration_ms": 45230,
"flaky_tests": ["UserAuthTest.testTimeout"]
},
"coverage": {
"lines": 87.3,
"branches": 82.1,
"functions": 91.2
}
}
}
此格式适用于 任何 测试框架。
2. CLI 解析器
CLI 会自动转换你的测试结果:
# Jest (JavaScript/TypeScript)
qualityhub parse jest ./coverage
# JaCoCo (Java)
qualityhub parse jacoco ./target/site/jacoco/jacoco.xml
# JUnit (Java/Kotlin/Python)
qualityhub parse junit ./build/test-results/test
3. 风险分析引擎
后端会分析你的结果并计算 风险评分(0‑100)。
风险因素分析
- 测试通过率
- 代码覆盖率(行、分支、函数)
- 不稳定测试
- 覆盖率趋势
- 代码质量指标(如果可用)
示例输出
{
"risk_score": 85,
"status": "SAFE",
"decision": "PROCEED",
"reasoning": "Test pass rate: 99.8%. Coverage: 87.3%. No critical issues.",
"recommendations": []
}
4. 精美仪表盘

随时间跟踪指标,查看趋势,做出明智决策。
🔧 快速开始
自托管(5 分钟)
# Clone repo
git clone https://github.com/ybentlili/qualityhub.git
cd qualityhub
# Start everything with Docker
docker-compose up -d
# ✅ Backend: http://localhost:8080
# ✅ Frontend: http://localhost:3000
使用 CLI
# Install
npm install -g qualityhub-cli
# Initialize
qualityhub init
# Parse your test results
qualityhub parse jest ./coverage
# Push to QualityHub
qualityhub push qa-result.json
完成! 您的指标会立即显示在仪表板中。
🎨 我为什么构建它
痛点
- 工具碎片化 – Jest 用于测试,JaCoCo 用于覆盖率,SonarQube 用于质量……每个都有自己的 UI 和格式。
- 没有统一答案 – “我们可以发布吗?”需要检查多个工具并凭直觉做决定。
- 缺乏历史记录 – 难以跟踪质量随时间的趋势。
- 手动流程 – 没有自动化,缺乏 CI/CD 集成。
解决方案
QualityHub 将所有内容聚合到一个仪表盘,并使用 AI 为您做出决策。
🏗️ 架构
┌─────────────┐
│ CLI │ ← Parse test results
└──────┬──────┘
│ POST /api/v1/results
↓
┌─────────────────────────────┐
│ Backend (API) │
│ • Express + TypeScript │
│ • PostgreSQL + Redis │
│ • Risk Analysis Engine │
└──────────────┬──────────────┘
│
↓
┌─────────────────────────────┐
│ Frontend (Dashboard) │
│ • Next.js 14 │
│ • Real‑time metrics │
└─────────────────────────────┘
📊 技术深度解析
1. 解析器架构
每个解析器都继承自基类:
export abstract class BaseParser {
abstract parse(filePath: string): Promise;
protected buildBaseResult(adapterName: string) {
return {
version: '1.0.0',
project: {
name: this.projectInfo.name,
commit: process.env.GIT_COMMIT || 'unknown',
// 自动检测 CI/CD 环境
timestamp: new Date().toISOString(),
},
metadata: {
ci_provider: this.detectCIProvider(),
adapters: [adapterName],
},
};
}
}
这使得 添加新解析器变得轻而易举。想要支持 pytest?继承 BaseParser 并实现 parse() 即可。
2. 风险评分算法(MVP)
当前版本使用 基于规则的评分:
let score = 100;
// 测试失败
if (tests.failed > 0) {
score -= tests.failed * 5;
}
// 覆盖率阈值
if (coverage.lines 0) {
score -= flakyTests.length * 3;
}
// 确保在 0‑100 范围内
score = Math.max(0, Math.min(100, score));
未来:用能够从历史发布中学习的 AI 模型替代当前实现。
3. red analysis(Claude API)用于上下文洞察
4. 数据库模式
简洁且高效:
CREATE TABLE projects (
id UUID PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE qa_results (
id UUID PRIMARY KEY,
project_id UUID REFERENCES projects(id),
version VARCHAR(50),
commit VARCHAR(255),
branch VARCHAR(255),
timestamp TIMESTAMP,
metrics JSONB, -- 灵活的 JSON 存储
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE risk_analyses (
id UUID PRIMARY KEY,
qa_result_id UUID REFERENCES qa_results(id),
risk_score INTEGER,
status VARCHAR(50),
reasoning TEXT,
risks JSONB,
recommendations JSONB,
decision VARCHAR(50)
);
JSONB 允许在不进行模式迁移的情况下灵活存储度量数据。
🚀 接下来是什么?
v1.1(计划中)
- 🤖 AI‑驱动分析 使用 Claude API
- 📊 趋势检测(覆盖率随时间下降)
- 🔔 Slack/Email 通知
- 🔌 GitHub 应用(在 PR 上发表评论)
v1.2(未来)
- 📈 高级分析(基准、预测)
- 🔐 企业级 SSO 与 RBAC
- 🌍 多语言支持
- 🎨 自定义仪表盘
💡 教训
-
开放标准获胜
将qa-result.json设为 开放标准 是关键。现在任何人都可以构建解析器或集成。 -
开发者体验很重要
CLI 必须极其简单:qualityhub parse jest ./coverage # Just works没有配置文件,没有设置——直接可用。
-
自托管是一项功能
许多公司 无法 将其指标发送到外部 SaaS。Docker Compose 让自托管变得轻而易举。
🤝 贡献
QualityHub 是 100 % 开源(MIT 许可证)。
想要贡献吗?
- 🧪 添加解析器(pytest、XCTest、Rust…)
- 🎨 改进仪表盘
- 🐛 修复错误
- 📚 编写文档
🔗 链接
- GitHub:
- CLI:
- npm:
🎯 立即尝试
# Self‑host in 5 minutes
git clone https://github.com/ybentlili/qualityhub.git
cd qualityhub
docker-compose up -d
# Or just the CLI
npm install -g qualityhub-cli
qualityhub parse jest ./coverage
💬 您怎么看?
您会使用它吗?您希望看到哪些功能?
如果您觉得有用,请在 GitHub 上点个 ⭐!
使用 ❤️ 用 TypeScript 构建