summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-10-13 22:03:31 +0000
committerAndrei Karas <akaras@inbox.ru>2016-10-13 22:03:31 +0000
commite45dd72f3e372104f75803753dd11b5da60a86d0 (patch)
tree41a9c5437eca0e4f4723b1fe8c0838015f03c57f
parent994250e7619a0a18a61d65c9a132fcf71abce2f2 (diff)
parentedef2f2479bf22d390e6c91ae81051f53c28a5e0 (diff)
downloadevol-tools-e45dd72f3e372104f75803753dd11b5da60a86d0.tar.gz
evol-tools-e45dd72f3e372104f75803753dd11b5da60a86d0.tar.bz2
evol-tools-e45dd72f3e372104f75803753dd11b5da60a86d0.tar.xz
evol-tools-e45dd72f3e372104f75803753dd11b5da60a86d0.zip
Merge branch 'gitlab-merger' into 'master'
Gitlab Auto-Merge MRs on test See merge request !9
-rw-r--r--.gitignore3
-rw-r--r--herculeswrapper/herc-map-wrapper-config.example70
-rw-r--r--herculeswrapper/include.sh161
3 files changed, 233 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index d65c486..6bd460b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
+}