summaryrefslogtreecommitdiff
path: root/bin/tmwa-map-wrapper
diff options
context:
space:
mode:
Diffstat (limited to 'bin/tmwa-map-wrapper')
-rwxr-xr-xbin/tmwa-map-wrapper211
1 files changed, 211 insertions, 0 deletions
diff --git a/bin/tmwa-map-wrapper b/bin/tmwa-map-wrapper
new file mode 100755
index 0000000..723b284
--- /dev/null
+++ b/bin/tmwa-map-wrapper
@@ -0,0 +1,211 @@
+#!/bin/bash -eu
+# autoupdate and restart a tmwa-map server
+
+## config is now in tmwa-map-wrapper-config
+
+## utilities
+trap 'echo EXIT $? >&2' EXIT
+
+# prevent interaction
+export GIT_EDITOR=:
+# force commits to have predictable hashes
+export GIT_AUTHOR_DATE='1970-01-01 00:00 +0000'
+export GIT_COMMITTER_DATE='1970-01-01 00:00 +0000'
+
+reset=$'\e[m'
+black_fg=$'\e[30m'
+red_fg=$'\e[31m'
+green_fg=$'\e[32m'
+yellow_fg=$'\e[33m'
+blue_fg=$'\e[34m'
+magenta_fg=$'\e[35m'
+cyan_fg=$'\e[36m'
+gray_fg=$'\e[37m'
+
+reset2='##0'
+black_fg2='##0'
+red_fg2='##1'
+green_fg2='##2'
+blue_fg2='##3'
+orange_fg2='##4'
+yellow_fg2='##5'
+pink_fg2='##6'
+purple_fg2='##7'
+gray_fg2='##8'
+brown_fg2='##9'
+
+
+now()
+{
+ date -u +'%F %T'
+}
+
+good()
+{
+ echo "$(now)$green_fg" "$@" "$reset" >&2
+}
+
+info()
+{
+ echo "$(now)$cyan_fg" "$@" "$reset" >&2
+}
+
+warning()
+{
+ echo "$(now)$yellow_fg" "$@" "$reset" >&2
+}
+
+error()
+{
+ echo "$(now)$red_fg" "$@" "$reset" >&2
+}
+
+good2()
+{
+ echo "$green_fg2" "$@" "$reset2"
+}
+
+info2()
+{
+ echo "$brown_fg2" "$@" "$reset2"
+}
+
+warning2()
+{
+ echo "$yellow_fg2" "$@" "$reset2"
+}
+
+error2()
+{
+ echo "$red_fg2" "$@" "$reset2"
+}
+
+run()
+{
+ info '$' "$@"
+ "$@"
+}
+
+try_merge()
+{
+ test -n "$1"
+ local branch=$1 commit
+ info 'commit=$(' git rev-parse --verify -q $branch ')'
+ if ! commit=$(git rev-parse --verify -q $branch)
+ then
+ error2 bogus $branch >> $motd
+ error bogus $branch
+ return
+ fi
+ info commit=$commit
+ if run bash -c 'set -o pipefail; git branch --contains '$commit' | grep -qw master'
+ then
+ warning2 already $branch $commit >> $motd
+ warning already $branch
+ return
+ fi
+ if run git merge --ff-only $branch $commit
+ then
+ good2 fast $branch $commit >> $motd
+ good fast $branch $commit
+ return
+ fi
+ if run git merge $branch $commit
+ then
+ good2 merge $branch $commit >> $motd
+ good merge $branch $commit
+ return
+ fi
+ git merge --abort
+ error2 abort $branch $commit >> $motd
+ error abort $branch $commit
+ return
+}
+
+
+## main script
+trouble=false
+
+while true
+do
+ start_time=$(date +%s)
+ source tmwa-map-wrapper-config
+ run test -f $motd
+
+
+
+ run cd $tmw_tools
+ run git pull
+
+
+
+ run cd $server_data
+ run git fetch --all
+ run git reset --hard $server_main_branch
+ info 'commit=$(' git rev-parse --verify -q $server_main_branch ')'
+ commit=$(git rev-parse --verify -q $server_main_branch)
+ info2 server base $server_main_branch $commit > $motd
+ if $trouble
+ then
+ error "Not merging branches - we're in trouble."
+ else
+ for branch in ${server_extra_branches[@]}
+ do
+ try_merge $branch
+ done
+ fi
+ $tmw_tools/secrets-build < $magic_conf.template > $magic_conf
+ $tmw_tools/news.py $start_dir $start_dir/news.d/
+ chmod a+r $start_dir/news.txt $start_dir/news.html
+
+
+
+ run cd $client_data
+ # restore update state to old
+ run cp ~/www/updates/resources.xml{.master,}
+ run cp ~/www/updates/resources2.txt{.master,}
+ run git branch -f update-zips $client_main_branch
+
+ # force new master and back up for future restoration
+ run git fetch --all
+ run git reset --hard $client_main_branch
+ run $tmw_tools/client/make-updates
+ run cp ~/www/updates/resources.xml{,.master}
+ run cp ~/www/updates/resources2.txt{,.master}
+
+ info 'commit=$(' git rev-parse --verify -q $client_main_branch ')'
+ commit=$(git rev-parse --verify -q $client_main_branch)
+ info2 client base $client_main_branch $commit >> $motd
+ if $trouble
+ then
+ error "Not merging branches - we're in trouble."
+ else
+ for branch in ${client_extra_branches[@]}
+ do
+ try_merge $branch
+ done
+ fi
+ # generate the transient updates
+ run $tmw_tools/client/make-updates
+
+
+
+ run cd $start_dir
+
+ info '$' tmwa-map
+ tmwa-map || { error tmwa-map exited with status $?; }
+
+
+ end_time=$(date +%s)
+
+ if (( end_time < start_time + expected_life ))
+ then
+ trouble=true
+ error 'Something is wrong'
+ run sleep $trouble_sleep
+ else
+ trouble=false
+ warning 'Something is not wrong'
+ run sleep $normal_sleep
+ fi
+done