@@ -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
4978def 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