75 lines
2.4 KiB
Bash
Executable File
75 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Usage: ticket-setup <ticket-nr> <referenz-projekt>
|
|
# Legt ~/arbeit/tickets/<nr> als Kopie des Referenzprojekts an,
|
|
# spielt den Referenz-Snapshot ein und stellt alles auf <nr>.ddev.site um.
|
|
set -euo pipefail
|
|
|
|
TICKET_NR="$1"
|
|
REF="${2%/}"
|
|
ZIEL="$HOME/arbeit/tickets/$TICKET_NR"
|
|
SNAP="referenz-$(date +%d-%m-%y)"
|
|
URL="https://$TICKET_NR.ddev.site"
|
|
|
|
if [ ! -d "$REF/.ddev" ]; then
|
|
echo "Kein ddev-Projekt: $REF"
|
|
exit 1
|
|
fi
|
|
if [ -e "$ZIEL" ]; then
|
|
echo "$ZIEL existiert bereits. Vorher loeschen."
|
|
exit 1
|
|
fi
|
|
|
|
# ddev-Name des Referenzprojekts = dessen bisheriger Host <name>.ddev.site
|
|
REF_NAME=$(sed -nE 's/^name:[[:space:]]*"?([^"[:space:]]+)"?.*/\1/p' "$REF/.ddev/config.yaml" | head -1)
|
|
if [ -z "$REF_NAME" ]; then
|
|
echo "Kein name: in $REF/.ddev/config.yaml gefunden."
|
|
exit 1
|
|
fi
|
|
|
|
# 1. Referenz-Snapshot mit heutigem Datum sicherstellen
|
|
if compgen -G "$REF/.ddev/db_snapshots/$SNAP-*" > /dev/null; then
|
|
echo "Snapshot $SNAP vorhanden."
|
|
else
|
|
echo "Snapshot $SNAP fehlt - wird im Referenzprojekt erzeugt."
|
|
( cd "$REF" && ddev start && ddev snapshot --name="$SNAP" )
|
|
fi
|
|
|
|
# 2. Projekt kopieren (ohne fremde Snapshots und ohne Cache)
|
|
echo "Kopiere $REF -> $ZIEL"
|
|
mkdir -p "$ZIEL"
|
|
rsync -a --info=progress2 \
|
|
--exclude='/.ddev/db_snapshots/' \
|
|
--exclude='/var/cache/' \
|
|
"$REF/" "$ZIEL/"
|
|
|
|
mkdir -p "$ZIEL/.ddev/db_snapshots"
|
|
cp "$REF/.ddev/db_snapshots/$SNAP"-* "$ZIEL/.ddev/db_snapshots/"
|
|
|
|
# Vom Referenzprojekt mitkopierte Traefik-Router loeschen. Sonst kollidieren die
|
|
# Router-Namen mit dem Referenzprojekt: traefik dedupliziert, der Healthcheck
|
|
# zaehlt aber je Datei und laeuft 60 s in den Timeout. ddev legt sie neu an.
|
|
for f in "$ZIEL/.ddev/traefik/config"/*.yaml; do
|
|
[ -e "$f" ] || continue
|
|
if head -1 "$f" | grep -q '^#ddev-generated'; then
|
|
rm -f "$f"
|
|
fi
|
|
done
|
|
|
|
# 3. ddev und Shopware auf die Ticket-URL umstellen
|
|
sed -i -E "s|^name:.*|name: \"$TICKET_NR\"|" "$ZIEL/.ddev/config.yaml"
|
|
if [ -f "$ZIEL/.env.local" ]; then
|
|
sed -i -E "s|^APP_URL=.*|APP_URL=\"$URL\"|" "$ZIEL/.env.local"
|
|
fi
|
|
|
|
cd "$ZIEL"
|
|
ddev start
|
|
ddev snapshot restore "$SNAP"
|
|
# Nur die Domains des Referenz-Hosts umbiegen. Ein pauschales Update wuerde
|
|
# mehrere Sales Channels auf dieselbe URL setzen (unique index auf url).
|
|
ddev exec bin/console sales-channel:update:domain "$TICKET_NR.ddev.site" \
|
|
--previous-domain "$REF_NAME.ddev.site"
|
|
ddev exec bin/console cache:clear
|
|
|
|
echo
|
|
echo "Fertig: $URL"
|