diff --git a/coffer/news_publish.py b/coffer/news_publish.py index f984dfa..80436cf 100644 --- a/coffer/news_publish.py +++ b/coffer/news_publish.py @@ -214,12 +214,24 @@ def try_auto_publish(article_html: str, *, updated_at: str) -> dict[str, Any]: number = pr["number"] unlock = unlock_news_main() merged = merge_pr(number) + merge_status = merged.get("status") + push_main = None + if merge_status and int(merge_status) >= 400: + # Gitea merge API often returns 405/"try again later"; push main while unlocked. + _git(news_repo, "fetch", "origin") + _git(news_repo, "checkout", "main") + _git(news_repo, "pull", "--ff-only", "origin", "main") + _git(news_repo, "merge", f"origin/{branch}", "-m", f"Merge {title}") + push = _git(news_repo, "push", "origin", "main") + push_main = {"returncode": push.returncode, "stderr": (push.stderr or "")[:300]} + _api("PATCH", f"/repos/leora/news/pulls/{number}", {"state": "closed"}) relock = relock_news_main() return { "changed": True, "pr_number": number, "pr_url": pr.get("html_url"), - "merge_status": merged.get("status"), + "merge_status": merge_status, + "push_main": push_main, "unlock": unlock.get("status"), "relock": relock.get("status"), "updated_at": updated_at,