feat: close issues after merged agent PRs

This commit is contained in:
2026-05-06 16:19:38 +08:00
parent 6d1a6d037e
commit aa8afa1a63
6 changed files with 177 additions and 10 deletions

View File

@@ -23,6 +23,8 @@ class GiteaIssue:
class GiteaPullRequest:
number: int
html_url: str
state: str
merged: bool
@dataclass(frozen=True)
@@ -131,7 +133,12 @@ class GiteaClient:
)
response.raise_for_status()
payload = response.json()
return GiteaPullRequest(number=int(payload["number"]), html_url=payload.get("html_url") or "")
return pull_request_from_payload(payload)
def get_pull_request(self, *, owner: str, name: str, pr_number: int) -> GiteaPullRequest:
response = self.client.get(f"/repos/{owner}/{name}/pulls/{pr_number}")
response.raise_for_status()
return pull_request_from_payload(response.json())
def post_issue_comment(self, *, owner: str, name: str, issue_number: int, body: str) -> None:
response = self.client.post(
@@ -140,6 +147,13 @@ class GiteaClient:
)
response.raise_for_status()
def close_issue(self, *, owner: str, name: str, issue_number: int) -> None:
response = self.client.patch(
f"/repos/{owner}/{name}/issues/{issue_number}",
json={"state": "closed"},
)
response.raise_for_status()
def clone_url_from_repo_payload(payload: dict[str, Any], fallback_base_url: str, owner: str, name: str) -> str:
return (
@@ -168,3 +182,13 @@ def repository_from_payload(payload: dict[str, Any], fallback_base_url: str) ->
clone_url=clone_url_from_repo_payload(payload, fallback_base_url, str(owner), str(name)),
default_branch=payload.get("default_branch") or "main",
)
def pull_request_from_payload(payload: dict[str, Any]) -> GiteaPullRequest:
merged = bool(payload.get("merged") or payload.get("has_merged") or payload.get("merged_at"))
return GiteaPullRequest(
number=int(payload["number"]),
html_url=payload.get("html_url") or payload.get("url") or "",
state=payload.get("state") or "",
merged=merged,
)