49 lines
2.5 KiB
Bash
Executable file
49 lines
2.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Mailvorlagen unter einem entfernten Docker-Daemon (dind) bereitstellen (Issue #38, CI-Lauf 27).
|
|
#
|
|
# Ursache: Die Supabase CLI bindet supabase/templates/*.html per Bind-Mount (Host-Pfad des Job-Containers)
|
|
# in einen ihrer Container ein; GoTrue holt die Vorlage per URL von dort (/email/<name>.html). Im dind
|
|
# existiert der Host-Pfad nicht, Docker legt stattdessen ein leeres VERZEICHNIS an, der Webserver liefert
|
|
# "Index of /email/confirmation.html/" und GoTrue verschickt diese Seite statt der Vorlage (stiller Fallback,
|
|
# der Betreff kommt weiter aus der config.toml). Dieses Skript ersetzt solche Verzeichnisse im dind durch die
|
|
# echten Dateien (per Helfer-Container, Inhalt ueber stdin) und startet den betroffenen Container neu.
|
|
# Die Auslieferung bleibt eine URL, wie in Staging/Prod geplant (GOTRUE_MAILER_TEMPLATES_*).
|
|
# Keine Secrets: es werden nur Container-, Pfad- und Dateinamen ausgegeben.
|
|
set -euo pipefail
|
|
|
|
PROJECT_ID="${SUPABASE_PROJECT_ID:-shuffle}"
|
|
TEMPLATE_DIR="${TEMPLATE_DIR:-supabase/templates}"
|
|
fixed=0
|
|
|
|
for c in $(docker ps --format '{{.Names}}' | grep -E "_${PROJECT_ID}\$"); do
|
|
while IFS='|' read -r type src dst; do
|
|
[ "$type" = bind ] || continue
|
|
name=$(basename "$src")
|
|
[ -f "$TEMPLATE_DIR/$name" ] || continue
|
|
echo "Mount in $c: $src -> $dst"
|
|
image=$(docker inspect "$c" --format '{{.Config.Image}}')
|
|
# Exit 3 = Quelle ist schon eine Datei (alles in Ordnung)
|
|
set +e
|
|
docker run --rm -i --user 0 --entrypoint sh -v "$(dirname "$src"):/t" "$image" \
|
|
-c "[ -d '/t/$name' ] || exit 3; rmdir '/t/$name' && cat > '/t/$name'" < "$TEMPLATE_DIR/$name"
|
|
rc=$?
|
|
set -e
|
|
case "$rc" in
|
|
0) echo " $name war ein leeres Verzeichnis, durch Datei ersetzt"; fixed=$((fixed + 1)); restart="${restart:-} $c" ;;
|
|
3) echo " $name ist bereits eine Datei" ;;
|
|
*) echo "Fehler beim Ersetzen von $name (Exit $rc)" >&2; exit 1 ;;
|
|
esac
|
|
done < <(docker inspect "$c" --format '{{range .Mounts}}{{.Type}}|{{.Source}}|{{.Destination}}{{"\n"}}{{end}}')
|
|
done
|
|
|
|
for c in $(printf '%s\n' ${restart:-} | sort -u); do
|
|
echo "Neustart $c"
|
|
docker restart "$c" >/dev/null
|
|
done
|
|
echo "Vorlagen-Mounts korrigiert: $fixed"
|
|
if [ "$fixed" -eq 0 ]; then
|
|
echo "Hinweis: kein Verzeichnis-Mount ersetzt. Bind-Mounts der Projekt-Container (nur Typ, Quelle, Ziel):"
|
|
for c in $(docker ps --format '{{.Names}}' | grep -E "_${PROJECT_ID}\$"); do
|
|
docker inspect "$c" --format '{{range .Mounts}}{{if eq .Type "bind"}}'"$c"' {{.Source}} -> {{.Destination}}{{"\n"}}{{end}}{{end}}'
|
|
done
|
|
fi
|