-
Notifications
You must be signed in to change notification settings - Fork 0
146 lines (129 loc) · 4.71 KB
/
db-reset.yml
File metadata and controls
146 lines (129 loc) · 4.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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 }}"