mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-05 05:10:38 +08:00
Implement Automatic Review Configuration for GitHub app
This commit is contained in:
@ -15,6 +15,7 @@ from pr_agent.tools.pr_update_changelog import PRUpdateChangelog
|
|||||||
from pr_agent.tools.pr_config import PRConfig
|
from pr_agent.tools.pr_config import PRConfig
|
||||||
|
|
||||||
command2class = {
|
command2class = {
|
||||||
|
"auto_review": PRReviewer,
|
||||||
"answer": PRReviewer,
|
"answer": PRReviewer,
|
||||||
"review": PRReviewer,
|
"review": PRReviewer,
|
||||||
"review_pr": PRReviewer,
|
"review_pr": PRReviewer,
|
||||||
@ -43,8 +44,10 @@ class PRAgent:
|
|||||||
repo_settings_file = None
|
repo_settings_file = None
|
||||||
try:
|
try:
|
||||||
git_provider = get_git_provider()(pr_url)
|
git_provider = get_git_provider()(pr_url)
|
||||||
|
logging.info(f'Fetching repo settings {git_provider.repo}')
|
||||||
repo_settings = git_provider.get_repo_settings()
|
repo_settings = git_provider.get_repo_settings()
|
||||||
if repo_settings:
|
if repo_settings:
|
||||||
|
logging.debug(f'Found settings for repo {git_provider.repo}\n{repo_settings}')
|
||||||
repo_settings_file = None
|
repo_settings_file = None
|
||||||
fd, repo_settings_file = tempfile.mkstemp(suffix='.toml')
|
fd, repo_settings_file = tempfile.mkstemp(suffix='.toml')
|
||||||
os.write(fd, repo_settings)
|
os.write(fd, repo_settings)
|
||||||
@ -70,6 +73,8 @@ class PRAgent:
|
|||||||
if notify:
|
if notify:
|
||||||
notify()
|
notify()
|
||||||
await PRReviewer(pr_url, is_answer=True, args=args).run()
|
await PRReviewer(pr_url, is_answer=True, args=args).run()
|
||||||
|
elif action == "auto_review":
|
||||||
|
await PRReviewer(pr_url, is_auto=True, args=args).run()
|
||||||
elif action in command2class:
|
elif action in command2class:
|
||||||
if notify:
|
if notify:
|
||||||
notify()
|
notify()
|
||||||
|
@ -93,7 +93,7 @@ async def handle_request(body: Dict[str, Any]):
|
|||||||
api_url = pull_request.get("url")
|
api_url = pull_request.get("url")
|
||||||
if not api_url:
|
if not api_url:
|
||||||
return {}
|
return {}
|
||||||
await agent.handle_request(api_url, "/review")
|
await agent.handle_request(api_url, "/auto_review")
|
||||||
|
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ require_security_review=true
|
|||||||
num_code_suggestions=3
|
num_code_suggestions=3
|
||||||
inline_code_comments = false
|
inline_code_comments = false
|
||||||
ask_and_reflect=false
|
ask_and_reflect=false
|
||||||
|
automatic_review=true
|
||||||
extra_instructions = ""
|
extra_instructions = ""
|
||||||
|
|
||||||
[pr_description] # /describe #
|
[pr_description] # /describe #
|
||||||
|
@ -23,7 +23,7 @@ class PRReviewer:
|
|||||||
"""
|
"""
|
||||||
The PRReviewer class is responsible for reviewing a pull request and generating feedback using an AI model.
|
The PRReviewer class is responsible for reviewing a pull request and generating feedback using an AI model.
|
||||||
"""
|
"""
|
||||||
def __init__(self, pr_url: str, is_answer: bool = False, args: list = None):
|
def __init__(self, pr_url: str, is_answer: bool = False, is_auto: bool = False, args: list = None):
|
||||||
"""
|
"""
|
||||||
Initialize the PRReviewer object with the necessary attributes and objects to review a pull request.
|
Initialize the PRReviewer object with the necessary attributes and objects to review a pull request.
|
||||||
|
|
||||||
@ -40,6 +40,7 @@ class PRReviewer:
|
|||||||
)
|
)
|
||||||
self.pr_url = pr_url
|
self.pr_url = pr_url
|
||||||
self.is_answer = is_answer
|
self.is_answer = is_answer
|
||||||
|
self.is_auto = is_auto
|
||||||
|
|
||||||
if self.is_answer and not self.git_provider.is_supported("get_issue_comments"):
|
if self.is_answer and not self.git_provider.is_supported("get_issue_comments"):
|
||||||
raise Exception(f"Answer mode is not supported for {get_settings().config.git_provider} for now")
|
raise Exception(f"Answer mode is not supported for {get_settings().config.git_provider} for now")
|
||||||
@ -93,7 +94,11 @@ class PRReviewer:
|
|||||||
"""
|
"""
|
||||||
Review the pull request and generate feedback.
|
Review the pull request and generate feedback.
|
||||||
"""
|
"""
|
||||||
logging.info('Reviewing PR...')
|
if self.is_auto and not get_settings().pr_reviewer.automatic_review:
|
||||||
|
logging.info(f'Automatic review is disabled {self.pr_url}')
|
||||||
|
return None
|
||||||
|
|
||||||
|
logging.info(f'Reviewing PR: {self.pr_url} ...')
|
||||||
|
|
||||||
if get_settings().config.publish_output:
|
if get_settings().config.publish_output:
|
||||||
self.git_provider.publish_comment("Preparing review...", is_temporary=True)
|
self.git_provider.publish_comment("Preparing review...", is_temporary=True)
|
||||||
|
Reference in New Issue
Block a user