build: run the browser e2e suites in CI (closes #259) #291
Open
clawbot
wants to merge 1 commits from
issue-259-e2e-in-ci into next
pull from: issue-259-e2e-in-ci
merge into: sneak:next
sneak:main
sneak:issue-275-site-approval-race
sneak:issue-188-dod-assertions
sneak:issue-152-eslint
sneak:next
sneak:issue-271-concurrent-nonce
sneak:issue-280-handlerpc-catch
sneak:fix/issue-153-browser-api-compat
sneak:chore/token-list-enrichment
sneak:feat/issue-131-transaction-view-layout
sneak:fix/116-timestamps-include-timezone
sneak:feature/expanded-warnings
sneak:fix/cross-wallet-duplicate-detection
sneak:feature/copy-flash-feedback
sneak:feature/issue-82-new-address-warning
sneak:feature/82-warn-new-address
sneak:issue-99-block-number-external-link
sneak:issue-99-block-number-styling
sneak:feature/82-zero-history-warning
sneak:fix/issue-99-block-number-link-copy
sneak:fix/99-block-number-clickable
sneak:fix/87-consistent-error-display-v2
sneak:fix/87-consistent-error-display
sneak:fix/consistent-error-display
sneak:fix/77-confirm-tx-persist
sneak:fix/issue-72-address-token-tx-history
sneak:fix/70-confirm-tx-contract-display
sneak:fix/issue-58-receive-address-consistency
sneak:fix/59-transaction-view-ui-policies
sneak:fix/55-swap-show-own-address
sneak:feature/show-private-key
sneak:feat/message-signing
1 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
| 329f3e1558 |
build: run the browser e2e suites in CI (closes #259)
Nothing automatic ran either e2e suite, so every browser-level guarantee in this wallet -- WebAssembly under the shipped CSP, the recovery-phrase and private-key DOM wipes, the ConfirmTx spend gate, the dApp approval round trips -- held only when a human or an agent remembered to run it by hand. .gitea/workflows/e2e.yml adds two jobs, e2e-chrome and e2e-firefox, one per browser so a Chrome failure cannot hide the Firefox result. They are separate from the check workflow: REPO_POLICIES.md caps make test at 20 seconds and script/cibuild is a docker build whose Dockerfile runs make check, so neither the cap nor the local fast path is touched. make check is byte-for-byte unchanged. Neither suite could run on the runner as it stood, and the reason is not docker-in-docker. The runner executes a job inside a container against the HOST's docker daemon, and the job's checkout lives on a docker volume rather than a host path, so `docker run -v "$PWD:/work"` is resolved by the host, silently succeeds and mounts an empty directory -- measured on this runner. The runner image's node is also too old to install this repo's dependencies. Both suites therefore ship the repo to the daemon as a build context and build the extension inside the pinned image, which leaves docker as the only prerequisite on a runner or a laptop. The suites themselves are unchanged; only how the repo reaches the container is. Both scripts now build with --iidfile and run the image by ID rather than by tag, so two clones running a suite at once on the same host cannot swap it under each other. The jobs report, they do not gate. Whether a check blocks a merge is Gitea branch protection, which this repo does not configure, so a failure is a red mark a reviewer must account for. Nothing can pass vacuously: no continue-on-error, no `|| true`, and both scripts exit non-zero when docker is missing, when the image build fails and when the browser fails to start. Wiring this up measured something that has to be said rather than absorbed: the Chrome suite is flaky under load. Two of six runs of unmutated code on a loaded machine lost the approval popup out from under the dApp signing wait. It is filed as #287 and not papered over here -- no retry wrapper, no longer timeout, no weakened assertion -- and it is the reason e2e-chrome cannot become a required check yet. README and the workflow say so where a reader meets them. |