diff --git a/apps/voko-server/tools/db-is-empty.mjs b/apps/voko-server/tools/db-is-empty.mjs new file mode 100644 index 0000000..e5d27b5 --- /dev/null +++ b/apps/voko-server/tools/db-is-empty.mjs @@ -0,0 +1,13 @@ +#!/usr/bin/env node +/** 输出 voko 库是否为空(无任何表),供本地一键验收决定是否执行 db:init。不会建任何表。 */ +import { createDb } from '@drama/db' + +import { databaseUrlFromArgs } from '../src/db/env-file.js' + +const db = createDb({ url: databaseUrlFromArgs(process.argv.slice(2)), pool: { min: 1, max: 1 } }) +try { + const [rows] = await db.raw('SELECT COUNT(*) AS n FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE()') + console.log(Number(rows[0].n) === 0 ? 'empty' : 'not-empty') +} finally { + await db.destroy() +} diff --git a/tools/scripts/verify-local.sh b/tools/scripts/verify-local.sh index fbd6df1..6f343cc 100755 --- a/tools/scripts/verify-local.sh +++ b/tools/scripts/verify-local.sh @@ -9,8 +9,10 @@ node -e 'if (Number(process.versions.node.split(".")[0]) < 24) { console.error(" pnpm install pnpm mysql:up -if ! pnpm --silent --filter @voko/server db:status >/dev/null 2>&1; then +if [ "$(node apps/voko-server/tools/db-is-empty.mjs)" = "empty" ]; then pnpm --filter @voko/server db:init +else + pnpm --filter @voko/server db:migrate fi pnpm dev:user admin@example.test admin123