diff options
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | herculeswrapper/herc-map-wrapper-config.example | 70 | ||||
-rw-r--r-- | herculeswrapper/include.sh | 161 |
3 files changed, 233 insertions, 1 deletions
@@ -41,3 +41,6 @@ dyecmd/src/cmake_install.cmake # testxml testxml/errors.txt + +# gitlab merger +herculeswrapper/herc-map-wrapper-config diff --git a/herculeswrapper/herc-map-wrapper-config.example b/herculeswrapper/herc-map-wrapper-config.example new file mode 100644 index 0000000..233d072 --- /dev/null +++ b/herculeswrapper/herc-map-wrapper-config.example @@ -0,0 +1,70 @@ +## config for herc-map-wrapper + +echo "Copy this file to herc-map-wrapper-config" >&2 +echo "Then You need to either set the oauth secret" >&2 +echo "or use a hard-coded list instead of list_issues" >&2 +echo "Both github and gitlab methods are included.">&2 +echo "Make sure to comment out the method that isn't used" >&2 +echo "Update the <repo ids> with the ID number for gitlab" >&2 +echo "or the repo name if github i.e. themanaworld/server-data" >&2 +echo "Then, delete these lines" >&2 +exit 1 + +server_data=../../server-data +client_data=../client-data +tmw_tools=../tools + +#gitlab +list_issues() +{ +python -c ' + +# replace this with one of your oauth keys from github (no permissions needed) +oauth = "01234567890123456789" + +import requests +issues = requests.get("https://gitlab.com/api/v3/projects/%d/merge_requests" % '$1', params={"state": "opened"}, headers={"PRIVATE-TOKEN": "%s" % oauth, "Accept": "application/vnd.gitlab.v3+json"}) +issues.raise_for_status() +for issue in issues.json(): + if "test" in issue["labels"]: + print(issue["iid"]) +' | sort -n +} + +#github +list_issues() +{ +python -c ' + +# replace this with one of your oauth keys from github (no permissions needed) +oauth = "0123456789abcdef0123456789abcdef01234567" + +import requests +issues = requests.get("https://api.github.com/search/issues", params={"q": "repo:'$1' type:pr state:open label:test"}, headers={"Authorization": "token %s" % oauth, "Accept": "application/vnd.github.v3+json"}) +issues.raise_for_status() +for issue in issues.json["items"]: + print(issue["number"]) +' | sort -n +} + + +server_main_branch=origin/master + +server_extra_branches=( + $(list_issues <repo id> | sed 's|^|origin/merge-requests/|;') +) + +client_main_branch=origin/master + +client_extra_branches=( + $(list_issues <repo id> | sed 's|^|origin/merge-requests/|;') +) +unset list_issues + +motd=../server-data/npc/commands/motd-debug-text.txt + +expected_life=60 +trouble_sleep=60 +normal_sleep=5 + +ulimit -c unlimited diff --git a/herculeswrapper/include.sh b/herculeswrapper/include.sh index cc6b1f4..9aa891c 100644 --- a/herculeswrapper/include.sh +++ b/herculeswrapper/include.sh @@ -72,6 +72,7 @@ function pull_all { cd .. ./pull.sh cd server-data + git_merge stash_pop "data" cd ../server-code stash_pop "code" @@ -79,7 +80,7 @@ function pull_all { stash_pop "plugin" cd ../../../tools stash_pop "tools" - cd .. + cd ../ ./status.sh cd server-data } @@ -103,3 +104,161 @@ function build_plugin { cat err.txt cd ../server-data } + +function git_merge { + if [ -f ../tools/herculeswrapper/herc-map-wrapper-config ] + then + # 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 + } + + start_time=$(date +%s) + source ../tools/herculeswrapper/herc-map-wrapper-config + + run test -f $motd + echo -e 'function\tscript\tMOTD_debug_text\t{\n setarray $Debug_Messages$,' > $motd + 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 + for branch in ${server_extra_branches[@]} + do + try_merge $branch + done + + run cd $client_data + + # force new master and back up for future restoration + run git fetch --all + run git reset --hard $client_main_branch + + 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 + for branch in ${client_extra_branches[@]} + do + try_merge $branch + done + echo '"End of Commits";' >> $motd + echo -e ' return;\n}' >> $motd + + # generate the transient updates + run cd $tmw_tools/update/ + run ./createnew.sh + run ./create_music.sh + run cd ../../server-data/ + fi +} |