66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
from forgeclient import request
|
|
|
|
|
|
def _issue_summary(i):
|
|
return {
|
|
"number": i.get("number"),
|
|
"title": i.get("title"),
|
|
"state": i.get("state"),
|
|
"user": i.get("user", {}).get("login"),
|
|
"html_url": i.get("html_url"),
|
|
}
|
|
|
|
|
|
def list_issues(owner, repo, state="open"):
|
|
state = state if state in ("open", "closed", "all") else "open"
|
|
data = request("GET", f"/repos/{owner}/{repo}/issues", params={"state": state})
|
|
if isinstance(data, dict) and "error" in data:
|
|
return data
|
|
# The issues endpoint also returns pull requests; keep only true issues.
|
|
return [_issue_summary(i) for i in data if not i.get("pull_request")]
|
|
|
|
|
|
def create_issue(owner, repo, title, body=""):
|
|
i = request("POST", f"/repos/{owner}/{repo}/issues",
|
|
json={"title": title, "body": body})
|
|
if "error" in i:
|
|
return i
|
|
return _issue_summary(i)
|
|
|
|
|
|
def open_pull_request(owner, repo, title, head, base, body=""):
|
|
"""Open a pull request from `head` branch into `base` branch."""
|
|
pr = request("POST", f"/repos/{owner}/{repo}/pulls",
|
|
json={"title": title, "head": head, "base": base, "body": body})
|
|
if "error" in pr:
|
|
return pr
|
|
return {
|
|
"number": pr.get("number"),
|
|
"title": pr.get("title"),
|
|
"state": pr.get("state"),
|
|
"mergeable": pr.get("mergeable"),
|
|
"html_url": pr.get("html_url"),
|
|
}
|
|
|
|
|
|
def create_release(owner, repo, tag_name, name=None, body="", target="main",
|
|
draft=False, prerelease=False):
|
|
"""Tag a version of the project. Forgejo releases are Git tags with notes;
|
|
MQL5 has no package format, so this is used purely as a version marker."""
|
|
payload = {
|
|
"tag_name": tag_name,
|
|
"name": name or tag_name,
|
|
"body": body,
|
|
"target_commitish": target,
|
|
"draft": bool(draft),
|
|
"prerelease": bool(prerelease),
|
|
}
|
|
rel = request("POST", f"/repos/{owner}/{repo}/releases", json=payload)
|
|
if "error" in rel:
|
|
return rel
|
|
return {
|
|
"id": rel.get("id"),
|
|
"tag_name": rel.get("tag_name"),
|
|
"name": rel.get("name"),
|
|
"html_url": rel.get("html_url"),
|
|
}
|