Skip to content

Commit f21670b

Browse files
Wzb123456789Zhenbiao Wei (WICRESOFT NORTH AMERICA LTD)
andauthored
[Release_sdk_status] Fix release_sdk_status for run test break (Azure#27906)
* fix release_sdk_status * Update release_sdk_status.yml * Delete mgmt_settings_real_.py * Update main.py * Update main.py * Update release_sdk_status.yml * Update release_sdk_status.yml Co-authored-by: Zhenbiao Wei (WICRESOFT NORTH AMERICA LTD) <v-zhenbwei@microsoft.com>
1 parent 04e4891 commit f21670b

File tree

3 files changed

+97
-55
lines changed

3 files changed

+97
-55
lines changed

scripts/release_sdk_status/main.py

Lines changed: 92 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import subprocess as sp
88
from typing import List, Dict
99
from github import Github
10+
from functools import wraps
1011
from github.Repository import Repository
1112
import time
1213
from packaging.version import parse
@@ -19,10 +20,27 @@
1920
FAILED_RESULT = []
2021
SKIP_TEXT = '-, -, -, -\n'
2122

23+
24+
def return_origin_path(func):
25+
@wraps(func)
26+
def wrapper(*args, **kwargs):
27+
current_path = os.getcwd()
28+
result = func(*args, **kwargs)
29+
os.chdir(current_path)
30+
return result
31+
32+
return wrapper
33+
34+
2235
def my_print(cmd):
2336
print('== ' + cmd + ' ==\n')
2437

2538

39+
def print_exec(cmd: str):
40+
my_print(cmd)
41+
sp.call(cmd, shell=True)
42+
43+
2644
def print_check(cmd, path=''):
2745
my_print(cmd)
2846
if path:
@@ -36,6 +54,10 @@ def print_call(cmd):
3654
sp.call(cmd, shell=True)
3755

3856

57+
def start_test_proxy():
58+
print_check('pwsh {}/eng/common/testproxy/docker-start-proxy.ps1 \"start\"'.format(os.getenv('SDK_REPO')))
59+
60+
3961
def version_sort(versions: List[str]) -> List[str]:
4062
versions_package = [parse(version) for version in versions]
4163
versions_package.sort()
@@ -126,21 +148,21 @@ def write_to_list(self, sdk_folder: str) -> str:
126148
return '{sdk_folder}/{package_name},{pypi_link},{track1_latest_version},{track1_latest_release_date},' \
127149
'{track1_ga_version},{track2_latest_version},{track2_latest_release_date},{track2_ga_version},' \
128150
'{cli_version},{track_config},{bot},{readme_link},{multiapi},{whl_size},'.format(
129-
sdk_folder=sdk_folder.split('/')[0],
130-
package_name=self._package_name,
131-
pypi_link=self.pypi_link,
132-
track1_latest_version=self.track1_latest_version,
133-
track1_latest_release_date=self.version_date_dict[self.track1_latest_version],
134-
track1_ga_version=self.track1_ga_version,
135-
track2_latest_version=self.track2_latest_version,
136-
track2_latest_release_date=self.version_date_dict[self.track2_latest_version],
137-
track2_ga_version=self.track2_ga_version,
138-
cli_version=self.cli_version,
139-
track_config=self.track_config,
140-
bot=self.bot_warning,
141-
readme_link=self.rm_link,
142-
multiapi=self.multi_api,
143-
whl_size=self.output_package_size())
151+
sdk_folder=sdk_folder.split('/')[0],
152+
package_name=self._package_name,
153+
pypi_link=self.pypi_link,
154+
track1_latest_version=self.track1_latest_version,
155+
track1_latest_release_date=self.version_date_dict[self.track1_latest_version],
156+
track1_ga_version=self.track1_ga_version,
157+
track2_latest_version=self.track2_latest_version,
158+
track2_latest_release_date=self.version_date_dict[self.track2_latest_version],
159+
track2_ga_version=self.track2_ga_version,
160+
cli_version=self.cli_version,
161+
track_config=self.track_config,
162+
bot=self.bot_warning,
163+
readme_link=self.rm_link,
164+
multiapi=self.multi_api,
165+
whl_size=self.output_package_size())
144166
else:
145167
self.pypi_link = 'NA'
146168
return ''
@@ -155,7 +177,7 @@ def find_track2_ga_version(self, versions: List[str]) -> None:
155177
self.track2_ga_version = version
156178
break
157179

158-
def handle_cli_version(self, track1_versions: List[str], track2_versions: List[str]) ->None:
180+
def handle_cli_version(self, track1_versions: List[str], track2_versions: List[str]) -> None:
159181
if self.cli_version == 'NA':
160182
return
161183
if self.cli_version in track1_versions:
@@ -209,9 +231,61 @@ def bot_analysis(self):
209231
self.bot_warning += 'Need to add track2 config.'
210232

211233

