Skip to content

Commit adb4e96

Browse files
authored
execution: explicitly set parallel/sequential blocktests/enginextests shards in ci (#21223)
# execution: explicitly set parallel/sequential blocktests/enginextests shards in ci ## Summary Makes the `eest-spec-*` blocktest / enginextest CI shards declare their `ERIGON_EXEC3_PARALLEL` mode explicitly via shard name (`-sequential` / `-parallel` suffixes) and pinned env var, instead of relying on the runtime default in `dbg.Exec3Parallel`. The default can now flip without forcing a shard rename or budget rebase, and every shard's behaviour is reproducible from the manifest alone. ### Manifest naming (`tools/eest-spec-shards.json`) Renamed every implicit-sequential shard to an explicit `-sequential` variant; their `-parallel` siblings already existed (or were added where missing): | Old name | New name | |---|---| | `blocktests-stable` | `blocktests-stable-sequential` | | `enginextests-stable` | `enginextests-stable-sequential` (+ new `enginextests-stable-parallel`) | | `enginextests-benchmark-{1m,5m,10m,30m,60m,100m,150m}` | `…-sequential` | | `blocktests-stable-race-{pre-cancun,cancun,prague,osaka}` | `…-sequential` | Unchanged shards (single-mode by design): - `statetests-stable`, `statetests-devnet` - `blocktests-devnet`, `blocktests-devnet-race-amsterdam` (always parallel for the in-development hardfork) ### Runner script (`tools/run-eest-spec-test.sh`) - Always exports `ERIGON_EXEC3_PARALLEL=true|false` based on the manifest's `exec3-parallel` field (previously only set it when `true`). The shard's mode is now pinned regardless of the runtime default. - Strips both `-parallel` and `-sequential` suffixes when computing `shard_route`, so the new names reuse the existing case-arms (fixture path / `--run` regex) without duplicated routing logic. ### Updated `max-allowed-failures` Re-ran every shard with a non-zero budget against current HEAD and tightened budgets to the exact observed counts (no buffer): | Shard | Tests | Old | New | |---|---:|---:|---:| | blocktests-stable-parallel | 69,256 | 20 | **2** | | blocktests-devnet | 82,896 | 25 | **5** | | enginextests-stable-parallel | 63,920 | 19 | **11** | | blocktests-stable-race-pre-cancun-parallel | 8,947 | 259 | **2** | | blocktests-stable-race-cancun-parallel | 17,783 | 140 | **0** | | blocktests-stable-race-prague-parallel | 20,945 | 136 | **0** | | blocktests-stable-race-osaka-parallel | 21,564 | 136 | **0** | | blocktests-devnet-race-amsterdam | 21,328 | 60 | **3** | The three stable-race `cancun/prague/osaka-parallel` shards now strict-gate at 0 failures. ### Skill docs Updated four `.claude/skills/*` files to reflect the new make-target names and added a "stale-binary pitfall" note explaining that `make eest-spec-<shard>` always rebuilds `evm` / `evm.race` (via the Makefile prereq + Go's content-addressed build cache), but invoking `bash tools/run-eest-spec-test.sh <shard>` directly **bypasses** that — easy footgun when comparing failure counts across commits. - `.claude/skills/erigon-test-all/SKILL.md` - `.claude/skills/erigon-implement-eip/SKILL.md` - `.claude/skills/erigon-test-race/SKILL.md` (also corrected an outdated claim that EEST race coverage needed manual `GOFLAGS='-race'`) - `.claude/skills/erigon-ci/SKILL.md` ## Test plan - [ ] CI `EEST spec tests` workflow green on this branch (matrix is loaded from the renamed manifest) - [ ] All renamed make targets exist: `for s in $(jq -r '.[].shard' tools/eest-spec-shards.json); do make -n eest-spec-$s >/dev/null || echo "MISSING: $s"; done` - [ ] JSON parses + every shard routes to an existing case-arm (manual verification via `shard_route` simulation) - [ ] Manual local run of one `-sequential` and one `-parallel` shard confirms `ERIGON_EXEC3_PARALLEL` is set as expected (script log shows `[env] ERIGON_EXEC3_PARALLEL true|false`)
1 parent 80c21cf commit adb4e96

6 files changed

Lines changed: 79 additions & 48 deletions

File tree

.claude/skills/erigon-ci/SKILL.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,16 @@ Each test group has its own dedicated skill for drill-down on failures. Use thos
2222
| unit | `erigon-test-unit` | `make test-short` | ~5 min | Pre-push gate |
2323
| all | `erigon-test-all` | `GOGC=80 make test-all` | ~30 min | Before PR review |
2424
| race | `erigon-test-race` | `make test-all-race` | ~60 min | Concurrency changes |
25-
| eest-spec | *(inline)* | `make eest-spec-<suite>-<fixtures>` | varies | EEST state/blockchain/engine-x changes |
25+
| eest-spec | *(inline)* | `make eest-spec-<suite>-<fixtures>[-{sequential,parallel}]` | varies | EEST state/blockchain/engine-x changes (most shards split into `-sequential` / `-parallel` pairs that pin `ERIGON_EXEC3_PARALLEL`; see `tools/eest-spec-shards.json`) |
2626
| caplin spec | *(inline)* | `cd cl/spectest && make tests && make mainnet` | ~15 min | CL/consensus changes |
2727
| hive | `erigon-test-hive` | `make test-hive` | ~20 min | EL/CL interop changes |
2828
| rpc | `erigon-test-rpc` | *(requires synced DB)* | ~10 min | RPC API changes |
2929
| assertoor | *(remote only)* | dispatch only || Kurtosis network test |
3030

3131
`make test-all` no longer covers the EEST spec tests or the `cl/spectest` consensus spec test — run those via their dedicated targets above when relevant.
3232

33+
**Pitfall:** prefer `make eest-spec-<shard>` over `bash tools/run-eest-spec-test.sh <shard>`. The make target lists `evm` / `evm.race` as a prereq so stale binaries get rebuilt; the script invoked directly does not, and a stale binary against current fixtures will inflate failures or hide regressions.
34+
3335
### Lint (run first — non-deterministic, may need multiple runs)
3436
```bash
3537
make lint

.claude/skills/erigon-implement-eip/SKILL.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,17 @@ Run local tests using the `/erigon-test-all` skill. Analyse and fix any failures
116116
The most important tests when implementing a new EIP for the EL are the EEST spec test shards, exercised by the `cmd/evm` runners (`statetest`, `blocktest`, `enginextest`) via the Makefile targets:
117117

118118
- `make eest-spec-statetests-stable` / `…-devnet` — state-tests against the stable/devnet EEST fixtures
119-
- `make eest-spec-blocktests-stable` / `…-devnet` — blockchain-tests against the stable/devnet EEST fixtures. The devnet shard always runs under `ERIGON_EXEC3_PARALLEL=true` (the in-development hardfork requires it); the stable shard runs serial exec3.
120-
- `make eest-spec-blocktests-stable-parallel` — same as `…-stable` but with `ERIGON_EXEC3_PARALLEL=true`; useful for catching parallel-only regressions on stable fixtures.
121-
- `make eest-spec-enginextests-stable` — engine-x tests against the stable EEST fixtures (no devnet variant: the devnet tarball doesn't yet ship `blockchain_tests_engine_x/`).
122-
- `make eest-spec-enginextests-benchmark-1m` / `-5m` / `-10m` / `-30m` / `-60m` / `-100m` / `-150m` — engine-x tests against the per-gas-target benchmark fixtures, with `--time` per-test stats.
123-
- `make eest-spec-blocktests-stable-race-{pre-cancun,cancun,prague,osaka}` and `make eest-spec-blocktests-devnet-race-amsterdam` — race-detector variants split by fork. Each stable-race sub-shard also has a `-parallel` sibling (e.g. `…-race-cancun-parallel`) that exercises parallel exec3 under the race detector. The `blocktests-devnet-race-amsterdam` shard is always parallel (matches the non-race devnet behaviour).
119+
- `make eest-spec-blocktests-stable-sequential` / `…-devnet` — blockchain-tests against the stable/devnet EEST fixtures. The devnet shard always runs under `ERIGON_EXEC3_PARALLEL=true` (the in-development hardfork requires it); the `…-sequential` shard pins `ERIGON_EXEC3_PARALLEL=false`.
120+
- `make eest-spec-blocktests-stable-parallel` — same fixtures as `…-stable-sequential` but with `ERIGON_EXEC3_PARALLEL=true`; useful for catching parallel-only regressions on stable fixtures.
121+
- `make eest-spec-enginextests-stable-sequential` — engine-x tests against the stable EEST fixtures with `ERIGON_EXEC3_PARALLEL=false`. No devnet variant: the devnet tarball doesn't yet ship `blockchain_tests_engine_x/`.
122+
- `make eest-spec-enginextests-stable-parallel` — same fixtures as `…-stable-sequential` but with `ERIGON_EXEC3_PARALLEL=true`; useful for catching parallel-only regressions on engine-x stable fixtures.
123+
- `make eest-spec-enginextests-benchmark-{1m,5m,10m,30m,60m,100m,150m}-{sequential,parallel}` — engine-x tests against the per-gas-target benchmark fixtures, with `--time` per-test stats. Each gas target has a `-sequential` (`ERIGON_EXEC3_PARALLEL=false`) and `-parallel` (`ERIGON_EXEC3_PARALLEL=true`) variant.
124+
- `make eest-spec-blocktests-stable-race-{pre-cancun,cancun,prague,osaka}-{sequential,parallel}` and `make eest-spec-blocktests-devnet-race-amsterdam` — race-detector variants split by fork. Each stable-race sub-shard has a `-sequential` / `-parallel` pair; the `-parallel` siblings exercise parallel exec3 under the race detector. The `blocktests-devnet-race-amsterdam` shard is always parallel (matches the non-race devnet behaviour).
124125

125126
The shard list / failure budgets / `exec3-parallel` flags are defined in `tools/eest-spec-shards.json` (single source of truth shared with the CI workflow and the local runner script). See `EEST_SPEC_SHARDS` / `EEST_SPEC_RACE_SHARDS` in the root `Makefile` for the partition into non-race vs race targets.
126127

128+
**Pitfall: stale `evm` / `evm.race` binary.** When iterating on an EIP implementation, always invoke shards via `make eest-spec-<shard>` rather than `bash tools/run-eest-spec-test.sh <shard>` — the make target lists `evm` (or `evm.race`) as a prereq and `go build` is cache-aware, so a fresh binary is built before each run. The script invoked directly **bypasses** that rebuild, so the runners exercise whatever `build/bin/evm{,.race}` happens to be on disk against current fixtures — silently inflating failures (e.g. devnet shards "regressing" by thousands of tests) or hiding regressions when comparing budgets before/after a change.
129+
127130
For an EIP on a hardfork under development, the **`-devnet`** shards are the primary signal; the `-stable` shards (and `-benchmark-*` shards, where applicable) are regression checks against prior hardforks.
128131

129132
### Where the test fixtures come from

.claude/skills/erigon-test-all/SKILL.md

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,30 @@ To exercise the EEST suites locally, see `erigon-eest-spec` (or run a specific s
1515

1616
```bash
1717
make eest-spec-statetests-stable # state tests vs eest_stable fixtures
18-
make eest-spec-blocktests-stable # blockchain tests vs eest_stable fixtures (serial exec3)
18+
make eest-spec-blocktests-stable-sequential # blockchain tests vs eest_stable fixtures (ERIGON_EXEC3_PARALLEL=false)
1919
make eest-spec-blocktests-stable-parallel # same, but with ERIGON_EXEC3_PARALLEL=true
20-
make eest-spec-enginextests-stable # engine-x tests vs eest_stable fixtures
20+
make eest-spec-enginextests-stable-sequential # engine-x tests vs eest_stable (ERIGON_EXEC3_PARALLEL=false)
21+
make eest-spec-enginextests-stable-parallel # same, but with ERIGON_EXEC3_PARALLEL=true
2122
make eest-spec-statetests-devnet # …vs eest_devnet fixtures
2223
make eest-spec-blocktests-devnet # devnet blocktests (always parallel exec3)
23-
make eest-spec-enginextests-benchmark-1m # engine-x benchmark fixtures @ 1M gas target
24+
make eest-spec-enginextests-benchmark-1m-sequential
25+
# engine-x benchmark fixtures @ 1M gas target
2426
# (with per-test --time stats);
25-
# -5m/-10m/-30m/-60m/-100m/-150m variants too
26-
make eest-spec-blocktests-stable-race-cancun # race-detector variant, sharded per fork:
27+
# -5m/-10m/-30m/-60m/-100m/-150m variants too,
28+
# each with a "-sequential" / "-parallel" pair
29+
make eest-spec-blocktests-stable-race-cancun-sequential
30+
# race-detector variant, sharded per fork:
2731
# -pre-cancun/-cancun/-prague/-osaka, plus
28-
# eest-spec-blocktests-devnet-race-amsterdam
29-
# each also has a "-parallel" sibling
30-
# (e.g. ...-race-cancun-parallel)
32+
# eest-spec-blocktests-devnet-race-amsterdam.
33+
# Each stable-race sub-shard has a
34+
# "-sequential" / "-parallel" pair
35+
# (e.g. ...-race-cancun-{sequential,parallel})
3136
```
3237

3338
The shard list / failure budgets / `exec3-parallel` flags live in `tools/eest-spec-shards.json` (single source of truth for both this workflow and `tools/run-eest-spec-test.sh`). See `EEST_SPEC_SHARDS` / `EEST_SPEC_RACE_SHARDS` in the root `Makefile` for the partition into race vs non-race targets.
3439

40+
**Pitfall: stale `evm` / `evm.race` binary.** Always invoke shards via `make eest-spec-<shard>` — the Makefile lists `evm` (or `evm.race`) as a prereq and `go build` is cache-aware, so a stale binary gets rebuilt automatically. Calling `bash tools/run-eest-spec-test.sh <shard>` directly **bypasses** the rebuild and silently exercises whatever `build/bin/evm{,.race}` happens to be on disk against current fixtures, inflating failures or hiding regressions. After pulling code, switching branches, or any time you suspect the binary is older than HEAD: `rm -f build/bin/evm build/bin/evm.race && make evm evm.race` before re-running.
41+
3542
Two side prerequisites still apply for tests `make test-all` does run:
3643

3744
```bash

.claude/skills/erigon-test-race/SKILL.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ Runs the full test suite with Go's `-race` flag. Catches concurrency bugs that n
1111

1212
`make test-all-race` no longer downloads any fixture tarballs. EEST spec tests (state/blockchain/engine-x) moved out of `go test ./...` and into the dedicated `eest-spec-*` Makefile targets driven by the **EEST spec tests** workflow (`test-eest-spec.yml`); the consensus spec test (`cl/spectest`) is skipped here via `ERIGON_SKIP_CL_SPECTEST=true` (set automatically by the Makefile) and runs only in `test-integration-caplin.yml`.
1313

14-
If you want race coverage on the EEST or consensus spec suites specifically, run them via their dedicated targets (those don't apply `-race` automatically — pass `GOFLAGS='-race'` or invoke `go test -race` against the relevant package directly).
14+
If you want race coverage on the EEST blocktests, use the dedicated race shards — `make eest-spec-blocktests-stable-race-{pre-cancun,cancun,prague,osaka}-{sequential,parallel}` and `make eest-spec-blocktests-devnet-race-amsterdam`. These build a race-instrumented `evm.race` binary automatically (see `EEST_SPEC_RACE_SHARDS` in the root `Makefile`); the `-sequential` / `-parallel` split pins `ERIGON_EXEC3_PARALLEL` so race coverage hits both modes. For the consensus spec suite or other Go packages, pass `GOFLAGS='-race'` or invoke `go test -race` against the relevant package directly.
15+
16+
**Pitfall: stale `evm.race` binary.** `make eest-spec-<race-shard>` lists `evm.race` as a prereq and `go build` is cache-aware, so a stale binary gets rebuilt. Calling `bash tools/run-eest-spec-test.sh <shard>` directly with `EVM_BIN=build/bin/evm.race` **bypasses** the rebuild and silently runs an old race-instrumented binary against current fixtures — race reports against code that no longer exists, missed races against code that does. After pulling or switching branches: `rm -f build/bin/evm.race && make evm.race` before re-running.
1517

1618
Two side prerequisites still apply for tests `make test-all-race` does run:
1719

tools/eest-spec-shards.json

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,35 @@
1010
"max-allowed-failures": 0
1111
},
1212
{
13-
"shard": "blocktests-stable",
13+
"shard": "blocktests-stable-sequential",
1414
"workers": 12,
1515
"max-allowed-failures": 0
1616
},
1717
{
1818
"shard": "blocktests-stable-parallel",
1919
"workers": 12,
20-
"max-allowed-failures": 20,
20+
"max-allowed-failures": 2,
2121
"exec3-parallel": true
2222
},
2323
{
2424
"shard": "blocktests-devnet",
2525
"workers": 12,
26-
"max-allowed-failures": 25,
26+
"max-allowed-failures": 5,
2727
"exec3-parallel": true
2828
},
2929
{
30-
"shard": "enginextests-stable",
30+
"shard": "enginextests-stable-sequential",
3131
"workers": 8,
3232
"max-allowed-failures": 0
3333
},
3434
{
35-
"shard": "enginextests-benchmark-1m",
35+
"shard": "enginextests-stable-parallel",
36+
"workers": 8,
37+
"max-allowed-failures": 11,
38+
"exec3-parallel": true
39+
},
40+
{
41+
"shard": "enginextests-benchmark-1m-sequential",
3642
"workers": 1,
3743
"max-allowed-failures": 0
3844
},
@@ -43,7 +49,7 @@
4349
"exec3-parallel": true
4450
},
4551
{
46-
"shard": "enginextests-benchmark-5m",
52+
"shard": "enginextests-benchmark-5m-sequential",
4753
"workers": 1,
4854
"max-allowed-failures": 0
4955
},
@@ -54,7 +60,7 @@
5460
"exec3-parallel": true
5561
},
5662
{
57-
"shard": "enginextests-benchmark-10m",
63+
"shard": "enginextests-benchmark-10m-sequential",
5864
"workers": 1,
5965
"max-allowed-failures": 0
6066
},
@@ -65,7 +71,7 @@
6571
"exec3-parallel": true
6672
},
6773
{
68-
"shard": "enginextests-benchmark-30m",
74+
"shard": "enginextests-benchmark-30m-sequential",
6975
"workers": 1,
7076
"max-allowed-failures": 0
7177
},
@@ -76,7 +82,7 @@
7682
"exec3-parallel": true
7783
},
7884
{
79-
"shard": "enginextests-benchmark-60m",
85+
"shard": "enginextests-benchmark-60m-sequential",
8086
"workers": 1,
8187
"max-allowed-failures": 0
8288
},
@@ -87,7 +93,7 @@
8793
"exec3-parallel": true
8894
},
8995
{
90-
"shard": "enginextests-benchmark-100m",
96+
"shard": "enginextests-benchmark-100m-sequential",
9197
"workers": 1,
9298
"max-allowed-failures": 0
9399
},
@@ -98,7 +104,7 @@
98104
"exec3-parallel": true
99105
},
100106
{
101-
"shard": "enginextests-benchmark-150m",
107+
"shard": "enginextests-benchmark-150m-sequential",
102108
"workers": 1,
103109
"max-allowed-failures": 0
104110
},
@@ -109,53 +115,53 @@
109115
"exec3-parallel": true
110116
},
111117
{
112-
"shard": "blocktests-stable-race-pre-cancun",
118+
"shard": "blocktests-stable-race-pre-cancun-sequential",
113119
"workers": 12,
114120
"max-allowed-failures": 0
115121
},
116122
{
117-
"shard": "blocktests-stable-race-cancun",
123+
"shard": "blocktests-stable-race-cancun-sequential",
118124
"workers": 12,
119125
"max-allowed-failures": 0
120126
},
121127
{
122-
"shard": "blocktests-stable-race-prague",
128+
"shard": "blocktests-stable-race-prague-sequential",
123129
"workers": 12,
124130
"max-allowed-failures": 0
125131
},
126132
{
127-
"shard": "blocktests-stable-race-osaka",
133+
"shard": "blocktests-stable-race-osaka-sequential",
128134
"workers": 12,
129135
"max-allowed-failures": 0
130136
},
131137
{
132138
"shard": "blocktests-stable-race-pre-cancun-parallel",
133139
"workers": 12,
134-
"max-allowed-failures": 259,
140+
"max-allowed-failures": 2,
135141
"exec3-parallel": true
136142
},
137143
{
138144
"shard": "blocktests-stable-race-cancun-parallel",
139145
"workers": 12,
140-
"max-allowed-failures": 140,
146+
"max-allowed-failures": 0,
141147
"exec3-parallel": true
142148
},
143149
{
144150
"shard": "blocktests-stable-race-prague-parallel",
145151
"workers": 12,
146-
"max-allowed-failures": 136,
152+
"max-allowed-failures": 0,
147153
"exec3-parallel": true
148154
},
149155
{
150156
"shard": "blocktests-stable-race-osaka-parallel",
151157
"workers": 12,
152-
"max-allowed-failures": 136,
158+
"max-allowed-failures": 0,
153159
"exec3-parallel": true
154160
},
155161
{
156162
"shard": "blocktests-devnet-race-amsterdam",
157163
"workers": 12,
158-
"max-allowed-failures": 60,
164+
"max-allowed-failures": 3,
159165
"exec3-parallel": true
160166
}
161167
]

