#!/bin/bash # Default-Werte für Parameter SKIP_CLIENT=false SKIP_MIGRATION=false INIT_MODE=false # Projekt-Name PROJECT_NAME="Imaq" # Konfigurierbare Pfade BASE_DIR="/var/www/vhosts/app-imaq-pilot.de" GIT_REPO_PATH="${BASE_DIR}/git_repo/imaq" ANGULAR_PATH="${BASE_DIR}/angular" HTTPDOCS_PATH="${BASE_DIR}/httpdocs" PUBLIC_PATH="${HTTPDOCS_PATH}/public" CLIENT_PATH="${PUBLIC_PATH}/client" PHP_PATH="/opt/plesk/php/8.3/bin" ANGULAR_ENVIRONMENT="production" # Angular Analytics Abfrage disablen export NG_CLI_ANALYTICS=false # Funktion zum Überprüfen der Pfade check_paths() { local error=false # Prüfe ob alle erforderlichen Pfade existieren if [ ! -d "$GIT_REPO_PATH" ]; then echo "$(tput setab 1)ERROR: Git repository path does not exist: ${GIT_REPO_PATH}$(tput sgr 0)" error=true fi if [ ! -d "$BASE_DIR" ]; then echo "$(tput setab 1)ERROR: Base directory does not exist: ${BASE_DIR}$(tput sgr 0)" error=true fi # Im Init-Mode müssen nicht alle Verzeichnisse existieren if [ "$INIT_MODE" = false ]; then if [ ! -d "$ANGULAR_PATH" ]; then echo "$(tput setab 1)ERROR: Angular path does not exist: ${ANGULAR_PATH}$(tput sgr 0)" error=true fi if [ ! -d "$HTTPDOCS_PATH" ]; then echo "$(tput setab 1)ERROR: Httpdocs path does not exist: ${HTTPDOCS_PATH}$(tput sgr 0)" error=true fi if [ ! -d "$PUBLIC_PATH" ]; then echo "$(tput setab 1)ERROR: Public path does not exist: ${PUBLIC_PATH}$(tput sgr 0)" error=true fi fi # Prüfe ob PHP im angegebenen Pfad existiert if [ ! -d "$PHP_PATH" ]; then echo "$(tput setab 1)ERROR: PHP path does not exist: ${PHP_PATH}$(tput sgr 0)" error=true fi # Wenn Fehler gefunden wurden, beende das Skript if [ "$error" = true ]; then echo "$(tput setab 1)Critical errors found. Please check your path configuration at the top of the script.$(tput sgr 0)" exit 1 fi } # Parameter verarbeiten while getopts ":cmi" opt; do case $opt in c) SKIP_CLIENT=true ;; m) SKIP_MIGRATION=true ;; i) INIT_MODE=true ;; \?) echo "Unknown option: -$OPTARG" >&2; exit 1 ;; esac done # Pfade überprüfen bevor irgendwelche Operationen durchgeführt werden check_paths export PATH=${PHP_PATH}:$PATH # Git Pull durchführen cd "${GIT_REPO_PATH}" || { echo "$(tput setab 1)Failed to change to repository directory$(tput sgr 0)"; exit 1; } sudo git pull echo "$(tput setab 2)${PROJECT_NAME} has been PULLED$(tput sgr 0)" # Client Update nur wenn nicht übersprungen if [ "$SKIP_CLIENT" = false ]; then echo "$(tput setab 2)Client update$(tput sgr 0)" # Im Init-Mode keine Dateien löschen if [ "$INIT_MODE" = false ]; then echo "$(tput setab 2)delete angular files$(tput sgr 0)" cd "${ANGULAR_PATH}" || { echo "$(tput setab 1)Failed to change to angular directory$(tput sgr 0)"; exit 1; } find . -maxdepth 1 ! -name 'node_modules' ! -name '.' -exec rm -rf {} + fi # Kopiere normale Dateien cp -r "${GIT_REPO_PATH}/angular/"* "${ANGULAR_PATH}" 2>/dev/null || true # Kopiere versteckte Dateien nur wenn sie existieren HIDDEN_FILES=$(find "${GIT_REPO_PATH}/angular" -maxdepth 1 -name ".*" -not -name "." -not -name "..") if [ ! -z "$HIDDEN_FILES" ]; then cp -r ${HIDDEN_FILES} "${ANGULAR_PATH}" fi cd "${ANGULAR_PATH}" || { echo "$(tput setab 1)Failed to change to angular directory$(tput sgr 0)"; exit 1; } npm install npx ng analytics off npx ng build --configuration ${ANGULAR_ENVIRONMENT} if [ -d "${CLIENT_PATH}/browser" ]; then mv "${CLIENT_PATH}/browser/"* "${CLIENT_PATH}/" rm -rf "${CLIENT_PATH}/browser" fi echo "$(tput setab 2)Client files have been updated$(tput sgr 0)" else echo "$(tput setab 3)Skip client update$(tput sgr 0)" fi # Arrays mit Dateien und Verzeichnissen die kopiert werden sollen COPY_ITEMS="composer.lock composer.json config migrations src templates" PUBLIC_FILES="index.php .htaccess .htpasswd static" # Dateien und Verzeichnisse kopieren for item in $COPY_ITEMS; do if [ -e "${GIT_REPO_PATH}/httpdocs/${item}" ]; then # Im Init-Mode keine Dateien löschen if [ "$INIT_MODE" = false ]; then rm -rf "${HTTPDOCS_PATH}/${item}" fi cp -rf "${GIT_REPO_PATH}/httpdocs/${item}" "${HTTPDOCS_PATH}" else echo "$(tput setab 3)Warning: Source item does not exist: ${GIT_REPO_PATH}/httpdocs/${item}$(tput sgr 0)" fi done # Spezielle Dateien im public Verzeichnis kopieren for file in $PUBLIC_FILES; do if [ -e "${GIT_REPO_PATH}/httpdocs/public/${file}" ]; then # Im Init-Mode keine Dateien löschen if [ "$INIT_MODE" = false ]; then rm -rf "${PUBLIC_PATH}/${file}" fi cp -rf "${GIT_REPO_PATH}/httpdocs/public/${file}" "${PUBLIC_PATH}" else echo "$(tput setab 3)Warning: Source file does not exist: ${GIT_REPO_PATH}/httpdocs/public/${file}$(tput sgr 0)" fi done echo "$(tput setab 2)Files have been copied$(tput sgr 0)" cd "${HTTPDOCS_PATH}" || { echo "$(tput setab 1)Failed to change to httpdocs directory$(tput sgr 0)"; exit 1; } export COMPOSER_ALLOW_SUPERUSER=1 composer update --no-interaction echo "$(tput setab 2)COMPOSER UPDATED updated$(tput sgr 0)" # Migration nur wenn nicht übersprungen if [ "$SKIP_MIGRATION" = false ]; then php "${HTTPDOCS_PATH}/bin/console" doctrine:migration:migrate --no-interaction echo "$(tput setab 2)DATABASE SCHEMA updated$(tput sgr 0)" else echo "$(tput setab 3)Skip migrations$(tput sgr 0)" fi # Cache leeren if [ -d "${HTTPDOCS_PATH}/var/cache" ]; then cd "${HTTPDOCS_PATH}/var/cache/" || { echo "$(tput setab 1)Failed to change to cache directory$(tput sgr 0)"; exit 1; } rm -R * php "${HTTPDOCS_PATH}/bin/console" cache:clear php "${HTTPDOCS_PATH}/bin/console" cache:warmup echo "$(tput setab 2)CACHE HAS BEEN CLEARED$(tput sgr 0)" else echo "$(tput setab 3)Warning: Cache directory does not exist$(tput sgr 0)" fi cd "${HTTPDOCS_PATH}" || { echo "$(tput setab 1)Failed to change to httpdocs directory$(tput sgr 0)"; exit 1; } chmod 777 -R var/ echo "$(tput setab 7)$(tput setaf 1)THINK ABOUT POSSIBLE PATCHES!" echo "You have updated ${PROJECT_NAME}!$(tput sgr 0)"