@@ -343,6 +343,14 @@ jobs:
343343 run : pnpm run lint:es-compatibility
344344 - name : Lint types
345345 run : pnpm run lint:types
346+ - name : Check for circular dependencies
347+ run : pnpm run circularDepCheck
348+ - name : Check for dts files that reference stuff in the temporary build folder
349+ run : |
350+ if grep -r --include "*.d.ts" --exclude-dir ".nx" 'import("@sentry(-internal)?/[^/]*/build' .; then
351+ echo "Found illegal TypeScript import statement."
352+ exit 1
353+ fi
346354 - name : Check Playwright versions
347355 run : |
348356 version=$(node -p "require('./dev-packages/test-utils/package.json').devDependencies['@playwright/test']")
@@ -354,7 +362,8 @@ jobs:
354362 job_check_lockfile :
355363 name : Check lockfile
356364 needs : [job_get_metadata]
357- timeout-minutes : 10
365+ # `pnpm dedupe --check` fetches metadata for every package from npm, so this job can take 8+ min on PRs.
366+ timeout-minutes : 20
358367 runs-on : namespace-profile-sentry-javascript
359368 if : |
360369 needs.job_get_metadata.outputs.changed_deps == 'true' ||
@@ -406,27 +415,6 @@ jobs:
406415 - name : Check file formatting
407416 run : pnpm run format:check
408417
409- job_circular_dep_check :
410- name : Circular Dependency Check
411- needs : [job_get_metadata, job_build]
412- timeout-minutes : 10
413- runs-on :
414- namespace-profile-sentry-javascript;overrides.cache-tag=sentry-javascript${{ github.event_name == 'pull_request'
415- && '-pr' || '' }}
416- steps :
417- - name : Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
418- uses : actions/checkout@v7
419- with :
420- ref : ${{ env.HEAD_COMMIT }}
421- - name : Set up Node
422- uses : actions/setup-node@v7
423- with :
424- node-version-file : ' package.json'
425- - name : Restore caches
426- uses : ./.github/actions/restore-cache
427- - name : Run madge
428- run : pnpm run circularDepCheck
429-
430418 job_artifacts :
431419 name : Upload Artifacts
432420 needs : [job_get_metadata, job_build, job_build_layer, job_build_bundles, job_build_tarballs]
@@ -772,35 +760,8 @@ jobs:
772760 overwrite : true
773761 retention-days : 7
774762
775- job_check_for_faulty_dts :
776- name : Check for faulty .d.ts files
777- needs : [job_get_metadata, job_build]
778- runs-on :
779- namespace-profile-sentry-javascript;overrides.cache-tag=sentry-javascript${{ github.event_name == 'pull_request'
780- && '-pr' || '' }}
781- timeout-minutes : 5
782- steps :
783- - name : Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
784- uses : actions/checkout@v7
785- with :
786- ref : ${{ env.HEAD_COMMIT }}
787- - name : Set up Node
788- uses : actions/setup-node@v7
789- with :
790- node-version-file : ' package.json'
791- - name : Restore caches
792- uses : ./.github/actions/restore-cache
793- - name : Check for dts files that reference stuff in the temporary build folder
794- run : |
795- if grep -r --include "*.d.ts" --exclude-dir ".nx" 'import("@sentry(-internal)?/[^/]*/build' .; then
796- echo "Found illegal TypeScript import statement."
797- exit 1
798- fi
799-
800763 job_node_integration_tests :
801- name :
802- Node (${{ matrix.node }})${{ (matrix.typescript && format(' (TS {0})', matrix.typescript)) || '' }} Integration
803- Tests (${{ matrix.shard }}/3)
764+ name : Node (${{ matrix.node }}) Integration Tests (${{ matrix.shard }}/3)
804765 needs : [job_get_metadata, job_build]
805766 if : needs.job_build.outputs.changed_node_integration == 'true' || github.event_name != 'pull_request'
806767 runs-on :
@@ -812,19 +773,6 @@ jobs:
812773 matrix :
813774 node : [20.19, 22, 24, 26]
814775 shard : [1, 2, 3]
815- typescript :
816- - false
817- include :
818- # Only check typescript for latest version (to streamline CI)
819- - node : 24
820- typescript : ' 5.0'
821- shard : 1
822- - node : 24
823- typescript : ' 5.0'
824- shard : 2
825- - node : 24
826- typescript : ' 5.0'
827- shard : 3
828776 steps :
829777 - name : Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
830778 uses : actions/checkout@v7
@@ -850,11 +798,6 @@ jobs:
850798 - name : Restore caches
851799 uses : ./.github/actions/restore-cache
852800
853- - name : Overwrite typescript version
854- if : matrix.typescript == '5.0'
855- run : node ./scripts/use-ts-5_0.js
856- working-directory : dev-packages/node-integration-tests
857-
858801 - name : Run integration tests
859802 working-directory : dev-packages/node-integration-tests
860803 run : pnpm run test --shard=${{ matrix.shard }}/3
@@ -1083,9 +1026,10 @@ jobs:
10831026 if :
10841027 always() && needs.job_build_tarballs.result == 'success' && needs.job_build.outputs.e2e-matrix !='{"include":[]}'
10851028 needs : [job_get_metadata, job_build, job_build_layer, job_build_tarballs]
1029+ # Most apps finish in under a minute on 4 vCPUs, so they run on 2. Apps that take longer set `sentryTest.runner`.
10861030 runs-on :
1087- namespace-profile-sentry-javascript;overrides.cache-tag=sentry-javascript-e2e${{ github.event_name ==
1088- ' pull_request' && '-pr' || '' }}
1031+ ${{ matrix.runner || ' namespace-profile-sentry-javascript-small' }} ;overrides.cache-tag=sentry-javascript-e2e${{
1032+ github.event_name == 'pull_request' && '-pr' || '' }}
10891033 timeout-minutes : 15
10901034 env :
10911035 # We just use a dummy DSN here, only send to the tunnel anyhow
@@ -1115,9 +1059,10 @@ jobs:
11151059 runtime : ${{ matrix.runtime }}
11161060 deno-version : ${{ matrix.deno-version }}
11171061
1118- # Installs Playwright while the app builds. Keep it right before the build: the runner sets up a background
1119- # composite action's steps from the job's shared `github` context, which fails with "Collection was modified" if
1120- # a foreground step starts at that moment. Starting next to `download-artifact` also made it fail to read the event file.
1062+ # Installs Playwright while the app installs and builds. Keep it right before the install: the runner sets up a
1063+ # background composite action's steps from the job's shared `github` context, which fails with "Collection was
1064+ # modified" if a foreground step starts at that moment. Starting next to `download-artifact` also made it fail to
1065+ # read the event file.
11211066 - name : Install Playwright
11221067 id : install-playwright
11231068 background : true
@@ -1126,6 +1071,23 @@ jobs:
11261071 browsers : chromium
11271072 cwd : dev-packages/e2e-tests/test-applications/${{ matrix.test-application }}
11281073
1074+ # Every build command runs `pnpm install`, so installing first makes that a no-op. Some downloads from the npm
1075+ # registry crawl at tens of kB/s for the whole 7 minutes of the build step, and pnpm does not give up on a slow
1076+ # download. Another attempt reuses what is already in the store and opens new connections.
1077+ # The hoisted variant installs with another node linker, so installing first would only redo the install.
1078+ - name : Install E2E app dependencies
1079+ if : ${{ !contains(matrix.build-command, 'hoisted') }}
1080+ working-directory : ${{ runner.temp }}/test-application
1081+ timeout-minutes : 7
1082+ run : |
1083+ for attempt in 1 2; do
1084+ timeout 150 pnpm install && exit 0
1085+ echo "::warning::pnpm install attempt $attempt failed or did not finish in 150 s, retrying"
1086+ done
1087+ pnpm install
1088+ env :
1089+ SENTRY_E2E_WORKSPACE_ROOT : ${{ github.workspace }}
1090+
11291091 - name : Build E2E app
11301092 working-directory : ${{ runner.temp }}/test-application
11311093 timeout-minutes : 7
@@ -1216,7 +1178,6 @@ jobs:
12161178 job_lint,
12171179 job_check_lockfile,
12181180 job_check_format,
1219- job_circular_dep_check,
12201181 job_size_check,
12211182 ]
12221183 # Always run this, even if a dependent job failed
0 commit comments