auto-sync: 2026-06-07 22:17:49
This commit is contained in:
@@ -224,7 +224,10 @@ async def _handle_pull_request(payload: Dict[str, Any]) -> None:
|
||||
if action != "opened":
|
||||
return
|
||||
|
||||
pr = payload.get("pull_request") or {}
|
||||
pr = payload.get("pull_request")
|
||||
if not pr or not isinstance(pr, dict):
|
||||
logger.warning("pull_request event missing pull_request field, skipping")
|
||||
return
|
||||
repo = _repo_fullname(payload)
|
||||
pr_number = pr.get("number", 0)
|
||||
pr_title = pr.get("title", "")
|
||||
@@ -252,14 +255,20 @@ async def _handle_pull_request(payload: Dict[str, Any]) -> None:
|
||||
|
||||
async def _handle_pull_request_review(payload: Dict[str, Any]) -> None:
|
||||
"""处理 pull_request_review 事件:非 COMMENTED → 通知 PR 作者。"""
|
||||
review = payload.get("review") or {}
|
||||
review = payload.get("review")
|
||||
if not review or not isinstance(review, dict):
|
||||
logger.warning("pull_request_review event missing review field, skipping")
|
||||
return
|
||||
pr = payload.get("pull_request")
|
||||
if not pr or not isinstance(pr, dict):
|
||||
logger.warning("pull_request_review event missing pull_request field, skipping")
|
||||
return
|
||||
state = review.get("state", "")
|
||||
|
||||
# 只通知 APPROVED 和 REQUEST_CHANGES,跳过 COMMENTED 和其他状态
|
||||
if state == "COMMENTED":
|
||||
return
|
||||
|
||||
pr = payload.get("pull_request") or {}
|
||||
repo = _repo_fullname(payload)
|
||||
pr_number = pr.get("number", 0)
|
||||
pr_title = pr.get("title", "")
|
||||
@@ -288,7 +297,10 @@ async def _handle_pull_request_review(payload: Dict[str, Any]) -> None:
|
||||
async def _handle_issues(payload: Dict[str, Any]) -> None:
|
||||
"""处理 issues 事件:assigned → 通知被指派人;opened+部署失败 → 通知运维。"""
|
||||
action = payload.get("action", "")
|
||||
issue = payload.get("issue") or {}
|
||||
issue = payload.get("issue")
|
||||
if not issue or not isinstance(issue, dict):
|
||||
logger.warning("issues event missing issue field, skipping")
|
||||
return
|
||||
repo = _repo_fullname(payload)
|
||||
issue_number = issue.get("number", 0)
|
||||
issue_title = issue.get("title", "")
|
||||
@@ -296,8 +308,14 @@ async def _handle_issues(payload: Dict[str, Any]) -> None:
|
||||
if action == "assigned":
|
||||
assignee = ""
|
||||
assignees = issue.get("assignees") or []
|
||||
if not assignees:
|
||||
single = issue.get("assignee")
|
||||
if single and isinstance(single, dict):
|
||||
assignees = [single]
|
||||
if assignees:
|
||||
assignee = assignees[-1].get("login", "")
|
||||
else:
|
||||
assignee = ""
|
||||
if not assignee:
|
||||
logger.debug("Issue assigned but no assignee found, skipping")
|
||||
return
|
||||
@@ -336,14 +354,20 @@ async def _handle_issues(payload: Dict[str, Any]) -> None:
|
||||
|
||||
async def _handle_issue_comment(payload: Dict[str, Any]) -> None:
|
||||
"""处理 issue_comment 事件:CI 失败关键词 → 通知 PR 作者。"""
|
||||
comment = payload.get("comment") or {}
|
||||
comment = payload.get("comment")
|
||||
if not comment or not isinstance(comment, dict):
|
||||
logger.warning("issue_comment event missing comment field, skipping")
|
||||
return
|
||||
body = comment.get("body", "")
|
||||
|
||||
# 检查是否包含 CI 失败关键词
|
||||
if "[CI]" not in body and "CI 失败" not in body:
|
||||
return
|
||||
|
||||
issue = payload.get("issue") or {}
|
||||
issue = payload.get("issue")
|
||||
if not issue or not isinstance(issue, dict):
|
||||
logger.warning("issue_comment event missing issue field, skipping")
|
||||
return
|
||||
repo = _repo_fullname(payload)
|
||||
issue_number = issue.get("number", 0)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user