d62e6c2dbe
Tessera CI/CD / Lint & Type Check (push) Successful in 53s
Tessera CI/CD / Tests (push) Failing after 2m14s
Tessera CI/CD / Desktop-Pakete bauen (push) Has been skipped
Tessera CI/CD / Build & Publish Images (push) Has been skipped
Tessera CI/CD / Sicherheitspruefung (nur Bericht) (push) Has been skipped
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
74 lines
2.7 KiB
Bash
74 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
# quick-261009-p0m, Task 5: Beweis, dass das Server-Abbild ohne Entwicklungswerkzeuge
|
|
# gegen eine FRISCHE Datenbank alle Migrationen anwendet und die API startet.
|
|
# Nur Testwerte; alles Angelegte wird per Falle entfernt. Druckt bei Erfolg
|
|
# "frische-datenbank ok".
|
|
set -u
|
|
|
|
IMAGE="${1:-tessera-ctl-api:latest}"
|
|
ID="p0m-fresh-$$"
|
|
NET="$ID-net"
|
|
DB="$ID-db"
|
|
API="$ID-api"
|
|
LOG="$(mktemp)"
|
|
|
|
cleanup() {
|
|
docker rm -f "$API" "$DB" >/dev/null 2>&1
|
|
docker network rm "$NET" >/dev/null 2>&1
|
|
rm -f "$LOG"
|
|
}
|
|
trap cleanup EXIT INT TERM HUP PIPE
|
|
|
|
fail() {
|
|
echo "FEHLER: $*" >&2
|
|
echo "--- Protokoll der API (letzte 40 Zeilen) ---" >&2
|
|
docker logs "$API" 2>&1 | tail -40 >&2
|
|
exit 1
|
|
}
|
|
|
|
docker network create "$NET" >/dev/null || { echo "FEHLER: Netz nicht anlegbar" >&2; exit 1; }
|
|
docker run -d --name "$DB" --network "$NET" \
|
|
-e POSTGRES_USER=tessera -e POSTGRES_PASSWORD=tessera_test -e POSTGRES_DB=tessera \
|
|
postgres:16-alpine >/dev/null || { echo "FEHLER: Datenbank startet nicht" >&2; exit 1; }
|
|
|
|
i=0
|
|
until docker exec "$DB" pg_isready -U tessera -d tessera >/dev/null 2>&1; do
|
|
i=$((i + 1))
|
|
[ "$i" -gt 60 ] && { echo "FEHLER: Datenbank wird nicht bereit" >&2; exit 1; }
|
|
sleep 1
|
|
done
|
|
# pg_isready meldet schon waehrend der Einrichtung "bereit"; kurz warten, dann
|
|
# eine echte Abfrage (die Einrichtung startet den Server einmal neu).
|
|
sleep 3
|
|
i=0
|
|
until docker exec "$DB" psql -U tessera -d tessera -tAc 'select 1' >/dev/null 2>&1; do
|
|
i=$((i + 1))
|
|
[ "$i" -gt 30 ] && { echo "FEHLER: Datenbank antwortet nicht" >&2; exit 1; }
|
|
sleep 1
|
|
done
|
|
|
|
KEY="$(head -c 32 /dev/urandom | od -An -tx1 | tr -d ' \n')"
|
|
docker run -d --name "$API" --network "$NET" \
|
|
-e "DATABASE_URL=postgresql://tessera:tessera_test@$DB:5432/tessera" \
|
|
-e "TESSERA_ENCRYPTION_KEY=$KEY" \
|
|
-e "JWT_SECRET=fresh-db-test-jwt-secret" \
|
|
-e TESSERA_ADMIN_USER=admin -e TESSERA_ADMIN_EMAIL=admin@tessera.local \
|
|
-e TESSERA_ADMIN_PASSWORD=fresh-db-test-pw -e TESSERA_FORCE_CHANGE=false \
|
|
"$IMAGE" >/dev/null || { echo "FEHLER: API startet nicht" >&2; exit 1; }
|
|
|
|
i=0
|
|
while :; do
|
|
docker logs "$API" >"$LOG" 2>&1
|
|
grep -q "Tessera API running" "$LOG" && break
|
|
[ "$(docker inspect -f '{{.State.Running}}' "$API" 2>/dev/null)" = "true" ] || fail "Container ist beendet, bevor die Startzeile kam"
|
|
i=$((i + 1))
|
|
[ "$i" -gt 120 ] && fail "keine Startzeile nach 120 Sekunden"
|
|
sleep 1
|
|
done
|
|
|
|
grep -qi "successfully applied" "$LOG" || fail "Prisma meldet nicht, dass die Migrationen angewendet wurden"
|
|
N="$(docker exec "$DB" psql -U tessera -d tessera -tAc "select count(*) from _prisma_migrations where finished_at is not null")"
|
|
[ "${N:-0}" -ge 1 ] || fail "keine abgeschlossene Migration in der Datenbank"
|
|
echo "migrationen=$N"
|
|
echo "frische-datenbank ok"
|