From 505a6a8ad577cd4c30b203aa5f1a6021bf672d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C5=A0tefka?= Date: Thu, 23 Feb 2023 07:54:20 +0100 Subject: [PATCH 1/3] Fix self update --- start.sh | 81 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 28 deletions(-) diff --git a/start.sh b/start.sh index 4449b6e..98e7696 100755 --- a/start.sh +++ b/start.sh @@ -7,7 +7,7 @@ # 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 @@ -356,13 +356,50 @@ function launch_server { 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 check_self_update { # 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") # 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 if [[ "$CURRENT_VERSION" != "$LATEST_VERSION" ]]; then @@ -370,7 +407,8 @@ function check_self_update { echo "Current version: $CURRENT_VERSION" echo "Latest version: $LATEST_VERSION" 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]" if [ "$REPLY" == "y" ] || [ "$REPLY" == "Y" ]; then # Extract the release notes from the response @@ -380,47 +418,29 @@ function check_self_update { echo "$RELEASE_NOTES" | less # 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." read -t 15 -p "Do you want to update? [y/N] " update if [ "$update" == "y" ] || [ "$update" == "Y" ]; then - download_self_update + self_update else echo "Skipping update." return 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 function load_config { # Check if the config file exists if [ ! -f launch.cfg ]; then + sed -i '$d' launch.cfg echo "Config file does not exist." 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 read -p "Do you want to edit the config file? [y/N] " edit_config if [ "$edit_config" == "y" ] || [ "$edit_config" == "Y" ]; then @@ -452,6 +472,9 @@ function main { # Check for script updates check_self_update + # Load config + load_config + # Check dependencies check_dependencies @@ -474,7 +497,8 @@ function main { # Check for updates on GitHub if [[ "$1" == "--redownload" ]]; then self_update -else if [[ "$1" == "--help" ]]; then +fi +if [[ "$1" == "--help" ]]; then echo "Usage: ./script.sh [OPTION]" echo "Starts the Minecraft server." echo @@ -487,6 +511,7 @@ else if [[ "$1" == "--help" ]]; then echo echo "For more information, see:" echo "https://github.com/$GITHUB_USER/$GITHUB_REPO" + exit 0 else # Run the main function main From f1ede64a05deed35fee529c3e93d7e6313f9311e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C5=A0tefka?= Date: Thu, 23 Feb 2023 08:14:01 +0100 Subject: [PATCH 2/3] Fix downloading `load.cfg` --- start.sh | 66 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/start.sh b/start.sh index 98e7696..774cee9 100755 --- a/start.sh +++ b/start.sh @@ -7,7 +7,7 @@ # and acknowledge the original script and author. # ############################################################################################################# -CURRENT_VERSION="v1.0.0" +CURRENT_VERSION="v1.0.1" # -------------------------------------------------- # You shouldn't need to change anything in this file @@ -398,34 +398,39 @@ function check_self_update { # 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") - # Extract the latest version from the response - LATEST_VERSION=$(echo $response | jq -r ".tag_name") + if [[ $response =~ "API rate limit exceeded" ]]; then + echo "API limit exceeded. Will not check for updates." + else + # Extract the latest version from the response + LATEST_VERSION=$(echo $response | jq -r ".tag_name") - # Compare the current version with the latest version - if [[ "$CURRENT_VERSION" != "$LATEST_VERSION" ]]; then - echo "An update is available!" - echo "Current version: $CURRENT_VERSION" - echo "Latest version: $LATEST_VERSION" - echo - 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]" - if [ "$REPLY" == "y" ] || [ "$REPLY" == "Y" ]; then - # Extract the release notes from the response - RELEASE_NOTES=$(echo "$response" | jq -r ".body") - - # Print the release notes - echo "$RELEASE_NOTES" | less - - # Ask the user if they want to update + # Compare the current version with the latest version + if [[ "$CURRENT_VERSION" != "$LATEST_VERSION" ]]; then + echo "An update is available!" + echo "Current version: $CURRENT_VERSION" + echo "Latest version: $LATEST_VERSION" + echo 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 update? [y/N] " update - if [ "$update" == "y" ] || [ "$update" == "Y" ]; then - self_update - else - echo "Skipping update." - return + read -t 15 -p "Do you want to read the release notes? [y/N]" + if [ "$REPLY" == "y" ] || [ "$REPLY" == "Y" ]; then + # Extract the release notes from the response + RELEASE_NOTES=$(echo "$response" | jq -r ".body") + + # Print the release notes + echo "$RELEASE_NOTES" | less + + # Ask the user if they want to update + echo + 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 update? [y/N] " update + if [ "$update" == "y" ] || [ "$update" == "Y" ]; then + self_update + else + echo "Skipping update." + return + fi fi fi fi @@ -435,11 +440,14 @@ function check_self_update { function load_config { # Check if the config file exists if [ ! -f launch.cfg ]; then - sed -i '$d' launch.cfg echo "Config file does not exist." echo "Downloading the default config file..." - curl -sLJO -w '%{http_code}' "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_VERSION/start.sh" > start_new.sh + # Download the default config file for the current version + curl -sLJ -w '%{http_code}' "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$CURRENT_VERSION/launch.cfg" > launch.cfg + # Check if the download was successful by checking the last line of the file for 200 if [[ $(cat launch.cfg | tail -n 1) == 200 ]]; then + # Remove the last line of the file + sed -i '$d' launch.cfg echo read -p "Do you want to edit the config file? [y/N] " edit_config @@ -510,7 +518,7 @@ if [[ "$1" == "--help" ]]; then echo "If the file does not exist, it will be downloaded automatically when the script is run and you will be asked if you want to edit it." echo echo "For more information, see:" - echo "https://github.com/$GITHUB_USER/$GITHUB_REPO" + echo "https://github.com/$REPO_OWNER/$REPO_NAME" exit 0 else # Run the main function From 00687cbb7e6099460ba547183f479d7c7e3bd65f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C5=A0tefka?= Date: Thu, 23 Feb 2023 08:25:20 +0100 Subject: [PATCH 3/3] Fix api_url not being correctly set on startup --- start.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/start.sh b/start.sh index 774cee9..178bca7 100755 --- a/start.sh +++ b/start.sh @@ -7,7 +7,7 @@ # and acknowledge the original script and author. # ############################################################################################################# -CURRENT_VERSION="v1.0.1" +CURRENT_VERSION="v1.0.2" # -------------------------------------------------- # You shouldn't need to change anything in this file @@ -19,7 +19,7 @@ REPO_OWNER="jiriks74" REPO_NAME="start_papermc.sh" # API URL -api_url="https://api.papermc.io/v2/projects/paper/versions/$select_version/builds" +api_url="" # Check for dependencies function check_dependencies { @@ -473,6 +473,7 @@ function load_config { # Load config source launch.cfg + api_url="https://api.papermc.io/v2/projects/paper/versions/$select_version/builds/" } # Main function