Add auto-escalation: tag fail → light → heavy
When a tag-targeted run fails, automatically escalates: 1. Tag tests fail → re-run full light suite 2. If light fails → re-run heavy suite 3. If tag fails but light passes → result = PASS (tag-only issue) Escalation path shown in Telegram notification: "Escalation: tag:genlab (29 passed, 11 failed) → light PASSED (1431)" Stops at first passing level — no wasted time. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
76dfd3b3c0
commit
8cf2b6c1cb
50
ci-runner.sh
50
ci-runner.sh
@ -140,6 +140,50 @@ if [ "$ERROR_COUNT" != "0" ] && [ "$ERROR_COUNT" != "" ]; then
|
|||||||
echo "TEST COLLECTION ERRORS"
|
echo "TEST COLLECTION ERRORS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ─── Auto-Escalation ───
|
||||||
|
# If a tag-targeted run fails, escalate to full light suite.
|
||||||
|
# If light fails too, escalate to heavy. Captures results at each level.
|
||||||
|
ESCALATION_LOG=""
|
||||||
|
if [ "$OVERALL" = "fail" ] && [[ "$RUN_MODE" == tag:* ]]; then
|
||||||
|
ESCALATION_LOG="Escalated from ${RUN_MODE} (${PASS_COUNT} passed, ${FAIL_COUNT} failed)"
|
||||||
|
echo ""
|
||||||
|
echo "--- ESCALATING: ${RUN_MODE} failed → running full light suite ---"
|
||||||
|
LIGHT_OUTPUT=$($PYTHON -m pytest "$WORKTREE/backend/tests/" --tb=line -q $TIMEOUT_FLAG 2>&1)
|
||||||
|
LIGHT_PASS=$(echo "$LIGHT_OUTPUT" | grep -oP '\d+ passed' | grep -oP '\d+' || echo 0)
|
||||||
|
LIGHT_FAIL=$(echo "$LIGHT_OUTPUT" | grep -oP '\d+ failed' | grep -oP '\d+' || echo 0)
|
||||||
|
LIGHT_SKIP=$(echo "$LIGHT_OUTPUT" | grep -oP '\d+ skipped' | grep -oP '\d+' || echo 0)
|
||||||
|
LIGHT_DESELECTED=$(echo "$LIGHT_OUTPUT" | grep -oP '\d+ deselected' | grep -oP '\d+' || echo 0)
|
||||||
|
echo "Light suite: $LIGHT_PASS passed, $LIGHT_FAIL failed, $LIGHT_SKIP skipped"
|
||||||
|
|
||||||
|
if [ "$LIGHT_FAIL" = "0" ] || [ -z "$LIGHT_FAIL" ]; then
|
||||||
|
ESCALATION_LOG="$ESCALATION_LOG → light PASSED ($LIGHT_PASS passed)"
|
||||||
|
RUN_MODE="tag:${TAG}→light"
|
||||||
|
PASS_COUNT="$LIGHT_PASS"; FAIL_COUNT="0"; SKIP_COUNT="$LIGHT_SKIP"
|
||||||
|
DESELECTED_COUNT="$LIGHT_DESELECTED"; OVERALL="pass"
|
||||||
|
else
|
||||||
|
ESCALATION_LOG="$ESCALATION_LOG → light FAILED ($LIGHT_PASS passed, $LIGHT_FAIL failed)"
|
||||||
|
echo ""
|
||||||
|
echo "--- ESCALATING: light failed → running heavy suite ---"
|
||||||
|
export RUN_HEAVY_TESTS=1
|
||||||
|
HEAVY_OUTPUT=$($PYTHON -m pytest "$WORKTREE/backend/tests/" --tb=line -q $TIMEOUT_FLAG 2>&1)
|
||||||
|
HEAVY_PASS=$(echo "$HEAVY_OUTPUT" | grep -oP '\d+ passed' | grep -oP '\d+' || echo 0)
|
||||||
|
HEAVY_FAIL=$(echo "$HEAVY_OUTPUT" | grep -oP '\d+ failed' | grep -oP '\d+' || echo 0)
|
||||||
|
echo "Heavy suite: $HEAVY_PASS passed, $HEAVY_FAIL failed"
|
||||||
|
|
||||||
|
if [ "$HEAVY_FAIL" = "0" ] || [ -z "$HEAVY_FAIL" ]; then
|
||||||
|
ESCALATION_LOG="$ESCALATION_LOG → heavy PASSED ($HEAVY_PASS passed)"
|
||||||
|
RUN_MODE="tag:${TAG}→light→heavy"
|
||||||
|
PASS_COUNT="$HEAVY_PASS"; FAIL_COUNT="0"; OVERALL="pass"
|
||||||
|
else
|
||||||
|
ESCALATION_LOG="$ESCALATION_LOG → heavy FAILED ($HEAVY_PASS passed, $HEAVY_FAIL failed)"
|
||||||
|
RUN_MODE="tag:${TAG}→light→heavy"
|
||||||
|
PASS_COUNT="$HEAVY_PASS"; FAIL_COUNT="$HEAVY_FAIL"
|
||||||
|
TEST_OUTPUT="$HEAVY_OUTPUT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "Escalation: $ESCALATION_LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
# ─── Test Count Baseline Check ───
|
# ─── Test Count Baseline Check ───
|
||||||
# Baseline check only applies to full suite runs (light), not tag-targeted runs
|
# Baseline check only applies to full suite runs (light), not tag-targeted runs
|
||||||
BASELINE=$(python3 -c "import json; print(json.load(open('$CONFIG')).get('test_count_baseline', 0))")
|
BASELINE=$(python3 -c "import json; print(json.load(open('$CONFIG')).get('test_count_baseline', 0))")
|
||||||
@ -186,6 +230,12 @@ else
|
|||||||
SUITE_INFO="Mode: ${RUN_MODE} | ${DESELECTED_COUNT} not in scope"
|
SUITE_INFO="Mode: ${RUN_MODE} | ${DESELECTED_COUNT} not in scope"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Append escalation info if escalation occurred
|
||||||
|
if [ -n "$ESCALATION_LOG" ]; then
|
||||||
|
SUITE_INFO="${SUITE_INFO}
|
||||||
|
Escalation: ${ESCALATION_LOG}"
|
||||||
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "========================="
|
echo "========================="
|
||||||
echo "Result: $OVERALL"
|
echo "Result: $OVERALL"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user