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"