From 1271148ebfafa2d8f063a78385ff7fef27b0933f Mon Sep 17 00:00:00 2001 From: "xin.xu1" Date: Thu, 20 Mar 2025 00:37:20 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Gitlab=20=E4=B8=8D?= =?UTF-8?q?=E5=90=8C=E7=89=88=E6=9C=AC=20mr=20=E8=AF=B7=E6=B1=82=E5=8C=BA?= =?UTF-8?q?=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gitlab_integration/gitlab_fetcher.py | 14 +++++++++++++- gitlab_integration/webhook_listener.py | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/gitlab_integration/gitlab_fetcher.py b/gitlab_integration/gitlab_fetcher.py index e579c50..643fef5 100644 --- a/gitlab_integration/gitlab_fetcher.py +++ b/gitlab_integration/gitlab_fetcher.py @@ -202,4 +202,16 @@ def _build_authenticated_url(self, repo_url): elif repo_url.startswith("http://"): return f"http://oauth2:{token}@{repo_url[7:]}" else: - raise ValueError("Unsupported URL scheme") \ No newline at end of file + raise ValueError("Unsupported URL scheme") + +def is_merge_request_opened(gitlab_payload) -> bool: + """ + 判断是否是merge request打开事件 + """ + try: + gitlab_merge_request_old = gitlab_payload.get("object_attributes").get("state") == "opened" and gitlab_payload.get("object_attributes").get("merge_status") == "preparing" + gitlab_merge_request_new = gitlab_payload.get("object_attributes").get("state") == "merged" and gitlab_payload.get("object_attributes").get("merge_status") == "can_be_merged" + return gitlab_merge_request_old or gitlab_merge_request_new + except Exception as e: + log.error(f"判断是否是merge request打开事件失败: {e}") + return False \ No newline at end of file diff --git a/gitlab_integration/webhook_listener.py b/gitlab_integration/webhook_listener.py index 823fd9c..37d71f5 100644 --- a/gitlab_integration/webhook_listener.py +++ b/gitlab_integration/webhook_listener.py @@ -7,7 +7,7 @@ from response_module.response_controller import ReviewResponse from review_engine.review_engine import ReviewEngine from utils.logger import log - +from gitlab_integration.gitlab_fetcher import is_merge_request_opened class WebhookListener: def __init__(self): @@ -53,7 +53,7 @@ def handle_merge_request(self, gitlab_payload, reply): """ 处理合并请求事件 """ - if gitlab_payload.get("object_attributes").get("state") == "opened" and gitlab_payload.get("object_attributes").get("merge_status") == "preparing": + if is_merge_request_opened(gitlab_payload): log.info("首次merge_request ", gitlab_payload) project_id = gitlab_payload.get('project')['id'] merge_request_iid = gitlab_payload.get("object_attributes")["iid"] From 77d5be0eaacc5b0fe37ae280f4f4ba46ab210dda Mon Sep 17 00:00:00 2001 From: "xin.xu1" Date: Thu, 20 Mar 2025 11:13:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96=20mr?= =?UTF-8?q?=20=E4=BF=A1=E6=81=AF=E5=A4=B1=E8=B4=A5log=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gitlab_integration/gitlab_fetcher.py | 1 + review_engine/handler/default_handler.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gitlab_integration/gitlab_fetcher.py b/gitlab_integration/gitlab_fetcher.py index 643fef5..d57c2e9 100644 --- a/gitlab_integration/gitlab_fetcher.py +++ b/gitlab_integration/gitlab_fetcher.py @@ -129,6 +129,7 @@ def get_info(self): if response.status_code == 200: return response.json() else: + log.error(f"获取项目信息失败: {response.status_code} {response.text}") return None @retry(stop_max_attempt_number=3, wait_fixed=2000) diff --git a/review_engine/handler/default_handler.py b/review_engine/handler/default_handler.py index a537ad4..46a4760 100644 --- a/review_engine/handler/default_handler.py +++ b/review_engine/handler/default_handler.py @@ -126,6 +126,6 @@ def default_handle(self, changes, merge_info, hook_info, reply, model): else: log.error(f"获取merge_request信息失败,project_id: {hook_info['project']['id']} |" - f" merge_iid: {hook_info['object_attributes']['iid']}") + f" merge_iid: {hook_info['object_attributes']['iid']} | merge_info: {merge_info}")