|
| 1 | +from dotenv import load_dotenv |
| 2 | + |
| 3 | +load_dotenv("conf/.env") |
| 4 | + |
1 | 5 | import atexit |
2 | 6 | import json |
3 | 7 | import os |
|
7 | 11 |
|
8 | 12 | from apscheduler.schedulers.background import BackgroundScheduler |
9 | 13 | from apscheduler.triggers.cron import CronTrigger |
10 | | -from dotenv import load_dotenv |
11 | 14 | from flask import Flask, request, jsonify |
12 | 15 |
|
13 | 16 | from biz.gitlab.webhook_handler import slugify_url |
14 | | -from biz.queue.worker import handle_merge_request_event, handle_push_event, handle_github_pull_request_event, handle_github_push_event |
| 17 | +from biz.queue.worker import handle_merge_request_event, handle_push_event, handle_github_pull_request_event, \ |
| 18 | + handle_github_push_event |
15 | 19 | from biz.service.review_service import ReviewService |
16 | 20 | from biz.utils.im import notifier |
17 | 21 | from biz.utils.log import logger |
18 | 22 | from biz.utils.queue import handle_queue |
19 | 23 | from biz.utils.reporter import Reporter |
20 | 24 |
|
21 | 25 | from biz.utils.config_checker import check_config |
22 | | -load_dotenv("conf/.env") |
23 | | -api_app = Flask(__name__) |
24 | | - |
25 | 26 |
|
| 27 | +api_app = Flask(__name__) |
26 | 28 |
|
27 | 29 | push_review_enabled = os.environ.get('PUSH_REVIEW_ENABLED', '0') == '1' |
28 | 30 |
|
@@ -113,42 +115,46 @@ def handle_webhook(): |
113 | 115 |
|
114 | 116 | # 判断是GitLab还是GitHub的webhook |
115 | 117 | webhook_source = request.headers.get('X-GitHub-Event') |
116 | | - |
| 118 | + |
117 | 119 | if webhook_source: # GitHub webhook |
118 | 120 | return handle_github_webhook(webhook_source, data) |
119 | 121 | else: # GitLab webhook |
120 | 122 | return handle_gitlab_webhook(data) |
121 | 123 | else: |
122 | 124 | return jsonify({'message': 'Invalid data format'}), 400 |
123 | 125 |
|
| 126 | + |
124 | 127 | def handle_github_webhook(event_type, data): |
125 | 128 | # 获取GitHub配置 |
126 | 129 | github_token = os.getenv('GITHUB_ACCESS_TOKEN') or request.headers.get('X-GitHub-Token') |
127 | 130 | if not github_token: |
128 | 131 | return jsonify({'message': 'Missing GitHub access token'}), 400 |
129 | | - |
| 132 | + |
130 | 133 | github_url = os.getenv('GITHUB_URL') or 'https://github.com' |
131 | 134 | github_url_slug = slugify_url(github_url) |
132 | | - |
| 135 | + |
133 | 136 | # 打印整个payload数据 |
134 | 137 | logger.info(f'Received GitHub event: {event_type}') |
135 | 138 | logger.info(f'Payload: {json.dumps(data)}') |
136 | | - |
| 139 | + |
137 | 140 | if event_type == "pull_request": |
138 | 141 | # 使用handle_queue进行异步处理 |
139 | 142 | handle_queue(handle_github_pull_request_event, data, github_token, github_url, github_url_slug) |
140 | 143 | # 立马返回响应 |
141 | | - return jsonify({'message': f'GitHub request received(event_type={event_type}), will process asynchronously.'}), 200 |
| 144 | + return jsonify( |
| 145 | + {'message': f'GitHub request received(event_type={event_type}), will process asynchronously.'}), 200 |
142 | 146 | elif event_type == "push": |
143 | 147 | # 使用handle_queue进行异步处理 |
144 | 148 | handle_queue(handle_github_push_event, data, github_token, github_url, github_url_slug) |
145 | 149 | # 立马返回响应 |
146 | | - return jsonify({'message': f'GitHub request received(event_type={event_type}), will process asynchronously.'}), 200 |
| 150 | + return jsonify( |
| 151 | + {'message': f'GitHub request received(event_type={event_type}), will process asynchronously.'}), 200 |
147 | 152 | else: |
148 | 153 | error_message = f'Only pull_request and push events are supported for GitHub webhook, but received: {event_type}.' |
149 | 154 | logger.error(error_message) |
150 | 155 | return jsonify(error_message), 400 |
151 | 156 |
|
| 157 | + |
152 | 158 | def handle_gitlab_webhook(data): |
153 | 159 | object_kind = data.get("object_kind") |
154 | 160 |
|
@@ -198,6 +204,7 @@ def handle_gitlab_webhook(data): |
198 | 204 | logger.error(error_message) |
199 | 205 | return jsonify(error_message), 400 |
200 | 206 |
|
| 207 | + |
201 | 208 | if __name__ == '__main__': |
202 | 209 | check_config() |
203 | 210 | # 启动定时任务调度器 |
|
0 commit comments