Reset database #14
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Reset production database | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| mode: | |
| description: "Seeding mode" | |
| required: true | |
| default: "lite" | |
| type: choice | |
| options: | |
| - lite | |
| - full | |
| confirm: | |
| description: "Type 'reset-prod' to confirm" | |
| required: true | |
| type: string | |
| pull_request: | |
| paths: | |
| - ".github/workflows/db-reset.yml" | |
| jobs: | |
| # Validation job - runs on PR to test connectivity (no environment = no approval needed) | |
| validate: | |
| name: Validate database connectivity | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'pull_request' | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v5 | |
| - name: Setup Python | |
| run: uv python install 3.13 | |
| - name: Sync dependencies | |
| run: uv sync | |
| - name: Test database connectivity | |
| env: | |
| SUPABASE_DB_URL: ${{ secrets.SUPABASE_POOLER_URL }} | |
| run: | | |
| echo "Testing database connectivity..." | |
| uv run python -c " | |
| from policyengine_api.config.settings import settings | |
| from sqlmodel import create_engine, text | |
| engine = create_engine(settings.database_url, echo=False) | |
| with engine.connect() as conn: | |
| result = conn.execute(text('SELECT 1')) | |
| print('✅ Database connection successful') | |
| " | |
| # Reset job - only runs on manual trigger with confirmation | |
| reset-db: | |
| name: Reset and reseed database | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'workflow_dispatch' | |
| environment: production | |
| steps: | |
| - name: Verify confirmation | |
| if: ${{ github.event.inputs.confirm != 'reset-prod' }} | |
| run: | | |
| echo "❌ Confirmation failed. You must type 'reset-prod' to proceed." | |
| exit 1 | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v5 | |
| - name: Setup Python | |
| run: uv python install 3.13 | |
| - name: Sync dependencies | |
| run: uv sync | |
| - name: Reset database (init) | |
| env: | |
| SUPABASE_DB_URL: ${{ secrets.SUPABASE_POOLER_URL }} | |
| SUPABASE_URL: ${{ secrets.SUPABASE_URL }} | |
| SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }} | |
| SUPABASE_SECRET_KEY: ${{ secrets.SUPABASE_SECRET_KEY }} | |
| LOGFIRE_TOKEN: ${{ secrets.LOGFIRE_TOKEN }} | |
| LOGFIRE_ENVIRONMENT: prod | |
| run: | | |
| echo "Resetting database tables..." | |
| echo "yes" | uv run python scripts/init.py --reset | |
| - name: Seed database (lite) | |
| if: ${{ github.event.inputs.mode == 'lite' }} | |
| env: | |
| SUPABASE_DB_URL: ${{ secrets.SUPABASE_POOLER_URL }} | |
| SUPABASE_URL: ${{ secrets.SUPABASE_URL }} | |
| SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }} | |
| SUPABASE_SECRET_KEY: ${{ secrets.SUPABASE_SECRET_KEY }} | |
| STORAGE_BUCKET: ${{ vars.STORAGE_BUCKET }} | |
| LOGFIRE_TOKEN: ${{ secrets.LOGFIRE_TOKEN }} | |
| LOGFIRE_ENVIRONMENT: prod | |
| HUGGING_FACE_TOKEN: ${{ secrets.HUGGING_FACE_TOKEN }} | |
| run: | | |
| echo "Seeding database (lite mode - fewer params, includes datasets)..." | |
| uv run python scripts/seed.py --lite | |
| - name: Seed database (full) | |
| if: ${{ github.event.inputs.mode == 'full' }} | |
| env: | |
| SUPABASE_DB_URL: ${{ secrets.SUPABASE_POOLER_URL }} | |
| SUPABASE_URL: ${{ secrets.SUPABASE_URL }} | |
| SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }} | |
| SUPABASE_SECRET_KEY: ${{ secrets.SUPABASE_SECRET_KEY }} | |
| HUGGING_FACE_TOKEN: ${{ secrets.HUGGING_FACE_TOKEN }} | |
| STORAGE_BUCKET: ${{ vars.STORAGE_BUCKET }} | |
| LOGFIRE_TOKEN: ${{ secrets.LOGFIRE_TOKEN }} | |
| LOGFIRE_ENVIRONMENT: prod | |
| run: | | |
| echo "Seeding database (full mode - includes datasets)..." | |
| uv run python scripts/seed.py | |
| - name: Summary | |
| run: | | |
| echo "✅ Database reset complete!" | |
| echo "Mode: ${{ github.event.inputs.mode }}" | |
| echo "Triggered by: ${{ github.actor }}" |