Reset database #22
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 database | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| target: | |
| description: "Target database" | |
| required: true | |
| type: choice | |
| options: | |
| - staging | |
| - production | |
| mode: | |
| description: "Seeding mode" | |
| required: true | |
| default: "lite" | |
| type: choice | |
| options: | |
| - lite | |
| - full | |
| confirm: | |
| description: "Type 'reset-staging' or '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 against both environments | |
| validate: | |
| name: Validate ${{ matrix.environment }} database connectivity | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'pull_request' | |
| environment: ${{ matrix.environment }} | |
| strategy: | |
| matrix: | |
| environment: [staging, production] | |
| 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_DB_URL }} | |
| run: | | |
| echo "Testing ${{ matrix.environment }} 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('✅ ${{ matrix.environment }} database connection successful') | |
| " | |
| # Reset job - only runs on manual trigger with confirmation | |
| reset-db: | |
| name: Reset and reseed ${{ inputs.target }} database | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'workflow_dispatch' | |
| environment: ${{ inputs.target }} | |
| steps: | |
| - name: Verify confirmation | |
| run: | | |
| EXPECTED="reset-staging" | |
| if [ "${{ inputs.target }}" = "production" ]; then | |
| EXPECTED="reset-prod" | |
| fi | |
| if [ "${{ inputs.confirm }}" != "$EXPECTED" ]; then | |
| echo "❌ Confirmation failed. You must type '$EXPECTED' to proceed." | |
| exit 1 | |
| fi | |
| echo "✅ Confirmation verified for ${{ inputs.target }}" | |
| - 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_DB_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: ${{ inputs.target }} | |
| run: | | |
| echo "Resetting ${{ inputs.target }} database tables..." | |
| echo "yes" | uv run python scripts/init.py --reset | |
| - name: Seed database (lite) | |
| if: ${{ inputs.mode == 'lite' }} | |
| env: | |
| SUPABASE_DB_URL: ${{ secrets.SUPABASE_DB_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: ${{ inputs.target }} | |
| HUGGING_FACE_TOKEN: ${{ secrets.HUGGING_FACE_TOKEN }} | |
| run: | | |
| echo "Seeding ${{ inputs.target }} database (lite mode)..." | |
| uv run python scripts/seed.py --lite | |
| - name: Seed database (full) | |
| if: ${{ inputs.mode == 'full' }} | |
| env: | |
| SUPABASE_DB_URL: ${{ secrets.SUPABASE_DB_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: ${{ inputs.target }} | |
| run: | | |
| echo "Seeding ${{ inputs.target }} database (full mode)..." | |
| uv run python scripts/seed.py | |
| - name: Summary | |
| run: | | |
| echo "✅ Database reset complete!" | |
| echo "Target: ${{ inputs.target }}" | |
| echo "Mode: ${{ inputs.mode }}" | |
| echo "Triggered by: ${{ github.actor }}" |