#!/bin/bash # Usage: ticket-setup # Legt ~/arbeit/tickets/ als Kopie des Referenzprojekts an, # spielt den Referenz-Snapshot ein und stellt alles auf .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 .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"