#!/usr/bin/env python3 """检查指定commit的CI status状态。 用法: python3 check_ci_status.py 返回: 打印状态 (success/failure/pending/error) """ import json import sys import urllib.error import urllib.request def main(): if len(sys.argv) != 5: print("pending") return token = sys.argv[1] repo = sys.argv[2] sha = sys.argv[3] target_context = sys.argv[4] api_url = f"https://git.xiaoxiajianji.com/api/v1/repos/{repo}/commits/{sha}/statuses?per_page=100" req = urllib.request.Request(api_url, headers={"Authorization": f"token {token}"}) try: with urllib.request.urlopen(req, timeout=30) as resp: statuses = json.loads(resp.read().decode()) except Exception: print("pending") return # API返回按时间倒序,第一个就是最新的 for s in statuses: if s.get("context") == target_context: status = s.get("status", "pending") # skipped 视为通过(条件跳过的任务不需要等) if status == "skipped": print("success") else: print(status) return # 找不到这个context也视为通过(该workflow没触发=不需要检查) print("success") if __name__ == "__main__": main()