Repository navigation
Commit dd3f550
authored
* test(workbench): select the Playwright browser via AGENT_BUNDLE_PLAYWRIGHT_CHANNEL and keep traces on CI failures
Every Workbench browser suite hard-coded `channel: 'chrome'`, so CI tested
whatever Google Chrome the runner image shipped that week while Playwright
stayed pinned (#576). All 31 sites now read one shared value:
- tests/support/browser-launch-options.ts (new leaf) exports
`browserLaunchOptions`, selected by AGENT_BUNDLE_PLAYWRIGHT_CHANNEL:
unset/empty or `chrome` -> `{ channel: 'chrome' }` (local default,
unchanged); `chromium` -> `{}` (Playwright's bundled Chromium for the
installed Playwright version; CI sets this); anything else throws at
module load. It is a leaf because capture-runtime-playground.mjs cannot
load workbench-e2e.ts (`test.extend` needs a running Rstest worker).
- tests/support/workbench-e2e.ts re-exports it, uses it in the shared `e2e`
fixture, and adds `browserTrace`: `retain-on-failure` when CI=true, else
undefined so RSTEST_PLAYWRIGHT_TRACE keeps working (@rstest/playwright
reads that variable only when `trace` is undefined). Failed tests land in
`.rstest/playwright-traces/<test-name>-<hash>/{trace.zip,trace-summary.json,debug.md}`
relative to the Rstest root (the repo root); `.rstest/` is now gitignored.
- The 10 `test.extend` forks swap the literal for `browserLaunchOptions` and
add `trace: browserTrace`; the 11 raw `chromium.launch` suites (20 calls)
and the nightly capture script pass `browserLaunchOptions`.
Note for the `chromium` mode: rstest.worker-isolation.ts points
XDG_CACHE_HOME at an empty per-worker directory and Playwright derives its
browsers directory from that variable on Linux, so workers only find the
bundled build when PLAYWRIGHT_BROWSERS_PATH names the real install
(~/.cache/ms-playwright). Branded Chrome is a system install and unaffected.
* ci: split Verify into a fast leg and two integration shards behind the required gate; pin the browser; retry setup; schedule the nightly pools (#576)
Verify used to run the four Rstest pools serially per Node version (13.8 min
on a PR, 66% of it the integration pool). It is now a `leg` × `node-version`
matrix — `fast` (build, typecheck, lint, unit, route-unit, projection) plus
`integration-1|2` (`rstest --shard N/2` over rstest.integration.config.ts) —
fanned into the unchanged required context "Verify gate", which now fails on
a failed, cancelled, or non-docs-only skipped matrix. The fast leg runs
scripts/verify-rstest-shards.mjs, which proves the shards are disjoint and
cover every file `rstest list` reports for the pool. The shard step passes
`--shard` without a `--` separator (rstest's parser drops everything after
one, so the whole pool ran on both shards) and fails unless rstest prints its
"Running shard i of N" banner.
PRs and merge-queue entries run every leg on Node 24 plus the fast leg on
Node 26; main pushes and manual dispatches run every leg on 22.19.0/24/26.
.github/actions/setup-workspace replaces every pnpm/setup + install block:
pnpm/setup@v2 is retried once (its first network call is the registry fetch
that returned 504 on eight runs on 2026-09-04), `pnpm install
--frozen-lockfile` up to three times, and browser-driving jobs get
`pnpm exec playwright install chromium`. Workbench browser suites select
the browser through AGENT_BUNDLE_PLAYWRIGHT_CHANNEL (chromium in CI, branded
Chrome locally) and keep Playwright traces on failure under CI, uploaded as
artifacts by every browser-driving job. rstest.worker-isolation.ts pins
PLAYWRIGHT_BROWSERS_PATH to the registry Playwright resolves before it
redirects XDG_CACHE_HOME, so the bundled build is found inside workers.
nightly.yml (schedule + dispatch) hosts the packed release matrix, the
evidence pool, and MCP conformance as independent jobs; the manual-only
mcp-conformance.yml is folded into it. examples-check runs examples/mcp-app's
browser-app suite. native-host-smoke runs each pool's script with its own
files instead of `pnpm test -- <files>`, which filtered nothing.
* ci: fail the shard step on a failed rstest (pipefail) and match the coloured shard banner; launch the pinned browser as channel 'chromium'
- The shard step's `run:` used the default `bash -e` shell, so `pnpm … | tee`
returned tee's status and a failed rstest fell through to the banner
check, which then misreported the failure as a dropped --shard flag. The
step now sets `pipefail` explicitly and strips ANSI codes before matching
the banner rstest prints in colour under GITHUB_ACTIONS.
- `AGENT_BUNDLE_PLAYWRIGHT_CHANNEL=chromium` launches `channel: 'chromium'`
(the full Chromium build in the new headless mode branded Chrome uses)
instead of the chromium_headless_shell a bare headless launch picks: the
shell reports the MCP App sandbox's srcdoc frames differently and both
mcp-app-real.e2e frame-URL polls time out under it (first CI run of #583).
- examples-real.e2e's error ledger now allows the aborted
GET /api/artifacts/epochs/<id>: the MCP page inspects the active epoch
under an AbortController it aborts on unmount, and Chromium 151 observes
that designed cancellation where Chrome 152 never did.
- The local gate's Verify legs run test:route-unit and test:projection too,
as the hosted fast leg does (self-review finding).
* ci: check the shard banner with one grep — under pipefail, grep -q exiting early gave sed SIGPIPE (141) and read as a missing banner
1 parent b75073b commit dd3f550
41 files changed
Lines changed: 1074 additions & 272 deletions
File tree
- .github
- actions/setup-workspace
- workflows
- docs
- packages
- agent-bundle/tests
- workbench
- scripts
- tests
- support
- scripts
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
42 | | - | |
| 42 | + | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
| 45 | + | |
50 | 46 | | |
51 | 47 | | |
52 | 48 | | |
| |||
0 commit comments