fix(tooling): 给 db:reset 增加显式确认,避免误清本地密码
ci / 质量门禁 (push) Canceled after 0s

背景:
- 本轮部门管理联调后执行了 pnpm db:reset 清理测试数据,清空本地库,
  导致用户手工改过的登录密码被重置回 lingxi2026;
- 之前只保证了 ./dev.sh / pnpm dev / pnpm db:init 不会重置数据,
  db:reset 本身仍可被脚本或助手无提示执行,问题没有真正兜住。

改动:
- 新增 scripts/db-reset.mjs:默认拒绝执行并打印影响;只有显式
  ALLOW_DB_RESET=1 才调用 prisma migrate reset --force;
- package.json 的 db:reset 指向该脚本;
- README / AGENTS §6 §11 / e2e README / A1 实施报告同步:
  日常迁移补种子只用 pnpm db:init,验证/联调中禁止 db:reset;
  e2e 会改写 actor 密码,需使用专用账号或独立测试库。

影响面:
- 确需清库时多一步显式确认;迁移、启动、单测、int 测试不受影响。

回滚方式:
- 回滚本提交即恢复 db:reset 直接执行 prisma migrate reset --force。

验证证据:
- pnpm db:reset 无 ALLOW_DB_RESET 时退出码 1,并打印拦截说明;
- pnpm format:check / lint 通过;node --check scripts/db-reset.mjs 通过。
This commit is contained in:
Stev_Wang committed 2026-11-03 15:16:52 +08:00
1 parent 981757b76c
commit 3e384febf3
6 files changed
+53 -6

No files matched your search

+39
View File
@@ -0,0 +1,39 @@
#!/usr/bin/env node
/**
* 清库重建的显式闸门。
*
* `prisma migrate reset --force` 会清空全部表并重新 seed,所有账号密码都会
* 回到初始值;开发/联调中误执行会直接丢掉本地改过的密码与业务数据。
* 因此必须显式设置 ALLOW_DB_RESET=1 才放行,日常初始化请用 `pnpm db:init`。
*/
import { spawnSync } from 'node:child_process';
const allowed = process.env.ALLOW_DB_RESET === '1';
if (!allowed) {
console.error(`
⛔ 已阻止 pnpm db:reset。
该命令会清空本地数据库并重新 seed,所有账号密码都会回到初始密码
(admin / jiang.lan 等种子账号 → lingxi2026,且 must_change_password=true)。
- 日常迁移 + 幂等种子(不改已有密码):pnpm db:init
- 确实需要清库时,显式执行:
ALLOW_DB_RESET=1 pnpm db:reset
`);
process.exit(1);
}
console.warn('⚠️ ALLOW_DB_RESET=1:即将清空数据库并重新 seed,所有账号密码会重置为初始值。');
const command = process.platform === 'win32' ? 'pnpm.cmd' : 'pnpm';
const result = spawnSync(command, ['exec', 'prisma', 'migrate', 'reset', '--force'], {
stdio: 'inherit',
});
if (result.error) {
console.error('执行 prisma migrate reset 失败:', result.error.message);
process.exit(1);
}
process.exit(result.status ?? 1);