wesnoth/utils/mp-server/new_release
Gunter Labes 0222fdad50
Various improvements for the server scripts
Respect server options given as script arguments.
Fix killing background process in trap.
Use printf instead of echo.
Keep upper case variable names reserved for env variables.
Logfilter scripts converted to sed -E and removed GNUisms.
2024-04-14 22:03:03 +02:00

61 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
#
# Rewrites server config files to switch to a new version and makes
# the server re-read those config files. Also sends a server messages
# to announce the new version.
# Has logic to handle a temporary server for the (now) previous version.
#
# Option -n can be used to do a "dry run".
die() { echo >&2 "$@"; exit 1; }
[ $# -ge 1 ] || die "Syntax: $0 [-n] <new minor version>"
set -o errexit
set -o nounset
set -x
echo=""
[ "$1" = "-n" ] && { echo=echo; shift; }
[ "$1" -ge 1 ] || die "New version must be at least 1!"
dev_version=$(readlink "$HOME/servers/dev")
dev_version_re=${dev_version//./\\.}
new_version=$dev_version.$1
new_version_re=${new_version//./\\.}
prev_version=$dev_version.$(($1-1))
prev_version_re=${prev_version//./\\.}
pprev_version=$dev_version.$(($1-2))
pprev_version_re=${pprev_version//./\\.}
next_version=$dev_version.$(($1+1))
dev_server_config=$HOME/servers/$dev_version/wesnothd.cfg
prev_server_config=$HOME/servers/$dev_version-prev/wesnothd.cfg
prev_server_redirect=$HOME/servers/$dev_version-prev/redirect.cfg
prev=no
test -w "$prev_server_config" && prev=yes
[ "$prev" = no ] || [ "$1" -gt 1 ] || die "New version must be greater than 1 when using a previous version server!"
server_message="Version $new_version has been released! Update now! (You need the new version in order to join this server again.)"
[ "$prev" = yes ] && server_message="Version $new_version has been released! New users with the previous version will now get redirected to a temporary server that will run until binaries for all major OSes are out."
#if ! ps -C wesnothd-$dev_version-prev>/dev/null; then
# echo "Previous server isn't running!"
# exit 1
#fi
# Handle the 15 character limit for process names of /proc/<pid>/stat
reread_config() { $echo pkill -HUP "${1:0:15}"; }
[ "$prev" = yes ] && $echo sed -i "/versions_accepted=/s/$pprev_version_re/$prev_version/;/motd=/s/$prev_version_re/$new_version/g" "$prev_server_config"
# reload the config
[ "$prev" = yes ] && reread_config "wesnothd-$dev_version-prev"
# check if we currently allow the previous version to prevent announcing the same version twice
grep "versions_accepted=.*${prev_version//./\\.}" "$dev_server_config" || die "Previous version $prev_version currently not accepted. Announcing the right version? Aborting..."
$echo sed -i "s/^id=.*/id=$new_version/;/^versions_accepted=/{s/$new_version_re/$next_version/;s/$prev_version_re/$new_version/};/motd=/s/$prev_version_re/$new_version/g" "$dev_server_config"
# update previous version redirect
[ "$prev" = yes ] && $echo sed -i "/version=/s/$pprev_version_re/$prev_version/" "$prev_server_redirect"
[ "$prev" = yes ] && $echo sed -i "s,#\({./$dev_version_re-prev-redirect.cfg}\),\1," "$dev_server_config"
# reload the config
reread_config "wesnothd-$dev_version"
$echo "$HOME/bin/send_server_message" "$dev_version" "$server_message"