66import lxml .html
77import subprocess as sp
88from 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
1013
1114SERVICE_TEST_PATH = {}
15+ MAIN_REPO_SWAGGER = 'https://github.com/Azure/azure-rest-api-specs/tree/main'
1216
1317def my_print (cmd ):
1418 print ('== ' + cmd + ' ==\n ' )
@@ -17,7 +21,7 @@ def my_print(cmd):
1721def print_check (cmd , path = '' ):
1822 my_print (cmd )
1923 if path :
20- output = sp .check_output (cmd , shell = True , cwd = path )
24+ sp .check_output (cmd , shell = True , cwd = path )
2125 else :
2226 sp .check_call (cmd , shell = True )
2327
@@ -336,7 +340,7 @@ def sdk_info_from_swagger():
336340
337341 TRACK_CONFIG = {0 : 'NA' , 1 : 'track1' , 2 : 'track2' , 3 : 'both' }
338342 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 )
340344 if package_name != '' :
341345 resource_manager .append ('{},{},{},{},{}\n ' .format (package_name ,
342346 track_config ,
@@ -364,23 +368,63 @@ def upload_to_azure(out_file):
364368 blob .upload_blob (data , overwrite = True )
365369
366370
367- def main ():
371+ def count_sdk_status ():
368372 cli_dependency = get_cli_dependency ()
369373 sdk_info = sdk_info_from_swagger ()
370-
371374 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' ))
375375
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 )
378380
379381
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 ()
384428
385429
386430if __name__ == '__main__' :
0 commit comments