All checks were successful
Refs #38 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
59 lines
2.8 KiB
Bash
Executable file
59 lines
2.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Mailvorlagen unter einem entfernten Docker-Daemon (dind) bereitstellen (Issue #38, CI-Laeufe 27/28).
|
|
#
|
|
# Ursache: Die Supabase CLI bindet supabase/templates/*.html per Bind-Mount mit dem Pfad des Job-Containers
|
|
# (z. B. /workspace/<owner>/Shuffle/supabase/templates/confirmation.html) in den Kong-Container ein
|
|
# (-> /home/kong/templates/email/<name>.html); GoTrue holt die Vorlagen per URL von Kong. Im dind existiert
|
|
# der Pfad nicht. Docker legt dann ein leeres VERZEICHNIS an, Kong zeigt "Index of /email/confirmation.html/",
|
|
# und GoTrue verschickt diese Seite still statt der Vorlage (Spec R5). Ein nachtraegliches Ersetzen hilft nicht:
|
|
# das Mount-Ziel im Container-Rootfs ist dann ein Verzeichnis, ein Neustart scheitert (runc).
|
|
#
|
|
# Deshalb: VOR `supabase start` die Dateien im dind unter genau diesem Pfad anlegen (Helfer-Container,
|
|
# Inhalt per stdin), dann entstehen von Anfang an Datei-Mounts. Die Auslieferung bleibt eine URL
|
|
# (wie in Staging/Prod: GOTRUE_MAILER_TEMPLATES_*).
|
|
#
|
|
# remote-templates.sh seed vor `supabase start`
|
|
# remote-templates.sh verify nach `start`/`db reset`: Datei-Mounts und Inhalt pruefen, sonst Exit 1
|
|
# Keine Secrets: Ausgabe nur Pfade und Dateinamen.
|
|
set -euo pipefail
|
|
|
|
PROJECT_ID="${SUPABASE_PROJECT_ID:-shuffle}"
|
|
HELPER_IMAGE="${HELPER_IMAGE:-public.ecr.aws/docker/library/busybox:1.37.0}"
|
|
SRC_DIR="$(pwd)/supabase/templates" # Pfad, den die CLI als Mount-Quelle verwendet
|
|
KONG="supabase_kong_${PROJECT_ID}"
|
|
|
|
seed() {
|
|
ls "$SRC_DIR"/*.html >/dev/null 2>&1 || { echo "Keine Vorlagen in $SRC_DIR" >&2; exit 1; }
|
|
for f in "$SRC_DIR"/*.html; do
|
|
name=$(basename "$f")
|
|
# Reste frueherer Laeufe (leeres Verzeichnis) werden ersetzt.
|
|
docker run --rm -i -v "$SRC_DIR:/t" "$HELPER_IMAGE" \
|
|
sh -c "[ ! -d '/t/$name' ] || rmdir '/t/$name'; cat > '/t/$name'" < "$f" \
|
|
|| { echo "Vorlage $name konnte im dind nicht angelegt werden (Image $HELPER_IMAGE, Pfad $SRC_DIR)" >&2; exit 1; }
|
|
echo "Vorlage im dind angelegt: $SRC_DIR/$name"
|
|
done
|
|
}
|
|
|
|
verify() {
|
|
ok=1
|
|
for f in "$SRC_DIR"/*.html; do
|
|
name=$(basename "$f")
|
|
if ! docker exec "$KONG" sh -c "[ -f '/home/kong/templates/email/$name' ] && [ -s '/home/kong/templates/email/$name' ]" 2>/dev/null; then
|
|
echo "FEHLER: $KONG: /home/kong/templates/email/$name ist keine nicht-leere Datei." >&2
|
|
ok=0
|
|
fi
|
|
done
|
|
if [ "$ok" -ne 1 ]; then
|
|
echo "Bind-Mounts von $KONG (Quelle -> Ziel):" >&2
|
|
docker inspect "$KONG" --format '{{range .Mounts}}{{if eq .Type "bind"}}{{.Source}} -> {{.Destination}}{{"\n"}}{{end}}{{end}}' >&2 || true
|
|
echo "Ohne gueltige Vorlagen verschickt GoTrue still eine Fehlerseite statt der Mail (Spec R5)." >&2
|
|
exit 1
|
|
fi
|
|
echo "Mailvorlagen in $KONG vorhanden"
|
|
}
|
|
|
|
case "${1:-}" in
|
|
seed) seed ;;
|
|
verify) verify ;;
|
|
*) echo "Aufruf: $0 seed|verify" >&2; exit 2 ;;
|
|
esac
|