Skip to content

Commit 31127c3

Browse files
authored
[Release sdk status] count sdk folder (Azure#23783)
* add parameter * trigger swagger pipeline and sheduled trigger * avoid duplicated trigger * debug * debug * debug * debug * debug * optmization * special case * special case * optimize track2 ga version rule * delete upload code * testproxy adaptation * new timeoutlimit * add package size * format * fix * add log * fix * fix git commit error * add statistics for sdk folder * optimize title
1 parent fa064d6 commit 31127c3

File tree

2 files changed

+52
-54
lines changed

2 files changed

+52
-54
lines changed

scripts/release_sdk_status/main.py

Lines changed: 52 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
from lxml import etree
66
import lxml.html
77
import subprocess as sp
8-
from azure.storage.blob import BlobClient
9-
from pathlib import Path
10-
from typing import List
8+
from typing import List, Dict
119
from github import Github
1210
from github.Repository import Repository
1311
import time
@@ -16,10 +14,10 @@
1614

1715
from util import add_certificate
1816

19-
SERVICE_TEST_PATH = {}
2017
MAIN_REPO_SWAGGER = 'https://github.com/Azure/azure-rest-api-specs/tree/main'
2118
PR_URL = 'https://github.com/Azure/azure-rest-api-specs/pull/'
2219
FAILED_RESULT = []
20+
SKIP_TEXT = '-, -, -, -\n'
2321

2422
def my_print(cmd):
2523
print('== ' + cmd + ' ==\n')
@@ -120,14 +118,15 @@ def output_package_size(self) -> str:
120118
else:
121119
return self.package_size
122120

123-
def write_to_list(self):
121+
def write_to_list(self, sdk_folder: str) -> str:
124122
response = self.project_html("/#history")
125123
if 199 < response.status_code < 400:
126124
self.get_release_dict(response)
127125
self.bot_analysis()
128-
return '{package_name},{pypi_link},{track1_latest_version},{track1_latest_release_date},' \
126+
return '{sdk_folder}/{package_name},{pypi_link},{track1_latest_version},{track1_latest_release_date},' \
129127
'{track1_ga_version},{track2_latest_version},{track2_latest_release_date},{track2_ga_version},' \
130128
'{cli_version},{track_config},{bot},{readme_link},{multiapi},{whl_size},'.format(
129+
sdk_folder=sdk_folder.split('/')[0],
131130
package_name=self._package_name,
132131
pypi_link=self.pypi_link,
133132
track1_latest_version=self.track1_latest_version,
@@ -144,7 +143,7 @@ def write_to_list(self):
144143
whl_size=self.output_package_size())
145144
else:
146145
self.pypi_link = 'NA'
147-
return
146+
return ''
148147

149148
def find_track1_ga_version(self, versions: List[str]) -> None:
150149
if '1.0.0' in versions:
@@ -210,35 +209,32 @@ def bot_analysis(self):
210209
self.bot_warning += 'Need to add track2 config.'
211210

212211

213-
def sdk_info_from_pypi(sdk_info, cli_dependency):
212+
def sdk_info_from_pypi(sdk_info: List[Dict[str, str]], cli_dependency):
214213
all_sdk_status = []
215214
add_certificate(str(Path('../venv-sdk/lib/python3.8/site-packages/certifi/cacert.pem')))
216215
for package in sdk_info:
217-
if ',' in package:
218-
package = package.split(',')
219-
sdk_name = package[0].strip()
220-
if sdk_name in cli_dependency.keys():
221-
cli_version = cli_dependency[sdk_name]
222-
else:
223-
cli_version = 'NA'
224-
track_config = package[1].strip()
225-
readme_link = package[2].strip()
226-
rm_link = package[3].strip()
227-
multi_api = package[4].strip()
228-
pypi_ins = PyPIClient(package_name=sdk_name, track_config=track_config,
229-
readme_link=readme_link, rm_link=rm_link, cli_version=cli_version, multi_api=multi_api)
230-
text_to_write = pypi_ins.write_to_list()
231-
if pypi_ins.pypi_link != 'NA':
232-
if sdk_name == 'azure-mgmt-resource':
233-
test_result = run_playback_test('resources')
234-
else:
235-
try:
236-
service_name = [k for k, v in SERVICE_TEST_PATH.items() if sdk_name in v][0]
237-
test_result = run_playback_test(service_name)
238-
except:
239-
print(f'[Error] fail to play back test recordings: {sdk_name}')
240-
text_to_write += test_result
241-
all_sdk_status.append(text_to_write)
216+
sdk_name = package['package_name']
217+
if sdk_name in cli_dependency.keys():
218+
cli_version = cli_dependency[sdk_name]
219+
else:
220+
cli_version = 'NA'
221+
track_config = package['track_config']
222+
readme_link = package['readme_python_path']
223+
rm_link = package['readme_html']
224+
multi_api = package['multi_api']
225+
pypi_ins = PyPIClient(package_name=sdk_name, track_config=track_config,
226+
readme_link=readme_link, rm_link=rm_link, cli_version=cli_version, multi_api=multi_api)
227+
sdk_folder = package['sdk_folder']
228+
text_to_write = pypi_ins.write_to_list(sdk_folder)
229+
service_name = package['service_name']
230+
if pypi_ins.pypi_link != 'NA':
231+
test_result = SKIP_TEXT
232+
try:
233+
test_result = run_playback_test(service_name, sdk_folder)
234+
except:
235+
print(f'[Error] fail to play back test recordings: {sdk_name}')
236+
text_to_write += test_result
237+
all_sdk_status.append(text_to_write)
242238

243239
my_print(f'total pypi package kinds: {len(all_sdk_status)}')
244240
return all_sdk_status
@@ -264,12 +260,12 @@ def get_test_result(txt_path):
264260
return f'{coverage}, {passed}, {failed}, {skipped}\n'
265261

266262

267-
def run_playback_test(service_name):
263+
def run_playback_test(service_name: str, sdk_folder: str):
268264
if os.getenv('SKIP_COVERAGE') in ('true', 'yes'):
269-
return '-, -, -, -\n'
265+
return SKIP_TEXT
270266

271267
# eg: coverage_path='$(pwd)/sdk-repo/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/'
272-
coverage_path = ''.join([os.getenv('SDK_REPO'), '/sdk/', SERVICE_TEST_PATH[service_name]])
268+
coverage_path = ''.join([os.getenv('SDK_REPO'), '/sdk/', sdk_folder])
273269
service_path = coverage_path.split('/azure/mgmt')[0]
274270
test_path = service_path + '/tests'
275271
if os.path.exists(test_path):
@@ -295,12 +291,12 @@ def run_playback_test(service_name):
295291
if os.path.exists(service_path+'/result.txt'):
296292
return get_test_result(service_path+'/result.txt')
297293

298-
return '-, -, -, -\n'
294+
return SKIP_TEXT
299295

300296

301297
def write_to_csv(sdk_status_list, csv_name):
302298
with open(csv_name, 'w') as file_out:
303-
file_out.write('package name,'
299+
file_out.write('foler/package name,'
304300
'pypi link,'
305301
'latest track1 version,'
306302
'latest track1 release date,'
@@ -360,17 +356,16 @@ def read_file(file_name):
360356
return content
361357

362358

363-
def find_test_path(line: str, service_name: str) -> bool:
359+
def find_test_path(line: str) -> str:
364360
line = line.strip('\n') + '\n'
365361
try:
366-
SERVICE_TEST_PATH[service_name] = re.findall('output-folder: \$\(python-sdks-folder\)/(.*?)\n', line)[0]
367-
return True
362+
return re.findall('output-folder: \$\(python-sdks-folder\)/(.*?)\n', line)[0]
368363
except:
369364
FAILED_RESULT.append('[Fail to find sdk path] ' + line)
370-
return False
365+
return ''
371366

372367

373-
def sdk_info_from_swagger():
368+
def sdk_info_from_swagger() -> List[Dict[str, str]]:
374369
sdk_name_re = re.compile(r'azure-mgmt-[a-z]+-*([a-z])+')
375370
sdk_folder_re = re.compile('output-folder: \$\(python-sdks-folder\)/')
376371
resource_manager = []
@@ -379,7 +374,7 @@ def sdk_info_from_swagger():
379374
readme_folders = glob.glob(target_file_pattern)
380375
my_print(f'total readme folders: {len(readme_folders)}')
381376
for folder in readme_folders:
382-
found_sdk_folder = False
377+
sdk_folder = ''
383378
multi_api = ''
384379
linux_folder = Path(folder).as_posix()
385380
service_name = re.findall(r'specification/(.*?)/resource-manager/', linux_folder)[0]
@@ -395,16 +390,16 @@ def sdk_info_from_swagger():
395390
track_config += 1
396391
if readme_python == 'NA' and sdk_name_re.search(line) is not None and package_name == '':
397392
package_name = sdk_name_re.search(line).group()
398-
if sdk_folder_re.search(line) and not found_sdk_folder:
399-
found_sdk_folder = find_test_path(line, service_name)
393+
if sdk_folder_re.search(line) and not sdk_folder:
394+
sdk_folder = find_test_path(line)
400395

401396
if readme_python != 'NA':
402397
readme_python_text = read_file(readme_python)
403398
for text in readme_python_text:
404399
if sdk_name_re.search(text) is not None:
405400
package_name = sdk_name_re.search(text).group()
406-
if sdk_folder_re.search(text) and not found_sdk_folder:
407-
found_sdk_folder = find_test_path(text, service_name)
401+
if sdk_folder_re.search(text) and not sdk_folder:
402+
sdk_folder = find_test_path(text)
408403
if 'batch:' in text and multi_api == '':
409404
multi_api = 'fake'
410405
print(f'*********{service_name} is fake ')
@@ -416,11 +411,15 @@ def sdk_info_from_swagger():
416411
readme_html = folder.replace(SWAGGER_FOLDER, MAIN_REPO_SWAGGER)
417412
readme_html = Path(readme_html).as_posix()
418413
if package_name != '':
419-
resource_manager.append('{},{},{},{},{}\n'.format(package_name,
420-
track_config,
421-
readme_python,
422-
readme_html,
423-
multi_api))
414+
resource_manager.append({
415+
'package_name': package_name.strip(),
416+
'track_config': track_config,
417+
'readme_python_path': readme_python.strip(),
418+
'readme_html': readme_html.strip(),
419+
'multi_api': multi_api.strip(),
420+
'sdk_folder': sdk_folder.strip(), # eg: resources/azure-mgmt-resource/azure/mgmt/resource
421+
'service_name': service_name,
422+
})
424423
my_print(f'{folder} : {package_name}')
425424

426425
my_print(f'total package kinds: {len(resource_manager)}')

scripts/release_sdk_status/requirement.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ idna==2.10
44
lxml==4.6.5
55
requests==2.25.1
66
urllib3==1.26.6
7-
azure.storage.blob==12.8.1
87
pytest==6.2.5
98
pytest-cov==3.0.0
109
PyGithub==1.55

0 commit comments

Comments
 (0)