From 9ed55460d1ade677fb6c6bd405243072788a33c5 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 10 Nov 2026 22:01:03 +0000 Subject: [PATCH] Deploy: pausiertes Supabase-Projekt automatisch aufwecken MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Projekt war pausiert (Status INACTIVE, kostenloser Plan pausiert nach ca. einer Woche ohne Nutzung) — daher die leere Pooler-Liste. Der Deploy weckt es jetzt über die Management-API auf (POST /v1/projects/{ref}/restore), wartet bis ACTIVE_HEALTHY und bis der Pooler bereit ist (max. ca. 18 Min.). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01KcEZVNQq3vdqiyjffU7Cw7 --- .github/workflows/deploy.yml | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 09d2228..b398380 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -38,6 +38,34 @@ jobs: version: 2.121.0 # Ohne "supabase link": der braucht mehr Token-Rechte als nötig. # Verbindung über den Supabase-Pooler (GitHub-Runner haben kein IPv6). + # Kostenlose Supabase-Projekte pausieren nach ca. 1 Woche ohne Nutzung → hier automatisch aufwecken + - name: Supabase-Projekt aufwecken (falls pausiert) + run: | + status() { curl -s -H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" "https://api.supabase.com/v1/projects/$PROJECT_REF" | jq -r '.status // "unbekannt"'; } + S=$(status); echo "Projektstatus: $S" + if [ "$S" = "INACTIVE" ] || [ "$S" = "PAUSED" ]; then + CODE=$(curl -s -o /tmp/restore.json -w '%{http_code}' -X POST -H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" "https://api.supabase.com/v1/projects/$PROJECT_REF/restore") + echo "Aufwecken angefordert: HTTP $CODE $(head -c 200 /tmp/restore.json)" + if [ "$CODE" -ge 300 ]; then + echo "::error::Supabase-Projekt ist pausiert und liess sich nicht automatisch aufwecken (HTTP $CODE). Bitte im Dashboard „Restore project“ wählen: https://supabase.com/dashboard/project/$PROJECT_REF" + exit 1 + fi + fi + # warten, bis Datenbank und Pooler bereit sind (max. 15 Min.) + for i in $(seq 1 90); do + S=$(status) + [ "$S" = "ACTIVE_HEALTHY" ] && break + echo "… $S"; sleep 10 + done + echo "Projektstatus: $S" + if [ "$S" != "ACTIVE_HEALTHY" ]; then echo "::error::Supabase-Projekt ist nicht bereit (Status $S)."; exit 1; fi + # Pooler-Konfiguration erscheint teils erst kurz nach dem Aufwachen + for i in $(seq 1 18); do + N=$(curl -s -H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" "https://api.supabase.com/v1/projects/$PROJECT_REF/config/database/pooler" | jq 'if type=="array" then length else 1 end') + [ "$N" != "0" ] && break + echo "… Pooler noch nicht bereit"; sleep 10 + done + - name: Datenbank-Verbindung ermitteln run: | RES=$(curl -s -w '\n%{http_code}' -H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" \ @@ -62,7 +90,7 @@ jobs: STATUS=$(echo "$PROJ" | jq -r '.status // "unbekannt"'); REGION=$(echo "$PROJ" | jq -r '.region // "?"') echo "Pooler-Liste leer — Projektstatus: $STATUS, Region: $REGION" if [ "$STATUS" = "INACTIVE" ] || [ "$STATUS" = "PAUSED" ] || [ "$STATUS" = "PAUSING" ]; then - echo "::error::Das Supabase-Projekt $PROJECT_REF ist pausiert. Im Supabase-Dashboard öffnen und „Restore project“ wählen, danach den Deploy neu starten." + echo "::error::Das Supabase-Projekt $PROJECT_REF ist noch pausiert. Im Dashboard „Restore project“ wählen: https://supabase.com/dashboard/project/$PROJECT_REF" exit 1 fi # sonst: Verbindung über „supabase link“ ermitteln lassen (offizieller Weg der CLI)