tools/run-eest-spec-test.sh

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,18 @@
77
#
88
# statetests-stable state tests vs. eest_stable
99
# statetests-devnet state tests vs. eest_devnet
10-
# blocktests-stable blockchain tests vs. eest_stable
10+
# blocktests-stable-sequential blockchain tests vs. eest_stable
1111
# blocktests-devnet blockchain tests vs. eest_devnet
12-
# enginextests-stable engine-x tests vs. eest_stable
13-
# enginextests-benchmark-{1m,5m,10m,30m,60m,100m,150m}
12+
# enginextests-stable-sequential engine-x tests vs. eest_stable
13+
# enginextests-benchmark-{1m,5m,10m,30m,60m,100m,150m}-sequential
1414
# engine-x benchmark fixtures per
1515
# gas-target subdir; each value
1616
# maps to one for_osaka_at_<NNNN>M/
1717
# directory under the engine_x
1818
# benchmark fixtures
19-
# blocktests-stable-race-{pre-cancun,cancun,prague,osaka}
19+
# blocktests-stable-race-{pre-cancun,cancun,prague,osaka}-sequential
2020
# race-detector variant of
21-
# blocktests-stable, split by
21+
# blocktests-stable-sequential, split by
2222
# fork via the --run regex so
2323
# each sub-shard fits under ~30
2424
# min. Caller (Makefile / CI) must
@@ -28,8 +28,13 @@
2828
# blocktests-devnet-race-amsterdam race-detector variant filtered
2929
# to the Amsterdam fork only.
3030
# *-parallel any of the above with "-parallel"
31-
# appended sets ERIGON_EXEC3_PARALLEL=true
32-
# from the manifest entry.
31+
# appended runs with
32+
# ERIGON_EXEC3_PARALLEL=true. Every
33+
# other shard runs with
34+
# ERIGON_EXEC3_PARALLEL=false so
35+
# the runtime default in
36+
# dbg.Exec3Parallel can flip without
37+
# redefining the shards.
3338
#
3439
# Each shard maps to one cmd/evm subcommand running with --jsonout. Pass/fail
3540
# is decided here (not by the binary, which always exits 0): the shard fails
@@ -71,14 +76,17 @@ if [[ -z "$budget_row" ]]; then
7176
exit 2
7277
fi
7378
IFS=$'\t' read -r default_workers default_max exec3_parallel <<<"$budget_row"
74-
if [[ "$exec3_parallel" == "true" ]]; then
75-
export ERIGON_EXEC3_PARALLEL=true
76-
fi
79+
# Always set ERIGON_EXEC3_PARALLEL explicitly (true or false) so the shard's
80+
# behaviour is pinned to the manifest, independent of whatever dbg.Exec3Parallel
81+
# defaults to at runtime. If the default flips, the shards still run the mode
82+
# they were defined for.
83+
export ERIGON_EXEC3_PARALLEL="$exec3_parallel"
7784

