ci: fix flake update (#8)
diff-tag / dix (push) Failing after 13m28s
lint / lint (push) Failing after 2m2s
flake-check / flake-check (push) Successful in 48s

Co-authored-by: Floweynt <50057682+Floweynt@users.noreply.github.com>
Reviewed-on: #8
This commit was merged in pull request #8.
This commit is contained in:
2026-09-17 05:20:21 +00:00
co-authored by Floweynt
parent d347a2a139
commit 95cd7d0457
3 changed files with 37 additions and 14 deletions
+25 -8
View File
@@ -8,6 +8,7 @@ import re
import subprocess
import subprocess_tee
import sys
import urllib.error
import urllib.request
from collections import Counter
from pathlib import Path
@@ -26,6 +27,10 @@ def git(*args, check=True):
return run("git", *args, check=check, capture_output=True)
class GiteaError(Exception):
pass
def gitea(method, path, body=None):
url = f'{os.environ["API"]}/repos/{os.environ["REPO"]}{path}'
data = json.dumps(body).encode() if body is not None else None
@@ -37,7 +42,11 @@ def gitea(method, path, body=None):
with urllib.request.urlopen(req) as resp:
raw = resp.read()
except urllib.error.HTTPError as e:
sys.exit(f"gitea {method} {path}: {e.code} {e.reason}\n{e.read().decode()}")
try:
detail = json.loads(e.read()).get("message", e.reason)
except (json.JSONDecodeError, UnicodeDecodeError):
detail = e.reason
raise GiteaError(f"{method} {path}: {e.code} {detail}") from None
return json.loads(raw) if raw else None
@@ -466,16 +475,24 @@ def open_pr(args):
host = os.environ["API"].removesuffix("/api/v1")
auth = base64.b64encode(f'token:{os.environ["GH_TOKEN"]}'.encode()).decode()
git("-c", f"http.extraHeader=Authorization: Basic {auth}",
"push", "-f", f'{host}/{os.environ["REPO"]}.git', f"HEAD:{args.branch}")
push = git("-c", f"http.extraHeader=Authorization: Basic {auth}",
"push", "-f", f'{host}/{os.environ["REPO"]}.git', f"HEAD:{args.branch}",
check=False)
if push.returncode != 0:
raise RuntimeError(f"git push failed:\n{push.stderr}")
owner = os.environ["REPO"].split("/")[0]
if gitea("GET", f"/pulls?state=open&head={owner}:{args.branch}"):
pulls = gitea("GET", f"/pulls?state=open&base_branch={args.base}")
existing = next((pr for pr in pulls if pr["head"]["ref"] == args.branch), None)
if existing:
print(f"PR #{existing['number']} already open, pushed update")
return
labels = [label_id(args.label)] if args.label else []
gitea("POST", "/pulls",
{"title": args.title, "head": args.branch, "base": args.base,
"body": Path(args.body_file).read_text(), "labels": labels})
pr = gitea("POST", "/pulls",
{"title": args.title, "head": args.branch, "base": args.base,
"body": Path(args.body_file).read_text(), "labels": labels})
if not pr or "number" not in pr:
raise GiteaError(f"POST /pulls: unexpected response: {json.dumps(pr)}")
print(f"opened PR #{pr['number']}")
def main():