Skip to content

ci: Cut CI cost and fix the most common flakes - #25668

Merged
joshuarli merged 8 commits into
ci/e2e-small-runnersfrom
ci/faster-and-less-flaky
Oct 22, 2026
Merged

joshuarli merged 8 commits into
ci/e2e-small-runnersfrom
ci/faster-and-less-flaky

Conversation

@sentry-junior

@sentry-junior sentry-junior Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Stacked on #25667 (2 vCPU runners for short E2E jobs). This combines the other cheap CI fixes into one PR, so a full CI run is paid only once. It supersedes #25664, #25665 and #25666. Each commit stands on its own, so any of them can be dropped or split out.

Cost and duplicate work

  • Drop the TS 5.0 Node integration shards. The scenarios run through tsx, which doesn't type-check, and the generic-ts5.0 E2E app already covers TS 5.0 types.
  • Run the circular dependency and .d.ts checks inside Lint instead of on two runners of their own, which each repeated the checkout, artifact download and install. The .d.ts check wasn't required before. Inside Lint it now blocks merging.
  • Stop Playwright's --with-deps from upgrading 24 apt packages the runner already has.
  • Keep Prisma engines on the Namespace cache volume. ci: Keep downloaded Prisma engines on the Namespace cache volume #25665 still hit the Prisma setup-hook timeouts on its first run, so this probably isn't the fix for them.
  • Cancel superseded Enforce License Compliance runs. It was the only workflow that runs on every PR push without a concurrency group. The rest already have one or run once per PR (opened, closed), where it wouldn't cancel anything.

Flakes (from 18 recent first-attempt runs of build.yml, every one of which failed)

  • replay/slowClick/mutation › "immediate mutation does not trigger slow click" failed in 7 of the 18 runs, and it's a real SDK bug. When the mutation lands in the same millisecond as the click, mutationAfter is 0, the truthiness check reads that as "no mutation", and the click is reported as a dead click. Same for scroll. The fix(replay) commit should get a changelog entry, or be split out if you'd rather ship it separately. Related: [Flaky CI]: Playwright Tests - suites/replay/slowClick/mutation/test.ts › immediate mutation does not trigger slow click #24656.
  • 17 of 19 Build E2E app failures were the 7-minute timeout, hit while pnpm downloaded one big tarball (next, workerd, @next/swc) at tens of kB/s. In the same jobs apt downloaded at 20–40 MB/s. E2E jobs now install with a 150 s limit and retry, so the second attempt opens new connections and reuses the store. This is a mitigation, not a root-cause fix.
  • aws-serverless-layer measured the 200 ms callback span as 0.1996 s twice. The threshold is now 0.19.

Still open: Prisma beforeAll timeouts (120 s) are the main Node and Bun integration flake. They don't reproduce locally, where the install and generate take about 5 s.

via @joshuarli.

--

View Junior Session [Sentry]

sentry-junior Bot and others added 8 commits October 22, 2026 18:20
The scenarios run through tsx, which strips types without checking them,
so the TypeScript version installed by use-ts-5_0.js does not change what
these jobs test. TS 5.0 type compatibility is covered by the generic-ts5.0
E2E app.

Co-Authored-By: Joshua Li <14209781+joshuarli@users.noreply.github.com>
(cherry picked from commit fddfba2)

Co-Authored-By: Joshua Li <14209781+joshuarli@users.noreply.github.com>
The Prisma suites install prisma into a tmp dir in their beforeAll hook. Its
postinstall downloads about 34 MB of engines into ~/.cache/prisma, which is
not on the cache volume, so every shard downloads them again.

Co-Authored-By: Joshua Li <14209781+joshuarli@users.noreply.github.com>
(cherry picked from commit 6552911)

Co-Authored-By: Joshua Li <14209781+joshuarli@users.noreply.github.com>
`playwright install --with-deps` names system libraries that the runner
image already has, so apt-get upgrades them to the latest Ubuntu update.
That is half of the download when the apt cache is cold.

Co-Authored-By: Joshua Li <14209781+joshuarli@users.noreply.github.com>
(cherry picked from commit b5c8b16)

Co-Authored-By: Joshua Li <14209781+joshuarli@users.noreply.github.com>
…e click

The click detector stored the time from the click to the next mutation or
scroll, and then checked that value for truthiness. When both happened in the
same millisecond the value was 0, so the click was reported as a slow click
even though the page reacted right away.

