64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""Fetch CI status for tabatago - check latest runs and get logs for failures."""
|
|
import urllib.request, json, base64, sys, os
|
|
|
|
repo = "millianlmx/tabatago"
|
|
base_url = f"https://gitea.1000co.fr/api/v1/repos/{repo}/actions"
|
|
|
|
# Load token from base64 file
|
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
with open(os.path.join(script_dir, ".gtb64")) as f:
|
|
token = base64.b64decode(f.read().strip()).decode().strip()
|
|
|
|
def api(path, expect_json=True):
|
|
req = urllib.request.Request(f"{base_url}{path}")
|
|
req.add_header("Authorization", f"token {token}")
|
|
with urllib.request.urlopen(req) as resp:
|
|
body = resp.read()
|
|
if expect_json:
|
|
return json.loads(body)
|
|
return body.decode('utf-8', 'replace')
|
|
|
|
# Check mode
|
|
mode = sys.argv[1] if len(sys.argv) > 1 else "status"
|
|
|
|
if mode == "status":
|
|
data = api("/runs?limit=5")
|
|
runs = data.get('workflow_runs', [])
|
|
for r in runs:
|
|
print(f"Run #{r['run_number']} (ID={r['id']}) status={r['status']} conclusion={r.get('conclusion','?')}")
|
|
|
|
elif mode == "check":
|
|
# Check latest run and return status
|
|
data = api("/runs?limit=1")
|
|
runs = data.get('workflow_runs', [])
|
|
if runs:
|
|
r = runs[0]
|
|
print(f"run_number={r['run_number']}|id={r['id']}|status={r['status']}|conclusion={r.get('conclusion','?')}")
|
|
|
|
elif mode == "jobs":
|
|
run_id = sys.argv[2]
|
|
try:
|
|
jobs_data = api(f"/runs/{run_id}/jobs")
|
|
jobs = jobs_data if isinstance(jobs_data, list) else jobs_data.get('jobs', [])
|
|
for j in jobs:
|
|
print(f"job_id={j['id']}|name={j.get('name','?')}|status={j.get('status')}|conclusion={j.get('conclusion','?')}")
|
|
except Exception as e:
|
|
print(f"ERROR: {e}", file=sys.stderr)
|
|
|
|
elif mode == "logs":
|
|
job_id = sys.argv[2]
|
|
try:
|
|
logs = api(f"/jobs/{job_id}/logs", expect_json=False)
|
|
# Get last 150 lines
|
|
lines = logs.split('\n')
|
|
print(f"Total lines: {len(lines)}")
|
|
# Show error-context lines
|
|
for i, line in enumerate(lines[-200:]):
|
|
print(line)
|
|
except Exception as e:
|
|
print(f"ERROR: {e}", file=sys.stderr)
|
|
|
|
else:
|
|
print(f"Unknown mode: {mode}")
|