豆豆友情提示:这是一个非官方 GitHub 代理镜像,主要用于网络测试或访问加速。请勿在此进行登录、注册或处理任何敏感信息。进行这些操作请务必访问官方网站 github.com。 Raw 内容也通过此代理提供。
Skip to content

chore(e2e-tests): Use tarball symlinks for E2E tests instead of verdaccio#20386

Open
mydea wants to merge 8 commits intodevelopfrom
fn/e2e-test-linked
Open

chore(e2e-tests): Use tarball symlinks for E2E tests instead of verdaccio#20386
mydea wants to merge 8 commits intodevelopfrom
fn/e2e-test-linked

Conversation

@mydea
Copy link
Copy Markdown
Member

@mydea mydea commented Apr 17, 2026

This PR completely removes verdaccio in favor of referencing the built tarballs directly.
We rely on pnpm overrides which we inject into the test app to ensure that also transitive dependencies are correct.

This is basically instant and reduces about 20s of verdaccio/registry preparation time we used to have before each e2e test app.

How it works

  • We use a reference to a tarball for internal dependencies in our e2e tests. these are virtual files in /packed directory, e.g. "@sentry/browser": "file:../../packed/sentry-browser-packed.tgz",
  • yarn test:prepare will create/update those packed files with symlinks to the current tarballs (which have the version in their filename so we cannot just link to them directly consistently)
  • Additionally, we adjust the created test apps in the tmp dir by adding a pnpm.overrides section for all our apps pointing them to the packed folder, to ensure we get these as transitive dependencies as well

Locally, you can continue to use yarn test:run test-app-name and it will do all of that under the hood, nothing else needed (except to generate the tarballs, as before). On CI I adjusted the places to run the necessary pieces in addition to ensure everything works as expected.

Example generated test app

It effectively creates a package.json for the test app that looks like this:

{
  "name": "node-hapi",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "build": "tsc",
    "start": "node src/app.js",
    "test": "playwright test",
    "clean": "npx rimraf node_modules pnpm-lock.yaml",
    "test:build": "pnpm install",
    "test:assert": "pnpm test"
  },
  "dependencies": {
    "@hapi/boom": "10.0.1",
    "@hapi/hapi": "21.3.10",
    "@sentry/node": "file:../../packed/sentry-node-packed.tgz"
  },
  "devDependencies": {
    "@playwright/test": "~1.56.0",
    "@sentry-internal/test-utils": "link:~/my-app/dev-packages/test-utils"
  },
  "volta": {
    "extends": "~/my-app/dev-packages/e2e-tests/package.json"
  },
  "pnpm": {
    "overrides": {
      "@sentry-internal/browser-utils": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-internal-browser-utils-packed.tgz",
      "@sentry-internal/eslint-config-sdk": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-internal-eslint-config-sdk-packed.tgz",
      "@sentry-internal/eslint-plugin-sdk": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-internal-eslint-plugin-sdk-packed.tgz",
      "@sentry-internal/feedback": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-internal-feedback-packed.tgz",
      "@sentry-internal/replay": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-internal-replay-packed.tgz",
      "@sentry-internal/replay-canvas": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-internal-replay-canvas-packed.tgz",
      "@sentry-internal/typescript": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-internal-typescript-packed.tgz",
      "@sentry/angular": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-angular-packed.tgz",
      "@sentry/astro": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-astro-packed.tgz",
      "@sentry/aws-serverless": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-aws-serverless-packed.tgz",
      "@sentry/browser": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-browser-packed.tgz",
      "@sentry/bun": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-bun-packed.tgz",
      "@sentry/cloudflare": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-cloudflare-packed.tgz",
      "@sentry/core": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-core-packed.tgz",
      "@sentry/deno": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-deno-packed.tgz",
      "@sentry/effect": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-effect-packed.tgz",
      "@sentry/elysia": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-elysia-packed.tgz",
      "@sentry/ember": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-ember-packed.tgz",
      "@sentry/gatsby": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-gatsby-packed.tgz",
      "@sentry/google-cloud-serverless": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-google-cloud-serverless-packed.tgz",
      "@sentry/hono": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-hono-packed.tgz",
      "@sentry/nestjs": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-nestjs-packed.tgz",
      "@sentry/nextjs": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-nextjs-packed.tgz",
      "@sentry/node": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-node-packed.tgz",
      "@sentry/node-core": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-node-core-packed.tgz",
      "@sentry/node-native": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-node-native-packed.tgz",
      "@sentry/nuxt": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-nuxt-packed.tgz",
      "@sentry/opentelemetry": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-opentelemetry-packed.tgz",
      "@sentry/profiling-node": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-profiling-node-packed.tgz",
      "@sentry/react": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-react-packed.tgz",
      "@sentry/react-router": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-react-router-packed.tgz",
      "@sentry/remix": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-remix-packed.tgz",
      "@sentry/solid": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-solid-packed.tgz",
      "@sentry/solidstart": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-solidstart-packed.tgz",
      "@sentry/svelte": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-svelte-packed.tgz",
      "@sentry/sveltekit": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-sveltekit-packed.tgz",
      "@sentry/tanstackstart": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-tanstackstart-packed.tgz",
      "@sentry/tanstackstart-react": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-tanstackstart-react-packed.tgz",
      "@sentry/types": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-types-packed.tgz",
      "@sentry/vercel-edge": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-vercel-edge-packed.tgz",
      "@sentry/vue": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-vue-packed.tgz",
      "@sentry/wasm": "file:~/my-app/dev-packages/e2e-tests/packed/sentry-wasm-packed.tgz"
    }
  }
}