This also made the 'immediate mutation does not trigger slow click' browser
integration test flaky: it failed in 7 of the 18 recent first-attempt runs
that were sampled.

Co-Authored-By: Joshua Li <14209781+joshuarli@users.noreply.github.com>
…tly shorter

Node timers can fire up to a millisecond early, and the span measured
0.1996 s in two recent CI runs.

Co-Authored-By: Joshua Li <14209781+joshuarli@users.noreply.github.com>
Most 'Build E2E app' failures in recent runs were the 7-minute timeout, hit
while pnpm downloaded a single tarball (next, workerd, @next/swc) at tens of
kB/s. In the same jobs apt downloaded at 20-40 MB/s, so the runner's network
was fine. pnpm does not give up on a slow download, so install first with a
time limit and try again with new connections.

Co-Authored-By: Joshua Li <14209781+joshuarli@users.noreply.github.com>
Both checks ran a few seconds of work on their own runner, after the
same checkout, build artifact download and pnpm install that Lint does.

Co-Authored-By: Joshua Li <14209781+joshuarli@users.noreply.github.com>
It was the only workflow that runs on every push to a pull request without
a concurrency group. The others either have one already or run once per pull
request (opened, closed), where it would not cancel anything.

Co-Authored-By: Joshua Li <14209781+joshuarli@users.noreply.github.com>
@sentry-junior
sentry-junior Bot force-pushed the ci/faster-and-less-flaky branch from 9c10044 to 31d5095 Compare October 22, 2026 18:21
@sentry-junior
sentry-junior Bot changed the base branch from develop to ci/e2e-small-runners October 22, 2026 18:24
@joshuarli
joshuarli marked this pull request as ready for review October 22, 2026 18:27
@joshuarli
joshuarli requested review from a team as code owners October 22, 2026 18:27
@joshuarli
joshuarli requested review from Lms24, andreiborza, isaacs and logaretm and removed request for a team October 22, 2026 18:27
@joshuarli
joshuarli merged commit 71a2ea7 into ci/e2e-small-runners Oct 22, 2026
75 of 78 checks passed
@joshuarli
joshuarli deleted the ci/faster-and-less-flaky branch October 22, 2026 18:28
@github-actions

Copy link
Copy Markdown
Contributor

Optional E2E tests

Some optional checks were not successful. They do not block the merge. 3 failing, 59 successful. See the run.

Check Status
❌ CI: Optional E2E Tests / E2E nextjs-14 (latest) Test (optional) Failing after 7m Details
❌ CI: Optional E2E Tests / E2E node-anthropic-send-to-sentry (latest) Test (optional) Failing after 34s Details
❌ CI: Optional E2E Tests / E2E node-openai-send-to-sentry Test (optional) Failing after 10m Details
Successful checks
Check Status
✅ CI: Optional E2E Tests / E2E nextjs-16 (canary, webpack) Test (optional) Successful in 6m Details
✅ CI: Optional E2E Tests / E2E cloudflare-flue-send-to-sentry Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E cloudflare-workers-send-to-sentry Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E cloudflare-think (ai v6) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E node-flue Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E nextjs-15 (turbo) Test (optional) Successful in 5m Details
✅ CI: Optional E2E Tests / E2E cloudflare-agent Test (optional) Successful in 43s Details
✅ CI: Optional E2E Tests / E2E nextjs-16 (cloudflare, latest) Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E node-openai-decisions-send-to-sentry (latest) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E gen-ai-libraries Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E node-express-send-to-sentry-static Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E vue-3 (no Options API) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E node-eve (orchestrion) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E node-eve (latest) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E nextjs-16 (vinext, bun) Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E nuxt-5-sourcemaps Test (optional) Successful in 37s Details
✅ CI: Optional E2E Tests / E2E node-fastify-6 (tracer provider) Test (optional) Successful in 45s Details
✅ CI: Optional E2E Tests / E2E nuxt-4 (canary) Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E nuxt-5 Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E supabase-nextjs Test (optional) Successful in 7m Details
✅ CI: Optional E2E Tests / E2E nextjs-orpc Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E node-express-send-to-sentry Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E react-send-to-sentry Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E node-flue (latest) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E gen-ai-libraries (cloudflare) Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E node-pi-durable Test (optional) Successful in 33s Details
✅ CI: Optional E2E Tests / E2E nuxt-5-sourcemaps (static / nuxt generate) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E solidstart-2 Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E angular (canary) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E nextjs-16 (vinext) Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E cloudflare-pi-durable Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E nuxt-4-static (canary) Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E node-anthropic-send-to-sentry Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E deno (latest) Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E node-express-mcp-v1 Test (optional) Successful in 32s Details
✅ CI: Optional E2E Tests / E2E node-openai-decisions-send-to-sentry Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E cloudflare-pi-durable (latest) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E nuxt-5-sourcemaps (client source maps kept) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E tanstackstart-react-cloudflare Test (optional) Successful in 46s Details
✅ CI: Optional E2E Tests / E2E nextjs-16 (canary, turbopack) Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E nextjs-16-tunnel (cloudflare) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E node-fastify-6 Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E astro-7-static Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E vue-3 (canary) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E angular (canary) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E cloudflare-mastra Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E debug-id-sourcemaps Test (optional) Successful in 36s Details
✅ CI: Optional E2E Tests / E2E node-mastra (latest) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E react-router-7-framework-instrumentation Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E nextjs-15 (latest) Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E node-pi-durable (latest) Test (optional) Successful in 57s Details
✅ CI: Optional E2E Tests / E2E node-eve Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E astro-7 Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E node-mastra Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E node-openai-send-to-sentry (latest) Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E nuxt-3 (canary) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E cloudflare-think Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E nextjs-16-standalone (canary, turbopack) Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E nextjs-16 (deno) Test (optional) Successful in 3m Details

