Jaypore CI

> Jaypore CI: Minimal, Offline, Local CI system.
Log | Files | Refs | README | LICENSE

run.sh (1468B)


      1 #!/bin/bash
      2 set -o pipefail
      3 
      4 # --- Send mail via Python smtplib ---
      5 send_mail() {
      6     local subject="$1"
      7     local body="$2"
      8     python3 - "$subject" "$body" <<'PYMAIL'
      9 import sys, smtplib, os
     10 from email.mime.text import MIMEText
     11 
     12 subject = sys.argv[1]
     13 body    = sys.argv[2]
     14 
     15 msg = MIMEText(body)
     16 msg["Subject"] = subject
     17 msg["From"]    = os.environ["MAIL_FROM"]
     18 msg["To"]      = os.environ["MAIL_TO"]
     19 
     20 with smtplib.SMTP(os.environ["SMTP_HOST"], int(os.environ["SMTP_PORT"])) as srv:
     21     srv.starttls()
     22     srv.login(os.environ["SMTP_USER"], os.environ["SMTP_PASS"])
     23     srv.sendmail(msg["From"], [msg["To"]], msg.as_string())
     24 
     25 print("Mail sent.")
     26 PYMAIL
     27 }
     28 
     29 # --- Run tests ---
     30 cd "$JCI_REPO_ROOT"
     31 
     32 repo_name=$(basename "$JCI_REPO_ROOT")
     33 timestamp=$(date -u +"%Y-%m-%d %H:%M:%S UTC")
     34 
     35 python3 manage.py test core 2>&1 | tee "$JCI_OUTPUT_DIR/test-output.txt"
     36 exit_code=${PIPESTATUS[0]}
     37 
     38 # --- Notify on failure ---
     39 if [ "$exit_code" -ne 0 ]; then
     40     subject="CI failure: ${repo_name} @ ${JCI_COMMIT:0:8}"
     41     body="Repository : ${repo_name}
     42 Commit     : ${JCI_COMMIT}
     43 Timestamp  : ${timestamp}
     44 Exit code  : ${exit_code}
     45 
     46 --- Test output (last 80 lines) ---
     47 $(tail -n 80 "$JCI_OUTPUT_DIR/test-output.txt")"
     48 
     49     if [ -n "${SMTP_HOST:-}" ] && [ -n "${MAIL_FROM:-}" ] && [ -n "${MAIL_TO:-}" ]; then
     50         send_mail "$subject" "$body"
     51     else
     52         echo "WARNING: SMTP_HOST, MAIL_FROM, or MAIL_TO not set — skipping email notification"
     53     fi
     54 fi
     55 
     56 exit "$exit_code"