Files
community-rule/.gitea/workflows/migrate-smoke.yaml
T
2026-04-21 22:48:23 -06:00

75 lines
2.1 KiB
YAML

name: Migrate Smoke
run-name: "${{ gitea.actor }} triggered migrate smoke"
on:
workflow_dispatch: {}
pull_request:
branches: [main]
paths:
- "prisma/**"
- ".gitea/workflows/migrate-smoke.yaml"
push:
branches: [main]
paths:
- "prisma/**"
- ".gitea/workflows/migrate-smoke.yaml"
env:
NODE_VERSION: "20"
NEXT_TELEMETRY_DISABLED: "1"
# Non-default host port so a local dev Postgres on 5432 keeps working.
PG_HOST_PORT: "5433"
POSTGRES_USER: communityrule
POSTGRES_PASSWORD: communityrule
POSTGRES_DB: communityrule
jobs:
migrate:
runs-on: [self-hosted, macos-latest]
env:
CI: true
DATABASE_URL: "postgresql://communityrule:communityrule@127.0.0.1:5433/communityrule"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "${{ env.NODE_VERSION }}"
cache: npm
- name: Start Postgres
run: |
set -euo pipefail
docker rm -f migrate-smoke-pg >/dev/null 2>&1 || true
docker run -d --name migrate-smoke-pg \
-e POSTGRES_USER="$POSTGRES_USER" \
-e POSTGRES_PASSWORD="$POSTGRES_PASSWORD" \
-e POSTGRES_DB="$POSTGRES_DB" \
-p "${PG_HOST_PORT}:5432" \
postgres:16-alpine
- name: Wait for Postgres
run: |
set -euo pipefail
for i in {1..30}; do
if docker exec migrate-smoke-pg pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB" >/dev/null 2>&1; then
echo "Postgres ready after ${i}s"
exit 0
fi
sleep 1
done
echo "Postgres did not become ready in 30s"
docker logs migrate-smoke-pg || true
exit 1
- run: npm ci --no-audit --fund=false
- name: Apply migrations
run: npm run db:deploy
- name: Verify Prisma can connect to migrated DB
run: echo "SELECT 1;" | npx --no-install prisma db execute --stdin --url "$DATABASE_URL"
- name: Stop Postgres
if: always()
run: docker rm -f migrate-smoke-pg >/dev/null 2>&1 || true