AeThex-OS/script/run-os-migration.ts
2025-12-24 01:25:27 +00:00

56 lines
1.6 KiB
TypeScript

import { readFileSync } from "fs";
import { join } from "path";
import pkg from "pg";
const { Client } = pkg;
async function runOSMigration() {
const client = new Client({
connectionString: process.env.DATABASE_URL,
});
try {
await client.connect();
console.log("Connected to database");
// Read the OS kernel migration file
const migrationPath = join(process.cwd(), "migrations", "0002_os_kernel.sql");
const migrationSQL = readFileSync(migrationPath, "utf-8");
// Split by statement-breakpoint
const statements = migrationSQL
.split("--> statement-breakpoint")
.map((stmt) => stmt.trim())
.filter((stmt) => stmt.length > 0 && !stmt.startsWith("--"));
console.log(`Executing ${statements.length} statements...`);
for (let i = 0; i < statements.length; i++) {
try {
await client.query(statements[i]);
console.log(`✓ Statement ${i + 1}/${statements.length} executed`);
} catch (err: any) {
// Only fail on actual errors, not "already exists" type errors
if (
err.message.includes("already exists") ||
err.message.includes("UNIQUE constraint failed")
) {
console.log(
`⚠ Statement ${i + 1}/${statements.length} skipped (${err.message})`
);
} else {
console.error(`✗ Statement ${i + 1} failed: ${err.message}`);
throw err;
}
}
}
console.log("\n✅ OS Kernel migration completed successfully!");
} catch (err) {
console.error("\n❌ Migration failed:", err);
process.exit(1);
} finally {
await client.end();
}
}
runOSMigration();