Files
Stev_Wang 3e384febf3
ci / 质量门禁 (push) Canceled after 0s
fix(tooling): 给 db:reset 增加显式确认,避免误清本地密码
背景:
- 本轮部门管理联调后执行了 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 通过。
2026-11-03 15:16:52 +08:00

40 lines
1.3 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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);