E2E: large pushes and real histories in their own shard (#176)
Since #157 the core e2e file runs past node's 600 s per-file timeout: its four real histories take about 330 s on their own, so the last two tests were cancelled and End-to-end failed on main (3281dab). They now run in a fifth shard, selected by name from the same file. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yhgAu6oKfqes812Yd4qjo
Canberk Demirci authored · GitHub committed signed1 parent 3281dabcommit f24bc68a81a2482fd2271f586788c6251e21da19Browse files
1 file changed+13−5
modified.github/workflows/e2e.yml+13−5View file
| @@ -13,9 +13,10 @@ | ||
| 13 | 13 | cancel-in-progress: true |
| 14 | 14 | |
| 15 | 15 | jobs: |
| 16 | - # The suite in two parallel shards of about the same length: the git, pull request | |
| 17 | - # and Actions file on its own, and every other test/e2e/*.test.mjs file (so a new | |
| 18 | - # file runs without editing this). Only the second shard needs a browser (passkeys). | |
| 16 | + # The suite in parallel shards of about the same length: the git, pull request and | |
| 17 | + # Actions file split in two (its large pushes on their own), agents, security, and | |
| 18 | + # every other test/e2e/*.test.mjs file (so a new file runs without editing this). | |
| 19 | + # Only the last shard needs a browser (passkeys). | |
| 19 | 20 | e2e: |
| 20 | 21 | name: End-to-end (${{ matrix.name }}) |
| 21 | 22 | runs-on: ubuntu-latest |
| @@ -26,6 +27,8 @@ | ||
| 26 | 27 | include: |
| 27 | 28 | - name: git, PRs, Actions |
| 28 | 29 | shard: core |
| 30 | + - name: large pushes, real histories | |
| 31 | + shard: large | |
| 29 | 32 | - name: agent reviews, tasks, Today |
| 30 | 33 | shard: agents |
| 31 | 34 | - name: security |
| @@ -61,11 +64,16 @@ | ||
| 61 | 64 | core='/e2e\.test\.mjs$' |
| 62 | 65 | agents='/(agentic|review|tasks)\.test\.mjs$' |
| 63 | 66 | security='/(security|status)\.test\.mjs$' |
| 67 | + # The core file's large pushes and real histories take minutes each: their own shard, so | |
| 68 | + # neither half runs into the per-file timeout. | |
| 69 | + large='^(real histories|large files|large pushes):' | |
| 70 | + opts=(--test-timeout=600000) | |
| 64 | 71 | case "${{ matrix.shard }}" in |
| 65 | - core) files=$(ls test/e2e/*.test.mjs | grep -E "$core") ;; | |
| 72 | + core) files=$(ls test/e2e/*.test.mjs | grep -E "$core"); opts+=(--test-skip-pattern="$large") ;; | |
| 73 | + large) files=$(ls test/e2e/*.test.mjs | grep -E "$core"); opts+=(--test-name-pattern="$large") ;; | |
| 66 | 74 | agents) files=$(ls test/e2e/*.test.mjs | grep -E "$agents") ;; |
| 67 | 75 | security) files=$(ls test/e2e/*.test.mjs | grep -E "$security") ;; |
| 68 | 76 | *) files=$(ls test/e2e/*.test.mjs | grep -vE "$core|$agents|$security") ;; |
| 69 | 77 | esac |
| 70 | 78 | echo "$files" |
| 71 | - node --test --test-concurrency=1 --test-timeout=600000 $files | |
| 79 | + node --test --test-concurrency=1 "${opts[@]}" $files |