#!/bin/bash
# task-2979-ciwatch : PR #232 check-runs poller
REPO="Jeon-Jonghyuk/InsuRo"
SHA="694629e8609b98a488ba0b14beb9b6d2713af252"
OUT="/home/jay/workspace/teams/dev2/.ciwatch-2979.log"
MAX=45          # 45 * 120s = 90 min
INTERVAL=120

echo "=== ciwatch start $(date -Is) ===" >> "$OUT"

i=0
while [ "$i" -lt "$MAX" ]; do
  i=$((i+1))
  RAW=$(gh api "repos/$REPO/commits/$SHA/check-runs" --paginate 2>&1)
  SUMMARY=$(printf '%s' "$RAW" | python3 -c "
import sys, json
try:
    d = json.load(sys.stdin)
except Exception as e:
    print('PARSE_ERROR ' + str(e)[:200]); sys.exit(0)
runs = d.get('check_runs', [])
inprog = [r['name'] for r in runs if r.get('status') != 'completed']
bad = [(r['name'], r.get('conclusion')) for r in runs
       if r.get('status') == 'completed'
       and r.get('conclusion') not in ('success', 'neutral', 'skipped')]
ok = [r['name'] for r in runs if r.get('conclusion') == 'success']
state = 'PENDING' if inprog else ('FAIL' if bad else 'GREEN')
print('%s total=%d ok=%d pending=%s fail=%s' % (
    state, len(runs), len(ok), ','.join(inprog) or '-',
    ';'.join('%s=%s' % b for b in bad) or '-'))
")
  echo "[$(date -Is)] poll#$i $SUMMARY" >> "$OUT"
  case "$SUMMARY" in
    GREEN*) echo "TERMINAL=GREEN" >> "$OUT"; break ;;
    FAIL*)  echo "TERMINAL=FAIL"  >> "$OUT"; break ;;
  esac
  [ "$i" -lt "$MAX" ] && sleep "$INTERVAL"
done

[ "$i" -ge "$MAX" ] && grep -q TERMINAL= "$OUT" || true
echo "=== ciwatch end $(date -Is) polls=$i ===" >> "$OUT"
