name: Nightly DB Drift Check on: schedule: - cron: "0 3 * * *" # daily at 03:00 UTC workflow_dispatch: {} jobs: drift-postgres: runs-on: ubuntu-latest concurrency: group: drift-postgres-${{ github.ref }} cancel-in-progress: true services: postgres: image: postgres:16 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: liferpg ports: - 5432:5432 options: >- --health-cmd="bash -lc 'cat < /dev/null > /dev/tcp/127.0.0.1/5432'" \ --health-interval=10s \ --health-timeout=5s \ --health-retries=10 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Cache pip uses: actions/cache@v4 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-3.12-${{ hashFiles('**/requirements*.txt', 'poetry.lock', 'Pipfile.lock') }} restore-keys: | ${{ runner.os }}-pip-3.12- - name: Install deps run: | python -m pip install --upgrade pip python -m pip install -r modern/backend/requirements_full.txt alembic - name: Wait for Postgres run: | python - <<'PY' import socket, time, sys host, port = '127.0.0.1', 5432 for i in range(60): try: with socket.create_connection((host, port), timeout=1): sys.exit(0) except OSError: time.sleep(1) print('Postgres not ready', file=sys.stderr) sys.exit(1) PY - name: Create DB schema env: DATABASE_URL: postgresql+psycopg2://postgres:postgres@localhost:5432/liferpg run: | export PYTHONPATH=$(pwd) alembic -c modern/alembic.ini upgrade head - name: Run schema drift check (Postgres) env: DATABASE_URL: postgresql+psycopg2://postgres:postgres@localhost:5432/liferpg run: | export PYTHONPATH=$(pwd) python scripts/alembic_check.py drift-sqlite: runs-on: ubuntu-latest concurrency: group: drift-sqlite-${{ github.ref }} cancel-in-progress: true steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Cache pip uses: actions/cache@v4 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-3.12-${{ hashFiles('**/requirements*.txt', 'poetry.lock', 'Pipfile.lock') }} restore-keys: | ${{ runner.os }}-pip-3.12- - name: Install deps run: | python -m pip install --upgrade pip python -m pip install -r modern/backend/requirements_full.txt alembic - name: Upgrade DB env: DATABASE_URL: sqlite:///./modern_dev.db run: | export PYTHONPATH=$(pwd) alembic -c modern/alembic.ini upgrade head - name: Drift check (sqlite) env: DATABASE_URL: sqlite:///./modern_dev.db run: | export PYTHONPATH=$(pwd) python scripts/alembic_check.py