From 02c2e108ad31ea9da5f4d7a37e7ae5961bf7303e Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sat, 9 Jan 2021 22:57:33 +0000 Subject: [PATCH] update refactor --- .../config-lgsm/vintsserver/_default.cfg | 7 +- lgsm/functions/update_vintagestory.sh | 213 ++++++++++-------- 2 files changed, 122 insertions(+), 98 deletions(-) diff --git a/lgsm/config-default/config-lgsm/vintsserver/_default.cfg b/lgsm/config-default/config-lgsm/vintsserver/_default.cfg index e128a9a52..e673715a4 100644 --- a/lgsm/config-default/config-lgsm/vintsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/vintsserver/_default.cfg @@ -13,6 +13,10 @@ fn_parms(){ parms="--datapath ${vsdataworld}" } +## Release Settings | https://docs.linuxgsm.com/game-servers/vintagestory#release-settings +# Branch (stable|unstable) +branch="stable" + #### LinuxGSM Settings #### ## LinuxGSM Stats @@ -144,7 +148,8 @@ vsdatapath="${serverfiles}/data" vsdataworld="${vsdatapath}/${selfname}" systemdir="${serverfiles}" executabledir="${systemdir}" -executable="mono ./VintagestoryServer.exe" +preexecutable="mono" +executable="./VintagestoryServer.exe" servercfgdir="${vsdataworld}" servercfg="serverconfig.json" servercfgdefault="serverconfig.json" diff --git a/lgsm/functions/update_vintagestory.sh b/lgsm/functions/update_vintagestory.sh index a2e0cda34..aea19a9be 100755 --- a/lgsm/functions/update_vintagestory.sh +++ b/lgsm/functions/update_vintagestory.sh @@ -6,121 +6,140 @@ functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" -remotelocation="vintagestory.at" -apiurl="http://api.${remotelocation}/stable-unstable.json" -local_version_file="${datadir}/vintagestory_version" - -fn_update_vs_remotebuild(){ - if [ "${branch}" == "unstable" ]; then - remotebuild=$(curl -s "${apiurl}" | jq -r '[ to_entries[] ] | .[].key' | grep -E "\-rc|\-pre" | sort -r -V | head -1) - else - remotebuild=$(curl -s "${apiurl}" | jq -r '[ to_entries[] ] | .[].key' | grep -Ev "\-rc|\-pre" | sort -r -V | head -1) - fi -} - -fn_update_vs_get_installed_version(){ - localbuild=$(cat "${local_version_file}" ) - # Alternative: get version from executeable $(mono .exe --version) -} - fn_update_vs_dl(){ # get version info for download - vsapiresponse=$(curl -s "${apiurl}" | jq --arg version "${remotebuild}" '.[$version].server') - remotebuildfile=$( echo -e "${vsapiresponse}" | jq -r '.filename' ) - remotebuildlink=$( echo -e "${vsapiresponse}" | jq -r '.urls.cdn' ) - remotebuildmd5=$( echo -e "${vsapiresponse}" | jq -r '.md5' ) + remotebuildresponse=$(curl -s "${apiurl}" | jq --arg version "${remotebuild}" '.[$version].server') + remotebuildfile=$(echo -e "${vsapiresponse}" | jq -r '.filename') + remotebuildlink=$(echo -e "${vsapiresponse}" | jq -r '.urls.cdn') + remotebuildmd5=$(echo -e "${vsapiresponse}" | jq -r '.md5') # Download and extract files to serverfiles fn_fetch_file "${remotebuildlink}" "" "" "" "${tmpdir}" "${remotebuildfile}" "nochmodx" "norun" "force" "${remotebuildmd5}" fn_dl_extract "${tmpdir}" "${remotebuildfile}" "${serverfiles}" fn_clear_tmp - echo "${remotebuild}" > "${local_version_file}" } -if [ -z "${branch}" ]; then - branch="stable" -fi +fn_update_vs_localbuild(){ + # Gets local build info. + fn_print_dots "Checking local build: ${remotelocation}" + # Uses executable to find local build. + cd "${executabledir}" || exit + if [ -f "${executable}" ]; then + localbuild=$(${preexecutable} ${executable} --version 2>&1 >/dev/null) + fn_print_ok "Checking local build: ${remotelocation}" + fn_script_log_pass "Checking local build" + else + localbuild="0" + fn_print_error "Checking local build: ${remotelocation}" + fn_script_log_error "Checking local build" + fi +} -if [ "${commandname}" == "INSTALL" ]; then - fn_update_vs_remotebuild - if [ -z "${remotebuild}" ]; then - # cannot get version - fn_print_fail_eol_nl - fn_script_log_fatal "Cannot get version from remote" - core_exit.sh +fn_update_vs_remotebuild(){ + if [ "${branch}" == "stable" ]; then + remotebuild=$(curl -s "${apiurl}" | jq -r '[ to_entries[] ] | .[].key' | grep -Ev "\-rc|\-pre" | sort -r -V | head -1) else - # get version proceed - fn_update_vs_dl + remotebuild=$(curl -s "${apiurl}" | jq -r '[ to_entries[] ] | .[].key' | grep -E "\-rc|\-pre" | sort -r -V | head -1) fi -elif [ "${commandname}" == "UPDATE" ]||[ "${commandname}" == "CHECK-UPDATE" ]; then - if [ ! -f "${local_version_file}" ]; then - # server not installed - fn_print_fail_eol_nl - fn_script_log_fatal "Vintage story server not installed" - core_exit.sh + + if [ "${firstcommandname}" != "INSTALL" ]; then + fn_print_dots "Checking remote build: ${remotelocation}" + # Checks if remotebuild variable has been set. + if [ -z "${remotebuild}" ]||[ "${remotebuild}" == "null" ]; then + fn_print_fail "Checking remote build: ${remotelocation}" + fn_script_log_fatal "Checking remote build" + core_exit.sh + else + fn_print_ok "Checking remote build: ${remotelocation}" + fn_script_log_pass "Checking remote build" + fi else - fn_update_vs_remotebuild - if [ -z "${remotebuild}" ]; then - fn_print_fail_eol_nl - fn_script_log_fatal "Cannot get version from remote" + # Checks if remotebuild variable has been set. + if [ -z "${remotebuild}" ]||[ "${remotebuild}" == "null" ]; then + fn_print_failure "Unable to get remote build" + fn_script_log_fatal "Unable to get remote build" core_exit.sh fi - fn_update_vs_get_installed_version - if [ "${remotebuild}" != "${localbuild}" ]; then - fn_print_ok_nl "Checking for update: ${remotelocation}" - echo -en "\n" - echo -e "Update available" - echo -e "* Local build: ${red}${localbuild} ${default}" - echo -e "* Remote build: ${green}${remotebuild} ${default}" - echo -e "* Branch: ${branch}" - echo -en "\n" - fn_script_log_info "Update available" - fn_script_log_info "Local build: ${localbuild}" - fn_script_log_info "Remote build: ${remotebuild}" + fi +} - # update server - if [ "${commandname}" == "UPDATE" ]; then - unset updateonstart - check_status.sh - # If server stopped. - if [ "${status}" == "0" ]; then - fn_update_vs_dl - # If server started. - else - fn_print_restart_warning - exitbypass=1 - command_stop.sh - fn_firstcommand_reset - exitbypass=1 - fn_update_vs_dl - exitbypass=1 - command_start.sh - fn_firstcommand_reset - unset exitbypass - fi - date +%s > "${lockdir}/lastupdate.lock" - alert="update" - elif [ "${commandname}" == "CHECK-UPDATE" ]; then - alert="check-update" - fi - # trigger alert - alert.sh - elif [ "${remotebuild}" == "${localbuild}" ]; then - fn_print_ok_nl "Checking for update: ${remotelocation}" - echo -en "\n" - echo -e "No update available" - echo -e "* Local build: ${green}${localbuild} ${default}" - echo -e "* Remote build: ${green}${remotebuild} ${default}" +fn_update_vs_compare(){ + # Removes dots so if statement can compare version numbers. + fn_print_dots "Checking for update: ${remotelocation}" + if [ "${localbuild}" != "${remotebuild}" ]||[ "${forceupdate}" == "1" ]; then + fn_print_ok_nl "Checking for update: ${remotelocation}" + echo -en "\n" + echo -e "Update available" + echo -e "* Local build: ${red}${localbuild}${default}" + echo -e "* Remote build: ${green}${remotebuild}${default}" + echo -en "\n" + if [ -n "${branch}" ]; then echo -e "* Branch: ${branch}" - echo -en "\n" - fn_script_log_info "No update available" - fn_script_log_info "Local build: ${localbuild}" - fn_script_log_info "Remote build: ${remotebuild}" - fn_script_log_pass "Latest version ${remotebuild} already installed" + fi + fn_script_log_info "Update available" + fn_script_log_info "Local build: ${localbuild}" + fn_script_log_info "Remote build: ${remotebuild}" + fn_script_log_info "${localbuild} > ${remotebuild}" + + unset updateonstart + check_status.sh + # If server stopped. + if [ "${status}" == "0" ]; then + exitbypass=1 + fn_update_vs_dl + exitbypass=1 + command_start.sh + exitbypass=1 + command_stop.sh + fn_firstcommand_reset + # If server started. else - fn_print_fail_eol_nl - fn_script_log_fatal "Something went wrong" - core_exit.sh + fn_print_restart_warning + exitbypass=1 + command_stop.sh + fn_firstcommand_reset + exitbypass=1 + fn_update_vs_dl + exitbypass=1 + command_start.sh + fn_firstcommand_reset + fi + unset exitbypass + date +%s > "${lockdir}/lastupdate.lock" + alert="update" + alert.sh + else + fn_print_ok_nl "Checking for update: ${remotelocation}" + echo -en "\n" + echo -e "No update available" + echo -e "* Local build: ${green}${localbuild}${default}" + echo -e "* Remote build: ${green}${remotebuild}${default}" + if [ -n "${branch}" ]; then + echo -e "* Branch: ${branch}" + fi + echo -en "\n" + fn_script_log_info "No update available" + fn_script_log_info "Local build: ${localbuild}" + fn_script_log_info "Remote build: ${remotebuild}" + if [ -n "${branch}" ]; then + fn_script_log_info "Branch: ${branch}" fi fi +} + +# The location where the builds are checked and downloaded. +remotelocation="vintagestory.at" +apiurl="http://api.${remotelocation}/stable-unstable.json" +localversionfile="${datadir}/vintagestoryversion" + +if [ "${firstcommandname}" == "INSTALL" ]; then + fn_update_vs_remotebuild + fn_update_vs_dl +else + fn_print_dots "Checking for update" + fn_print_dots "Checking for update: ${remotelocation}" + fn_script_log_info "Checking for update: ${remotelocation}" + fn_update_vs_localbuild + fn_update_vs_remotebuild + fn_update_vs_compare fi