Skip to content

Commit 5a3abff

Browse files
committed
Automatically open an issue when a tool breaks
1 parent 041254b commit 5a3abff

File tree

1 file changed

+39
-3
lines changed

1 file changed

+39
-3
lines changed

src/tools/publish_toolstate.py

+39-3
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,41 @@ def read_current_status(current_commit, path):
4545
return json.loads(status)
4646
return {}
4747

48+
def issue(
49+
title,
50+
tool,
51+
maintainers,
52+
relevant_pr_number,
53+
relevant_pr_user,
54+
):
55+
# Open an issue about the toolstate failure.
56+
gh_url = 'https://api.github.com/repos/rust-lang/rust/issues'
57+
assignees = [x.strip() for x in maintainers.split('@') if x != '']
58+
assignees.append(relevant_pr_user)
59+
response = urllib2.urlopen(urllib2.Request(
60+
gh_url,
61+
json.dumps({
62+
'body': '''\
63+
@{}: your PR ({}) broke {}
64+
65+
If you have the time it would be great if you could open a PR against {} that
66+
fixes the fallout from your PR.
67+
'''.format(relevant_pr_user, relevant_pr_number, tool, tool),
68+
'title': title,
69+
'assignees': assignees,
70+
}),
71+
{
72+
'Authorization': 'token ' + github_token,
73+
'Content-Type': 'application/json',
74+
}
75+
))
76+
response.read()
4877

4978
def update_latest(
5079
current_commit,
5180
relevant_pr_number,
5281
relevant_pr_url,
82+
relevant_pr_user,
5383
current_datetime
5484
):
5585
'''Updates `_data/latest.json` to match build result of the given commit.
@@ -85,8 +115,11 @@ def update_latest(
85115
.format(tool, os, old, new, MAINTAINERS.get(tool))
86116
elif new < old:
87117
changed = True
88-
message += '💔 {} on {}: {} → {} (cc {}, @rust-lang/infra).\n' \
89-
.format(tool, os, old, new, MAINTAINERS.get(tool))
118+
title = '💔 {} on {}: {} → {}' \
119+
.format(tool, os, old, new)
120+
message += '{} (cc {}, @rust-lang/infra).\n' \
121+
.format(title, MAINTAINERS.get(tool))
122+
issue(title, tool, MAINTAINERS.get(tool), relevant_pr_number, relevant_pr_user)
90123

91124
if changed:
92125
status['commit'] = current_commit
@@ -109,20 +142,23 @@ def update_latest(
109142
save_message_to_path = sys.argv[3]
110143
github_token = sys.argv[4]
111144

112-
relevant_pr_match = re.search('#([0-9]+)', cur_commit_msg)
145+
relevant_pr_match = re.search('Auto merge of #([0-9]+) - ([^:]+)', cur_commit_msg)
113146
if relevant_pr_match:
114147
number = relevant_pr_match.group(1)
148+
relevant_pr_user = relevant_pr_match.group(2)
115149
relevant_pr_number = 'rust-lang/rust#' + number
116150
relevant_pr_url = 'https://github.com/rust-lang/rust/pull/' + number
117151
else:
118152
number = '-1'
153+
relevant_pr_user = '<unknown user>'
119154
relevant_pr_number = '<unknown PR>'
120155
relevant_pr_url = '<unknown>'
121156

122157
message = update_latest(
123158
cur_commit,
124159
relevant_pr_number,
125160
relevant_pr_url,
161+
relevant_pr_user,
126162
cur_datetime
127163
)
128164
if not message:

0 commit comments

Comments
 (0)