chore: handle connection failures

This commit is contained in:
Charlie Lamb
2026-04-27 20:18:28 +01:00
parent 5427452ad4
commit e18e880e22
2 changed files with 33 additions and 2 deletions

View File

@@ -28,4 +28,33 @@ jobs:
- name: Validate schema
env:
DATABASE_URL: ${{ secrets.DATABASE_READ_ONLY_URL }}
run: bun scripts/migrations/validate-schema.ts
DB_MAX_CONNECTIONS: 1
NODE_OPTIONS: --dns-result-order=ipv4first
run: |
for i in 1 2 3; do
bun -e '
import { lookup } from "node:dns/promises";
import net from "node:net";
try {
const url = new URL(process.env.DATABASE_URL ?? "");
await lookup(url.hostname);
await new Promise((resolve, reject) => {
const socket = net.connect(Number(url.port || 5432), url.hostname);
socket.setTimeout(10_000);
socket.once("connect", () => {
socket.end();
resolve();
});
socket.once("timeout", () => reject(new Error("database TCP connection timed out")));
socket.once("error", reject);
});
} catch (error) {
console.error(`Database preflight failed (${error?.code ?? error?.name ?? "unknown"})`);
process.exit(1);
}
' && bun scripts/migrations/validate-schema.ts && exit 0
sleep $((i * 10))
done
exit 1

View File

@@ -2,7 +2,9 @@ import { initDrizzle } from "@server/db/initDrizzle";
import { validateDbSchema } from "@server/db/validateDbSchema";
import { validateSqlFunctions } from "@server/db/validateSqlFunctions";
const { db } = initDrizzle({ maxConnections: 5 });
const { db } = initDrizzle({
maxConnections: Number(process.env.DB_MAX_CONNECTIONS ?? 5),
});
// Check if --validate-content flag is passed
const validateContent = process.argv.includes("--validate-content");