6
6
import lxml .html
7
7
import subprocess as sp
8
8
from azure .storage .blob import BlobClient
9
-
9
+ from pathlib import Path
10
+ from typing import List
11
+ from github import Github
12
+ from github .Repository import Repository
10
13
11
14
SERVICE_TEST_PATH = {}
15
+ MAIN_REPO_SWAGGER = 'https://github.com/Azure/azure-rest-api-specs/tree/main'
12
16
13
17
def my_print (cmd ):
14
18
print ('== ' + cmd + ' ==\n ' )
@@ -17,7 +21,7 @@ def my_print(cmd):
17
21
def print_check (cmd , path = '' ):
18
22
my_print (cmd )
19
23
if path :
20
- output = sp .check_output (cmd , shell = True , cwd = path )
24
+ sp .check_output (cmd , shell = True , cwd = path )
21
25
else :
22
26
sp .check_call (cmd , shell = True )
23
27
@@ -336,7 +340,7 @@ def sdk_info_from_swagger():
336
340
337
341
TRACK_CONFIG = {0 : 'NA' , 1 : 'track1' , 2 : 'track2' , 3 : 'both' }
338
342
track_config = TRACK_CONFIG .get (track_config , 'Rule error' )
339
- readme_html = folder .replace (SWAGGER_FOLDER , 'https://github.com/Azure/azure-rest-api-specs/tree/main' )
343
+ readme_html = folder .replace (SWAGGER_FOLDER , MAIN_REPO_SWAGGER )
340
344
if package_name != '' :
341
345
resource_manager .append ('{},{},{},{},{}\n ' .format (package_name ,
342
346
track_config ,
@@ -364,23 +368,63 @@ def upload_to_azure(out_file):
364
368
blob .upload_blob (data , overwrite = True )
365
369
366
370
367
- def main ():
371
+ def count_sdk_status ():
368
372
cli_dependency = get_cli_dependency ()
369
373
sdk_info = sdk_info_from_swagger ()
370
-
371
374
all_sdk_status = sdk_info_from_pypi (sdk_info , cli_dependency )
372
- print ('**' )
373
- print (os .getenv ('SWAGGER_REPO' ))
374
- print (os .getenv ('SDK_REPO' ))
375
375
376
- print_check ('pwd' , path = os .getenv ('SDK_REPO' ))
377
- print_check ('ls' , path = os .getenv ('SDK_REPO' ))
376
+ out_file = 'release_sdk_status.csv'
377
+ write_to_csv (all_sdk_status , out_file )
378
+ commit_to_github ()
379
+ upload_to_azure (out_file )
378
380
379
381
380
- OUT_FILE = 'release_sdk_status.csv'
381
- write_to_csv (all_sdk_status , OUT_FILE )
382
- commit_to_github ()
383
- upload_to_azure (OUT_FILE )
382
+ def get_all_readme_html () -> List [str ]:
383
+ swagger_folder = os .getenv ('SWAGGER_REPO' )
384
+ readme_folders = glob .glob (f'{ swagger_folder } /specification/*/resource-manager' )
385
+ my_print (f'total readme folders: { len (readme_folders )} ' )
386
+ service_name = [Path (item ).parts [- 2 ] for item in readme_folders ]
387
+ return [f'{ MAIN_REPO_SWAGGER } /specification/{ item } /resource-manager' for item in service_name ]
388
+
389
+
390
+ def get_latest_pr_from_readme (rest_repo : Repository , service_html : str ):
391
+ commit_url = service_html .split ('main/' )[- 1 ]
392
+ commits = rest_repo .get_commits (path = commit_url )
393
+ latest_commit = None
394
+ for commit in commits :
395
+ latest_commit = commit
396
+ break
397
+ latest_pr_brief = latest_commit .commit .message
398
+ latest_pr_number = re .findall ('\(\#[0-9]+\)' , latest_pr_brief )
399
+ latest_pr_number_int = []
400
+ for number in latest_pr_number :
401
+ number = int (re .search ('\d+' , number ).group ())
402
+ latest_pr_number_int .append (number )
403
+ latest_pr_number_int .sort ()
404
+
405
+ return latest_pr_number_int [- 1 ]
406
+
407
+
408
+ def trigger_pipeline (readme_html : List [str ]) -> None :
409
+ g = Github (os .getenv ('TOKEN' )) # please fill user_token
410
+ rest_repo = g .get_repo ('Azure/azure-rest-api-specs' )
411
+ for item in readme_html :
412
+ num = get_latest_pr_from_readme (rest_repo , item )
413
+ pr = rest_repo .get_pull (num )
414
+ pr .create_issue_comment (body = '/azp run' )
415
+ my_print (f'get latest PR "{ num } " from { item } and comment "/azp run" successfully' )
416
+
417
+
418
+ def trigger_swagger_pipeline () -> None :
419
+ readme_html_all = get_all_readme_html ()
420
+ trigger_pipeline (readme_html_all )
421
+
422
+
423
+ def main ():
424
+ if os .environ .get ('AZP_RUN' ) in ('yes' , 'true' ):
425
+ trigger_swagger_pipeline ()
426
+ else :
427
+ count_sdk_status ()
384
428
385
429
386
430
if __name__ == '__main__' :
0 commit comments