diff --git a/scripts/release_helper/common.py b/scripts/release_helper/common.py index 101857f4c847..44333640e864 100644 --- a/scripts/release_helper/common.py +++ b/scripts/release_helper/common.py @@ -1,3 +1,4 @@ +from datetime import date, datetime from typing import Set, List, Dict import os from utils import IssuePackage, REQUEST_REPO, AUTO_ASSIGN_LABEL, AUTO_PARSE_LABEL, get_origin_link_and_tag @@ -6,6 +7,7 @@ import time from github import Github from github.Repository import Repository +import subprocess as sp _LOG = logging.getLogger(__name__) @@ -15,10 +17,10 @@ # 'github assignee': 'token' _ASSIGNEE_TOKEN = {'msyyc': os.getenv('PYTHON_MSYYC_TOKEN')} - _SWAGGER_URL = 'https://github.com/Azure/azure-rest-api-specs/blob/main/specification' _SWAGGER_PULL = 'https://github.com/Azure/azure-rest-api-specs/pull' + class IssueProcess: # won't be changed anymore after __init__ request_repo_dict = {} # request repo instance generated by different token @@ -75,7 +77,8 @@ def get_readme_from_pr_link(self, link: str) -> str: if len(readme_link) > 1: multi_link = ', '.join(readme_link) pr = f"{_SWAGGER_PULL}/{pr_number}" - self.comment(f'Hi, @{self.assignee}, by parsing {pr}, there are multi service link: {multi_link}. Please decide which one is the right.') + self.comment( + f'Hi, @{self.assignee}, by parsing {pr}, there are multi service link: {multi_link}. Please decide which one is the right.') self.bot.append('multi readme link!') raise Exception(f'multi link in "{pr}"') @@ -213,16 +216,52 @@ def __init__(self, issues: List[IssuePackage], assignee_token: Dict[str, str], l self.issues_package = issues self.assignee_candidates = set(assignee_token.keys()) self.language_owner = language_owner + # arguments add to language.md + self.file_out_name = 'common.md' + self.target_release_date = '' + self.date_from_target = '' + self.package_name = '' + for assignee in assignee_token: self.request_repo_dict[assignee] = Github(assignee_token[assignee]).get_repo(REQUEST_REPO) + def output_md(self, items): + with open(self.file_out_name, 'w') as file_out: + file_out.write( + '| issue | author | package | assignee | bot advice | created date of issue | target release date | date from target |\n') + file_out.write('| ------ | ------ | ------ | ------ | ------ | ------ | ------ | :-----: |\n') + file_out.writelines([self.output_python(item) for item in items]) + + def output_python(self, item): + create_date = str(date.fromtimestamp(item.issue_package.issue.created_at.timestamp()).strftime('%m-%d')) + + return '| [#{}]({}) | {} | {} | {} | {} | {} | {} | {} |\n'.format( + item.issue_package.issue.html_url.split('/')[-1], + item.issue_package.issue.html_url, + item.issue_package.issue.user.login, + self.package_name, + item.issue_package.issue.assignee.login, + item.bot, + create_date, + self.target_release_date, + self.date_from_target + ) + + def push_md_to_storage(self): + cmd_list = ['git add .', 'git commit -m \"update excel\"', 'git push -f origin HEAD'] + [sp.check_call(cmd, shell=True) for cmd in cmd_list] + def run(self): + items = [] for item in self.issues_package: issue = IssueProcess(item, self.request_repo_dict, self.assignee_candidates, self.language_owner) try: issue.run() + items.append(issue) except Exception as e: _LOG.error(f'Error happened during handling issue {item.issue.number}: {e}') + self.output_md(items) + self.push_md_to_storage() def common_process(issues: List[IssuePackage]): diff --git a/scripts/release_helper/go.py b/scripts/release_helper/go.py index 0405cd053be3..61464dd1c681 100644 --- a/scripts/release_helper/go.py +++ b/scripts/release_helper/go.py @@ -14,7 +14,9 @@ class IssueProcessGo(IssueProcess): class Go(Common): - pass + def __init__(self, issues, assignee_token, language_owner): + super(Go, self).__init__(issues, assignee_token, language_owner) + self.file_out_name = 'release_go_status.md' def go_process(issues: List[Any]): diff --git a/scripts/release_helper/js.py b/scripts/release_helper/js.py index 4bdd596986e9..4792a38336fd 100644 --- a/scripts/release_helper/js.py +++ b/scripts/release_helper/js.py @@ -14,7 +14,9 @@ class IssueProcessJs(IssueProcess): class Js(Common): - pass + def __init__(self, issues, assignee_token, language_owner): + super(Js, self).__init__(issues, assignee_token, language_owner) + self.file_out_name = 'release_js_status.md' def js_process(issues: List[Any]): diff --git a/scripts/release_helper/release_helper.yml b/scripts/release_helper/release_helper.yml index 2f6bbc31a499..3307b787837b 100644 --- a/scripts/release_helper/release_helper.yml +++ b/scripts/release_helper/release_helper.yml @@ -55,8 +55,8 @@ jobs: pip install -r $script_path/requirement.txt # checkout the target branch - # cd file-storage - # git checkout release-helper + cd file-storage + git checkout release-helper # run python $script_path/main.py