Migrate before starting the application
CI / verify (push) Successful in 2m32s

This commit is contained in:
2026-08-13 01:48:05 -07:00
parent 853bde2265
commit d4d7095605
+22 -5
View File
@@ -36,8 +36,28 @@ BACKUP="backups/pig-$(date +%Y%m%d-%H%M%S).sql.gz"
sudo docker compose -p pig exec -T db pg_dump -U pig pig | gzip > "$BACKUP" sudo docker compose -p pig exec -T db pg_dump -U pig pig | gzip > "$BACKUP"
echo " $BACKUP ($(du -h "$BACKUP" | cut -f1))" echo " $BACKUP ($(du -h "$BACKUP" | cut -f1))"
echo "==> Building and starting" echo "==> Building"
sudo docker compose -p pig up -d --build sudo docker compose -p pig build app
echo "==> Starting the database"
sudo docker compose -p pig up -d db
for _ in $(seq 1 60); do
if sudo docker compose -p pig exec -T db pg_isready -U pig -d pig > /dev/null; then break; fi
sleep 1
done
if ! sudo docker compose -p pig exec -T db pg_isready -U pig -d pig > /dev/null; then
echo "ERROR: database did not become ready within 60 seconds" >&2
exit 1
fi
echo "==> Migrating before the schema-dependent app starts"
# A release may query a newly introduced table during startup. Running the
# migration from a one-off container prevents that app from crash-looping
# before an `exec`-based migration can reach it.
sudo docker compose -p pig run --rm --no-deps app npx tsx packages/db/src/migrate.ts
echo "==> Starting the app"
sudo docker compose -p pig up -d app
echo "==> Waiting for health" echo "==> Waiting for health"
for _ in $(seq 1 60); do for _ in $(seq 1 60); do
@@ -45,9 +65,6 @@ for _ in $(seq 1 60); do
sleep 1 sleep 1
done done
echo "==> Migrating"
sudo docker compose -p pig exec -T app npx tsx packages/db/src/migrate.ts
echo "==> Verifying" echo "==> Verifying"
if curl -sf http://127.0.0.1:8920/api/health | grep -q '"ok":true'; then if curl -sf http://127.0.0.1:8920/api/health | grep -q '"ok":true'; then
echo " health ok" echo " health ok"