CI: _retry_failed.sh wraps both FT steps — single-flake retries cost ~22s instead of a full 35-min step re-run. Parses Django's FAIL:/ERROR: test_method (full.dotted.path) lines from stdout, re-runs only those labels (deduped + sorted). Green first runs skip the retry; first-run crashes w. no parseable labels propagate the original exit code without masking infra problems
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -111,7 +111,12 @@ steps:
|
||||
# clusters run in test-FTs-room. Channels + two-browser tags already
|
||||
# covered upstream. `ls | grep -v | sed` enumerates module dotted-paths
|
||||
# from filenames.
|
||||
- python manage.py test --exclude-tag=channels --exclude-tag=two-browser $(ls functional_tests/test_*.py | grep -vE 'test_(game_room|trinket)_' | sed 's|/|.|g;s|\.py||')
|
||||
#
|
||||
# Wrapped in `_retry_failed.sh` so a single Selenium flake (browser
|
||||
# hang, gecko-perms blip, login race) at test N/M doesn't cost the
|
||||
# full step wall-clock on retry — the script parses Django's
|
||||
# FAIL:/ERROR: lines from stdout + re-runs only those labels.
|
||||
- bash ../.woodpecker/_retry_failed.sh --exclude-tag=channels --exclude-tag=two-browser $(ls functional_tests/test_*.py | grep -vE 'test_(game_room|trinket)_' | sed 's|/|.|g;s|\.py||')
|
||||
when:
|
||||
- event: push
|
||||
path:
|
||||
@@ -145,7 +150,14 @@ steps:
|
||||
# table hex SCSS + chair geometry live), so they exercise the same
|
||||
# surface as test_game_room_*. Runs in parallel w. test-FTs-non-room
|
||||
# (distinct DATABASE_URL paths under /tmp; see split-rationale).
|
||||
- python manage.py test --exclude-tag=channels --exclude-tag=two-browser $(ls functional_tests/test_game_room_*.py functional_tests/test_trinket_*.py | sed 's|/|.|g;s|\.py||')
|
||||
#
|
||||
# `_retry_failed.sh` parses Django FAIL:/ERROR: lines from the first
|
||||
# run's stdout + re-runs just those labels — single-flake retries
|
||||
# cost ~22s instead of the full ~35-min step wall-clock. Genuine
|
||||
# regressions still fail (second run output is the authoritative
|
||||
# report); first-run crashes w. no parseable labels propagate
|
||||
# the original exit code (don't silently mask infra problems).
|
||||
- bash ../.woodpecker/_retry_failed.sh --exclude-tag=channels --exclude-tag=two-browser $(ls functional_tests/test_game_room_*.py functional_tests/test_trinket_*.py | sed 's|/|.|g;s|\.py||')
|
||||
when:
|
||||
- event: push
|
||||
path:
|
||||
|
||||
Reference in New Issue
Block a user