blob: 723b2848a322c03c418ef4cea62da5c3735a8320 (
plain) (
tree)
|
|
#!/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
|