openhands
ecd8e5852c
perf(build): keep test suites out of the image and cache CI builds durably
...
Three build-time improvements, all measured on this host.
The build context no longer ships the test suites. `next build` type-checks
the whole project, so `e2e/` and `integration/` in the context made the image
build fail on a type error in test code and pulled @playwright/test, vitest,
msw, testcontainers and drizzle-kit into the image. The CI runs those suites
on the host. Type-check time in the build drops from 2.2s to 1.3s, and a
contract test now fails if application code ever imports from those folders.
The CI now exports the build cache to a directory outside the runner
workspace: /var/cache/epicnext-cms-buildcache for the release and a separate
map for branch preflights, so a branch can never feed the release cache. The
workspace is wiped after every job and `docker builder prune` runs after
every release, so the next build started with an empty cache and downloaded
all 493 packages again (measured: reused 0, downloaded 493). With the
durable export the frozen dependency layer is reused (measured: reused 493,
downloaded 0) even after a full prune. A cache directory that is not
writable only produces a warning; the release is never blocked.
Investigated the remaining ~30s of Next.js build tracing: excluding the
dev-only packages with `outputFileTracingExcludes` made it slower (35s vs
30s), because the traced output was already minimal (5 packages). The cost
is Next's own page-config collection and file tracing over 329 routes, not
the dependency set, so no configuration was kept.
2026-10-21 19:29:50 +02:00
..
2026-10-12 17:42:19 +02:00
2026-10-18 19:20:38 +02:00
2026-07-13 21:57:41 +02:00
2026-09-13 19:24:43 +02:00
2026-10-15 16:39:45 +02:00
2026-09-13 19:24:43 +02:00
2026-10-18 14:50:51 +02:00
2026-08-25 22:26:05 +02:00
2026-10-18 19:20:38 +02:00
2026-09-13 19:24:43 +02:00
2026-09-21 18:37:39 +02:00
2026-07-26 20:28:11 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-08-02 11:46:43 +02:00
2026-07-26 20:28:11 +02:00
2026-10-09 16:19:48 +02:00
2026-09-21 18:37:39 +02:00
2026-09-05 20:08:19 +02:00
2026-09-21 18:37:39 +02:00
2026-09-20 12:29:01 +02:00
2026-09-21 18:37:39 +02:00
2026-09-06 17:25:04 +02:00
2026-10-12 17:42:19 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-09 21:14:10 +02:00
2026-09-21 18:37:39 +02:00
2026-09-06 17:17:30 +02:00
2026-09-22 22:22:51 +02:00
2026-10-02 17:16:03 +02:00
2026-09-21 18:37:39 +02:00
2026-10-09 16:19:48 +02:00
2026-09-25 19:47:10 +02:00
2026-09-25 19:47:10 +02:00
2026-09-25 18:42:23 +02:00
2026-09-30 15:15:34 +02:00
2026-09-21 18:37:39 +02:00
2026-09-09 19:36:15 +02:00
2026-09-09 19:36:15 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 00:36:55 +02:00
2026-09-21 18:37:39 +02:00
2026-09-13 18:33:45 +02:00
2026-07-18 20:31:18 +02:00
2026-10-18 14:49:34 +02:00
2026-10-15 18:00:05 +02:00
2026-10-15 18:00:05 +02:00
2026-10-14 20:40:50 +02:00
2026-09-21 18:37:39 +02:00
2026-08-01 15:07:54 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-05 19:53:09 +02:00
2026-10-17 17:49:53 +02:00
2026-09-25 18:26:45 +02:00
2026-09-25 18:26:45 +02:00
2026-09-25 18:26:45 +02:00
2026-10-02 17:16:03 +02:00
2026-10-02 17:16:03 +02:00
2026-10-02 17:16:03 +02:00
2026-09-25 18:26:45 +02:00
2026-09-25 18:26:45 +02:00
2026-10-11 17:01:37 +02:00
2026-10-11 17:01:37 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 23:28:22 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-10-21 19:29:50 +02:00
2026-10-21 19:29:50 +02:00
2026-10-12 20:05:56 +02:00
2026-09-22 22:22:51 +02:00
2026-09-22 22:22:51 +02:00
2026-09-22 22:22:51 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-08-29 20:54:06 +02:00
2026-09-22 23:31:41 +02:00
2026-09-28 21:55:18 +02:00
2026-09-22 22:22:51 +02:00
2026-09-22 22:22:51 +02:00
2026-09-06 17:55:11 +02:00
2026-09-21 18:37:39 +02:00
2026-10-09 16:19:48 +02:00
2026-10-14 20:40:50 +02:00
2026-10-14 20:40:50 +02:00
2026-09-21 18:37:39 +02:00
2026-07-31 14:11:03 +02:00
2026-10-17 14:29:14 +02:00
2026-09-22 23:27:15 +02:00
2026-10-02 17:16:03 +02:00
2026-10-14 21:46:56 +02:00
2026-10-14 21:46:56 +02:00
2026-09-12 17:28:01 +02:00
2026-10-21 19:29:50 +02:00
2026-10-11 17:01:37 +02:00
2026-10-21 19:29:50 +02:00
2026-09-21 18:37:39 +02:00
2026-10-14 21:59:42 +02:00
2026-09-28 21:55:18 +02:00
2026-09-28 21:55:18 +02:00
2026-09-21 18:37:39 +02:00
2026-09-09 21:57:56 +02:00
2026-09-21 18:37:39 +02:00
2026-09-13 20:25:03 +02:00
2026-09-21 18:37:39 +02:00
2026-09-09 19:36:15 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 08:58:10 +02:00
2026-09-21 18:37:39 +02:00
2026-09-05 23:27:02 +02:00
2026-09-21 18:37:39 +02:00
2026-09-20 12:58:55 +02:00
2026-09-21 18:37:39 +02:00
2026-08-02 14:22:05 +02:00
2026-08-27 16:42:12 +02:00
2026-10-18 14:50:26 +02:00
2026-10-18 14:50:26 +02:00
2026-09-25 18:26:45 +02:00
2026-09-25 18:26:45 +02:00
2026-09-21 18:37:39 +02:00
2026-10-14 20:40:50 +02:00
2026-10-14 20:40:50 +02:00
2026-10-14 20:40:50 +02:00
2026-10-14 20:40:50 +02:00
2026-10-14 20:40:50 +02:00
2026-10-15 18:00:05 +02:00
2026-10-15 18:00:05 +02:00
2026-10-15 18:00:05 +02:00
2026-10-14 20:40:50 +02:00
2026-09-21 18:37:39 +02:00
2026-10-12 17:42:19 +02:00
2026-10-12 17:42:19 +02:00
2026-10-05 20:25:22 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-10-17 17:49:53 +02:00
2026-09-05 20:58:42 +02:00
2026-08-25 22:19:59 +02:00
2026-07-28 18:49:25 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-18 12:57:52 +02:00
2026-10-15 16:00:08 +02:00
2026-10-15 16:00:00 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 10:49:08 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 10:49:08 +02:00
2026-09-20 12:29:01 +02:00
2026-10-09 16:19:48 +02:00
2026-09-24 23:22:28 +02:00
2026-10-09 16:19:48 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-10-18 14:50:32 +02:00
2026-09-11 00:39:53 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 00:36:55 +02:00
2026-10-09 17:12:50 +02:00
2026-10-09 17:12:50 +02:00
2026-09-25 18:26:45 +02:00
2026-10-17 19:03:43 +02:00
2026-09-05 19:53:09 +02:00
2026-09-21 18:37:39 +02:00
2026-09-07 22:37:53 +02:00
2026-10-14 20:40:50 +02:00
2026-09-21 18:37:39 +02:00
2026-07-26 20:28:11 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-09-04 13:04:08 +02:00
2026-09-21 18:37:39 +02:00
2026-09-05 19:53:09 +02:00
2026-09-12 17:28:01 +02:00
2026-08-31 18:11:54 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-18 12:44:39 +02:00
2026-08-31 17:44:29 +02:00
2026-09-21 18:37:39 +02:00
2026-08-08 21:46:40 +02:00
2026-07-16 15:53:53 +02:00
2026-10-18 14:50:51 +02:00
2026-09-21 18:37:39 +02:00
2026-09-16 19:45:57 +02:00
2026-08-31 17:15:42 +02:00
2026-07-26 20:28:11 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:11:15 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-07-21 21:08:33 +02:00
2026-07-13 21:57:41 +02:00
2026-10-05 20:25:22 +02:00
2026-09-21 18:37:39 +02:00