diff --git a/ci.py b/ci.py index 61076ea..9b38e61 100644 --- a/ci.py +++ b/ci.py @@ -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