Maxim Uvarov | 1acb99b | 2017-05-08 23:40:58 +0300 | [diff] [blame] | 1 | #!/usr/bin/python |
| 2 | |
| 3 | # bugzilla github push web hook |
| 4 | # |
| 5 | # Scripts updates bugzilla bug with merged commit message |
| 6 | |
| 7 | from __future__ import print_function |
| 8 | import pprint |
| 9 | import bugzilla |
| 10 | |
| 11 | |
| 12 | import cgi |
| 13 | import pickle |
| 14 | import sys |
| 15 | import time |
| 16 | import json |
| 17 | from StringIO import StringIO |
| 18 | import sys, urllib |
| 19 | from cgi import parse_qs, escape |
| 20 | import re |
Maxim Uvarov | 3c1f2f7 | 2017-06-13 17:07:33 +0300 | [diff] [blame] | 21 | import os |
| 22 | import sys |
| 23 | |
| 24 | configfile = '~/gscripts_config.py' |
| 25 | sys.path.append(os.path.dirname(os.path.expanduser(configfile))) |
| 26 | import gscripts_config as gcfg |
| 27 | |
| 28 | blogin = gcfg.gcfg['bugz']['login'] |
| 29 | bpassword = gcfg.gcfg['bugz']['pass'] |
| 30 | print ("%s" % blogin) |
Maxim Uvarov | 1acb99b | 2017-05-08 23:40:58 +0300 | [diff] [blame] | 31 | |
| 32 | qin = sys.stdin.read() |
Maxim Uvarov | 3c1f2f7 | 2017-06-13 17:07:33 +0300 | [diff] [blame] | 33 | #f = open('python_%s.dump' % time.time(), 'w') |
| 34 | #pickle.dump(qin, f) |
| 35 | #f.close() |
Maxim Uvarov | 1acb99b | 2017-05-08 23:40:58 +0300 | [diff] [blame] | 36 | |
Maxim Uvarov | 3c1f2f7 | 2017-06-13 17:07:33 +0300 | [diff] [blame] | 37 | #fname = "test.dump" |
Maxim Uvarov | 1acb99b | 2017-05-08 23:40:58 +0300 | [diff] [blame] | 38 | #qin = pickle.load( open(fname, "rb" ) ) |
| 39 | |
Maxim Uvarov | 3c1f2f7 | 2017-06-13 17:07:33 +0300 | [diff] [blame] | 40 | use_refs=['refs/heads/master'] |
| 41 | |
Maxim Uvarov | 1acb99b | 2017-05-08 23:40:58 +0300 | [diff] [blame] | 42 | def msg_has_bug(msg): |
| 43 | buglist = set() |
| 44 | print("%s\n" % msg) |
| 45 | for m in re.finditer('https://bugs\.linaro\.org/show_bug\.cgi\?id=([0-9]+)', msg): |
| 46 | buglist.add(m.group(1)) |
| 47 | |
| 48 | for m in re.finditer(r'[bB]ug #([0-9]+)', msg): |
| 49 | buglist.add(m.group(1)) |
| 50 | |
| 51 | for m in re.finditer(r'[bB]ug ([0-9]+)', msg): |
| 52 | buglist.add(m.group(1)) |
| 53 | |
| 54 | for m in re.finditer(r'[bB]ug: ([0-9]+)', msg): |
| 55 | buglist.add(m.group(1)) |
| 56 | |
| 57 | for m in re.finditer(r'[Ff]ixes: ([0-9]+)', msg): |
| 58 | buglist.add(m.group(1)) |
| 59 | |
| 60 | print("%s\n" % str(buglist)) |
| 61 | return buglist |
| 62 | |
| 63 | URL = "https://bugs.linaro.org" |
| 64 | |
| 65 | bzapi = bugzilla.Bugzilla(URL) |
| 66 | if not bzapi.logged_in: |
Maxim Uvarov | 3c1f2f7 | 2017-06-13 17:07:33 +0300 | [diff] [blame] | 67 | bzapi.login(blogin, bpassword) |
Maxim Uvarov | 1acb99b | 2017-05-08 23:40:58 +0300 | [diff] [blame] | 68 | |
| 69 | print("Content-type: text/html\n") |
| 70 | print("""<!DOCTYPE HTML> |
| 71 | <html> |
| 72 | <head> |
| 73 | <meta charset="utf-8"> |
| 74 | <title>some title</title> |
| 75 | </head> |
| 76 | <body>""") |
| 77 | |
| 78 | io = StringIO(qin) |
| 79 | js = json.load(io) |
| 80 | |
Maxim Uvarov | 3c1f2f7 | 2017-06-13 17:07:33 +0300 | [diff] [blame] | 81 | found = 0 |
| 82 | for ref in use_refs: |
| 83 | if ref == js["ref"]: |
| 84 | found = 1 |
| 85 | break; |
| 86 | if not found: |
| 87 | print("<h1>ref %s is not posted to bugs</h1>" % js["ref"]) |
| 88 | print("</body></html>") |
| 89 | sys.exit(0) |
| 90 | |
Maxim Uvarov | 1acb99b | 2017-05-08 23:40:58 +0300 | [diff] [blame] | 91 | for c in js["commits"]: |
| 92 | bugset = msg_has_bug(c["message"]) |
| 93 | for bugnum in bugset: |
| 94 | bug = bzapi.getbug(bugnum) |
Maxim Uvarov | 3c1f2f7 | 2017-06-13 17:07:33 +0300 | [diff] [blame] | 95 | bug_msg = "%s\n%s\n%s\n%s %s\n%s\n" % (c["url"], |
| 96 | js["ref"], |
Maxim Uvarov | 1acb99b | 2017-05-08 23:40:58 +0300 | [diff] [blame] | 97 | c["timestamp"], |
| 98 | c["author"]["name"], c["author"]["email"], |
| 99 | c["message"]) |
| 100 | |
| 101 | update = bzapi.build_update(comment=bug_msg) |
| 102 | bzapi.update_bugs([bug.id], update) |
| 103 | print("Posted message to bug %s" % bugnum) |
| 104 | |
| 105 | print("<h1>all ok!</h1>") |
| 106 | print("</body></html>") |