Skip to content

Commit 6427bf8

Browse files
authored
[Release sdk status] Trigger swagger pipeline and add scheduled trigger definition (Azure#22272)
* add parameter * trigger swagger pipeline and sheduled trigger
1 parent 2a4f772 commit 6427bf8

File tree

3 files changed

+68
-15
lines changed

3 files changed

+68
-15
lines changed

scripts/release_sdk_status/main.py

+58-14
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@
66
import lxml.html
77
import subprocess as sp
88
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
1013

1114
SERVICE_TEST_PATH = {}
15+
MAIN_REPO_SWAGGER = 'https://github.com/Azure/azure-rest-api-specs/tree/main'
1216

1317
def my_print(cmd):
1418
print('== ' + cmd + ' ==\n')
@@ -17,7 +21,7 @@ def my_print(cmd):
1721
def 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

386430
if __name__ == '__main__':

scripts/release_sdk_status/release_sdk_status.yml

+8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ trigger:
77
exclude:
88
- '*'
99

10+
schedules:
11+
- cron: "0 16 * * *"
12+
displayName: Daily Statistics
13+
branches:
14+
include:
15+
- main
16+
always: true
1017

1118
jobs:
1219
- job: ReleaseSdkStatus
@@ -42,6 +49,7 @@ jobs:
4249
export TOKEN=$(USR_TOKEN)
4350
export SWAGGER_REPO=$(pwd)/azure-rest-api-specs
4451
export SDK_REPO=$(pwd)/sdk-repo
52+
export AZP_RUN=$(AZP_RUN)
4553
4654
# create virtual env
4755
python -m venv venv-sdk

scripts/release_sdk_status/requirement.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ requests==2.25.1
66
urllib3==1.26.6
77
azure.storage.blob==12.8.1
88
pytest==6.2.5
9-
pytest-cov
9+
pytest-cov==3.0.0
10+
PyGithub==1.55

0 commit comments

Comments
 (0)