gencow 0.1.95 → 0.1.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/gencow.mjs +82 -15
- package/dashboard/assets/{index-D4Ftx-0N.js → index-DgZWQ-Hk.js} +58 -58
- package/dashboard/index.html +1 -1
- package/package.json +2 -2
- package/server/index.js +45294 -15686
- package/server/index.js.map +4 -4
package/bin/gencow.mjs
CHANGED
|
@@ -253,7 +253,7 @@ function buildEnv(config) {
|
|
|
253
253
|
GENCOW_FUNCTIONS: resolve(cwd, config.functionsDir),
|
|
254
254
|
GENCOW_DB_URL: resolve(cwd, config.db.url), // ← 절대 경로로 변환 (서버 CWD와 무관)
|
|
255
255
|
GENCOW_STORAGE: resolve(cwd, config.storage),
|
|
256
|
-
GENCOW_MIGRATIONS: resolve(cwd, "migrations"), // ←
|
|
256
|
+
GENCOW_MIGRATIONS: resolve(cwd, config.functionsDir, "migrations"), // ← gencow/migrations 폴더
|
|
257
257
|
GENCOW_SCHEMA: resolve(cwd, config.schema), // ← drizzle-kit이 올바른 스키마 참조
|
|
258
258
|
};
|
|
259
259
|
}
|
|
@@ -772,7 +772,9 @@ export default crons;
|
|
|
772
772
|
export default defineConfig({
|
|
773
773
|
dialect: "postgresql",
|
|
774
774
|
schema: ["./gencow/schema.ts", "./gencow/auth-schema.ts"],
|
|
775
|
-
out: "./migrations",
|
|
775
|
+
out: "./gencow/migrations",
|
|
776
|
+
// generate는 DB 연결 없이 스키마 파일만 비교하여 SQL 생성.
|
|
777
|
+
// push(로컬 전용)는 DB 연결 필요.
|
|
776
778
|
...(process.env.DATABASE_URL
|
|
777
779
|
? { dbCredentials: { url: process.env.DATABASE_URL } }
|
|
778
780
|
: { driver: "pglite", dbCredentials: { url: "./.gencow/data" } }),
|
|
@@ -1166,7 +1168,7 @@ ${hasPrompt ? `
|
|
|
1166
1168
|
const functionsAbsolute = resolve(cwd, config.functionsDir);
|
|
1167
1169
|
const dbDir = resolve(cwd, config.db.url);
|
|
1168
1170
|
const storageDir = resolve(cwd, config.storage);
|
|
1169
|
-
const migrationsDir = resolve(cwd, "migrations");
|
|
1171
|
+
const migrationsDir = resolve(cwd, config.functionsDir, "migrations");
|
|
1170
1172
|
mkdirSync(functionsAbsolute, { recursive: true });
|
|
1171
1173
|
mkdirSync(dbDir, { recursive: true });
|
|
1172
1174
|
mkdirSync(storageDir, { recursive: true });
|
|
@@ -1236,14 +1238,14 @@ ${hasPrompt ? `
|
|
|
1236
1238
|
execSync("pnpm db:generate", {
|
|
1237
1239
|
cwd: findServerRoot(),
|
|
1238
1240
|
env: genEnv,
|
|
1239
|
-
stdio:
|
|
1241
|
+
stdio: "inherit", // 프롬프트 패스스루 (rename 등)
|
|
1240
1242
|
});
|
|
1241
1243
|
} else {
|
|
1242
1244
|
// Standalone: use npx drizzle-kit directly
|
|
1243
1245
|
execSync("npx drizzle-kit generate", {
|
|
1244
1246
|
cwd: process.cwd(),
|
|
1245
1247
|
env: genEnv,
|
|
1246
|
-
stdio:
|
|
1248
|
+
stdio: "inherit", // 프롬프트 패스스루 (rename 등)
|
|
1247
1249
|
});
|
|
1248
1250
|
}
|
|
1249
1251
|
success("Schema → migrations synced");
|
|
@@ -1413,10 +1415,28 @@ ${hasPrompt ? `
|
|
|
1413
1415
|
process.exit(1);
|
|
1414
1416
|
}
|
|
1415
1417
|
|
|
1418
|
+
// 🆕 로컬 drizzle-kit generate 실행 (프롬프트 패스스루)
|
|
1419
|
+
info("스키마 마이그레이션 생성 중...");
|
|
1420
|
+
try {
|
|
1421
|
+
execSync("npx drizzle-kit generate", {
|
|
1422
|
+
cwd: process.cwd(),
|
|
1423
|
+
stdio: "inherit",
|
|
1424
|
+
});
|
|
1425
|
+
success("마이그레이션 생성 완료");
|
|
1426
|
+
} catch (e) {
|
|
1427
|
+
const msg = e.stderr?.toString() || e.message || "";
|
|
1428
|
+
if (msg.includes("No schema changes") || msg.includes("nothing to migrate")) {
|
|
1429
|
+
info("스키마 변경 없음 — 기존 마이그레이션 사용");
|
|
1430
|
+
} else {
|
|
1431
|
+
warn(`마이그레이션 생성 실패: ${msg.split("\n")[0]}`);
|
|
1432
|
+
info("서버에서 기존 방식으로 스키마 적용을 시도합니다.");
|
|
1433
|
+
}
|
|
1434
|
+
}
|
|
1435
|
+
|
|
1416
1436
|
const tmpBundle = resolve(process.cwd(), ".gencow", "schema-bundle.tar.gz");
|
|
1417
1437
|
mkdirSync(dirname(tmpBundle), { recursive: true });
|
|
1418
1438
|
|
|
1419
|
-
// tar.gz 생성: gencow/ 폴더 전체 (schema.ts + import된 파일들)
|
|
1439
|
+
// tar.gz 생성: gencow/ 폴더 전체 (schema.ts + migrations/ + import된 파일들)
|
|
1420
1440
|
execSync(
|
|
1421
1441
|
`COPYFILE_DISABLE=1 tar -czf "${tmpBundle}" -C "${process.cwd()}" "${functionsDir.replace(/^\.\//,'')}/"`,
|
|
1422
1442
|
{ stdio: ["ignore", "pipe", "pipe"] }
|
|
@@ -1460,9 +1480,16 @@ ${hasPrompt ? `
|
|
|
1460
1480
|
const config = loadConfig();
|
|
1461
1481
|
log(`\n${BOLD}${CYAN}Gencow DB Generate${RESET}\n`);
|
|
1462
1482
|
info("Generating migration files from schema.ts...");
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1483
|
+
if (isMonorepo()) {
|
|
1484
|
+
runInServer("pnpm db:generate", buildEnv(config));
|
|
1485
|
+
} else {
|
|
1486
|
+
// Standalone: npx drizzle-kit generate (프롬프트 패스스루)
|
|
1487
|
+
execSync("npx drizzle-kit generate", {
|
|
1488
|
+
cwd: process.cwd(),
|
|
1489
|
+
stdio: "inherit",
|
|
1490
|
+
});
|
|
1491
|
+
}
|
|
1492
|
+
success("Migration files generated in gencow/migrations/");
|
|
1466
1493
|
},
|
|
1467
1494
|
|
|
1468
1495
|
// ── db:migrate ───────────────────────────────────────
|
|
@@ -2402,6 +2429,28 @@ ${BOLD}Examples:${RESET}
|
|
|
2402
2429
|
}
|
|
2403
2430
|
}
|
|
2404
2431
|
|
|
2432
|
+
// 1-0b. 로컬 drizzle-kit generate 실행 (프롬프트 패스스루)
|
|
2433
|
+
// 서버에서 generate 시 stdin이 없어 rename 프롬프트에 막히던 문제 해결
|
|
2434
|
+
const schemaPath = resolve(backendRoot, "gencow", "schema.ts");
|
|
2435
|
+
if (existsSync(schemaPath)) {
|
|
2436
|
+
info("스키마 마이그레이션 생성 중...");
|
|
2437
|
+
try {
|
|
2438
|
+
execSync("npx drizzle-kit generate", {
|
|
2439
|
+
cwd: backendRoot,
|
|
2440
|
+
stdio: "inherit", // ← 프롬프트 패스스루!
|
|
2441
|
+
});
|
|
2442
|
+
success("마이그레이션 생성 완료");
|
|
2443
|
+
} catch (e) {
|
|
2444
|
+
const msg = e.stderr?.toString() || e.message || "";
|
|
2445
|
+
if (msg.includes("No schema changes") || msg.includes("nothing to migrate")) {
|
|
2446
|
+
info("스키마 변경 없음 — 기존 마이그레이션 사용");
|
|
2447
|
+
} else {
|
|
2448
|
+
warn(`마이그레이션 생성 실패: ${msg.split("\\n")[0]}`);
|
|
2449
|
+
info("서버에서 기존 방식으로 스키마 적용을 시도합니다.");
|
|
2450
|
+
}
|
|
2451
|
+
}
|
|
2452
|
+
}
|
|
2453
|
+
|
|
2405
2454
|
// 1. tar.gz 패키징 (백엔드)
|
|
2406
2455
|
info("백엔드 패키징 중...");
|
|
2407
2456
|
const { execSync: exec } = await import("child_process");
|
|
@@ -3834,18 +3883,27 @@ process.exit(0);
|
|
|
3834
3883
|
log(`${DIM}${ts}${RESET} ${CYAN}[deploy]${RESET} ${reason} 변경 감지 → 배포 중...`);
|
|
3835
3884
|
}
|
|
3836
3885
|
|
|
3837
|
-
// 스키마 변경
|
|
3838
|
-
|
|
3839
|
-
|
|
3886
|
+
// 스키마 변경 또는 초기 배포 시 마이그레이션 생성
|
|
3887
|
+
// initial 배포에서도 migrations/ 포함을 위해 generate 실행
|
|
3888
|
+
const schemaExists = existsSync(resolve(process.cwd(), functionsDir, "schema.ts"));
|
|
3889
|
+
if (schemaExists && (isSchema || reason === "initial")) {
|
|
3890
|
+
if (isSchema) {
|
|
3891
|
+
log(`${DIM}${ts}${RESET} ${YELLOW}[migrate]${RESET} 스키마 변경 감지 → 마이그레이션 생성 중...`);
|
|
3892
|
+
}
|
|
3840
3893
|
try {
|
|
3841
3894
|
const { execSync } = await import("child_process");
|
|
3842
|
-
execSync("npx drizzle-kit generate
|
|
3895
|
+
execSync("npx drizzle-kit generate", {
|
|
3843
3896
|
cwd: process.cwd(),
|
|
3844
|
-
stdio: "
|
|
3897
|
+
stdio: "inherit",
|
|
3845
3898
|
});
|
|
3846
3899
|
log(`${DIM}${ts}${RESET} ${GREEN}[migrate]${RESET} ✔ 마이그레이션 생성 완료`);
|
|
3847
3900
|
} catch (e) {
|
|
3848
|
-
|
|
3901
|
+
const msg = e.stderr?.toString() || e.message || "";
|
|
3902
|
+
if (msg.includes("No schema changes") || msg.includes("nothing to migrate")) {
|
|
3903
|
+
// 스키마 변경 없음 — 정상
|
|
3904
|
+
} else {
|
|
3905
|
+
warn(`[migrate] 마이그레이션 생성 실패 (무시 가능): ${msg.split("\n")[0]}`);
|
|
3906
|
+
}
|
|
3849
3907
|
}
|
|
3850
3908
|
}
|
|
3851
3909
|
|
|
@@ -3889,6 +3947,15 @@ process.exit(0);
|
|
|
3889
3947
|
const errMsg = data.error || "Unknown error";
|
|
3890
3948
|
log(` ${RED}${errMsg}${RESET}`);
|
|
3891
3949
|
|
|
3950
|
+
// 서버 crash 로그 표시
|
|
3951
|
+
if (data.crashLogs && Array.isArray(data.crashLogs) && data.crashLogs.length > 0) {
|
|
3952
|
+
log(`\n ${YELLOW}── Crash Logs ──${RESET}`);
|
|
3953
|
+
for (const line of data.crashLogs) {
|
|
3954
|
+
log(` ${DIM}${line}${RESET}`);
|
|
3955
|
+
}
|
|
3956
|
+
log(``);
|
|
3957
|
+
}
|
|
3958
|
+
|
|
3892
3959
|
// 스키마 관련 에러 힌트
|
|
3893
3960
|
if (errMsg.includes("does not exist") || errMsg.includes("relation")) {
|
|
3894
3961
|
log(` ${YELLOW}💡 스키마가 변경되었나요? schema.ts를 수정하면 자동으로 마이그레이션이 실행됩니다.${RESET}`);
|