@@ -45,11 +45,41 @@ def read_current_status(current_commit, path):
45
45
return json .loads (status )
46
46
return {}
47
47
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 ()
48
77
49
78
def update_latest (
50
79
current_commit ,
51
80
relevant_pr_number ,
52
81
relevant_pr_url ,
82
+ relevant_pr_user ,
53
83
current_datetime
54
84
):
55
85
'''Updates `_data/latest.json` to match build result of the given commit.
@@ -85,8 +115,11 @@ def update_latest(
85
115
.format (tool , os , old , new , MAINTAINERS .get (tool ))
86
116
elif new < old :
87
117
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 )
90
123
91
124
if changed :
92
125
status ['commit' ] = current_commit
@@ -109,20 +142,23 @@ def update_latest(
109
142
save_message_to_path = sys .argv [3 ]
110
143
github_token = sys .argv [4 ]
111
144
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 )
113
146
if relevant_pr_match :
114
147
number = relevant_pr_match .group (1 )
148
+ relevant_pr_user = relevant_pr_match .group (2 )
115
149
relevant_pr_number = 'rust-lang/rust#' + number
116
150
relevant_pr_url = 'https://github.com/rust-lang/rust/pull/' + number
117
151
else :
118
152
number = '-1'
153
+ relevant_pr_user = '<unknown user>'
119
154
relevant_pr_number = '<unknown PR>'
120
155
relevant_pr_url = '<unknown>'
121
156
122
157
message = update_latest (
123
158
cur_commit ,
124
159
relevant_pr_number ,
125
160
relevant_pr_url ,
161
+ relevant_pr_user ,
126
162
cur_datetime
127
163
)
128
164
if not message :
0 commit comments