gencow 0.1.95 → 0.1.96
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 +72 -12
- 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"] }
|
|
@@ -2402,6 +2422,28 @@ ${BOLD}Examples:${RESET}
|
|
|
2402
2422
|
}
|
|
2403
2423
|
}
|
|
2404
2424
|
|
|
2425
|
+
// 1-0b. 로컬 drizzle-kit generate 실행 (프롬프트 패스스루)
|
|
2426
|
+
// 서버에서 generate 시 stdin이 없어 rename 프롬프트에 막히던 문제 해결
|
|
2427
|
+
const schemaPath = resolve(backendRoot, "gencow", "schema.ts");
|
|
2428
|
+
if (existsSync(schemaPath)) {
|
|
2429
|
+
info("스키마 마이그레이션 생성 중...");
|
|
2430
|
+
try {
|
|
2431
|
+
execSync("npx drizzle-kit generate", {
|
|
2432
|
+
cwd: backendRoot,
|
|
2433
|
+
stdio: "inherit", // ← 프롬프트 패스스루!
|
|
2434
|
+
});
|
|
2435
|
+
success("마이그레이션 생성 완료");
|
|
2436
|
+
} catch (e) {
|
|
2437
|
+
const msg = e.stderr?.toString() || e.message || "";
|
|
2438
|
+
if (msg.includes("No schema changes") || msg.includes("nothing to migrate")) {
|
|
2439
|
+
info("스키마 변경 없음 — 기존 마이그레이션 사용");
|
|
2440
|
+
} else {
|
|
2441
|
+
warn(`마이그레이션 생성 실패: ${msg.split("\\n")[0]}`);
|
|
2442
|
+
info("서버에서 기존 방식으로 스키마 적용을 시도합니다.");
|
|
2443
|
+
}
|
|
2444
|
+
}
|
|
2445
|
+
}
|
|
2446
|
+
|
|
2405
2447
|
// 1. tar.gz 패키징 (백엔드)
|
|
2406
2448
|
info("백엔드 패키징 중...");
|
|
2407
2449
|
const { execSync: exec } = await import("child_process");
|
|
@@ -3834,18 +3876,27 @@ process.exit(0);
|
|
|
3834
3876
|
log(`${DIM}${ts}${RESET} ${CYAN}[deploy]${RESET} ${reason} 변경 감지 → 배포 중...`);
|
|
3835
3877
|
}
|
|
3836
3878
|
|
|
3837
|
-
// 스키마 변경
|
|
3838
|
-
|
|
3839
|
-
|
|
3879
|
+
// 스키마 변경 또는 초기 배포 시 마이그레이션 생성
|
|
3880
|
+
// initial 배포에서도 migrations/ 포함을 위해 generate 실행
|
|
3881
|
+
const schemaExists = existsSync(resolve(process.cwd(), functionsDir, "schema.ts"));
|
|
3882
|
+
if (schemaExists && (isSchema || reason === "initial")) {
|
|
3883
|
+
if (isSchema) {
|
|
3884
|
+
log(`${DIM}${ts}${RESET} ${YELLOW}[migrate]${RESET} 스키마 변경 감지 → 마이그레이션 생성 중...`);
|
|
3885
|
+
}
|
|
3840
3886
|
try {
|
|
3841
3887
|
const { execSync } = await import("child_process");
|
|
3842
|
-
execSync("npx drizzle-kit generate
|
|
3888
|
+
execSync("npx drizzle-kit generate", {
|
|
3843
3889
|
cwd: process.cwd(),
|
|
3844
|
-
stdio: "
|
|
3890
|
+
stdio: "inherit",
|
|
3845
3891
|
});
|
|
3846
3892
|
log(`${DIM}${ts}${RESET} ${GREEN}[migrate]${RESET} ✔ 마이그레이션 생성 완료`);
|
|
3847
3893
|
} catch (e) {
|
|
3848
|
-
|
|
3894
|
+
const msg = e.stderr?.toString() || e.message || "";
|
|
3895
|
+
if (msg.includes("No schema changes") || msg.includes("nothing to migrate")) {
|
|
3896
|
+
// 스키마 변경 없음 — 정상
|
|
3897
|
+
} else {
|
|
3898
|
+
warn(`[migrate] 마이그레이션 생성 실패 (무시 가능): ${msg.split("\n")[0]}`);
|
|
3899
|
+
}
|
|
3849
3900
|
}
|
|
3850
3901
|
}
|
|
3851
3902
|
|
|
@@ -3889,6 +3940,15 @@ process.exit(0);
|
|
|
3889
3940
|
const errMsg = data.error || "Unknown error";
|
|
3890
3941
|
log(` ${RED}${errMsg}${RESET}`);
|
|
3891
3942
|
|
|
3943
|
+
// 서버 crash 로그 표시
|
|
3944
|
+
if (data.crashLogs && Array.isArray(data.crashLogs) && data.crashLogs.length > 0) {
|
|
3945
|
+
log(`\n ${YELLOW}── Crash Logs ──${RESET}`);
|
|
3946
|
+
for (const line of data.crashLogs) {
|
|
3947
|
+
log(` ${DIM}${line}${RESET}`);
|
|
3948
|
+
}
|
|
3949
|
+
log(``);
|
|
3950
|
+
}
|
|
3951
|
+
|
|
3892
3952
|
// 스키마 관련 에러 힌트
|
|
3893
3953
|
if (errMsg.includes("does not exist") || errMsg.includes("relation")) {
|
|
3894
3954
|
log(` ${YELLOW}💡 스키마가 변경되었나요? schema.ts를 수정하면 자동으로 마이그레이션이 실행됩니다.${RESET}`);
|