mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-05 05:10:38 +08:00

2. Lint 3. Inject GitHub app installation ID into GitHub provider using the settings mechanism.
65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
import asyncio
|
|
import time
|
|
|
|
import gitlab
|
|
|
|
from pr_agent.agent.pr_agent import PRAgent
|
|
from pr_agent.config_loader import settings
|
|
|
|
gl = gitlab.Gitlab(
|
|
settings.get("GITLAB.URL"),
|
|
private_token=settings.get("GITLAB.PERSONAL_ACCESS_TOKEN")
|
|
)
|
|
|
|
# Set the list of projects to monitor
|
|
projects_to_monitor = settings.get("GITLAB.PROJECTS_TO_MONITOR")
|
|
magic_word = settings.get("GITLAB.MAGIC_WORD")
|
|
|
|
# Hold the previous seen comments
|
|
previous_comments = set()
|
|
|
|
|
|
def check_comments():
|
|
print('Polling')
|
|
new_comments = {}
|
|
for project in projects_to_monitor:
|
|
project = gl.projects.get(project)
|
|
merge_requests = project.mergerequests.list(state='opened')
|
|
for mr in merge_requests:
|
|
notes = mr.notes.list(get_all=True)
|
|
for note in notes:
|
|
if note.id not in previous_comments and note.body.startswith(magic_word):
|
|
new_comments[note.id] = dict(
|
|
body=note.body[len(magic_word):],
|
|
project=project.name,
|
|
mr=mr
|
|
)
|
|
previous_comments.add(note.id)
|
|
print(f"New comment in project {project.name}, merge request {mr.title}: {note.body}")
|
|
|
|
return new_comments
|
|
|
|
|
|
def handle_new_comments(new_comments):
|
|
print('Handling new comments')
|
|
agent = PRAgent()
|
|
for _, comment in new_comments.items():
|
|
print(f"Handling comment: {comment['body']}")
|
|
asyncio.run(agent.handle_request(comment['mr'].web_url, comment['body']))
|
|
|
|
|
|
def run():
|
|
assert settings.get('CONFIG.GIT_PROVIDER') == 'gitlab', 'This script is only for GitLab'
|
|
# Initial run to populate previous_comments
|
|
check_comments()
|
|
|
|
# Run the check every minute
|
|
while True:
|
|
time.sleep(settings.get("GITLAB.POLLING_INTERVAL_SECONDS"))
|
|
new_comments = check_comments()
|
|
if new_comments:
|
|
handle_new_comments(new_comments)
|
|
|
|
if __name__ == '__main__':
|
|
run()
|