47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
const { drizzle } = await import("drizzle-orm/postgres-js");
 | 
						|
const { migrate } = await import("drizzle-orm/postgres-js/migrator");
 | 
						|
const { default: postgres } = await import("postgres");
 | 
						|
 | 
						|
import { config } from "dotenv";
 | 
						|
config({
 | 
						|
  path: ".local.env",
 | 
						|
});
 | 
						|
 | 
						|
const migrationsFolderName = process.env.MIGRATIONS_FOLDER || "drizzle";
 | 
						|
let sslMode: string | boolean = process.env.SSL || "require";
 | 
						|
 | 
						|
if (sslMode === "false") sslMode = false;
 | 
						|
 | 
						|
let connectionString = process.env.POSTGRES_URL!;
 | 
						|
 | 
						|
const isDevContainer = process.env.REMOTE_CONTAINERS !== undefined;
 | 
						|
if (isDevContainer)
 | 
						|
  connectionString = connectionString.replace(
 | 
						|
    "localhost",
 | 
						|
    "host.docker.internal",
 | 
						|
  );
 | 
						|
 | 
						|
const sql = postgres(connectionString, { max: 1, ssl: sslMode as any });
 | 
						|
const db = drizzle(sql, {
 | 
						|
  logger: true,
 | 
						|
});
 | 
						|
 | 
						|
let retries = 5;
 | 
						|
while (retries) {
 | 
						|
  try {
 | 
						|
    await sql`SELECT NOW()`;
 | 
						|
    console.log("Database is live");
 | 
						|
    break;
 | 
						|
  } catch (error) {
 | 
						|
    console.error("Database is not live yet", error);
 | 
						|
    retries -= 1;
 | 
						|
    console.log(`Retries left: ${retries}`);
 | 
						|
    await new Promise((res) => setTimeout(res, 1000));
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
console.log("Migrating...");
 | 
						|
await migrate(db, { migrationsFolder: migrationsFolderName });
 | 
						|
console.log("Done!");
 | 
						|
process.exit();
 |