Add worktree sandbox and test env workflow
This commit is contained in:
101
scripts/test-env-up.sh
Executable file
101
scripts/test-env-up.sh
Executable file
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
REPO_ROOT=$(cd "${SCRIPT_DIR}/.." && pwd)
|
||||
DEFAULT_SANDBOX="${REPO_ROOT}/../galaxyforge-sandbox"
|
||||
SANDBOX_PATH="${1:-$DEFAULT_SANDBOX}"
|
||||
|
||||
if [[ "$SANDBOX_PATH" != /* ]]; then
|
||||
SANDBOX_PATH="${REPO_ROOT}/${SANDBOX_PATH}"
|
||||
fi
|
||||
|
||||
SANDBOX_PATH=$(realpath -m "$SANDBOX_PATH")
|
||||
|
||||
if [[ ! -d "$SANDBOX_PATH" ]]; then
|
||||
echo "Sandbox nicht gefunden. Erstelle Worktree..."
|
||||
"${SCRIPT_DIR}/worktree-init.sh" "$SANDBOX_PATH"
|
||||
fi
|
||||
|
||||
"${SCRIPT_DIR}/worktree-sync.sh" "$SANDBOX_PATH"
|
||||
|
||||
if [[ ! -f "$SANDBOX_PATH/.env" ]]; then
|
||||
cat <<'ENV' > "$SANDBOX_PATH/.env"
|
||||
APP_ENV=test
|
||||
DEV_MODE=1
|
||||
DEV_USER_ID=change-me
|
||||
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=5432
|
||||
DB_NAME=galaxyforge
|
||||
DB_TEST_NAME=galaxyforge_test
|
||||
DB_USER=change-me
|
||||
DB_PASS=your-strong-password
|
||||
|
||||
# Nur Platzhalter. Vor Prod aendern.
|
||||
ENV
|
||||
echo "Lokale .env in der Sandbox erzeugt: $SANDBOX_PATH/.env"
|
||||
fi
|
||||
|
||||
if [[ ! -f "$SANDBOX_PATH/docker-compose.yml" ]]; then
|
||||
echo "Fehler: docker-compose.yml fehlt in der Sandbox: $SANDBOX_PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
(
|
||||
cd "$SANDBOX_PATH"
|
||||
docker compose up -d --build
|
||||
)
|
||||
|
||||
set -a
|
||||
source "$SANDBOX_PATH/.env"
|
||||
set +a
|
||||
|
||||
DB_USER="${DB_USER:-change-me}"
|
||||
DB_NAME="${DB_NAME:-galaxyforge}"
|
||||
DB_TEST_NAME="${DB_TEST_NAME:-galaxyforge_test}"
|
||||
DB_PASS="${DB_PASS:-your-strong-password}"
|
||||
|
||||
READY=0
|
||||
for _ in {1..30}; do
|
||||
if (cd "$SANDBOX_PATH" && docker compose exec -T db pg_isready -U "$DB_USER" >/dev/null 2>&1); then
|
||||
READY=1
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
if [[ "$READY" != "1" ]]; then
|
||||
echo "Fehler: Postgres ist nicht erreichbar." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$DB_TEST_NAME" != "$DB_NAME" ]]; then
|
||||
if ! (cd "$SANDBOX_PATH" && docker compose exec -T db env PGPASSWORD="$DB_PASS" psql -U "$DB_USER" -d postgres -tc "SELECT 1 FROM pg_database WHERE datname = '${DB_TEST_NAME}'" | grep -q 1); then
|
||||
(cd "$SANDBOX_PATH" && docker compose exec -T db env PGPASSWORD="$DB_PASS" psql -U "$DB_USER" -d postgres -c "CREATE DATABASE \"${DB_TEST_NAME}\"")
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ ! -f "$SANDBOX_PATH/server/vendor/autoload.php" ]]; then
|
||||
if ! command -v composer >/dev/null 2>&1; then
|
||||
echo "Fehler: composer nicht gefunden. Bitte installieren und erneut versuchen." >&2
|
||||
exit 1
|
||||
fi
|
||||
(cd "$SANDBOX_PATH/server" && composer install)
|
||||
fi
|
||||
|
||||
(
|
||||
cd "$SANDBOX_PATH/server"
|
||||
php db/migrate.php
|
||||
php db/seed.php
|
||||
)
|
||||
|
||||
echo "Testumgebung laeuft. Starte PHP-Server (Stop mit CTRL+C)."
|
||||
echo "- http://localhost:8000/"
|
||||
echo "- http://localhost:8000/m"
|
||||
echo "- http://localhost:8000/api/health"
|
||||
|
||||
(
|
||||
cd "$SANDBOX_PATH"
|
||||
php -S localhost:8000 -t web/desktop/public
|
||||
)
|
||||
Reference in New Issue
Block a user