then installs this normally with the regular registry.

@mydea mydea self-assigned this Apr 17, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 17, 2026

size-limit report 📦

Path Size % Change Change
@sentry/browser 25.88 kB - -
@sentry/browser - with treeshaking flags 24.35 kB - -
@sentry/browser (incl. Tracing) 43.77 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 45.47 kB - -
@sentry/browser (incl. Tracing, Profiling) 48.7 kB - -
@sentry/browser (incl. Tracing, Replay) 82.89 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 72.4 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 87.58 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 99.83 kB - -
@sentry/browser (incl. Feedback) 42.7 kB - -
@sentry/browser (incl. sendFeedback) 30.55 kB - -
@sentry/browser (incl. FeedbackAsync) 35.55 kB - -
@sentry/browser (incl. Metrics) 27.16 kB - -
@sentry/browser (incl. Logs) 27.29 kB - -
@sentry/browser (incl. Metrics & Logs) 27.98 kB - -
@sentry/react 27.62 kB - -
@sentry/react (incl. Tracing) 46.01 kB - -
@sentry/vue 30.7 kB - -
@sentry/vue (incl. Tracing) 45.58 kB - -
@sentry/svelte 25.89 kB - -
CDN Bundle 28.55 kB - -
CDN Bundle (incl. Tracing) 44.82 kB - -
CDN Bundle (incl. Logs, Metrics) 29.93 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 45.91 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 68.83 kB - -
CDN Bundle (incl. Tracing, Replay) 81.78 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 82.85 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 87.29 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 88.36 kB - -
CDN Bundle - uncompressed 83.4 kB - -
CDN Bundle (incl. Tracing) - uncompressed 134.03 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 87.55 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 137.44 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 210.91 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 251.26 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 254.66 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 264.18 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 267.56 kB - -
@sentry/nextjs (client) 48.54 kB - -
@sentry/sveltekit (client) 44.18 kB - -
@sentry/node-core 57.97 kB +0.01% +5 B 🔺
@sentry/node 174.81 kB +0.01% +6 B 🔺
@sentry/node - without tracing 97.93 kB +0.03% +23 B 🔺
@sentry/aws-serverless 115.16 kB +0.01% +8 B 🔺

View base workflow run

@mydea mydea marked this pull request as ready for review April 20, 2026 08:23
Comment thread dev-packages/e2e-tests/ciPnpmOverrides.ts Outdated
Comment thread dev-packages/e2e-tests/lib/pnpmOverrides.ts
Comment thread dev-packages/e2e-tests/lib/syncPackedTarballSymlinks.ts
Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit aad44f0. Configure here.

Comment thread dev-packages/e2e-tests/lib/copyToTemp.ts Outdated
@mydea mydea force-pushed the fn/e2e-test-linked branch from aad44f0 to 4f79dac Compare April 20, 2026 09:01
Copy link
Copy Markdown
Member

@JPeer264 JPeer264 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is amazing. It works like a charm. This is now perfect to resurrect #20056

Copy link
Copy Markdown
Member

@logaretm logaretm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice one, I was wondering if it handled transitive deps and it does with the overrides 👍

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.

3 participants