33 lines
No EOL
1.2 KiB
Bash
33 lines
No EOL
1.2 KiB
Bash
#!/bin/bash
|
|
# Run this from the VPS when you need to manually run migrations
|
|
# Usage: bash scripts/migrate.sh
|
|
|
|
NETWORK=$(docker inspect $(docker ps | grep portfoliodb | awk '{print $1}' | head -1) --format '{{range $k, $v := .NetworkSettings.Networks}}{{$k}}{{end}}')
|
|
APP_IMAGE=$(docker images | grep portfolio-web | awk '{print $1}' | head -1)
|
|
|
|
docker run --rm \
|
|
--network $NETWORK \
|
|
-e DATABASE_URL=postgresql://postgres:TrojanHero1@portfolio-portfoliodb-22lpk0:5432/postgres \
|
|
-e PAYLOAD_SECRET=n8Kj2vR5pL9mQx7tY3wE6bZ1aD4sF0hU9cV2xB5nM8pL1q \
|
|
$APP_IMAGE \
|
|
sh -c "cat > /tmp/migrate.ts << 'EOF'
|
|
import { drizzle } from 'drizzle-orm/node-postgres'
|
|
import pg from 'pg'
|
|
|
|
async function main() {
|
|
const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL })
|
|
const migrations = await import('/app/src/migrations/index.ts')
|
|
console.log('running migrations...')
|
|
for (const [name, migration] of Object.entries(migrations)) {
|
|
if (typeof migration === 'function') {
|
|
console.log('running:', name)
|
|
await migration({ db: drizzle(pool) })
|
|
}
|
|
}
|
|
console.log('done')
|
|
await pool.end()
|
|
}
|
|
|
|
main().catch(console.error)
|
|
EOF
|
|
node_modules/.bin/tsx /tmp/migrate.ts" |