CI: route test_game_my_sea*.py to test-FTs-room stage — 49 my-sea FTs DRY-reuse the room-shell hex + sea-cross picker (same Selenium surface as test_game_room_* + test_trinket_*), so they belong w. the heavy room flows instead of bloating test-FTs-non-room. Filename-regex partition stays clean (13 room + 24 non-room = 37 total, no overlap)
All checks were successful
ci/woodpecker/push/pyswiss Pipeline was successful
ci/woodpecker/push/main Pipeline was successful

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-05-20 13:20:23 -04:00
parent 899e626265
commit 31cb8dfc1d

View File

@@ -107,16 +107,18 @@ steps:
commands: commands:
- pip install -r requirements.dev.txt - pip install -r requirements.dev.txt
- cd ./src - cd ./src
# Every FT file EXCEPT test_game_room_* and test_trinket_* — both # Every FT file EXCEPT test_game_room_*, test_trinket_*, AND
# clusters run in test-FTs-room. Channels + two-browser tags already # test_game_my_sea* — all three clusters run in test-FTs-room.
# covered upstream. `ls | grep -v | sed` enumerates module dotted-paths # Channels + two-browser tags already covered upstream.
# from filenames. # `ls | grep -v | sed` enumerates module dotted-paths from
# filenames. (No trailing `_` in the my-sea alternative — the
# file is `test_game_my_sea.py` w. no further suffix today.)
# #
# Wrapped in `_retry_failed.sh` so a single Selenium flake (browser # 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 # 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 # full step wall-clock on retry — the script parses Django's
# FAIL:/ERROR: lines from stdout + re-runs only those labels. # 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||') - bash ../.woodpecker/_retry_failed.sh --exclude-tag=channels --exclude-tag=two-browser $(ls functional_tests/test_*.py | grep -vE 'test_(game_room|trinket)_|test_game_my_sea' | sed 's|/|.|g;s|\.py||')
when: when:
- event: push - event: push
path: path:
@@ -144,11 +146,13 @@ steps:
- pip install -r requirements.dev.txt - pip install -r requirements.dev.txt
- cd ./src - cd ./src
# Heavy Selenium room flows — test_game_room_* (deck_contrib, # Heavy Selenium room flows — test_game_room_* (deck_contrib,
# gatekeeper, invite, select_role/sea/sig/sky, tray, tray_tooltip) # gatekeeper, invite, select_role/sea/sig/sky, tray, tray_tooltip),
# AND test_trinket_* (carte_blanche, coin_on_a_string, backstage_pass) # test_trinket_* (carte_blanche, coin_on_a_string, backstage_pass)
# since trinket FTs create rooms + load the room template (where the # since trinket FTs create rooms + load the room template (where
# table hex SCSS + chair geometry live), so they exercise the same # the table hex SCSS + chair geometry live), AND test_game_my_sea*
# surface as test_game_room_*. Runs in parallel w. test-FTs-non-room # (49 my-sea FTs that DRY-reuse the room-shell hex + sea-cross
# picker — same Selenium surface, so the same parallel-stage
# contention concerns apply). Runs in parallel w. test-FTs-non-room
# (distinct DATABASE_URL paths under /tmp; see split-rationale). # (distinct DATABASE_URL paths under /tmp; see split-rationale).
# #
# `_retry_failed.sh` parses Django FAIL:/ERROR: lines from the first # `_retry_failed.sh` parses Django FAIL:/ERROR: lines from the first
@@ -157,7 +161,7 @@ steps:
# regressions still fail (second run output is the authoritative # regressions still fail (second run output is the authoritative
# report); first-run crashes w. no parseable labels propagate # report); first-run crashes w. no parseable labels propagate
# the original exit code (don't silently mask infra problems). # 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||') - bash ../.woodpecker/_retry_failed.sh --exclude-tag=channels --exclude-tag=two-browser $(ls functional_tests/test_game_room_*.py functional_tests/test_trinket_*.py functional_tests/test_game_my_sea*.py | sed 's|/|.|g;s|\.py||')
when: when:
- event: push - event: push
path: path: