forked from mozilla/addons-robot
/
triage_label.py
90 lines (72 loc) · 2.33 KB
/
triage_label.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
import datetime
import logging
import os
import requests
import sys
from utils import notify_irc, parse_link_headers
log = logging.getLogger()
handler = logging.StreamHandler(sys.stderr)
log.addHandler(handler)
log.setLevel(logging.DEBUG)
logging.getLogger("requests").propagate = False
GITHUB_USERNAME = os.getenv('GITHUB_USERNAME')
GITHUB_TOKEN = os.getenv('GITHUB_TOKEN')
log.info('Running label.py: {}'.format(datetime.datetime.now()))
message = 'Filed by a developer so marking as triaged.'
root = 'https://api.github.com/'
developers = [
'krupa',
'kumar303',
'diox',
'andymckay',
'eviljeff',
'jasonthomas',
'EnTeQuAk',
'wagnerand',
'tofumatt',
'mstriemer',
'muffinresearch',
'jvillalobos',
]
issues = []
def list_issues(location):
# https://developer.github.com/v3/search/
# Note this defaults to open pull requests.
url = root + 'search/issues'
labels = (
'state:open+type:issue+-label:triaged+-label:"pull request ready"'
'+-label:"in progress"+repo:{}'.format(location))
# Because github fails when you pass these as params and escape them.
url = url + '?q={}&sort:created'.format(labels)
_list_issues(url)
def _list_issues(url):
log.info('Calling: {}'.format(url))
res = requests.get(url)
res.raise_for_status()
for issue in res.json()['items']:
if issue['user']['login'] in developers:
issues.append(issue)
next_url = parse_link_headers(res.headers.get('link')).get('next')
if next_url:
_list_issues(next_url)
def triage_issue(location, issue):
# https://developer.github.com/v3/issues/#edit-an-issue
url = root + 'repos/{}/issues/{}'.format(location, issue['number'])
labels = issue['labels']
labels.append('triaged')
res = requests.patch(
url,
json={'labels': labels},
auth=(GITHUB_USERNAME, GITHUB_TOKEN)
)
res.raise_for_status()
notify_irc('Triage label added to {}#{}'.format(location, issue['number']))
if __name__ == '__main__':
location = sys.argv[1]
assert '/' in location
notify_irc('Checking for bugs to triage in {}'.format(location))
log.info('Checking: {}'.format(location))
list_issues(location)
for issue in issues:
log.info('Automatic triage of: {}'.format(issue['number']))
triage_issue(location, issue)