forked from hewigovens/git-trello-hook
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgit2trello.py
executable file
·93 lines (78 loc) · 2.89 KB
/
git2trello.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/env python
import argparse
from gevent import monkey;monkey.patch_all()
from bottle import route, request,run, default_app
from trello import Cards, Lists
import re
import json
import os
def get_args():
defaults = {
'listen-iface': '0.0.0.0',
'listen-port': 7575,
}
description = 'Trello2Git integration'
formatter_class = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(description=description,
formatter_class=formatter_class)
parser.add_argument('-k', '--api-key',
type=str,
help='Trello API Key',
default=os.environ.get('API_KEY'),
dest='api_key')
parser.add_argument('-t', '--oauth-token',
type=str,
help='Trello Oauth token (see readme.md for more info)',
default=os.environ.get('OAUTH_TOKEN'),
dest='oauth_token')
parser.add_argument('-l', '--listen-on',
type=str,
help='Interface to listen on',
default=os.environ.get("IFACE", defaults['listen-iface']),
dest='listen_iface')
parser.add_argument('-p', '--port',
type=int,
help='Bind to port',
default=int(os.environ.get("PORT", defaults['listen-port'])),
dest='listen_port')
return parser.parse_args()
@route("/")
def index():
return 'Git webhook to comment on Trello cards'
@route("/webhook", method='POST')
def handle_payload():
json_payload = None
from_gitlab = False
if request.get_header('Content-Type', None) == 'application/json':
json_payload = request.json
from_gitlab = True
else:
body = request.forms['payload']
json_payload = json.loads(body)
print(json_payload)
if 'commits' not in json_payload:
return "done"
commits = json_payload['commits']
cards_in_commit = []
cards_url_dict = {}
card_pattern = '\[([a-z0-9]{8})\]'
for commit in commits:
cards_in_commit[:] = []
results = re.findall(
card_pattern, commit['message'], flags=re.IGNORECASE)
for result in results:
cards_in_commit.append(result)
if cards_in_commit:
for card in cards_in_commit:
comment = '{0}\n{1}'.format(
commit['message'].replace('['+card+']', ''), commit['url'])
TRELLO_CARDS.new_action_comment(card, comment)
return "done"
def main():
args = get_args()
global TRELLO_CARDS
TRELLO_CARDS = Cards(args.api_key, args.oauth_token)
run(host=args.listen_iface, port=args.listen_port, server='gevent', debug=True)
if __name__ == '__main__':
main()
app = default_app()