-
Notifications
You must be signed in to change notification settings - Fork 0
143 lines (124 loc) · 4.62 KB
/
deploy-dev.yml
File metadata and controls
143 lines (124 loc) · 4.62 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
# Deploy to dev — pushes migrations and regenerates types on every push to dev
name: Deploy Dev
on:
push:
branches: [dev]
# Never cancel in-flight migrations — wait for previous run to finish
concurrency:
group: deploy-dev
cancel-in-progress: false
jobs:
migrate:
name: Push Migrations
# Skip if triggered by the auto-generated types commit to prevent infinite loops
if: "!startsWith(github.event.head_commit.message, 'chore(db): regenerate database types')"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: supabase/setup-cli@v1
with:
version: latest
- name: Link to dev project
run: supabase link --project-ref "${{ secrets.SUPABASE_DEV_PROJECT_REF }}"
working-directory: packages/db
env:
SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
- name: Push migrations
run: supabase db push
working-directory: packages/db
env:
SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
SUPABASE_DB_PASSWORD: ${{ secrets.SUPABASE_DEV_DB_PASSWORD }}
- name: Summary
if: always()
run: echo "### Migrate ${{ job.status == 'success' && '✅' || '❌' }}" >> "$GITHUB_STEP_SUMMARY"
schema-drift:
name: Schema Drift Detection
needs: [migrate]
continue-on-error: true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: supabase/setup-cli@v1
with:
version: latest
- name: Link to dev project
run: supabase link --project-ref "${{ secrets.SUPABASE_DEV_PROJECT_REF }}"
working-directory: packages/db
env:
SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
- name: Check for schema drift
run: |
OUTPUT=$(supabase db diff --linked 2>&1) || true
if [ -n "$OUTPUT" ] && [ "$OUTPUT" != "No changes found" ]; then
echo "::warning::Schema drift detected against dev project"
echo "### Schema Drift Detected" >> "$GITHUB_STEP_SUMMARY"
echo '```sql' >> "$GITHUB_STEP_SUMMARY"
echo "$OUTPUT" >> "$GITHUB_STEP_SUMMARY"
echo '```' >> "$GITHUB_STEP_SUMMARY"
else
echo "### Schema Drift — None" >> "$GITHUB_STEP_SUMMARY"
fi
working-directory: packages/db
env:
SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
SUPABASE_DB_PASSWORD: ${{ secrets.SUPABASE_DEV_DB_PASSWORD }}
generate-types:
name: Generate Types
needs: [migrate]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: dev
token: ${{ secrets.TYPES_PUSH_TOKEN }}
- uses: supabase/setup-cli@v1
with:
version: latest
- name: Link to dev project
run: supabase link --project-ref "${{ secrets.SUPABASE_DEV_PROJECT_REF }}"
working-directory: packages/db
env:
SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
- name: Generate TypeScript types
run: supabase gen types typescript --linked > types/database.ts
working-directory: packages/db
env:
SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
SUPABASE_DB_PASSWORD: ${{ secrets.SUPABASE_DEV_DB_PASSWORD }}
- name: Push types if changed
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add packages/db/types/database.ts
if git diff --staged --quiet; then
echo "No type changes detected"
echo "TYPES_CHANGED=false" >> "$GITHUB_ENV"
else
git commit -m "chore(db): regenerate database types"
git push
echo "TYPES_CHANGED=true" >> "$GITHUB_ENV"
fi
- name: Summary
run: |
if [ "$TYPES_CHANGED" = "true" ]; then
echo "### Types — pushed to dev ✅" >> "$GITHUB_STEP_SUMMARY"
else
echo "### Types — No changes ✅" >> "$GITHUB_STEP_SUMMARY"
fi
summary:
name: Summary
needs: [migrate, schema-drift, generate-types]
if: always()
runs-on: ubuntu-latest
steps:
- name: Deploy dev summary
run: |
cat >> "$GITHUB_STEP_SUMMARY" <<'EOF'
## Deploy Dev Summary
| Job | Status |
|-----|--------|
| Migrations | ${{ needs.migrate.result }} |
| Schema Drift | ${{ needs.schema-drift.result }} |
| Generate Types | ${{ needs.generate-types.result }} |
EOF