234+
def sdk_code_path(service_name, sdk_name) -> str:
235+
return str(Path(os.getenv('SDK_REPO') + f'/sdk/{service_name}/{sdk_name}'))
236+
237+
238+
@return_origin_path
239+
def install_package_locally(service_name, sdk_name):
240+
os.chdir(sdk_code_path(service_name, sdk_name))
241+
print_check('pip install -e .')
242+
print_exec('pip install -r dev_requirements.txt')
243+
244+
245+
@return_origin_path
246+
def run_test_proc(sdk_name, service_name, sdk_folder):
247+
# run test
248+
if os.getenv('SKIP_COVERAGE') in ('true', 'yes'):
249+
return SKIP_TEXT
250+
251+
coverage_path = ''.join([os.getenv('SDK_REPO'), '/sdk/', sdk_folder])
252+
service_path = coverage_path.split('/azure/mgmt')[0]
253+
os.chdir(sdk_code_path(service_name, sdk_name))
254+
try:
255+
print_check(f'pytest --collect-only')
256+
except:
257+
print('live test run done, do not find any test !!!')
258+
return '-, -, -, -\n'
259+
if os.path.exists(coverage_path + '/operations') and os.path.exists(coverage_path + '/models'):
260+
operations_path = coverage_path + '/operations'
261+
models_path = coverage_path + '/models'
262+
try:
263+
start_time = int(time.time())
264+
print_check(f'pytest tests -s --cov={operations_path} --cov={models_path} >result.txt', path=service_path)
265+
cost_time = int(time.time()) - start_time
266+
my_print(f'{service_name} play_back cost {cost_time} seconds({cost_time // 60} minutes)')
267+
except Exception as e:
268+
print(f'{service_name} test ERROR')
269+
return '-, 0, 0, 0\n'
270+
else:
271+
try:
272+
print_check(f'pytest tests -s >result.txt', path=service_path)
273+
except Exception as e:
274+
return '-, 0, 0, 0\n'
275+
if os.path.exists(service_path + '/result.txt'):
276+
return get_test_result(service_path + '/result.txt')
277+
278+
279+
def run_test(sdk_name, service_name, sdk_folder):
280+
install_package_locally(service_name, sdk_name)
281+
test_result = run_test_proc(sdk_name, service_name, sdk_folder)
282+
return test_result
283+
284+
212285
def sdk_info_from_pypi(sdk_info: List[Dict[str, str]], cli_dependency):
213286
all_sdk_status = []
214-
add_certificate(str(Path('../venv-sdk/lib/python3.8/site-packages/certifi/cacert.pem')))
287+
add_certificate()
288+
start_test_proxy()
215289
for package in sdk_info:
216290
sdk_name = package['package_name']
217291
if sdk_name in cli_dependency.keys():
@@ -230,7 +304,7 @@ def sdk_info_from_pypi(sdk_info: List[Dict[str, str]], cli_dependency):
230304
if pypi_ins.pypi_link != 'NA':
231305
test_result = SKIP_TEXT
232306
try:
233-
test_result = run_playback_test(service_name, sdk_folder)
307+
test_result = run_test(sdk_name, service_name, sdk_folder)
234308
except:
235309
print(f'[Error] fail to play back test recordings: {sdk_name}')
236310
text_to_write += test_result
@@ -260,40 +334,6 @@ def get_test_result(txt_path):
260334
return f'{coverage}, {passed}, {failed}, {skipped}\n'
261335

262336

263-
def run_playback_test(service_name: str, sdk_folder: str):
264-
if os.getenv('SKIP_COVERAGE') in ('true', 'yes'):
265-
return SKIP_TEXT
266-
267-
# eg: coverage_path='$(pwd)/sdk-repo/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/'
268-
coverage_path = ''.join([os.getenv('SDK_REPO'), '/sdk/', sdk_folder])
269-
service_path = coverage_path.split('/azure/mgmt')[0]
270-
test_path = service_path + '/tests'
271-
if os.path.exists(test_path):
272-
print_check('pip install -r dev_requirements.txt', path=service_path)
273-
print_check('pip install -e .', path=service_path)
274-
# print_check('python setup.py install', path=service_path)
275-
if os.path.exists(coverage_path+'/operations') and os.path.exists(coverage_path+'/models'):
276-
operations_path = coverage_path+'/operations'
277-
models_path = coverage_path+'/models'
278-
try:
279-
start_time = int(time.time())
280-
print_check(f'pytest -s tests --cov={operations_path} --cov={models_path} >result.txt', path=service_path)
281-
cost_time = int(time.time()) - start_time
282-
my_print(f'{service_name} play_back cost {cost_time} seconds({cost_time // 60} minutes)')
283-
except Exception as e:
284-
print(f'{service_name} test ERROR')
285-
return '-, 0, 0, 0\n'
286-
else:
287-
try:
288-
print_check(f'pytest -s tests >result.txt', path=service_path)
289-
except Exception as e:
290-
return '-, 0, 0, 0\n'
291-
if os.path.exists(service_path+'/result.txt'):
292-
return get_test_result(service_path+'/result.txt')
293-
294-
return SKIP_TEXT
295-
296-
297337
def write_to_csv(sdk_status_list, csv_name):
298338
with open(csv_name, 'w') as file_out:
299339
file_out.write('foler/package name,'

scripts/release_sdk_status/release_sdk_status.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ jobs:
6060
export SWAGGER_REPO=$(pwd)/azure-rest-api-specs
6161
export SDK_REPO=$(pwd)/sdk-repo
6262
export SKIP_COVERAGE=$(SKIP_COVERAGE)
63+
export AZURE_TEST_RUN_LIVE=false
6364
6465
# create virtual env
6566
python -m venv venv-sdk
@@ -71,4 +72,4 @@ jobs:
7172
git checkout release-sdk-status
7273
7374
# run
74-
python $script_path/main.py
75+
python $script_path/main.py

scripts/release_sdk_status/util.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ def _find_certificate():
88
return fr.read()
99

1010

11-
def add_certificate(file: str):
11+
def add_certificate():
1212
certification = _find_certificate()
13-
with open(file, 'a+') as f:
13+
cacert_path = Path('../venv-sdk/lib/python3.8/site-packages/certifi/cacert.pem')
14+
with open(cacert_path, 'a+') as f:
1415
f.seek(0, 0)
1516
f.write(certification)

0 commit comments

Comments
 (0)