Skip to content

ci(e2e): scoped e2e on staging PRs, full suite after each merge to big-release - #836

Merged
thcp merged 2 commits into
big-releasefrom
ci/e2e-cadence
Oct 22, 2026
Merged

thcp merged 2 commits into
big-releasefrom
ci/e2e-cadence

Conversation

@thcp

@thcp thcp commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator

Closes #835

What changed

  • PR to main, push to main, release: full suite, as before.
  • PR to any other base: smoke + changed specs + mapped specs. A hub module (former full source entries: main.js, state.js, mixer.js, catalog.js, index.html, app/api/jobs.py, stems.py, app/core/**, ...) or an unmapped file under static/ or app/ now adds a fixed core set (17 specs) instead of everything. uv.lock and pyproject.toml add core too.
  • Full suite on a non-main PR only for a change to how the suite runs: playwright.config.mjs, tests/e2e/helpers*, serve.sh, seed.py, package*.json, the three e2e workflows, the selector, spec-map.json, or unmapped code under tests/e2e/.
  • New e2e-full.yml: full suite on every push to big-release, nightly (04:17 UTC) on big-release, and workflow_dispatch with a ref input.
  • New reusable e2e.yml (workflow_call, inputs mode, base-ref, checkout-ref) holds the steps once. Same pinned SHAs, permissions: {}, no secrets.
  • Concurrency: a new push to a PR cancels that PR's older e2e run. Pushes, releases, nightly and manual runs are never cancelled. timeout-minutes: 30 per shard.

What did not change

  • Application code, specs, uv.lock, package files. Three shards, --pass-with-no-tests.
  • Check names gain a prefix: frontend-e2e / frontend-e2e (1) to (3). A reusable workflow always prefixes the caller job. No branch protection or ruleset requires these names today (checked).

Real diffs, before and after

Diff Files Before After
#806 (queue.js, catalog.js) 5 FULL 105 30 (core), includes queue-progress
#820 7 FULL 105 59 (core)
#821 2 47 47
#823 8 5 5
#828 (uv.lock) 4 5 22 (core)
#819, #830, #831 7 to 19 FULL 105 FULL 105 (edit spec-map.json)
#829 19 FULL 105 FULL 105 (edits helpers.mjs)
#822 33 FULL 105 FULL 105 (edits seed.py)
main...big-release 331 FULL FULL (PR to main)

npx playwright test --list <selected> matches the selector exactly for #806 (30 files, 200 tests) and #820 (59 files, 465 tests). Full suite: 724 tests in 105 files. Core + smoke alone: 159 tests in 22 files.

Trade-off

A non-main PR can pass while a spec outside its core and mapped sets breaks. The push to big-release run catches it on the merge commit, minutes later.

Limits

  • The nightly schedule only starts once e2e-full.yml reaches main. GitHub runs scheduled workflows from the default branch, and the job checks out big-release explicitly for that reason.
  • Neither concurrency nor the timeout helps a hosted runner GitHub never assigns (queue time does not count toward the timeout). Fix by hand: re-run the job, or gh run cancel <id> then gh run rerun <id> --failed.
  • This PR changes ci.yml, so its own CI runs the full suite. Expected.

thcp added 2 commits October 22, 2026 17:52
An unmapped file under static/ or app/, and the shared modules that used to be in the map's full list, now add a fixed core set of 17 specs on top of smoke and the mapped specs. The whole suite runs only for a change to how the suite runs. uv.lock and pyproject.toml add the core set. The selector takes --mode full|scoped from the workflow.
…to big-release

e2e.yml holds the steps once. ci.yml calls it for pull requests (scoped unless the base is main) and for pushes to main and releases (full). e2e-full.yml calls it in full mode on every push to big-release, nightly on big-release, and by hand on any ref. A new push to a pull request cancels its older e2e run; nothing else is cancelled. Each shard has a 30 minute timeout.

Closes #835
@thcp
thcp marked this pull request as ready for review October 22, 2026 17:56
@thcp
thcp merged commit 6c3cf58 into big-release Oct 22, 2026
9 of 10 checks passed
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