#!/usr/bin/env bash set -e # --------------------------------------------------------------------------------------------------------------------- # 1. testing for important env vars to be set [[ -z "$SYMFONY_DECRYPTION_SECRET" ]] && echo "SYMFONY_DECRYPTION_SECRET missing" && exit 1; [[ -z "$WEBROOT" ]] && echo "WEBROOT missing" && exit 1; [[ -f ~/.bash_profile ]] && source ~/.bash_profile # --------------------------------------------------------------------------------------------------------------------- # 2. syncing persistent shared data into new release and making sure folder structure exists touch ./public/maintenance.flag mkdir -p ../../shared/log mkdir -p ../../shared/sessions mkdir -p ../../shared/images mkdir -p ../../shared/videos mkdir -p ../../shared/assets mkdir -p ./var mkdir -p ./public/assets ln -sf ../../shared/log ./var/log ln -sf ../../shared/sessions ./var/sessions ln -sf ../../shared/images ./public/assets/images ln -sf ../../shared/videos ./public/assets/videos ln -sf ../../shared/assets ./public/assets/assets # --------------------------------------------------------------------------------------------------------------------- # 3. Update robots.txt echo "Sitemap: $WEBROOT/sitemap.xml" >> ./public/robots.txt # --------------------------------------------------------------------------------------------------------------------- # 4. decrypt secret vault into local prod environment php ./bin/console secrets:decrypt-to-local --force rm -rf ./config/secrets/prod/ # --------------------------------------------------------------------------------------------------------------------- # 5. move temp folder to release-x folder with the next higher number # and delete the release-x folder with the lowest number cd .. # Set the release folder prefix and initialize counter prefix="release-" counter=0 # Loop through all the folders with the given prefix and find the highest numbered release folder for folder in $prefix*; do if [[ -d $folder ]]; then num=${folder#$prefix} if [[ $num =~ ^[0-9]+$ && $num -gt $counter ]]; then counter=$num fi fi done # Rename the "temp" folder to the next highest release folder new_release="$prefix$((counter+1))" mv temp "$new_release" # --------------------------------------------------------------------------------------------------------------------- # 6. symlink new release ln -sfn $new_release latest cd $new_release # --------------------------------------------------------------------------------------------------------------------- # 7. run migrations and update plugins/apps php ./bin/console doctrine:migrations:migrate -n # --------------------------------------------------------------------------------------------------------------------- # 8. clean up and end maintenance mode php ./bin/console cache:clear rm -f ./public/maintenance.flag # --------------------------------------------------------------------------------------------------------------------- # 9. Clear the Webcache ~/bin/cachetool.phar opcache:reset # --------------------------------------------------------------------------------------------------------------------- # 10. remove all but the last four releases (including the one just created) # We do this after the deployment in order to reduce the chance of deleted folders reappearing because of old processes # still using them. ls -d ../release-* | sort -t- -k2n | head -n -4 | xargs --no-run-if-empty rm -rf