a5f99e52e3
- apps/api/scripts/migrate-and-start.sh: TESSERA_MIGRATE_DATABASE_URL fuer den Migrationsschritt, DATABASE_URL bleibt unveraendert fuer den Laufzeitschritt; leer/nicht gesetzt = bisheriges Verhalten - Dockerfile kopiert scripts/ und ruft das Skript als CMD auf; exec statt &&-Verkettung, damit Signale den Node-Prozess erreichen - docker-compose.yml/.prod.yml reichen TESSERA_MIGRATE_DATABASE_URL durch (leerer Vorgabewert); docker-compose.dev.yml/.ci.yml unveraendert - .env.example erklaert beide Variablen mit Platzhaltern, Umstellung bleibt auskommentiert - 5 Tests in start-script.spec.ts (rot vor dem Skript, jetzt gruen) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FYZcd3SSmo14QTqWx2KKzU
51 lines
2.1 KiB
Bash
Executable File
51 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
# WINDOWS #18 — trennt die Verbindung des Migrationsschritts von der
|
|
# Verbindung des Laufzeitschritts (T-DGJ-03).
|
|
#
|
|
# `prisma migrate deploy` braucht die Rechte des Tabelleneigentuemers, um DDL
|
|
# auszufuehren. Die Anwendung soll genau diese Rechte NICHT haben — sonst
|
|
# waere die Rollentrennung aus Migration 20260909130000_rls_app_role wieder
|
|
# verloren. Ohne getrennte Verbindungen fuer Migration und Laufzeit ist eine
|
|
# Rollentrennung deshalb nicht moeglich.
|
|
#
|
|
# Vorgabe (ohne gesetztes TESSERA_MIGRATE_DATABASE_URL): beide Schritte
|
|
# nutzen DATABASE_URL — exakt der bisherige Ablauf, unveraendert fuer
|
|
# lokale Entwicklung, CI und den Server, bis
|
|
# docs/mandantentrennung-datenbankrolle.md abgearbeitet ist.
|
|
set -e
|
|
|
|
if [ -z "$DATABASE_URL" ]; then
|
|
echo "FEHLER: DATABASE_URL ist nicht gesetzt." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# In sh ersetzt ${VAR:-fallback} auch eine gesetzte, aber leere Variable
|
|
# durch den Fallback — Compose reicht nicht belegte Variablen als leere
|
|
# Zeichenketten weiter, das soll wie "nicht gesetzt" behandelt werden.
|
|
MIGRATE_URL="${TESSERA_MIGRATE_DATABASE_URL:-$DATABASE_URL}"
|
|
|
|
if [ -n "$TESSERA_MIGRATE_DATABASE_URL" ]; then
|
|
MIGRATE_SOURCE="TESSERA_MIGRATE_DATABASE_URL"
|
|
else
|
|
MIGRATE_SOURCE="DATABASE_URL"
|
|
fi
|
|
RUNTIME_SOURCE="DATABASE_URL"
|
|
|
|
if [ "$1" = "--print-plan" ]; then
|
|
# Nur Variablennamen ausgeben, niemals Werte — diese Betriebsart existiert
|
|
# allein, damit die CI das Verhalten ohne Datenbank pruefen kann.
|
|
echo "Migrationsschritt verwendet: $MIGRATE_SOURCE"
|
|
echo "Laufzeitschritt verwendet: $RUNTIME_SOURCE"
|
|
exit 0
|
|
fi
|
|
|
|
# DATABASE_URL nur fuer diesen einen Aufruf auf die Migrationsverbindung
|
|
# setzen (vorangestellte Zuweisung, kein export) — der nachfolgende exec
|
|
# erbt die unveraenderte DATABASE_URL aus der Umgebung.
|
|
DATABASE_URL="$MIGRATE_URL" apps/api/node_modules/.bin/prisma migrate deploy --schema apps/api/prisma/schema.prisma
|
|
|
|
# exec statt Aufruf, damit Signale (z. B. SIGTERM bei docker stop) den
|
|
# Node-Prozess erreichen. Die bisherige CMD-Zeile hatte dieses Problem
|
|
# ebenfalls und loeste es nicht; hier wird es nebenbei mitbehoben.
|
|
exec node apps/api/dist/main.js
|