Skip to content

Commit e583f5e

Browse files
authored
[auto release] support for typespec (Azure#35137)
* support for typespec * fix whl package install * fix test
1 parent c3c7b85 commit e583f5e

File tree

3 files changed

+47
-127
lines changed

3 files changed

+47
-127
lines changed

scripts/auto_release/PythonSdkLiveTest.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,8 @@ jobs:
7979
# import env variable
8080
export AZURE_TEST_RUN_LIVE=$(AZURE_TEST_RUN_LIVE)
8181
export TENANT_ID=$(ENV-TENANT-ID)
82-
export CLIENT_ID=$(ENV-CLIENT-ID)
83-
export CLIENT_SECRET=$(ENV-CLIENT-SECRET)
8482
export SUBSCRIPTION_ID=$(ENV-SUBSCRIPTION-ID)
8583
export AZURE_TENANT_ID=$(ENV-TENANT-ID)
86-
export AZURE_CLIENT_ID=$(ENV-CLIENT-ID)
87-
export AZURE_CLIENT_SECRET=$(ENV-CLIENT-SECRET)
8884
export AZURE_SUBSCRIPTION_ID=$(ENV-SUBSCRIPTION-ID)
8985
export ISSUE_LINK=$(ISSUE_LINK)
9086
export SCRIPT_PATH=$script_path

scripts/auto_release/main.py

Lines changed: 47 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from github import Github
1414
from azure.storage.blob import BlobServiceClient, ContainerClient
1515
from datetime import datetime, timedelta
16+
import importlib
1617

1718
_LOG = logging.getLogger()
1819

@@ -98,22 +99,6 @@ def current_time_month() -> str:
9899
date = time.localtime(time.time())
99100
return '{}-{:02d}'.format(date.tm_year, date.tm_mon)
100101

101-
102-
def set_test_env_var():
103-
setting_path = str(Path(os.getenv('SCRIPT_PATH')) / 'mgmt_settings_real_.py')
104-
# edit mgmt_settings_real.py
105-
with open(setting_path, 'r') as file_in:
106-
list_in = file_in.readlines()
107-
108-
for i in range(0, len(list_in)):
109-
list_in[i] = list_in[i].replace('ENV_TENANT_ID', os.environ['TENANT_ID'])
110-
list_in[i] = list_in[i].replace('ENV_CLIENT_ID', os.environ['CLIENT_ID'])
111-
list_in[i] = list_in[i].replace('ENV_CLIENT_SECRET', os.environ['CLIENT_SECRET'])
112-
list_in[i] = list_in[i].replace('ENV_SUBSCRIPTION_ID', os.environ['SUBSCRIPTION_ID'])
113-
with open(str(Path('tools/azure-sdk-tools/devtools_testutils/mgmt_settings_real.py')), 'w') as file_out:
114-
file_out.writelines(list_in)
115-
116-
117102
class CodegenTestPR:
118103
"""
119104
This class can generate SDK code, run live test and create RP
@@ -131,6 +116,7 @@ def __init__(self):
131116
self.test_folder = os.getenv('TEST_FOLDER', '')
132117

133118
self.package_name = '' # 'dns' of 'sdk/compute/azure-mgmt-dns'
119+
self.whole_package_name = '' # 'azure-mgmt-dns'
134120
self.new_branch = ''
135121
self.sdk_folder = '' # 'compute' of 'sdk/compute/azure-mgmt-dns'
136122
self.autorest_result = ''
@@ -183,16 +169,21 @@ def checkout_azure_default_branch(self):
183169
if self.spec_repo:
184170
os.chdir(Path(self.spec_repo))
185171
self.checkout_branch("DEBUG_REST_BRANCH", "azure-rest-api-specs")
172+
173+
@property
174+
def from_swagger(self) -> bool:
175+
return "readme.md" in self.spec_readme
186176

187177
def generate_code(self):
188178
self.checkout_azure_default_branch()
189179

190180
# prepare input data
181+
file_name = "relatedReadmeMdFiles" if self.from_swagger else "relatedTypeSpecProjectFolder"
191182
input_data = {
192183
'headSha': self.get_latest_commit_in_swagger_repo(),
193184
'repoHttpsUrl': "https://github.com/Azure/azure-rest-api-specs",
194185
'specFolder': self.spec_repo,
195-
'relatedReadmeMdFiles': [self.readme_local_folder()]
186+
file_name: [self.readme_local_folder()],
196187
}
197188
log(str(input_data))
198189

@@ -216,7 +207,8 @@ def generate_code(self):
216207

217208
def get_package_name_with_autorest_result(self):
218209
generate_result = self.get_autorest_result()
219-
self.package_name = generate_result["packages"][0]["packageName"].split('-', 2)[-1]
210+
self.whole_package_name = generate_result["packages"][0]["packageName"]
211+
self.package_name = self.whole_package_name.split('-', 2)[-1]
220212

221213
def prepare_branch_with_readme(self):
222214
self.generate_code()
@@ -229,7 +221,7 @@ def create_new_branch(self):
229221
print_check(f'git checkout -b {self.new_branch}')
230222

231223
def check_sdk_readme(self):
232-
sdk_readme = str(Path(f'sdk/{self.sdk_folder}/azure-mgmt-{self.package_name}/README.md'))
224+
sdk_readme = str(Path(f'sdk/{self.sdk_folder}/{self.whole_package_name}/README.md'))
233225

234226
def edit_sdk_readme(content: List[str]):
235227
for i in range(0, len(content)):
@@ -249,20 +241,20 @@ def readme_python_md_path(self)-> Path:
249241
# Use the template to update readme and setup by packaging_tools
250242
@return_origin_path
251243
def check_file_with_packaging_tool(self):
252-
python_md = self.readme_python_md_path
244+
print_check(f"pip install {self.get_whl_package}")
245+
module = importlib.import_module(self.whole_package_name.replace("-", "."))
253246
title = ""
254-
if python_md.exists():
255-
with open(python_md, "r") as file_in:
256-
md_content = file_in.readlines()
257-
for line in md_content:
258-
if "title:" in line:
259-
title = line.replace("title:", "").strip(" \r\n")
260-
break
261-
else:
262-
log(f"{python_md} does not exist")
247+
for item in getattr(module, "__all__"):
248+
if item.endswith("Client"):
249+
title = item
250+
break
251+
252+
if not title:
253+
log(f"Can not find the title in {self.whole_package_name}")
254+
263255
os.chdir(Path(f'sdk/{self.sdk_folder}'))
264256
# add `title` and update `is_stable` in sdk_packaging.toml
265-
toml = Path(f"azure-mgmt-{self.package_name}") / "sdk_packaging.toml"
257+
toml = Path(self.whole_package_name) / "sdk_packaging.toml"
266258
stable_config = "is_stable = " + ("true" if self.tag_is_stable else "false") + "\n"
267259
if toml.exists():
268260
def edit_toml(content: List[str]):
@@ -282,7 +274,7 @@ def edit_toml(content: List[str]):
282274
else:
283275
log(f"{os.getcwd()}/{toml} does not exist")
284276

285-
print_check(f'python -m packaging_tools --build-conf azure-mgmt-{self.package_name}')
277+
print_check(f'python -m packaging_tools --build-conf {self.whole_package_name}')
286278
log('packaging_tools --build-conf successfully ')
287279

288280
def check_pprint_name(self):
@@ -390,7 +382,7 @@ def check_changelog_file(self):
390382
self.edit_changelog()
391383

392384
def check_dev_requirement(self):
393-
file = Path(f'sdk/{self.sdk_folder}/azure-mgmt-{self.package_name}/dev_requirements.txt')
385+
file = Path(f'sdk/{self.sdk_folder}/{self.whole_package_name}/dev_requirements.txt')
394386
content = [
395387
"-e ../../../tools/azure-sdk-tools\n",
396388
"../../identity/azure-identity\n"
@@ -407,22 +399,23 @@ def check_package_size(self):
407399
self.check_package_size_result.append(f'ERROR: Package size is over 2MBytes: {Path(package).name}!!!')
408400

409401
def check_model_flatten(self):
410-
last_version = self.get_last_release_version()
411-
if last_version == "" or last_version.startswith("1.0.0b"):
412-
with open(self.readme_md_path, 'r') as file_in:
413-
readme_md_content = file_in.read()
414-
415-
with open(self.readme_python_md_path, 'r') as file_in:
416-
readme_python_md_content = file_in.read()
417-
418-
if "flatten-models: false" not in readme_md_content and "flatten-models: false" not in readme_python_md_content and self.issue_link:
419-
api = Github(self.bot_token).get_repo("Azure/sdk-release-request")
420-
issue_number = int(self.issue_link.split('/')[-1])
421-
issue = api.get_issue(issue_number)
422-
assignee = issue.assignee.login if issue.assignee else ""
423-
message = "please set `flatten-models: false` in readme.md or readme.python.md"
424-
issue.create_comment(f'@{assignee}, {message}')
425-
raise Exception(message)
402+
if self.from_swagger:
403+
last_version = self.get_last_release_version()
404+
if last_version == "" or last_version.startswith("1.0.0b"):
405+
with open(self.readme_md_path, 'r') as file_in:
406+
readme_md_content = file_in.read()
407+
408+
with open(self.readme_python_md_path, 'r') as file_in:
409+
readme_python_md_content = file_in.read()
410+
411+
if "flatten-models: false" not in readme_md_content and "flatten-models: false" not in readme_python_md_content and self.issue_link:
412+
api = Github(self.bot_token).get_repo("Azure/sdk-release-request")
413+
issue_number = int(self.issue_link.split('/')[-1])
414+
issue = api.get_issue(issue_number)
415+
assignee = issue.assignee.login if issue.assignee else ""
416+
message = "please set `flatten-models: false` in readme.md or readme.python.md"
417+
issue.create_comment(f'@{assignee}, {message}')
418+
raise Exception(message)
426419

427420
def check_file(self):
428421
self.check_file_with_packaging_tool()
@@ -435,7 +428,7 @@ def check_file(self):
435428
self.check_model_flatten()
436429

437430
def sdk_code_path(self) -> str:
438-
return str(Path(f'sdk/{self.sdk_folder}/azure-mgmt-{self.package_name}'))
431+
return str(Path(f'sdk/{self.sdk_folder}/{self.whole_package_name}'))
439432

440433
@property
441434
def is_single_path(self) -> bool:
@@ -451,7 +444,6 @@ def install_package_locally(self):
451444

452445
def prepare_test_env(self):
453446
self.install_package_locally()
454-
set_test_env_var()
455447

456448
@staticmethod
457449
def is_live_test()-> bool:
@@ -512,7 +504,7 @@ def create_pr_proc(self):
512504
pr_body = "" if not self.check_package_size_result else "{}\n".format("\n".join(self.check_package_size_result))
513505
pr_body = pr_body + "{} \n{} \n{}".format(self.issue_link, self.test_result, self.pipeline_link)
514506
if not self.is_single_path:
515-
pr_body += f'\nBuildTargetingString\n azure-mgmt-{self.package_name}\nSkip.CreateApiReview\ntrue'
507+
pr_body += f'\nBuildTargetingString\n {self.whole_package_name}\nSkip.CreateApiReview\ntrue'
516508
res_create = api.pulls.create(pr_title, pr_head, pr_base, pr_body)
517509

518510
# Add issue link on PR
@@ -547,6 +539,10 @@ def get_private_package(self) -> List[str]:
547539
content = self.get_autorest_result()
548540
return content["packages"][0]["artifacts"]
549541

542+
@property
543+
def get_whl_package(self) -> str:
544+
return [package for package in self.get_private_package() if package.endswith('.whl')][0]
545+
550546
def upload_private_package_proc(self, container_name: str):
551547
container_client = ContainerClient.from_connection_string(conn_str=self.conn_str, container_name=container_name)
552548
private_package = self.get_private_package()

scripts/auto_release/mgmt_settings_real_.py

Lines changed: 0 additions & 72 deletions
This file was deleted.

0 commit comments

Comments
 (0)