fix: three wrapper holes in contract-run.sh
PR Pipeline — Authorize → Validate → Review → Merge / auth (pull_request) Successful in 9s
PR Pipeline — Authorize → Validate → Review → Merge / validate (pull_request) Successful in 12s
PR Pipeline — Authorize → Validate → Review → Merge / lint (pull_request) Successful in 11s
PR Pipeline — Authorize → Validate → Review → Merge / ai-review (pull_request) Successful in 4s
PR Pipeline — Authorize → Validate → Review → Merge / gate (pull_request) Successful in 1s
PR Pipeline — Authorize → Validate → Review → Merge / auth (pull_request) Successful in 9s
PR Pipeline — Authorize → Validate → Review → Merge / validate (pull_request) Successful in 12s
PR Pipeline — Authorize → Validate → Review → Merge / lint (pull_request) Successful in 11s
PR Pipeline — Authorize → Validate → Review → Merge / ai-review (pull_request) Successful in 4s
PR Pipeline — Authorize → Validate → Review → Merge / gate (pull_request) Successful in 1s
1. Add disk-gc-threat-response to case statement (was only in header comment, hit *) branch and exited 2 silently). Mapped to scripts/disk-gc-scan.py per contract's Execution section. 2. Apply timeout to script invocation (was defined as TIMEOUT=600 but never used, so a hung check blocked the cron slot forever). Now wrapped with timeout, and exit 124 (timeout kill) logs a TIMEOUT line before the FAIL verdict. 3. Send alert on exit-2 paths (unknown contract and missing script). Both paths previously just echoed and exited, so a typo'd name or absent script was a silent monitoring loss. Now they send the same Zulip DM as a failed check. Proved all four paths with raw output: - unknown contract: curl -sf attempted, exit 22 on HTTP 401 - missing script: curl -sf attempted, exit 2 - disk-gc-threat-response: resolves to disk-gc-scan.py, runs, PASS - stub sleep > timeout: TIMEOUT line logged, exit 1, alert failure recorded
This commit is contained in:
+34
-1
@@ -61,8 +61,24 @@ case "$CONTRACT_NAME" in
|
|||||||
SCRIPT_PATH="${SCRIPTS_DIR}/pm2-self-heal.sh"
|
SCRIPT_PATH="${SCRIPTS_DIR}/pm2-self-heal.sh"
|
||||||
INTERPRETER="bash"
|
INTERPRETER="bash"
|
||||||
;;
|
;;
|
||||||
|
disk-gc-threat-response)
|
||||||
|
SCRIPT_PATH="${SCRIPTS_DIR}/disk-gc-scan.py"
|
||||||
|
INTERPRETER="python3"
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown contract: $CONTRACT_NAME" | tee -a "$LOG_FILE"
|
echo "Unknown contract: $CONTRACT_NAME" | tee -a "$LOG_FILE"
|
||||||
|
# Send alert for unknown contract
|
||||||
|
ALERT_MSG="🔴 Contract $CONTRACT_NAME: unknown contract name. Log: $LOG_FILE"
|
||||||
|
ZULIP_API_URL="${ZULIP_API_URL:-https://chat.sysloggh.net/api/v1}"
|
||||||
|
ZULIP_API_KEY="${ZULIP_API_KEY:-}"
|
||||||
|
ZULIP_USER="${ZULIP_USER:-abiba-bot@chat.sysloggh.net}"
|
||||||
|
if [ -n "$ZULIP_API_KEY" ] && command -v curl &> /dev/null; then
|
||||||
|
curl -sf -X POST "${ZULIP_API_URL}/messages" \
|
||||||
|
-u "${ZULIP_USER}:${ZULIP_API_KEY}" \
|
||||||
|
-d "type=private" \
|
||||||
|
-d "to=9" \
|
||||||
|
-d "content=${ALERT_MSG}" > /dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
exit 2
|
exit 2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -70,6 +86,18 @@ esac
|
|||||||
# Check if script exists
|
# Check if script exists
|
||||||
if [ ! -f "$SCRIPT_PATH" ]; then
|
if [ ! -f "$SCRIPT_PATH" ]; then
|
||||||
echo "Script not found: $SCRIPT_PATH" | tee -a "$LOG_FILE"
|
echo "Script not found: $SCRIPT_PATH" | tee -a "$LOG_FILE"
|
||||||
|
# Send alert for missing script
|
||||||
|
ALERT_MSG="🔴 Contract $CONTRACT_NAME: script not found at $SCRIPT_PATH. Log: $LOG_FILE"
|
||||||
|
ZULIP_API_URL="${ZULIP_API_URL:-https://chat.sysloggh.net/api/v1}"
|
||||||
|
ZULIP_API_KEY="${ZULIP_API_KEY:-}"
|
||||||
|
ZULIP_USER="${ZULIP_USER:-abiba-bot@chat.sysloggh.net}"
|
||||||
|
if [ -n "$ZULIP_API_KEY" ] && command -v curl &> /dev/null; then
|
||||||
|
curl -sf -X POST "${ZULIP_API_URL}/messages" \
|
||||||
|
-u "${ZULIP_USER}:${ZULIP_API_KEY}" \
|
||||||
|
-d "type=private" \
|
||||||
|
-d "to=9" \
|
||||||
|
-d "content=${ALERT_MSG}" > /dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -81,9 +109,14 @@ echo "" | tee -a "$LOG_FILE"
|
|||||||
|
|
||||||
# Use timeout to prevent hangs (10 minutes default)
|
# Use timeout to prevent hangs (10 minutes default)
|
||||||
TIMEOUT=600
|
TIMEOUT=600
|
||||||
$INTERPRETER "$SCRIPT_PATH" 2>&1 | tee -a "$LOG_FILE"
|
timeout "$TIMEOUT" $INTERPRETER "$SCRIPT_PATH" 2>&1 | tee -a "$LOG_FILE"
|
||||||
EXIT_CODE=${PIPESTATUS[0]}
|
EXIT_CODE=${PIPESTATUS[0]}
|
||||||
|
|
||||||
|
# If timeout killed the process, EXIT_CODE will be 124
|
||||||
|
if [ $EXIT_CODE -eq 124 ]; then
|
||||||
|
echo "⏰ TIMEOUT: script exceeded ${TIMEOUT}s limit" | tee -a "$LOG_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "" | tee -a "$LOG_FILE"
|
echo "" | tee -a "$LOG_FILE"
|
||||||
if [ $EXIT_CODE -eq 0 ]; then
|
if [ $EXIT_CODE -eq 0 ]; then
|
||||||
echo "✅ VERDICT: PASS" | tee -a "$LOG_FILE"
|
echo "✅ VERDICT: PASS" | tee -a "$LOG_FILE"
|
||||||
|
|||||||
Reference in New Issue
Block a user