blob: a13eeb415c5bb5942e9d656a61df178ad1018311 [file] [log] [blame]
Maxim Uvarov1acb99b2017-05-08 23:40:58 +03001#!/usr/bin/python
2
3# bugzilla github push web hook
4#
5# Scripts updates bugzilla bug with merged commit message
6
7from __future__ import print_function
8import pprint
9import bugzilla
10
11
12import cgi
13import pickle
14import sys
15import time
16import json
17from StringIO import StringIO
18import sys, urllib
19from cgi import parse_qs, escape
20import re
Maxim Uvarov3c1f2f72017-06-13 17:07:33 +030021import os
22import sys
23
24configfile = '~/gscripts_config.py'
25sys.path.append(os.path.dirname(os.path.expanduser(configfile)))
26import gscripts_config as gcfg
27
28blogin = gcfg.gcfg['bugz']['login']
29bpassword = gcfg.gcfg['bugz']['pass']
30print ("%s" % blogin)
Maxim Uvarov1acb99b2017-05-08 23:40:58 +030031
32qin = sys.stdin.read()
Maxim Uvarov3c1f2f72017-06-13 17:07:33 +030033#f = open('python_%s.dump' % time.time(), 'w')
34#pickle.dump(qin, f)
35#f.close()
Maxim Uvarov1acb99b2017-05-08 23:40:58 +030036
Maxim Uvarov3c1f2f72017-06-13 17:07:33 +030037#fname = "test.dump"
Maxim Uvarov1acb99b2017-05-08 23:40:58 +030038#qin = pickle.load( open(fname, "rb" ) )
39
Maxim Uvarov3c1f2f72017-06-13 17:07:33 +030040use_refs=['refs/heads/master']
41
Maxim Uvarov1acb99b2017-05-08 23:40:58 +030042def 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
63URL = "https://bugs.linaro.org"
64
65bzapi = bugzilla.Bugzilla(URL)
66if not bzapi.logged_in:
Maxim Uvarov3c1f2f72017-06-13 17:07:33 +030067 bzapi.login(blogin, bpassword)
Maxim Uvarov1acb99b2017-05-08 23:40:58 +030068
69print("Content-type: text/html\n")
70print("""<!DOCTYPE HTML>
71 <html>
72 <head>
73 <meta charset="utf-8">
74 <title>some title</title>
75 </head>
76 <body>""")
77
78io = StringIO(qin)
79js = json.load(io)
80
Maxim Uvarov3c1f2f72017-06-13 17:07:33 +030081found = 0
82for ref in use_refs:
83 if ref == js["ref"]:
84 found = 1
85 break;
86if 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 Uvarov1acb99b2017-05-08 23:40:58 +030091for c in js["commits"]:
92 bugset = msg_has_bug(c["message"])
93 for bugnum in bugset:
94 bug = bzapi.getbug(bugnum)
Maxim Uvarov3c1f2f72017-06-13 17:07:33 +030095 bug_msg = "%s\n%s\n%s\n%s %s\n%s\n" % (c["url"],
96 js["ref"],
Maxim Uvarov1acb99b2017-05-08 23:40:58 +030097 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
105print("<h1>all ok!</h1>")
106print("</body></html>")