GreenPass:软件工程测试治理平台 —— 站在软件工程"测试阶段"的位置,对(AI 生成 / 人写的)被测工程与系统做质量量化、测试管控与可信治理,系统本身由 AI 驱动。
本仓库以 React + Vite + TypeScript + Tailwind + shadcn/ui 提供产品原型;默认仍使用本地 mock,已具备按 OpenAPI 生成类型并接入真实 GreenPass API 的基础能力。
- 通用测试定位:AI 生成的系统能测,人开发的软件系统同样能测 —— 不局限于"只测 AI 产物"。
- AI 驱动实现:平台的用例生成、质量判定、契约分析、篡改检测等能力由 AI 模型提供,每个工程可独立选择所用的 AI 模型。
- 面向中大型技术团队:支持多租户团队切分、团队内人员管理与角色权限矩阵、团队级数据隔离。
- 前端:React 19 + TypeScript
- 构建:Vite
- 样式:Tailwind CSS v4
- UI 组件:shadcn/ui(
@/components/ui/) - 图标:lucide-react
- 路由:react-router-dom(HashRouter,兼容
file://静态打开) - 提示:sonner(
<Toaster/>) - 后端技术栈(规划):Go + Temporal + PostgreSQL(RLS 多租户) + TimescaleDB + Redis + S3 兼容对象存储(SeaweedFS),详见
docs/architecture/TECH-DESIGN.md与docs/engineering/ENGINEERING-SPEC.md
| 分组 | 页面 | 说明 |
|---|---|---|
| 测试闭环 | 被测对象画像 /target |
资产级画像(随侧边栏所选资产联动)、AI 生成过程还原、评分构成、未决风险 |
上游源与生成 /generation |
六类上游源 → 适配器 → 用例种子 → 质量验证 → 入库 | |
测试用例库 /cases |
用例版本化、断言强度、变异分数、上游绑定 | |
测试执行 /exec |
实时进度、证据捕获、不放水不跳过 | |
契约测试 /contracts |
契约注册、变更影响、消费者验证 | |
质量门禁 /gate |
策略即代码、AI 判定、篡改检测、契约门禁(可重新判定,随所选资产联动) | |
| 可信与审计 | 审计日志 /audit |
哈希链、仅追加、可独立验证 |
需求追溯 /trace |
跨服务追溯矩阵 | |
并发与资源 /concurrency |
调度、隔离、资源池、冲突 | |
| 组织与模型 | 团队与权限 /teams |
多租户团队切分、成员管理、角色权限矩阵 |
AI 模型配置 /models |
模型池、每工程模型绑定 |
src/
├── index.tsx # 入口(HashRouter)
├── app.tsx # 路由配置 + <Toaster/>
├── index.css # 全局样式 + 主题变量
├── components/
│ ├── Layout.tsx # 全局布局(侧边栏 + 顶栏 + <Outlet context=selectedAsset>)
│ ├── shared.tsx # KpiCard / PageHeader / PrimaryButton / GhostButton / Card
│ └── ui/ # shadcn/ui 内置组件
├── pages/ # 页面模块(每页一个目录)
│ ├── TargetPage/ GatePage/ GenerationPage/ CasePage/ ...
│ └── ...
└── data/
└── mock.ts # 单一数据源(含 assetToProfile 资产联动画像派生)
docs/
├── README.md # 文档分类、命名与位置规范
├── product/ # 产品需求与业务口径
├── architecture/ # 技术架构与 UI / 交互设计规范
├── engineering/ # 工程、安全、发布规范
├── plans/ # 实施方案与任务清单
├── runbooks/ # 运维、恢复与故障处理手册
├── status/ # 带日期的阶段进度快照
└── services/ # 服务职责、依赖与运行方式
本地测试环境唯一入口是 scripts/dev/init-kind.ps1(或 make kind-init)。未指定集群时:没有 kind 集群就按 deploy/kind/cluster.yaml 创建 open-im-local;只有一个已有集群时直接复用;存在多个时优先选择已部署 GP 的唯一集群,其次选择承载 open-im-local 测试对象的唯一集群;仍无法唯一判断时要求显式传入 -KindCluster,不会另建集群或猜选。脚本校验节点和 ingress-nginx、构建并加载 GP 镜像、部署基础依赖和 GP Kubernetes 清单,并核对 open-im-local 工作负载未发生变化。GP 不依赖 Helm,应用不通过 docker run 或 Compose 启动。
pwsh -NoProfile -File ./scripts/dev/init-kind.ps1
# 默认从 GHCR 拉取开发测试镜像(必须是 X.Y.Z-SNAPSHOT):
pwsh -NoProfile -File ./scripts/dev/init-kind.ps1 -Version 0.1.25-SNAPSHOT
# 开发者需要本地构建时显式指定:
pwsh -NoProfile -File ./scripts/dev/init-kind.ps1 -ImageSource local-build -Version 0.1.25-SNAPSHOT
# 已有同版本本地镜像时:
pwsh -NoProfile -File ./scripts/dev/init-kind.ps1 -ImageSource local-cache -Version 0.1.25-SNAPSHOTnpm install
npm run dev # 开发服务(localhost:5173,URL 形如 #/target)本地环境变量从 .env.example 复制到忽略的 .env;前端仅使用 Vite 允许的公开变量,禁止把密钥写入 VITE_*。
VITE_GP_API_BASE=http://127.0.0.1:8080
VITE_GP_TEAM_ID=100VITE_GP_TEAM_ID 必须是后端已存在的数值型租户 ID。页面会先从 /targets 读取真实对象,再按 OpenAPI 调用创建运行、版本校验、执行、暂停/恢复和结果查询;不会把原型中的对象或场景标识写入后端。
前端联调可以显式启用 MSW,不需要启动 Go 服务:
VITE_GP_MOCK_API=true
VITE_GP_TEAM_ID=100VITE_GP_API_BASE 配置后优先连接真实服务;未配置真实地址且 VITE_GP_MOCK_API=true 时,浏览器 Service Worker 只拦截 api/openapi.yaml 已定义的对象、用例、运行、门禁、成本和报告路径。MSW 不是生产服务,也不会在默认配置下自动启用。
后端默认仅允许 Vite 本地来源 http://127.0.0.1:5173 和 http://localhost:5173 跨域调用;部署到其他域名时,应以 GP_CORS_ALLOWED_ORIGINS 配置明确来源白名单,或由网关/Nginx 以同样的白名单策略代理。
构建 / 生成可独立打开的单文件原型:
npm run build # 产物在 dist/output + dist/output_resource仓库内已内置 dist/GreenPass-standalone.html —— 将 JS/CSS 内联、HashRouter 路由,直接双击即可在浏览器打开(无需启动服务),适合快速预览与分享。
npm run typecheck # tsc -p tsconfig.app.json
npm run lint:eslint # eslint src- 原型阶段不做后端业务,所有交互(重新判定、搜索、成员/模型配置、资产联动)均为前端 mock 反馈。
- 产品需求文档见
docs/product/PRD.md、设计规范docs/architecture/DESIGN-SPEC.md;完整文档分类与位置规则见docs/README.md。 - 开源许可:MIT。
- 贡献指南:CONTRIBUTING.md
- 行为准则:CODE_OF_CONDUCT.md
- 变更记录:CHANGELOG.md
- 安全政策:SECURITY.md
- Issue / PR 模板:.github
GreenPass 原型 · 持续迭代中。