Files
ddev-helper/host/gambio
T

311 lines
7.8 KiB
Bash
Raw Normal View History

2025-07-03 08:13:28 +02:00
#!/bin/bash
## Description: gambio helper scripts
## Usage: gambio [flags] [args]
## ProjectTypes: php
needs_cleanup=false
2025-07-03 08:13:28 +02:00
# Funktion, die aufgerufen wird, wenn Strg+C gedrückt wird
cleanup()
{
error=$?
if [ "$needs_cleanup" == false ] ; then
exit 0
fi
case $error in
2025-07-03 08:13:28 +02:00
0)
echo "Das Skript wurde erfolgreich beendet."
;;
2025-07-03 08:13:28 +02:00
# 1)
# echo "Ein allgemeiner Fehler ist aufgetreten."
# ;;
# 255)
# echo "Das Skript wurde mit Fehler 255 (unbekannter schwerer Fehler) beendet."
# ;;
*)
echo "Das Skript wurde mit Exit-Code $error beendet."
2025-07-03 08:13:28 +02:00
echo "Beende das Teilen und konfiguriere auf lokalen Betrieb."
ddev gambio unshare
;;
esac
2025-07-03 08:13:28 +02:00
exit 0
2025-07-03 08:13:28 +02:00
}
# "trap" fängt EXIT ab und ruft die Funktion "cleanup" auf
trap cleanup EXIT
2025-07-03 08:13:28 +02:00
set_shop_domain()
{
if [ "$1" = ngrok ] ; then
echo "${DDEV_APPROOT}"
# Lese die ngrok_args aus der .ddev/config.yaml
NGROK_ARGS=$(grep 'ngrok_args' "${DDEV_APPROOT}"/.ddev/config.yaml)
# Extrahiere das Argument --domain aus ngrok_args
SHOP_URL="https://$(echo "$NGROK_ARGS" | grep -oP '(?<=--domain )\S+')"
elif [ "$1" = devtn ] ; then
echo "${DDEV_APPROOT}"
SHOP_URL="https://share.hq.lenk.gmbh"
elif [ "$1" = share ] ; then
echo "${DDEV_APPROOT}"
SHOP_URL="https://${DDEV_SITENAME,,}.d.lenk.gmbh"
elif [ "$1" = expose ] ; then
2025-07-03 08:13:28 +02:00
echo "${DDEV_APPROOT}"
SHOP_URL="https://${DDEV_SITENAME,,}.dev.lenk.gmbh"
elif [ "$1" = unshare ] ; then
SHOP_URL=${DDEV_PRIMARY_URL}
fi
echo "Konfiguriere den Shop auf folgende Domain: $SHOP_URL"
# Liste der Konfigurationsdateien
files="includes/configure.php admin/includes/configure.php"
# Durchlaufe jede Datei in dem Array
for file_path in $files
do
# sed Befehle zum Setzen der Shop-Domain
sed -i "s|define('HTTP_SERVER', '.*')|define('HTTP_SERVER', '${SHOP_URL}')|g" "${DDEV_APPROOT}/$file_path"
sed -i "s|define('HTTPS_SERVER', '.*')|define('HTTPS_SERVER', '${SHOP_URL}')|g" "${DDEV_APPROOT}/$file_path"
sed -i "s|define('HTTP_CATALOG_SERVER', '.*')|define('HTTP_CATALOG_SERVER', '${SHOP_URL}')|g" "${DDEV_APPROOT}/$file_path"
sed -i "s|define('HTTPS_CATALOG_SERVER', '.*')|define('HTTPS_CATALOG_SERVER', '${SHOP_URL}')|g" "${DDEV_APPROOT}/$file_path"
if [ "$1" = expose ] ; then
sed -i "s|define('HTTP_SERVER', '.*')|define('HTTP_SERVER', '')|g" "${DDEV_APPROOT}/$file_path"
sed -i "s|define('ENABLE_SSL', true)|define('ENABLE_SSL', false)|g" "${DDEV_APPROOT}/$file_path"
elif [ "$1" = unshare ] ; then
sed -i "s|define('ENABLE_SSL', false)|define('ENABLE_SSL', true)|g" "${DDEV_APPROOT}/$file_path"
fi
2025-07-03 08:13:28 +02:00
done
}
clear_caches()
{
echo "Leere die Caches"
if [ "$(ls -A "${DDEV_APPROOT}"/cache)" ]; then
rm -r "${DDEV_APPROOT}"/cache/*
else
echo "Verzeichnis 'cache' bereits geleert..."
fi
if [ "$(ls -A "${DDEV_APPROOT}"/public/theme)" ]; then
rm -r "${DDEV_APPROOT}"/public/theme/*
else
echo "Verzeichnis 'public/theme' bereits geleert..."
fi
}
get_gambio_version()
{
local application_file="${DDEV_APPROOT}/GambioCore/Application/Application.php"
if [ ! -f "$application_file" ]; then
echo "unknown"
return 1
fi
grep -E "public const VERSION[[:space:]]*=" "$application_file" \
| head -n 1 \
| sed -E "s/.*public const VERSION[[:space:]]*=[[:space:]]*['\"]([^'\"]+)['\"].*/\1/"
}
normalize_gambio_version()
{
echo "$1" \
| sed -E 's/^v//' \
| sed -E 's/[^0-9.].*$//'
}
compare_gambio_versions()
{
local version_a
local version_b
local a_major
local a_minor
local a_patch
local b_major
local b_minor
local b_patch
version_a=$(normalize_gambio_version "$1")
version_b=$(normalize_gambio_version "$2")
IFS='.' read -r a_major a_minor a_patch <<< "$version_a"
IFS='.' read -r b_major b_minor b_patch <<< "$version_b"
a_major=${a_major:-0}
a_minor=${a_minor:-0}
a_patch=${a_patch:-0}
b_major=${b_major:-0}
b_minor=${b_minor:-0}
b_patch=${b_patch:-0}
a_major=$((10#$a_major))
a_minor=$((10#$a_minor))
a_patch=$((10#$a_patch))
b_major=$((10#$b_major))
b_minor=$((10#$b_minor))
b_patch=$((10#$b_patch))
if [ "$a_major" -gt "$b_major" ]; then
echo 1
return 0
elif [ "$a_major" -lt "$b_major" ]; then
echo -1
return 0
fi
if [ "$a_minor" -gt "$b_minor" ]; then
echo 1
return 0
elif [ "$a_minor" -lt "$b_minor" ]; then
echo -1
return 0
fi
if [ "$a_patch" -gt "$b_patch" ]; then
echo 1
return 0
elif [ "$a_patch" -lt "$b_patch" ]; then
echo -1
return 0
fi
echo 0
}
gambio_version_matches()
{
local version_a="$1"
local operator="$2"
local version_b="$3"
local comparison
comparison=$(compare_gambio_versions "$version_a" "$version_b")
case "$operator" in
">"|"-gt")
[ "$comparison" -gt 0 ]
;;
">="|"-ge")
[ "$comparison" -ge 0 ]
;;
"<"|"-lt")
[ "$comparison" -lt 0 ]
;;
"<="|"-le")
[ "$comparison" -le 0 ]
;;
"="|"=="|"-eq")
[ "$comparison" -eq 0 ]
;;
"!="|"-ne")
[ "$comparison" -ne 0 ]
;;
*)
echo "Ungültiger Versionsoperator: $operator" >&2
return 2
;;
esac
}
get_max_compatible_php_version()
{
local gambio_version="$1"
if [ -z "$gambio_version" ] || [ "$gambio_version" = "unknown" ]; then
return 1
fi
if ! gambio_version_matches "$gambio_version" ">" "3.0.0"; then
return 1
fi
if gambio_version_matches "$gambio_version" ">=" "26.03.0"; then
echo "8.3"
elif gambio_version_matches "$gambio_version" ">=" "4.9.0"; then
echo "8.2"
elif gambio_version_matches "$gambio_version" ">=" "4.8.0"; then
echo "8.1"
elif gambio_version_matches "$gambio_version" ">=" "4.7.0"; then
echo "8.0"
elif gambio_version_matches "$gambio_version" ">=" "4.1.0"; then
echo "7.4"
elif gambio_version_matches "$gambio_version" ">=" "3.13.0"; then
echo "7.3"
elif gambio_version_matches "$gambio_version" ">=" "3.10.0"; then
echo "7.2"
elif gambio_version_matches "$gambio_version" ">=" "3.8.0"; then
echo "7.1"
elif gambio_version_matches "$gambio_version" ">=" "3.4.0"; then
echo "7.0"
else
echo "5.6"
fi
}
2025-07-03 08:13:28 +02:00
case $1 in
share|unshare|devtn|ngrok|expose)
2025-07-03 08:13:28 +02:00
set_shop_domain "$@"
clear_caches "$@"
needs_cleanup=true
2025-07-03 08:13:28 +02:00
if [ "$1" = ngrok ] ; then
echo "teile Shop via ngrok..."
ddev share
elif [ "$1" = devtn ] ; then
echo "teile Shop via share.hq.lenk.gmbh..."
ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=4 remotetunnel@monitor.hq.lenk.gmbh -p 2222 -R 65318:localhost:"$DDEV_HOST_WEBSERVER_PORT"
elif [ "$1" = share ] ; then
echo "teile Shop via d.lenk.gmbh..."
ssh -p 2222 -R "${DDEV_SITENAME,,}":80:localhost:"$DDEV_HOST_WEBSERVER_PORT" dev.lenk.gmbh
elif [ "$1" = expose ] ; then
echo "teile Shop via dev.lenk.gmbh..."
expose share "${DDEV_HOSTNAME}" --subdomain="${DDEV_SITENAME,,}"
fi
;;
init)
GAMBIO_VERSION=$(get_gambio_version || true)
PHP_VERSION=$(get_max_compatible_php_version "$GAMBIO_VERSION" || true)
if [ -z "$PHP_VERSION" ]; then
echo "Für Gambio-Version '$GAMBIO_VERSION' konnte keine kompatible PHP-Version ermittelt werden."
echo "Die automatische DDEV-Konfiguration wird abgebrochen."
exit 1
2025-07-03 08:13:28 +02:00
fi
echo "Erkannte Gambio-Version: $GAMBIO_VERSION"
echo "Maximal kompatible PHP-Version: $PHP_VERSION"
ddev config \
--project-type=php \
--docroot="" \
--php-version="$PHP_VERSION"\
--webserver-type=apache-fpm
echo "DDEV wurde für Gambio $GAMBIO_VERSION mit PHP $PHP_VERSION konfiguriert."
2025-07-03 08:13:28 +02:00
;;
version)
GAMBIO_VERSION=$(get_gambio_version)
echo "Erkannte Gambio-Version: $GAMBIO_VERSION"
;;
2025-07-03 08:13:28 +02:00
*)
echo "Invalid argument: $1"
;;
esac