@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

Compared: bcae79b (PR test merge using develop at 40eff80)

Against: 40eff80 (develop) · base run #63186

✅ Baseline matches: this diff contains only this PR's changes.

Path Size % Change Change
@sentry/browser 29.91 kB - -
@sentry/browser - with treeshaking flags 28.05 kB - -
@sentry/browser - with treeshaking flags tracing without tracing 27.95 kB - -
@sentry/browser (incl. Tracing) 52.1 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 52.1 kB - -
@sentry/browser (incl. Tracing, Profiling) 55.05 kB - -
@sentry/browser (incl. Tracing, Replay) 91.85 kB +0.01% +3 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 80.72 kB +0.01% +7 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas) 96.58 kB +0.01% +3 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback) 109.52 kB +0.01% +3 B 🔺
@sentry/browser (incl. Feedback) 47.42 kB - -
@sentry/browser (incl. sendFeedback) 34.97 kB - -
@sentry/browser (incl. FeedbackAsync) 40.07 kB - -
@sentry/browser (incl. Metrics) 30.93 kB - -
@sentry/browser (incl. Logs) 31.21 kB - -
@sentry/browser (incl. Metrics & Logs) 31.84 kB - -
@sentry/react 31.74 kB - -
@sentry/react (incl. Tracing) 54.42 kB - -
@sentry/vue 38.07 kB - -
@sentry/vue (incl. Tracing) 55.03 kB - -
@sentry/svelte 29.93 kB - -
@sentry/remix (Remix 3 client bundle) 57.11 kB - -
CDN Bundle 31.67 kB - -
CDN Bundle (incl. Tracing) 52.61 kB - -
CDN Bundle (incl. Logs, Metrics) 33.87 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 54.55 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 74.8 kB +0.01% +6 B 🔺
CDN Bundle (incl. Tracing, Replay) 90.29 kB +0.01% +9 B 🔺
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 92.22 kB +0.01% +8 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) 96.43 kB +0.01% +8 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 98.38 kB +0.01% +7 B 🔺
CDN Bundle - uncompressed 93.29 kB - -
CDN Bundle (incl. Tracing) - uncompressed 156.14 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 99.84 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 162.11 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 229.91 kB +0.02% +34 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed 276.34 kB +0.02% +34 B 🔺
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 282.3 kB +0.02% +34 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 290.05 kB +0.02% +34 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 295.99 kB +0.02% +34 B 🔺
@sentry/nextjs (client) 57.3 kB - -
@sentry/sveltekit (client) 52.48 kB - -
@sentry/core/server 41.85 kB - -
@sentry/core/browser 13.81 kB - -
@sentry/node 152.96 kB - -
@sentry/node/import (ESM hook with diagnostics-channel injection) 81.58 kB -0.01% -1 B 🔽
@sentry/node - without tracing 94.57 kB - -
@sentry/node - without channel injection 133.6 kB +0.01% +1 B 🔺
@sentry/aws-serverless 102.74 kB - -
@sentry/cloudflare (withSentry) - minified 192.31 kB - -
@sentry/cloudflare (withSentry) 478.7 kB - -
@sentry/nextjs/cloudflare (withSentry) - minified 213.28 kB - -

View base workflow run

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