1
1
import time
2
2
import os
3
3
import re
4
- from github import Github
5
4
from datetime import date , datetime
6
5
import subprocess as sp
6
+ import traceback
7
+
8
+ from github import Github
7
9
from azure .storage .blob import BlobClient
10
+
8
11
import reply_generator as rg
9
- from update_issue_body import update_issue_body , find_readme_link
10
- import traceback
12
+ from update_issue_body import update_issue_body , find_readme_and_output_folder
13
+ from auto_close import auto_close_issue
14
+ from get_python_pipeline import get_python_pipelines , get_pipeline_url
15
+
11
16
12
17
_NULL = ' '
13
18
_FILE_OUT = 'release_issue_status.csv'
@@ -121,32 +126,41 @@ def _latest_comment_time(comments, delay_from_create_date):
121
126
return delay_from_create_date if not q else int ((time .time () - q [- 1 ][0 ]) / 3600 / 24 )
122
127
123
128
124
- def auto_reply (item , sdk_repo , rest_repo , duplicated_issue ):
129
+ def auto_reply (item , request_repo , rest_repo , sdk_repo , duplicated_issue , python_piplines ):
125
130
print ("==========new issue number: {}" .format (item .issue_object .number ))
131
+ if 'Configured' in item .labels :
132
+ item .labels .remove ('Configured' )
133
+
126
134
if 'auto-link' not in item .labels :
135
+ item .labels .append ('auto-link' )
136
+ item .issue_object .set_labels (* item .labels )
127
137
try :
128
- package_name , readme_link = update_issue_body (sdk_repo , rest_repo , item .issue_object .number )
138
+ package_name , readme_link , output_folder = update_issue_body (request_repo , rest_repo , item .issue_object .number )
129
139
print ("pkname, readme" , package_name , readme_link )
130
140
item .package = package_name
131
141
key = ('Python' , item .package )
132
142
duplicated_issue [key ] = duplicated_issue .get (key , 0 ) + 1
133
143
except Exception as e :
134
144
item .bot_advice = 'failed to modify the body of the new issue. Please modify manually'
135
145
item .labels .append ('attention' )
146
+ item .issue_object .set_labels (* item .labels )
136
147
print (e )
137
148
raise
138
- item .labels .append ('auto-link' )
139
- item .issue_object .set_labels (* item .labels )
140
149
else :
141
150
try :
142
- readme_link = find_readme_link ( sdk_repo , item .issue_object .number )
151
+ readme_link , output_folder = find_readme_and_output_folder ( request_repo , rest_repo , item .issue_object .number )
143
152
except Exception as e :
144
153
print ('Issue: {} updates body failed' .format (item .issue_object .number ))
145
154
item .bot_advice = 'failed to find Readme link, Please check !!'
146
155
item .labels .append ('attention' )
156
+ item .issue_object .set_labels (* item .labels )
147
157
raise
148
158
try :
149
- reply = rg .begin_reply_generate (item = item , rest_repo = rest_repo , readme_link = readme_link )
159
+ print ("*********************" )
160
+ print (python_piplines )
161
+ pipeline_url = get_pipeline_url (python_piplines , output_folder )
162
+ rg .begin_reply_generate (item = item , rest_repo = rest_repo , readme_link = readme_link ,
163
+ sdk_repo = sdk_repo , pipeline_url = pipeline_url )
150
164
except Exception as e :
151
165
item .bot_advice = 'auto reply failed, Please intervene manually !!'
152
166
print ('Error from auto reply ========================' )
@@ -158,14 +172,18 @@ def auto_reply(item, sdk_repo, rest_repo, duplicated_issue):
158
172
def main ():
159
173
# get latest issue status
160
174
g = Github (os .getenv ('TOKEN' )) # please fill user_token
161
- sdk_repo = g .get_repo ('Azure/sdk-release-request' )
162
- rest_repo = g .get_repo ('Azure/azure-rest-api-specs' )
163
- label1 = sdk_repo .get_label ('ManagementPlane' )
164
- open_issues = sdk_repo .get_issues (state = 'open' , labels = [label1 ])
175
+ request_repo = g .get_repo ('Azure/sdk-release-request' )
176
+ rest_repo = g .get_repo ('Azure/azure-rest-api-specs' )
177
+ sdk_repo = g .get_repo ('Azure/azure-sdk-for-python' )
178
+ label1 = request_repo .get_label ('ManagementPlane' )
179
+ open_issues = request_repo .get_issues (state = 'open' , labels = [label1 ])
165
180
issue_status = []
166
181
issue_status_python = []
167
182
duplicated_issue = dict ()
168
183
start_time = time .time ()
184
+ # get pipeline definitionid
185
+ python_piplines = get_python_pipelines ()
186
+
169
187
for item in open_issues :
170
188
if not item .number :
171
189
continue
@@ -204,16 +222,22 @@ def main():
204
222
for item in issue_status :
205
223
if item .status == 'release' :
206
224
item .bot_advice = 'better to release asap.'
207
- elif item .comment_num == 0 and 'Python' in item .labels :
225
+ elif ( item .comment_num == 0 or 'Configured' in item . labels ) and 'Python' in item .labels :
208
226
item .bot_advice = 'new issue and better to confirm quickly.'
209
227
try :
210
- auto_reply (item , sdk_repo , rest_repo , duplicated_issue )
228
+ auto_reply (item , request_repo , rest_repo , sdk_repo , duplicated_issue , python_piplines )
211
229
except Exception as e :
212
230
continue
213
231
elif not item .author_latest_comment in _PYTHON_SDK_ADMINISTRATORS :
214
232
item .bot_advice = 'new comment for author.'
215
233
elif item .delay_from_latest_update >= 7 :
216
234
item .bot_advice = 'delay for a long time and better to handle now.'
235
+ if item .comment_num > 1 and item .language == 'Python' :
236
+ try :
237
+ auto_close_issue (request_repo , item )
238
+ except Exception as e :
239
+ item .bot_advice = 'auto-close failed, please check!'
240
+ print (f"=====issue: { item .issue_object .number } , { e } " )
217
241
218
242
if item .days_from_latest_commit >= 30 and item .language == 'Python' and '30days attention' not in item .labels :
219
243
item .labels .append ('30days attention' )
@@ -243,10 +267,10 @@ def main():
243
267
print_check ('git push -f origin HEAD' )
244
268
245
269
# upload to storage account(it is created in advance)
246
- blob = BlobClient .from_connection_string (conn_str = os .getenv ('CONN_STR' ), container_name = os .getenv ('FILE' ),
247
- blob_name = _FILE_OUT )
248
- with open (_FILE_OUT , 'rb' ) as data :
249
- blob .upload_blob (data , overwrite = True )
270
+ # blob = BlobClient.from_connection_string(conn_str=os.getenv('CONN_STR'), container_name=os.getenv('FILE'),
271
+ # blob_name=_FILE_OUT)
272
+ # with open(_FILE_OUT, 'rb') as data:
273
+ # blob.upload_blob(data, overwrite=True)
250
274
251
275
252
276
if __name__ == '__main__' :
0 commit comments