Skip to content

Commit 1fcd424

Browse files
authored
[release helper] optimize to find readme link (#33880)
* optimize logic to find right readme folder * update excel * update excel * update
1 parent 0187380 commit 1fcd424

File tree

3 files changed

+32
-20
lines changed

3 files changed

+32
-20
lines changed

scripts/release_helper/common.py

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from datetime import date, datetime
77
from typing import Set, List, Dict
88
from random import randint
9-
9+
from pathlib import Path
1010
from github import Github
1111
from github.Repository import Repository
1212

@@ -44,6 +44,7 @@ class IssueProcess:
4444
package_name = '' # target package name
4545
target_date = '' # target release date asked by customer
4646
date_from_target = 0
47+
spec_repo = None # local swagger repo path
4748
"""
4849

4950
def __init__(self, issue_package: IssuePackage, request_repo_dict: Dict[str, Repository],
@@ -65,6 +66,7 @@ def __init__(self, issue_package: IssuePackage, request_repo_dict: Dict[str, Rep
6566
self.date_from_target = 0
6667
self.is_open = True
6768
self.issue_title = issue_package.issue.title.split(": ", 1)[-1]
69+
self.spec_repo = Path(os.getenv('SPEC_REPO'))
6870

6971
@property
7072
def created_date_format(self) -> str:
@@ -91,6 +93,16 @@ def handle_link_contains_commit(self, link: str) -> str:
9193
def comment(self, message: str) -> None:
9294
self.issue_package.issue.create_comment(message)
9395

96+
# get "workloads/resource-manager" from "workloads/resource-manager/Microsoft.Workloads/stable/2023-04-01/operations.json"
97+
def get_valid_relative_readme_folder(self, readme_folder: str) -> str:
98+
folder = Path(Path(readme_folder).as_posix().strip("/"))
99+
while "resource-manager" in str(folder):
100+
if Path(self.spec_repo, folder, "readme.md").exists():
101+
return folder.as_posix()
102+
folder = folder.parent
103+
104+
return folder.as_posix()
105+
94106
def get_readme_from_pr_link(self, link: str) -> str:
95107
pr_number = int(link.replace(f"{_SWAGGER_PULL}/", "").split('/')[0])
96108

@@ -102,10 +114,10 @@ def get_readme_from_pr_link(self, link: str) -> str:
102114
if '/resource-manager' not in contents_url:
103115
continue
104116
try:
105-
pk_url_name.add(re.findall(r'/specification/(.*?)/resource-manager/', contents_url)[0])
117+
pk_url_name.add(self.get_valid_relative_readme_folder(contents_url.split('/specification')[1]))
106118
except Exception as e:
107119
continue
108-
readme_link = [f'{_SWAGGER_URL}/{item}/resource-manager' for item in pk_url_name]
120+
readme_link = [f'{_SWAGGER_URL}/{item}' for item in pk_url_name]
109121
if len(readme_link) > 1:
110122
multi_link = ', '.join(readme_link)
111123
pr = f"{_SWAGGER_PULL}/{pr_number}"
@@ -146,12 +158,19 @@ def get_readme_link(self, origin_link: str):
146158
# (i.e. https://github.com/Azure/azure-rest-api-specs/tree/main/specification/xxxx)
147159
self.readme_link = link + '/resource-manager'
148160
else:
149-
self.readme_link = link.split('/resource-manager')[0] + '/resource-manager'
161+
relative_readme_folder = self.get_valid_relative_readme_folder(link.split('/specification')[1])
162+
self.readme_link = f"{_SWAGGER_URL}/{relative_readme_folder}"
163+
164+
@property
165+
def readme_local(self) -> str:
166+
return str(Path(self.spec_repo, self.readme_link.split('specification/')[1]))
167+
168+
def get_local_file_content(self, name: str = "readme.md") -> str:
169+
with open(Path(self.readme_local, name), 'r', encoding='utf-8') as f:
170+
return f.read()
150171

151172
def get_default_readme_tag(self) -> None:
152-
pattern_resource_manager = re.compile(r'/specification/([\w-]+/)+resource-manager')
153-
readme_path = pattern_resource_manager.search(self.readme_link).group() + '/readme.md'
154-
contents = str(self.issue_package.rest_repo.get_contents(readme_path).decoded_content)
173+
contents = self.get_local_file_content()
155174
pattern_tag = re.compile(r'tag: package-[\w+-.]+')
156175
self.default_readme_tag = pattern_tag.search(contents).group().split(':')[-1].strip()
157176

scripts/release_helper/python.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,25 +56,14 @@ def get_edit_content(self) -> None:
5656
def is_multiapi(self):
5757
return _MultiAPI in self.issue_package.labels_name
5858

59-
def get_content(self, file_name: str) -> str:
60-
patterns = [r'/specification/([\w-]+/)+resource-manager', r'/specification/([\w-]+/)+resource-manager/.*']
61-
for item in patterns:
62-
try:
63-
readme_path = re.compile(item).search(self.readme_link).group() + file_name
64-
contents = str(self.issue_package.rest_repo.get_contents(readme_path).decoded_content)
65-
return contents
66-
except:
67-
pass
68-
raise Exception(f"can not get content with {self.readme_link}")
69-
7059
@property
7160
def readme_comparison(self) -> bool:
7261
# to see whether need change readme
7362
if _CONFIGURED in self.issue_package.labels_name:
7463
return False
7564
if 'package-' not in self.target_readme_tag:
7665
return True
77-
contents = self.get_content('/readme.md')
66+
contents = self.get_local_file_content()
7867
pattern_tag = re.compile(r'tag: package-[\w+-.]+')
7968
package_tags = pattern_tag.findall(contents)
8069
whether_same_tag = self.target_readme_tag in package_tags[0]
@@ -149,7 +138,7 @@ def auto_parse(self):
149138
self.python_tag = self.get_specefied_param("->Readme Tag:", issue_body_list[:5])
150139

151140
try:
152-
contents = self.get_content('/readme.python.md')
141+
contents = self.get_local_file_content('readme.python.md')
153142
except Exception as e:
154143
raise Exception(f"fail to read readme.python.md: {e}")
155144
pattern_package = re.compile(r'package-name: [\w+-.]+')

scripts/release_helper/release_helper.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,15 @@ jobs:
5151
# clone(REPO: https://github.com/Azure/azure-sdk-for-python.git, USR_NAME: Azure, USR_TOKEN: xxxxxxxxxxxxx)
5252
mkdir file-storage
5353
git clone ${FILE_REPO:0:8}$(USR_NAME):$(Yuchao-GitToken)@${FILE_REPO:8} $(pwd)/file-storage
54+
55+
mkdir azure-rest-api-specs
56+
git clone https://github.com/Azure/azure-rest-api-specs.git $(pwd)/azure-rest-api-specs
5457
5558
# import env variable
5659
export AZURESDK_BOT_TOKEN=$(azuresdk-github-pat)
5760
export PIPELINE_TOKEN=$(PIPELINE-TOKEN)
5861
export LANGUAGE=$(RUN_LANGUAGE)
62+
export SPEC_REPO=$(pwd)/azure-rest-api-specs/specification
5963
6064
6165
# create virtual env

0 commit comments

Comments
 (0)