summaryrefslogblamecommitdiff
path: root/bin/tmwa-map-wrapper
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