test: harden pocketbase dry run readiness

This commit is contained in:
Codex
2026-06-30 02:23:17 +08:00
parent 7eaf26fa40
commit 52cef9f13d
7 changed files with 223 additions and 15 deletions

View File

@@ -84,7 +84,7 @@ npm run pb:import:dry-run
## 阶段 1静态 Dry-Run
先运行不写数据库的静态报告:
先运行不写数据库的静态报告。默认是 `development` profile适合开发环境快速发现 JSON 形态、关系和敏感字段问题
```bash
npm run pb:import:dry-run
@@ -96,12 +96,22 @@ npm run pb:import:dry-run
npm run pb:import:dry-run -- --json > migration-dry-run-report.json
```
严格模式会把 warning 也作为阻断条件,建议预生产验收和 CI 使用
预生产验收、最终切换和 CI 必须使用 `production` profile并建议同时打开 warning 阻断
```bash
npm run pb:import:dry-run -- --json --fail-on-warnings
npm run pb:import:dry-run -- --profile=production --json --fail-on-warnings
```
也可以用环境变量指定 profile
```powershell
$env:PB_DRY_RUN_PROFILE="production"
npm run pb:import:dry-run -- --json --fail-on-warnings
Remove-Item Env:\PB_DRY_RUN_PROFILE
```
`--profile` 只接受 `development``production`,拼写错误会 fail closed 并返回 blocker避免正式迁移时误用开发模式。
dry-run 会检查:
- 导出目录是否存在。
@@ -112,12 +122,15 @@ dry-run 会检查:
- 敏感字段是否出现在旧导出中。
- 未映射集合是否需要补 mapper。
- 用户、题目、订单、SVIP、激活码、单词、手册、分数线、视频等业务数量。
- `production` profile 会额外检查生产迁移必需集合:`users``questions``subjects``categories``orders``svip_plans``codes``vocabulary_units``vocabulary``handbook_subjects``handbook_chapters``handbook_entries`
- `migrationReadiness.criticalFieldCoverage` 会统计关键字段覆盖率,例如 `users.phone``questions.subjectId/categoryId/content``orders.userId/planId/status``codes.code`、单词和手册的归属字段;生产模式下低于阈值会变成 blocker。
准入标准:
- `blockers = 0`
- 正式切换前建议 `warnings = 0`;如确有历史脏数据,需要记录处理结论、影响范围和接受人。
- `businessCounts` 与旧后台统计口径差异必须能解释。
- 生产切换前 `migrationProfile` 必须是 `production`,且 `migrationReadiness.requiredCollections` 不能有缺失或记录数不足。
## 阶段 2正式导入演练
@@ -217,7 +230,7 @@ npm run dev:api
1. 公告维护窗口。
2. 旧 PocketBase 进入只读或暂停写入。
3. 导出最终 JSON。
4. 执行 strict dry-run。
4. 执行 production strict dry-run。
5. 重置目标生产库或清理目标租户迁移数据。
6. 执行正式导入。
7. 执行 `pb:import:validate` strict 模式。
@@ -240,11 +253,10 @@ npm run dev:api
满足以下条件后,才建议进入生产切换:
- `npm run pb:import:dry-run -- --json --fail-on-warnings` 通过,或全部 warning 有签字确认的处理结论。
- `npm run pb:import:dry-run -- --profile=production --json --fail-on-warnings` 通过,或全部 warning 有签字确认的处理结论。
- `npm run pb:import:validate` 无 FAIL生产切换前 strict 模式无 WARN或 WARN 已确认。
- 核心业务抽样通过,尤其是题目答案解析、会员权益、订单支付、错题收藏、资料视频权限。
- `npm run readiness:production``npm run readiness:production:db` 通过。
- API/Taro 三端核心链路在迁移数据上跑通。
- 对象存储、短信、OAuth、支付、CRM webhook 使用生产 provider 或明确标记为暂不开启。
- 已准备数据库备份、旧系统快照、回滚步骤和负责人。