#!/usr/bin/env python3 """检查PR是否有至少N个APPROVED审批。 用法: python3 check_pr_approval.py 返回: 打印 "approved" 或 "pending" """ import json import sys import urllib.request def main(): if len(sys.argv) != 5: print("pending") return token = sys.argv[1] repo = sys.argv[2] pr_number = sys.argv[3] min_approval = int(sys.argv[4]) api_url = f"https://git.xiaoxiajianji.com/api/v1/repos/{repo}/pulls/{pr_number}/reviews" req = urllib.request.Request(api_url, headers={"Authorization": f"token {token}"}) try: with urllib.request.urlopen(req, timeout=30) as resp: reviews = json.loads(resp.read().decode()) except Exception: print("pending") return # 统计APPROVED的人数(去重,同一人多次审批只算一次) approvers = set() for r in reviews: if r.get("state") == "APPROVED": approvers.add(r.get("user", {}).get("login", "")) if len(approvers) >= min_approval: print(f"approved ({len(approvers)})") else: print(f"pending ({len(approvers)})") if __name__ == "__main__": main()