#!/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