From 31cb8dfc1d636f5745b431363869ab52ac166820 Mon Sep 17 00:00:00 2001 From: Disco DeDisco Date: Wed, 20 May 2026 13:20:23 -0400 Subject: [PATCH] =?UTF-8?q?CI:=20route=20test=5Fgame=5Fmy=5Fsea*.py=20to?= =?UTF-8?q?=20test-FTs-room=20stage=20=E2=80=94=2049=20my-sea=20FTs=20DRY-?= =?UTF-8?q?reuse=20the=20room-shell=20hex=20+=20sea-cross=20picker=20(same?= =?UTF-8?q?=20Selenium=20surface=20as=20test=5Fgame=5Froom=5F*=20+=20test?= =?UTF-8?q?=5Ftrinket=5F*),=20so=20they=20belong=20w.=20the=20heavy=20room?= =?UTF-8?q?=20flows=20instead=20of=20bloating=20test-FTs-non-room.=20Filen?= =?UTF-8?q?ame-regex=20partition=20stays=20clean=20(13=20room=20+=2024=20n?= =?UTF-8?q?on-room=20=3D=2037=20total,=20no=20overlap)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 (1M context) --- .woodpecker/main.yaml | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/.woodpecker/main.yaml b/.woodpecker/main.yaml index 39caefd..b53b166 100644 --- a/.woodpecker/main.yaml +++ b/.woodpecker/main.yaml @@ -107,16 +107,18 @@ steps: commands: - pip install -r requirements.dev.txt - cd ./src - # Every FT file EXCEPT test_game_room_* and test_trinket_* — both - # clusters run in test-FTs-room. Channels + two-browser tags already - # covered upstream. `ls | grep -v | sed` enumerates module dotted-paths - # from filenames. + # Every FT file EXCEPT test_game_room_*, test_trinket_*, AND + # test_game_my_sea* — all three clusters run in test-FTs-room. + # Channels + two-browser tags already covered upstream. + # `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 # 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||') + - 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: - event: push path: @@ -144,11 +146,13 @@ steps: - pip install -r requirements.dev.txt - cd ./src # Heavy Selenium room flows — test_game_room_* (deck_contrib, - # gatekeeper, invite, select_role/sea/sig/sky, tray, tray_tooltip) - # AND test_trinket_* (carte_blanche, coin_on_a_string, backstage_pass) - # since trinket FTs create rooms + load the room template (where the - # table hex SCSS + chair geometry live), so they exercise the same - # surface as test_game_room_*. Runs in parallel w. test-FTs-non-room + # gatekeeper, invite, select_role/sea/sig/sky, tray, tray_tooltip), + # test_trinket_* (carte_blanche, coin_on_a_string, backstage_pass) + # since trinket FTs create rooms + load the room template (where + # the table hex SCSS + chair geometry live), AND test_game_my_sea* + # (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). # # `_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 # 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||') + - 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: - event: push path: