peliprint/scripts/commands/advanced/upgrade.sh

155 lines
No EOL
5 KiB
Bash

#!/bin/bash
Command() {
PRINT WARNING "This is an advanced feature, only proceed if you know what you are doing."
# Confirmation question for developer upgrade.
if [[ $1 == "remote" ]]; then
PRINT INPUT "Upgrading to the latest development build will update Blueprint to a remote version which might differ from the latest release. Continue? (y/N)"
read -r YN
if [[ ( ${YN} != "y"* ) && ( ${YN} != "Y"* ) ]]; then PRINT INFO "Upgrade cancelled.";exit 1;fi
YN=""
fi
# Confirmation question for both developer and stable upgrade.
PRINT INPUT "Upgrading will wipe your .blueprint folder and will deactivate all active extensions. Continue? (y/N)"
read -r YN
if [[ ( ${YN} != "y"* ) && ( ${YN} != "Y"* ) ]]; then PRINT INFO "Upgrade cancelled.";exit 1;fi
YN=""
# Last confirmation question for both developer and stable upgrade.
PRINT INPUT "This is the last warning before upgrading/wiping Blueprint. Type 'continue' to continue, all other input will be taken as 'no'."
read -r YN
if [[ ${YN} != "continue" ]]; then PRINT INFO "Upgrade cancelled.";exit 1;fi
YN=""
if [[ $1 == "remote" ]]; then PRINT INFO "Fetching and pulling latest commit.."
else PRINT INFO "Fetching and pulling latest release.."; fi
mkdir "$FOLDER/.tmp"
cp blueprint.sh .blueprint.sh.bak
HAS_DEV=false
if [[ -n $(find .blueprint/dev -maxdepth 1 -type f -not -name ".gitkeep" -print -quit) ]]; then
PRINT INFO "Backing up extension development files.."
mkdir -p "$FOLDER/.tmp/dev"
cp .blueprint/dev/* "$FOLDER/.tmp/dev/" -Rf
HAS_DEV=true
fi
mkdir -p "$FOLDER/.tmp/files"
cd "$FOLDER/.tmp/files" || cdhalt
if [[ $1 == "remote" ]]; then
if [[ $2 == "" ]]; then
REMOTE_REPOSITORY="https://github.com/$REPOSITORY.git"
else
if [[ $2 != "http://"* ]] && [[ $2 != "https://"* ]]; then
REMOTE_REPOSITORY="https://github.com/$2.git"
else
REMOTE_REPOSITORY="$2"
fi
fi
# download release
git clone "$REMOTE_REPOSITORY" main
else
# download latest release
LOCATION=$(curl -s https://api.github.com/repos/"$REPOSITORY"/releases/latest \
| grep "zipball_url" \
| awk '{ print $2 }' \
| sed 's/,$//' \
| sed 's/"//g' ) \
; curl -L -o main.zip "$LOCATION"
unzip main.zip
rm main.zip
mv ./* main
fi
if [[ ! -d "main" ]]; then
cd "$FOLDER" || cdhalt
rm -r "$FOLDER/.tmp" &>> "$BLUEPRINT__DEBUG"
rm "$FOLDER/.blueprint.sh.bak" &>> "$BLUEPRINT__DEBUG"
PRINT FATAL "Remote does not exist or encountered an error, try again later."
exit 1
fi
# Remove some files/directories that don't have to be moved to the Pterodactyl folder.
rm -r \
"main/.github" \
"main/.git" \
"main/.gitignore" \
"main/README.md" \
&>> "$BLUEPRINT__DEBUG"
# Copy fetched release files to the Pterodactyl directory and remove temp files.
cp -r main/* "$FOLDER"/
rm -r \
"main" \
"$FOLDER"/.blueprint \
"$FOLDER"/.tmp/files
cd "$FOLDER" || cdhalt
# Clean up folders with potentially broken symlinks.
rm \
"resources/views/blueprint/admin/wrappers/"* \
"resources/views/blueprint/dashboard/wrappers/"* \
"routes/blueprint/application/"* \
"routes/blueprint/client/"* \
"routes/blueprint/web/"* \
&>> /dev/null # cannot forward to debug dir because it does not exist
chmod +x blueprint.sh
sed -i -E \
-e "s|OWNERSHIP=\"www-data:www-data\" #;|OWNERSHIP=\"$OWNERSHIP\" #;|g" \
-e "s|WEBUSER=\"www-data\" #;|WEBUSER=\"$WEBUSER\" #;|g" \
-e "s|USERSHELL=\"/bin/bash\" #;|USERSHELL=\"$USERSHELL\" #;|g" \
"$FOLDER/blueprint.sh"
mv "$FOLDER/blueprint" "$FOLDER/.blueprint"
bash blueprint.sh --post-upgrade
# Ask user if they'd like to migrate their database.
PRINT INPUT "Would you like to migrate your database? (Y/n)"
read -r YN
if [[ ( $YN == "y"* ) || ( $YN == "Y"* ) || ( $YN == "" ) ]]; then
PRINT INFO "Running database migrations.."
php artisan migrate --force
php artisan up &>> "$BLUEPRINT__DEBUG"
else
PRINT INFO "Database migrations have been skipped."
fi
YN=""
if [[ ${HAS_DEV} == true ]]; then
PRINT INFO "Restoring extension development files.."
mkdir -p .blueprint/dev
cp "$FOLDER/.tmp/dev/"* .blueprint/dev -r
rm "$FOLDER/.tmp/dev" -rf
fi
rm -r "$FOLDER/.tmp"
# Post-upgrade checks.
PRINT INFO "Validating update.."
score=0
if dbValidate "blueprint.setupFinished"; then score=$((score+1))
else PRINT WARNING "'blueprint.setupFinished' could not be detected or found."; fi
# Finalize upgrade.
if [[ ${score} == 1 ]]; then
PRINT SUCCESS "Upgrade finished."
rm .blueprint.sh.bak
exit 0 # success
elif [[ ${score} == 0 ]]; then
PRINT FATAL "All checks have failed. The 'blueprint.sh' file has been reverted."
rm blueprint.sh
mv .blueprint.sh.bak blueprint.sh
exit 1 # error
else
PRINT FATAL "Some checks have failed. The 'blueprint.sh' file has been reverted."
rm blueprint.sh
mv .blueprint.sh.bak blueprint.sh
exit 1 # error
fi
}