Commit Graph
19 Commits
Author SHA1 Message Date
Jakob Ackermann 37e27bb22e [saas-e2e] reduce disk IO and webpack overhead (#36997)
* [monorepo] reduce writes from chrome in cypress

Chrome puts its shared memory in /dev/shm, and docker's default 64MB is far
too small for it - which is why Cypress passes --disable-dev-shm-usage,
spilling those segments to files on the container's writable layer instead.
Under one spec that is a few hundred MB of write-then-delete churn; under the
CI fan-out it was most of the disk bandwidth on the whole box.

So every service built from dockerfiles/cypress gets shm_size 1gb and every
cypress config drops the flag again: the SaaS e2e service, web's CI and local
component-test services plus its standalone cypress one, and server-ce's e2e
and native cypress services. Both e2e-open variants inherit the setting
through `extends`; the native one is a service of its own, and would be left
running Chrome against 64MB once the flag is gone.

* [monorepo] adopt cypress-pnp-reporter

Materializing the reporter packages copied 267 packages / 3779 files
(59MB) into /tmp on every container start, once per spec. Resolving them
through PnP inside Cypress's Electron process instead drops that to
zero: the entrypoint shell went from 55.6MB of write_bytes to 0.

* [web] serve built assets from a prepared buffer between builds

Serving a chunk cost ~2ms whatever its size, and an editor page pulls ~144
of them, so webpack-dev-server burned 2-3 cores through an e2e run purely
answering requests for output that had not changed since the last build.

It is not bytes: cutting the bundle 2.6x with a cheaper devtool moved CPU
by 8%, and an empty 304 cost nearly as much as the full body. It is the
per-request work - reading the asset out of the in-memory filesystem and
re-hashing the whole body for a strong ETag, on every request.

Three things a build does that this has to respect, each found by tracing
the hooks rather than by reading them:

- `done` fires twice per build, for the compilation and for the manifest,
  both with the same hash. A flag would have been cleared by the second
  while the first was still running, so the gate is a counter.
- An incremental `done` reports only the assets it rewrote - 16, not 630 -
  so asset names accumulate. Resetting them on `invalid` left the
  manifest's two behind and nothing was served from here again.
- webpack-dev-middleware holds requests during a rebuild. This sits in
  front of it, so it steps aside for that window and drops the cache when
  a rebuild starts. Whether a response can be kept is then decided as it
  ends rather than as it began: an epoch bumped on `invalid` names the
  build its bytes were read from, and only a response from the current
  build with no rebuild in flight is stored. A rebuild starting
  mid-response can no longer write the previous build's bytes in behind
  the cache being dropped, which eviction by asset name could not catch
  anyway - an incremental build does not name the assets it left alone.

Measured on the editor entrypoint, 16 concurrent clients:
0.26-0.31s -> 0.045-0.050s of webpack CPU per page load, and 0.0455s
immediately after a rebuild. Same chunk graph, byte-identical output.

GitOrigin-RevId: 08b4ab2d665414069bc01b4763dd64faa9b4e5cb
2026-09-17 12:07:28 +00:00
Andrew Rumble da3adace36 Merge pull request #34850 from overleaf/acf-ar-yarn-pnp-redux
[monorepo] yarn pnp redux

GitOrigin-RevId: fb04cab879b04ead2665b5e985a44053ceea33f3
2026-09-17 11:35:26 +00:00
Anna Claire Fields 7035a2e025 Revert "Acf pnp migration master" (#34709)
GitOrigin-RevId: ec7d63e1212e05dd6dfc7a0ddf785c11eca76ad6
2026-06-17 08:07:56 +00:00
Anna Claire Fields 8f07308342 Acf pnp migration master (#34040)
GitOrigin-RevId: 418eab9bc733f27a6e0f8f04a2a8e21c2f5a491f
2026-06-17 08:07:16 +00:00
Anna Claire Fields 0d64a88a46 Yarn 4 Migration (#32253)
Migrates the Overleaf monorepo package manager from npm (v11) to Yarn 4 (v4.9.1) using node-modules linker mode.

GitOrigin-RevId: 50d32ab01955c15e29679eff9e9e9cfb897fab2d
2026-04-28 08:52:37 +00:00
Mathias Jakobsen 1d37483e73 Merge pull request #32984 from overleaf/mj-test-runner-cypress-env
[skills] Describe cypress environment variables for running specific cypress tests

GitOrigin-RevId: db64ed3f0a4d9ecbe6b7d63c9275314da0df7421
2026-04-22 08:06:49 +00:00
Jakob Ackermann 49667a605b [web] tweak Jenkins pipeline following move to faster CI VMs (#29188)
* [web] tweak Jenkins pipeline following move to faster CI VMs

The webpack build time has been reduced by about 30%. Adjust the sleep
statement for delaying the webpack build accordingly.

Push the production docker image layers from the parallel steps already.
Use a shared "scratch" tag to avoid generating cruft per branch/build.

* [web] avoid sharing the cypress/downloads folder in CI

GitOrigin-RevId: 52fdf420ec04fd26e3823ff9fca8c52f7a7764d7
2025-10-30 09:07:43 +00:00
Jakob Ackermann c3c04acfea [web] add junit integration for Jenkins (#28788)
* [web] add junit integration for Jenkins

* [web] integrate junit test report for writefull into Jenkins

* [web] put all the junit test results into namespaces

GitOrigin-RevId: ba1ff07b5ea7bcfa97bb4d6bf7fa9e5291ab7b0f
2025-10-02 08:06:25 +00:00
Jakob Ackermann 8e5ebd5512 [web] disable recording of cypress videos in CI (#23530)
GitOrigin-RevId: d3a14418a69a8bc009a137e168ba679b72e7c420
2025-02-12 09:05:25 +00:00
Alf Eaton 1335baa7cd Upgrade Cypress to 13.3.0 (#15162)
GitOrigin-RevId: 94cfe15bf79b45abbe9ec94cfc873c9734da434b
2023-10-10 07:57:39 +00:00
Jakob Ackermann 9daa8f5d98 Merge pull request #15040 from overleaf/jpa-js-to-jsx
[web] rename all the JSX files to .jsx/.tsx

GitOrigin-RevId: 82056ae47e017523722cf258dcc83c8a925a28f7
2023-09-29 08:04:29 +00:00
Mathias Jakobsen 11716cbd05 Merge pull request #13020 from overleaf/mj-cypress-test-edit-separately
[web] Run cypress tests for editor separately

GitOrigin-RevId: f614fdb611ebd665aba08fc95efb3970c89a015e
2023-05-11 08:04:39 +00:00
Jakob Ackermann 3a071c247a Merge pull request #12285 from overleaf/jpa-parallel-cypress-tests
[web] run core and module cypress tests in parallel

GitOrigin-RevId: d71fb94d05a8c554623e401bec8fffca5417177b
2023-03-21 09:04:08 +00:00
Alf Eaton 0b14c55d24 Upgrade Cypress to v12 (#11011)
* Upgrade Cypress to v12.2.0
* Remove cy.unmount
* Only record video in CI
* Remove unmount definition and @cypress/react

GitOrigin-RevId: 463bc216b1debc65ad066f7c1d479724cfa062d1
2023-01-06 09:03:55 +00:00
Alf Eaton f8ddacafd0 Merge pull request #10217 from overleaf/ae-cypress-spec-pattern
Update the pattern for matching Cypress test files

GitOrigin-RevId: d41cafe0468da5b124286f2413b065f650241b7e
2022-10-31 09:04:19 +00:00
ilkin-overleaf 6452f73aab Merge pull request #9050 from overleaf/ii-cypress-artifacts
Upload cypress artifacts to Google bucket

GitOrigin-RevId: e43ab9259f2cd4030d5edbf35825251bc2804e45
2022-08-01 08:03:19 +00:00
Alf Eaton 054b0e2e28 Merge pull request #8583 from overleaf/ae-cypress-retries
Only retry Cypress tests in run mode

GitOrigin-RevId: e862f8e88e9fe970a5c2b9142c05d8b648ac4b1e
2022-06-29 08:04:43 +00:00
Alf Eaton 2bd7bb449f Merge pull request #8523 from overleaf/jpa-cypress-retries
[web] enable 3 retries for all cypress tests

GitOrigin-RevId: 9624baeae66cfcf770986920250a11284787f51d
2022-06-24 08:03:56 +00:00
Alf Eaton 716f186fed Upgrade Cypress to v10 (#8322)
GitOrigin-RevId: 856c523a4ca34f8ccdc38067cef6fcd8a5c20250
2022-06-08 08:03:35 +00:00