未验证 提交 e34e634a 编写于 作者: T tianshuo78520a 提交者: GitHub

Add CheckPRTemplate.py (#49298)

* Add CheckPRTemplate.py;test=document_fix;test=prtemplate

* Add CheckPRTemplate.py;test=document_fix;test=prtemplate

* Add CheckPRTemplate.py;test=document_fix;test=prtemplate
上级 ab786715
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
import re
import sys
import requests
PR_checkTemplate = ['Paddle']
REPO_TEMPLATE = {
"Paddle": r'''### PR types(.*[^\s].*)### PR changes(.*[^\s].*)### Describe(.*[^\s].*)'''
}
def re_rule(body, CHECK_TEMPLATE):
PR_RE = re.compile(CHECK_TEMPLATE, re.DOTALL)
result = PR_RE.search(body)
return result
def parameter_accuracy(body):
PR_dic = {}
PR_types = [
'New features',
'Bug fixes',
'Function optimization',
'Performance optimization',
'Breaking changes',
'Others',
]
PR_changes = ['OPs', 'APIs', 'Docs', 'Others']
body = re.sub("\r\n", "", body)
type_end = body.find('### PR changes')
changes_end = body.find('### Describe')
PR_dic['PR types'] = body[len('### PR types') : type_end]
PR_dic['PR changes'] = body[type_end + 14 : changes_end]
message = ''
for key in PR_dic:
test_list = PR_types if key == 'PR types' else PR_changes
test_list_lower = [l.lower() for l in test_list]
value = PR_dic[key].strip().split(',')
single_mess = ''
if len(value) == 1 and value[0] == '':
message += '%s should be in %s. but now is None.' % (key, test_list)
else:
for i in value:
i = i.strip().lower()
if i not in test_list_lower:
single_mess += '%s.' % i
if len(single_mess) != 0:
message += '%s should be in %s. but now is [%s].' % (
key,
test_list,
single_mess,
)
return message
def checkComments(url):
headers = {
'Authorization': 'token ' + GITHUB_API_TOKEN,
}
response = requests.get(url, headers=headers).json()
return response
def checkPRTemplate(repo, body, CHECK_TEMPLATE):
"""
Check if PR's description meet the standard of template
Args:
body: PR's Body.
CHECK_TEMPLATE: check template str.
Returns:
res: True or False
"""
res = False
note = r'<!-- Demo: https://github.com/PaddlePaddle/Paddle/pull/24810 -->\r\n|<!-- One of \[ New features \| Bug fixes \| Function optimization \| Performance optimization \| Breaking changes \| Others \] -->|<!-- One of \[ OPs \| APIs \| Docs \| Others \] -->|<!-- Describe what this PR does -->'
if body is None:
body = ''
body = re.sub(note, "", body)
result = re_rule(body, CHECK_TEMPLATE)
message = ''
if len(CHECK_TEMPLATE) == 0 and len(body) == 0:
res = False
elif result is not None:
message = parameter_accuracy(body)
res = True if message == '' else False
elif result is None:
res = False
message = parameter_accuracy(body)
return res, message
def pull_request_event_template(event, repo, *args, **kwargs):
pr_effect_repos = PR_checkTemplate
pr_num = event['number']
url = event["comments_url"]
BODY = event["body"]
sha = event["head"]["sha"]
title = event["title"]
pr_user = event["user"]["login"]
print(f'接收数据:pr_num: {pr_num}, title: {title}, user: {pr_user}')
if repo in pr_effect_repos:
CHECK_TEMPLATE = REPO_TEMPLATE[repo]
global check_pr_template
global check_pr_template_message
check_pr_template, check_pr_template_message = checkPRTemplate(
repo, BODY, CHECK_TEMPLATE
)
print("check_pr_template: %s pr: %s" % (check_pr_template, pr_num))
if check_pr_template is False:
print("ERROR MESSAGE:", check_pr_template_message)
sys.exit(7)
else:
sys.exit(0)
def get_a_pull(pull_id):
url = "https://api.github.com/repos/PaddlePaddle/Paddle/pulls/ " + str(
pull_id
)
payload = {}
headers = {
'Authorization': 'token ' + GITHUB_API_TOKEN,
'Accept': 'application/vnd.github+json',
}
response = requests.request("GET", url, headers=headers, data=payload)
return response.json()
def main(org, repo, pull_id):
pull_info = get_a_pull(pull_id)
pull_request_event_template(pull_info, repo)
if __name__ == "__main__":
AGILE_PULL_ID = os.getenv("AGILE_PULL_ID")
GITHUB_API_TOKEN = os.getenv("GITHUB_API_TOKEN")
main("PaddlePaddle", "Paddle", AGILE_PULL_ID)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册