diff --git a/src/api/toolchain_routes.py b/src/api/toolchain_routes.py index 3855077..e04cbc6 100644 --- a/src/api/toolchain_routes.py +++ b/src/api/toolchain_routes.py @@ -459,11 +459,33 @@ async def _handle_issue_comment(payload: Dict[str, Any]) -> None: # 提取错误摘要(取 comment body 前 500 字符) error_summary = body[:500] if body else "(无错误信息)" + # 尝试从 commit sha 查询 CI run URL + ci_url = "" + sha_match = re.search(r"commit:\s*`?([0-9a-f]{40})`?", body) + if sha_match: + try: + resp = requests.get( + f"{_GITEA_BASE}/commits/{sha_match.group(1)}/status", + headers={"Authorization": f"token {_GITEA_TOKEN}"}, + timeout=5, + ) + if resp.ok: + statuses = resp.json().get("statuses", []) + for s in statuses: + if s.get("status") == "failure" or s.get("state") == "failure": + target = s.get("target_url", "") + if target: + ci_url = "http://192.168.2.154:3000" + target if target.startswith("/") else target + break + except Exception as exc: + logger.warning("Failed to query CI run URL: %s", exc) + text = render_template("ci_failure", { "repo": repo, "pr_number": str(issue_number), "branch": branch, "error_summary": error_summary, + "ci_url": ci_url, }) title = f"CI 失败: {repo}#{issue_number}" diff --git a/templates/toolchain/ci_failure.md b/templates/toolchain/ci_failure.md index 380c287..1b77297 100644 --- a/templates/toolchain/ci_failure.md +++ b/templates/toolchain/ci_failure.md @@ -7,3 +7,5 @@ PR: http://192.168.2.154:3000/{repo}/pulls/{pr_number} {error_summary} 请检查 CI 日志并修复。修复后 push 会自动触发 CI。 + +CI 日志链接: {ci_url}