78-
# Strip "-parallel" suffix for case-arm routing — the parallel variant has the
79-
# same fixture path / regex as the non-parallel parent shard; only the
85+
# Strip "-parallel" / "-sequential" suffix for case-arm routing — both variants
86+
# share the same fixture path / regex as the parent shard; only the
8087
# ERIGON_EXEC3_PARALLEL env var differs.
8188
shard_route="${shard%-parallel}"
89+
shard_route="${shard_route%-sequential}"
8290

8391
# Per-shard structural config (cmd / fixture path / extra CLI flags). Match
8492
# against shard_route so "-parallel" variants reuse the same arm as their
@@ -177,7 +185,10 @@ if (( total == 0 )); then
177185
fi
178186
if (( failed > max )); then
179187
echo "ERROR: $failed failures exceed max-allowed $max" >&2
180-
jq -r '.[] | select(.pass == false) | " FAIL " + .name' "$result_file" >&2
188+
# Emit the cmd/evm `error` field per failing test, not just the name,
189+
# so transient CI flakes are diagnosable from the job log alone (the
190+
# raw JSON output is dropped after this script exits).
191+
jq -r '.[] | select(.pass == false) | " FAIL " + .name + "\n error: " + (.error // "<no error message>")' "$result_file" >&2
181192
exit 1
182193
fi
183194
exit 0

0 commit comments

Comments
 (0)