Skip to content

feat(ui): sort the test history runs and diff their configs - #362

Merged
skylenet merged 1 commit into
masterfrom
feat/history-table-config-diff
Oct 21, 2026
Merged

skylenet merged 1 commit into
masterfrom
feat/history-table-config-diff

Conversation

@skylenet

Copy link
Copy Markdown
Member

Summary

The runs table on the test history page had no sort, and no way to see what changed between two runs. This PR adds both, and it fixes the client card click.

Changes

Sortable columns. Time, Client, MGas/s, Duration, Reject time and Gas used sort on a click. The sort lives in the URL (sort, dir). The default is the newest run first, with no params. A run with no value for the column comes last in both directions.

Config diff to the previous run. A row expands to the config diff to the previous run of its client. It has the same controls as the regressions tab: "Previous run" / "Previous run on {host}", "Only differences" and "Compare runs". The regressions tab and the history table now share this view as PreviousRunDiff (it was RegressionDetail).

Config diff of selected runs. A checkbox selects 2–5 runs, which is the limit of the compare page. A bar then shows:

  • "Config diff": the diff of the selected runs, oldest first, inline above the table.
  • "Compare runs": opens /compare?runs=… with the selected runs.
  • "Clear".

"New tag" marker. A row shows "new tag" where the image tag of a client changed from its previous run. The history API has the image tag, not the digest. Under a floating tag such as :master, a new image does not change the tag, so the marker cannot show it. The expanded row diff shows the digest. A marker on a digest change needs a new index column, so it is a possible follow-up.

Client card click. With all clients shown, a click on a card now shows only that client. Before, the click hid it. With a filter on, a click adds or removes a client, as before. Removing the last client clears the filter.

Tests

  • New tests for sortHistoryRuns (sort per column, a missing value last, the newest run first in a tie) and previousRuns.
  • The UI has 133 tests, and all pass. tsc and eslint report no errors.
  • I checked the page against the prod API, at desktop and phone width:
    • The sort by MGas/s works.
    • A row expands to the diff to the previous run. A nethermind row shows the image digest that changed at its regression run.
    • Two selected reth runs show "The configurations are the same". They have the same digest, version and host.
    • The client cards go all → geth → geth + reth → reth → all.
    • The regressions tab still expands its rows with the shared view.

@redpandabot redpandabot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adds URL-backed sorting to the test history runs table, row expansion showing the config diff to the previous run (shared with the regressions tab as PreviousRunDiff), multi-select config diff/compare, and fixes the client card click. The refactor faithfully preserves the old RegressionDetail behavior, the sort/tie/missing-value semantics match the tests (verified with a scratch run), and all prop plumbing against ConfigDiff, the hooks, and the route (which has no validateSearch, so sort/dir persist) checks out. No real problems found.


Reviewed 7 changed file(s) @ 9b3b06c9 — no blocking issues found.
"Slow is smooth, smooth is fast." — Navy SEALs

@redpandabot

redpandabot Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

CI failed @ 3ad10133

All five failed jobs in the 'Check - CI (Github Action)' workflow died in the shared composite action step 'Setup Podman and CRIU' (.github/actions/dependencies/action.yaml, install at line 116): apt-get install -y criu failed with exit code 100 because the Launchpad PPA https://ppa.launchpadcontent.net/criu/ppa/ubuntu returned HTTP 503 on index and/or the criu_4.3-1ppa1.24.04_amd64.deb download. The PR diff touches only ui/ files, and the same failure appears on other PR branches (e.g. run 39620924096 for PR #360) and on an earlier run of this same branch (39623529683), with the last workflow success at 11:16 UTC — a Launchpad PPA outage, not a PR regression. Minimal fix: re-run once the PPA recovers; optional hardening is a retry/--fix-missing fallback around the install at .github/actions/dependencies/action.yaml:116.

  • Check - CI Github Action / pre-runs — infrastructure — apt-get install -y criu failed (exit code 100): the criu PPA index fetch returned 503 Service Unavailable (log lines 213, 232), so 'E: Package 'criu' has no installation candidate' (log line 241). (.github/actions/dependencies/action.yaml:116) — Re-run the workflow once the Launchpad criu PPA recovers; optionally add a retry/--fix-missing fallback around the criu install.
  • Check - CI Github Action / podman — infrastructure — apt-get install -y criu failed (exit code 100): PPA index fetch returned 503 (log line 296), leading to 'E: Package 'criu' has no installation candidate' (log line 324). (.github/actions/dependencies/action.yaml:116) — Re-run the workflow once the Launchpad criu PPA recovers; optionally add a retry/--fix-missing fallback around the criu install.
  • Check - CI Github Action / state-actor — infrastructure — apt-get install -y criu failed (exit code 100): PPA index fetch returned 503 (log lines 197, 231), leading to 'E: Package 'criu' has no installation candidate' (log line 241). (.github/actions/dependencies/action.yaml:116) — Re-run the workflow once the Launchpad criu PPA recovers; optionally add a retry/--fix-missing fallback around the criu install.
  • Check - CI Github Action / podman-checkpoint-restore — infrastructure — apt-get install -y criu failed (exit code 100): the criu package download returned 503 — 'E: Failed to fetch .../criu_4.3-1ppa1.24.04_amd64.deb 503' (log line 322) then 'E: Unable to fetch some archives' (line 323). (.github/actions/dependencies/action.yaml:116) — Re-run the workflow once the Launchpad criu PPA recovers; optionally add a retry/--fix-missing fallback around the criu install.
  • Check - CI Github Action / docker — infrastructure — apt-get install -y criu failed (exit code 100): the criu package download returned 503 — 'E: Failed to fetch .../criu_4.3-1ppa1.24.04_amd64.deb 503' (log line 322) then 'E: Unable to fetch some archives' (line 324). (.github/actions/dependencies/action.yaml:116) — Re-run the workflow once the Launchpad criu PPA recovers; optionally add a retry/--fix-missing fallback around the criu install.

Diagnosed Check - CI Github Action @ 3ad10133
"Slow is smooth, smooth is fast." — Navy SEALs

The runs table of a test history had no sort and no way to see what
changed between two runs.

- The columns Time, Client, MGas/s, Duration, Reject time and Gas used
  sort on a click. The sort is in the URL (sort, dir). A run with no
  value comes last in both directions.
- A row expands to the config diff to the previous run of its client,
  with the "previous run on the same host" option. This is the view of
  the regressions tab, now a shared PreviousRunDiff component.
- A checkbox selects 2-5 runs. The selected runs show their config
  diff inline, or open on the compare page.
- A "new tag" marker shows where the image tag of a client changed.
  The history has the tag, not the digest, so the row diff shows a new
  image under a floating tag such as :master.
- With all clients shown, a click on a client card shows only that
  client. Before, the click hid it.
@skylenet
skylenet force-pushed the feat/history-table-config-diff branch from 9b3b06c to 3ad1013 Compare October 21, 2026 17:17
@skylenet
skylenet merged commit 57c6631 into master Oct 21, 2026
3 of 8 checks passed
@skylenet
skylenet deleted the feat/history-table-config-diff branch October 21, 2026 17:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant