Fix self update

This commit is contained in:
Jiří Štefka 2023-02-23 07:54:20 +01:00 committed by GitHub
parent 8ab5b31fd3
commit 505a6a8ad5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -7,7 +7,7 @@
# and acknowledge the original script and author. # # and acknowledge the original script and author. #
############################################################################################################# #############################################################################################################
CURRENT_VERSION="1.0.0" CURRENT_VERSION="v1.0.0"
# -------------------------------------------------- # --------------------------------------------------
# You shouldn't need to change anything in this file # You shouldn't need to change anything in this file
@ -356,13 +356,50 @@ function launch_server {
java $java_launchoptions -jar "$(basename ./paper-*.jar)" $mc_launchoptions java $java_launchoptions -jar "$(basename ./paper-*.jar)" $mc_launchoptions
} }
# Download the update for the script
function self_update {
# Download the latest version of the script
echo "Updating script..."
# Download the file into start_new.sh
curl -sLJ -w '%{http_code}\n' "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_VERSION/start.sh" > start_new.sh
# Check if the download was successful by checking the last line of the file for 200
if [[ $(cat start_new.sh | tail -n 1) == 200 ]]; then
# Remove the last line of the file
sed -i '$d' start_new.sh
# Make the file executable
chmod +x start_new.sh
# Remove the old script
rm start.sh
echo "Removed old script"
# Rename the new script
mv start_new.sh start.sh
echo "Renamed new script"
echo "Script updated successfully."
echo
read -p "Do you want to restart the script? [y/N] " restart
if [ "$restart" == "y" ] || [ "$restart" == "Y" ]; then
echo "Restarting..."
# Execute the new script
exec "./start.sh" "$@"
exit 0
else
echo "Exiting..."
exit 0
fi
else
echo "Failed to update script."
rm start_new.sh
exit 5
fi
}
# Function to update the script # Function to update the script
function check_self_update { function check_self_update {
# Send a request to the GitHub API to retrieve the latest release # Send a request to the GitHub API to retrieve the latest release
response=$(curl -sL "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest") response=$(curl -sL "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest")
# Extract the latest version from the response # Extract the latest version from the response
LATEST_VERSION=$($response | jq -r ".tag_name") LATEST_VERSION=$(echo $response | jq -r ".tag_name")
# Compare the current version with the latest version # Compare the current version with the latest version
if [[ "$CURRENT_VERSION" != "$LATEST_VERSION" ]]; then if [[ "$CURRENT_VERSION" != "$LATEST_VERSION" ]]; then
@ -370,7 +407,8 @@ function check_self_update {
echo "Current version: $CURRENT_VERSION" echo "Current version: $CURRENT_VERSION"
echo "Latest version: $LATEST_VERSION" echo "Latest version: $LATEST_VERSION"
echo echo
echo "The script will continue in 15 seconds." echo "The script will continue without updating in 15 seconds."
echo "If you decide to update it is your responsibility to check the release notes for any breaking changes."
read -t 15 -p "Do you want to read the release notes? [y/N]" read -t 15 -p "Do you want to read the release notes? [y/N]"
if [ "$REPLY" == "y" ] || [ "$REPLY" == "Y" ]; then if [ "$REPLY" == "y" ] || [ "$REPLY" == "Y" ]; then
# Extract the release notes from the response # Extract the release notes from the response
@ -380,47 +418,29 @@ function check_self_update {
echo "$RELEASE_NOTES" | less echo "$RELEASE_NOTES" | less
# Ask the user if they want to update # Ask the user if they want to update
echo "The script will continue in 15 seconds." echo "The script will continue without updating in 15 seconds."
echo "If you decide to update it is your responsibility to check the release notes for any breaking changes." echo "If you decide to update it is your responsibility to check the release notes for any breaking changes."
read -t 15 -p "Do you want to update? [y/N] " update read -t 15 -p "Do you want to update? [y/N] " update
if [ "$update" == "y" ] || [ "$update" == "Y" ]; then if [ "$update" == "y" ] || [ "$update" == "Y" ]; then
download_self_update self_update
else else
echo "Skipping update." echo "Skipping update."
return return
fi fi
fi fi
fi fi
# Download the update for the script
function self_update {
# Download the latest version of the script
echo "Updating script..."
if curl --fail -sLJO "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_VERSION/start.sh"; then
chmod +x script.sh
echo "Script updated successfully."
echo
read -p "Do you want to restart the script? [y/N] " restart
if [ "$restart" == "y" ] || [ "$restart" == "Y" ]; then
echo "Restarting..."
exec "./script.sh" "$@"
exit 0
else
echo "Exiting..."
exit 0
fi
else
echo "Failed to update script."
fi
} }
# Load config # Load config
function load_config { function load_config {
# Check if the config file exists # Check if the config file exists
if [ ! -f launch.cfg ]; then if [ ! -f launch.cfg ]; then
sed -i '$d' launch.cfg
echo "Config file does not exist." echo "Config file does not exist."
echo "Downloading the default config file..." echo "Downloading the default config file..."
if curl --fail -sLJO "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$CURRENT_VERSION/launch.cfg"; then curl -sLJO -w '%{http_code}' "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_VERSION/start.sh" > start_new.sh
if [[ $(cat launch.cfg | tail -n 1) == 200 ]]; then
echo echo
read -p "Do you want to edit the config file? [y/N] " edit_config read -p "Do you want to edit the config file? [y/N] " edit_config
if [ "$edit_config" == "y" ] || [ "$edit_config" == "Y" ]; then if [ "$edit_config" == "y" ] || [ "$edit_config" == "Y" ]; then
@ -452,6 +472,9 @@ function main {
# Check for script updates # Check for script updates
check_self_update check_self_update
# Load config
load_config
# Check dependencies # Check dependencies
check_dependencies check_dependencies
@ -474,7 +497,8 @@ function main {
# Check for updates on GitHub # Check for updates on GitHub
if [[ "$1" == "--redownload" ]]; then if [[ "$1" == "--redownload" ]]; then
self_update self_update
else if [[ "$1" == "--help" ]]; then fi
if [[ "$1" == "--help" ]]; then
echo "Usage: ./script.sh [OPTION]" echo "Usage: ./script.sh [OPTION]"
echo "Starts the Minecraft server." echo "Starts the Minecraft server."
echo echo
@ -487,6 +511,7 @@ else if [[ "$1" == "--help" ]]; then
echo echo
echo "For more information, see:" echo "For more information, see:"
echo "https://github.com/$GITHUB_USER/$GITHUB_REPO" echo "https://github.com/$GITHUB_USER/$GITHUB_REPO"
exit 0
else else
# Run the main function # Run the main function
main main