背景: - 本轮部门管理联调后执行了 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:
1 parent
981757b76c
commit
3e384febf3
6 files changed
+53
-6
No files matched your search
@@ -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);
|
||||
Reference in new issue
Block a user