#!/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" 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 # 0. Fremde Traefik-Router aus allen Projekten werfen. Sonst blockiert ein # doppelter Router-Name den gemeinsamen ddev-Router und ddev start laeuft # in den 60-Sekunden-Timeout. "$(dirname "$0")/traefik-aufraeumen" # 1. Referenz-Snapshot neu ziehen, alten wegwerfen echo "Snapshot $SNAP wird im Referenzprojekt neu erzeugt." rm -f "$REF/.ddev/db_snapshots/$SNAP"-* ( cd "$REF" && ddev start && ddev snapshot --name="$SNAP" ) # 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"