feat(react-router): Drop low-quality transactions via ignoreSpans
#46366
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: 'CI: Build & Test' | |
| on: | |
| push: | |
| branches: | |
| - develop | |
| - master | |
| - v9 | |
| - v8 | |
| - release/** | |
| pull_request: | |
| merge_group: | |
| types: [checks_requested] | |
| workflow_dispatch: | |
| inputs: | |
| commit: | |
| description: If the commit you want to test isn't the head of a branch, provide its SHA here | |
| required: false | |
| schedule: | |
| # Run every day at midnight (without cache) | |
| - cron: '0 0 * * *' | |
| # Cancel in progress workflows on pull_requests. | |
| # https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| env: | |
| HEAD_COMMIT: ${{ github.event.inputs.commit || github.sha }} | |
| CACHED_DEPENDENCY_PATHS: | | |
| ${{ github.workspace }}/node_modules | |
| ${{ github.workspace }}/packages/*/node_modules | |
| ${{ github.workspace }}/dev-packages/*/node_modules | |
| ~/.cache/mongodb-binaries/ | |
| # DEPENDENCY_CACHE_KEY: can't be set here because we don't have access to yarn.lock | |
| # build-output artifact paths are computed in job_build (step output from | |
| # yarn ci:print-build-artifact-paths — Nx merged outputs for build:transpile, and build:types). | |
| # upload-artifact globs drop the path through the first `*` (see upload-artifact | |
| # README). Tarballs therefore land in the artifact as <pkg>/*.tgz; download | |
| # build-tarball-output into packages/ so they resolve to packages/<pkg>/*.tgz. | |
| TARBALL_ARTIFACT_GLOB: packages/*/*.tgz | |
| TARBALL_ARTIFACT_DOWNLOAD_PATH: ${{ github.workspace }}/packages | |
| BUILD_LAYER_PATH: ${{ github.workspace }}/packages/aws-serverless/build/aws/dist-serverless | |
| # Same glob / download split as TARBALL_ARTIFACT_*: upload-artifact strips the path through | |
| # the first `*`, so bundle trees are stored as <pkg>/build/bundles/...; download into packages/. | |
| BUNDLE_ARTIFACT_GLOB: packages/*/build/bundles | |
| BUNDLE_ARTIFACT_DOWNLOAD_PATH: ${{ github.workspace }}/packages | |
| NX_CACHE_KEY: nx-Linux-${{ github.head_ref || github.ref }}-${{ github.run_id }} | |
| # https://bsky.app/profile/joyeecheung.bsky.social/post/3lhy6o54fo22h | |
| # Apparently some of our CI failures are attributable to a corrupt v8 cache, causing v8 failures with: "Check failed: current == end_slot_index.". | |
| # This option both controls the `v8-compile-cache-lib` and `v8-compile-cache` packages. | |
| DISABLE_V8_COMPILE_CACHE: '1' | |
| jobs: | |
| job_get_metadata: | |
| uses: ./.github/workflows/ci-metadata.yml | |
| name: Get CI Metadata | |
| with: | |
| head_commit: ${{ github.event.inputs.commit || github.sha }} | |
| permissions: | |
| pull-requests: read | |
| job_build: | |
| name: Build | |
| needs: job_get_metadata | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| if: | | |
| needs.job_get_metadata.outputs.changed_any_code == 'true' || | |
| needs.job_get_metadata.outputs.is_base_branch == 'true' || | |
| needs.job_get_metadata.outputs.is_release == 'true' || | |
| (needs.job_get_metadata.outputs.is_gitflow_sync == 'false' && needs.job_get_metadata.outputs.has_gitflow_label == 'false' && needs.job_get_metadata.outputs.changed_any_code == 'true') | |
| steps: | |
| - name: Check out base commit (${{ github.event.pull_request.base.sha }}) | |
| uses: actions/checkout@v6 | |
| if: github.event_name == 'pull_request' | |
| with: | |
| ref: ${{ github.event.pull_request.base.sha }} | |
| - name: 'Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})' | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Install Dependencies | |
| uses: ./.github/actions/install-dependencies | |
| id: install_dependencies | |
| - name: Check for Affected Nx Projects | |
| uses: dkhunt27/action-nx-affected-list@v6.1 | |
| id: checkForAffected | |
| if: github.event_name == 'pull_request' | |
| with: | |
| base: ${{ github.event.pull_request.base.sha }} | |
| head: ${{ env.HEAD_COMMIT }} | |
| - name: Build packages | |
| run: yarn build:ci | |
| - name: Compute build artifact paths from Nx | |
| id: nx_build_paths | |
| run: | | |
| { | |
| echo 'paths<<EOF' | |
| yarn --silent ci:print-build-artifact-paths | |
| echo 'EOF' | |
| } >> "$GITHUB_OUTPUT" | |
| - name: Store NX cache | |
| uses: actions/cache/save@v5 | |
| # Only cache this per-PR to speed up CI. | |
| if: github.event_name == 'pull_request' | |
| with: | |
| path: | | |
| .nx/cache | |
| .nx/workspace-data | |
| key: ${{ env.NX_CACHE_KEY }} | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: build-output | |
| path: ${{ steps.nx_build_paths.outputs.paths }} | |
| retention-days: 4 | |
| compression-level: 6 | |
| overwrite: true | |
| - name: Determine which test applications should be run | |
| id: matrix | |
| run: | |
| yarn --silent ci:build-matrix --base=${{ (github.event_name == 'pull_request' && | |
| github.event.pull_request.base.sha) || '' }} >> $GITHUB_OUTPUT | |
| working-directory: dev-packages/e2e-tests | |
| - name: Determine which optional E2E test applications should be run | |
| id: matrix-optional | |
| run: | |
| yarn --silent ci:build-matrix-optional --base=${{ (github.event_name == 'pull_request' && | |
| github.event.pull_request.base.sha) || '' }} >> $GITHUB_OUTPUT | |
| working-directory: dev-packages/e2e-tests | |
| outputs: | |
| dependency_cache_key: ${{ steps.install_dependencies.outputs.cache_key }} | |
| changed_node_integration: | |
| ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected, | |
| '@sentry-internal/node-integration-tests') }} | |
| changed_node_core_integration: | |
| ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected, | |
| '@sentry-internal/node-core-integration-tests') }} | |
| changed_remix: | |
| ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected, | |
| '@sentry/remix') }} | |
| changed_node: | |
| ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected, | |
| '@sentry/node') }} | |
| changed_deno: | |
| ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected, | |
| '@sentry/deno') }} | |
| changed_bun: | |
| ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected, | |
| '@sentry/bun') }} | |
| changed_bun_integration: | |
| ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected, | |
| '@sentry-internal/bun-integration-tests') }} | |
| changed_browser_integration: | |
| ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected, | |
| '@sentry-internal/browser-integration-tests') }} | |
| changed_aws_serverless: | |
| ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected, | |
| '@sentry/aws-serverless') }} | |
| e2e-matrix: ${{ steps.matrix.outputs.matrix }} | |
| e2e-matrix-optional: ${{ steps.matrix-optional.outputs.matrix }} | |
| job_build_layer: | |
| name: Build Lambda layer | |
| needs: [job_get_metadata, job_build] | |
| if: | |
| needs.job_build.outputs.changed_aws_serverless == 'true' || contains(needs.job_build.outputs.e2e-matrix, | |
| 'aws-serverless') || github.event_name != 'pull_request' | |
| timeout-minutes: 10 | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore NX cache | |
| uses: actions/cache/restore@v5 | |
| with: | |
| path: | | |
| .nx/cache | |
| .nx/workspace-data | |
| key: ${{ env.NX_CACHE_KEY }} | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Build Lambda layer | |
| run: yarn build:layer | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: build-layer-output | |
| path: ${{ env.BUILD_LAYER_PATH }} | |
| retention-days: 4 | |
| compression-level: 6 | |
| overwrite: true | |
| job_build_bundles: | |
| name: Build bundles | |
| needs: [job_get_metadata, job_build] | |
| timeout-minutes: 10 | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore NX cache | |
| uses: actions/cache/restore@v5 | |
| with: | |
| path: | | |
| .nx/cache | |
| .nx/workspace-data | |
| key: ${{ env.NX_CACHE_KEY }} | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Build bundles | |
| run: yarn build:bundle | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: build-bundle-output | |
| path: ${{ env.BUNDLE_ARTIFACT_GLOB }} | |
| retention-days: 4 | |
| compression-level: 6 | |
| overwrite: true | |
| job_check_branches: | |
| name: Check PR branches | |
| needs: job_get_metadata | |
| runs-on: ubuntu-24.04 | |
| if: github.event_name == 'pull_request' | |
| permissions: | |
| pull-requests: write | |
| steps: | |
| - name: PR is opened against master | |
| uses: mshick/add-pr-comment@e7516d74559b5514092f5b096ed29a629a1237c6 | |
| if: ${{ github.base_ref == 'master' && !startsWith(github.head_ref, 'prepare-release/') }} | |
| with: | |
| message: | | |
| ⚠️ This PR is opened against **master**. You probably want to open it against **develop**. | |
| job_size_check: | |
| name: Size Check | |
| needs: [job_get_metadata, job_build, job_build_bundles] | |
| timeout-minutes: 15 | |
| runs-on: ubuntu-24.04 | |
| if: | |
| github.event_name == 'pull_request' || needs.job_get_metadata.outputs.is_base_branch == 'true' || | |
| needs.job_get_metadata.outputs.is_release == 'true' | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Restore build bundle artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: build-bundle-output | |
| path: ${{ env.BUNDLE_ARTIFACT_DOWNLOAD_PATH }} | |
| - name: Check bundle sizes | |
| uses: ./dev-packages/size-limit-gh-action | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| # Only run comparison against develop if this is a PR | |
| comparison_branch: ${{ (github.event_name == 'pull_request' && github.base_ref) || ''}} | |
| job_lint: | |
| name: Lint | |
| # Even though the linter only checks source code, not built code, it needs the built code in order check that all | |
| # inter-package dependencies resolve cleanly. | |
| needs: [job_get_metadata, job_build] | |
| timeout-minutes: 10 | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Lint source files | |
| run: yarn lint | |
| - name: Lint for ES compatibility | |
| run: yarn lint:es-compatibility | |
| job_check_lockfile: | |
| name: Check lockfile | |
| needs: [job_get_metadata] | |
| timeout-minutes: 10 | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Check that yarn.lock is stable | |
| run: yarn install --frozen-lockfile --ignore-engines | |
| - name: Check for duplicate dependencies in lockfile | |
| run: yarn dedupe-deps:check | |
| job_check_format: | |
| name: Check file formatting | |
| needs: [job_get_metadata] | |
| timeout-minutes: 10 | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Install Dependencies | |
| uses: ./.github/actions/install-dependencies | |
| id: install_dependencies | |
| - name: Check file formatting | |
| run: yarn format:check | |
| job_circular_dep_check: | |
| name: Circular Dependency Check | |
| needs: [job_get_metadata, job_build] | |
| timeout-minutes: 10 | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Run madge | |
| run: yarn circularDepCheck | |
| job_artifacts: | |
| name: Upload Artifacts | |
| needs: [job_get_metadata, job_build, job_build_layer, job_build_bundles, job_build_tarballs] | |
| runs-on: ubuntu-24.04 | |
| # Build artifacts are only needed for releasing workflow. | |
| if: needs.job_get_metadata.outputs.is_release == 'true' | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Restore tarball artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: build-tarball-output | |
| path: ${{ env.TARBALL_ARTIFACT_DOWNLOAD_PATH }} | |
| - name: Restore build bundle artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: build-bundle-output | |
| path: ${{ env.BUNDLE_ARTIFACT_DOWNLOAD_PATH }} | |
| - name: Restore build layer artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: build-layer-output | |
| path: ${{ env.BUILD_LAYER_PATH }} | |
| - name: Archive artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: ${{ github.sha }} | |
| retention-days: 90 | |
| path: | | |
| ${{ github.workspace }}/packages/browser/build/bundles/** | |
| ${{ github.workspace }}/packages/replay-internal/build/bundles/** | |
| ${{ github.workspace }}/packages/replay-canvas/build/bundles/** | |
| ${{ github.workspace }}/packages/feedback/build/bundles/** | |
| ${{ github.workspace }}/packages/**/*.tgz | |
| ${{ github.workspace }}/packages/aws-serverless/build/aws/dist-serverless/*.zip | |
| job_browser_unit_tests: | |
| name: Browser Unit Tests | |
| needs: [job_get_metadata, job_build] | |
| timeout-minutes: 10 | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Check out base commit (${{ github.event.pull_request.base.sha }}) | |
| uses: actions/checkout@v6 | |
| if: github.event_name == 'pull_request' | |
| with: | |
| ref: ${{ github.event.pull_request.base.sha }} | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Run affected tests | |
| run: yarn test:pr:browser --base=${{ github.event.pull_request.base.sha }} | |
| if: github.event_name == 'pull_request' | |
| - name: Run all tests | |
| run: yarn test:ci:browser | |
| if: github.event_name != 'pull_request' | |
| - name: Parse and Upload Coverage | |
| if: cancelled() == false | |
| continue-on-error: true | |
| uses: getsentry/codecov-action@main | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| job_bun_unit_tests: | |
| name: Bun Unit Tests | |
| needs: [job_get_metadata, job_build] | |
| if: needs.job_build.outputs.changed_bun == 'true' || github.event_name != 'pull_request' | |
| timeout-minutes: 10 | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Run tests | |
| run: | | |
| yarn test:ci:bun | |
| job_deno_unit_tests: | |
| name: Deno Unit Tests | |
| needs: [job_get_metadata, job_build] | |
| if: needs.job_build.outputs.changed_deno == 'true' || github.event_name != 'pull_request' | |
| timeout-minutes: 10 | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Set up Deno | |
| uses: denoland/setup-deno@v2.0.3 | |
| with: | |
| deno-version: v2.1.5 | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Run tests | |
| run: | | |
| cd packages/deno | |
| yarn build | |
| yarn test | |
| job_node_unit_tests: | |
| name: Node (${{ matrix.node }}) Unit Tests | |
| needs: [job_get_metadata, job_build] | |
| timeout-minutes: 10 | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node: [18, 20, 22, 24] | |
| steps: | |
| - name: Check out base commit (${{ github.event.pull_request.base.sha }}) | |
| uses: actions/checkout@v6 | |
| if: github.event_name == 'pull_request' | |
| with: | |
| ref: ${{ github.event.pull_request.base.sha }} | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ matrix.node }} | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Run affected tests | |
| run: yarn test:pr:node --base=${{ github.event.pull_request.base.sha }} | |
| if: github.event_name == 'pull_request' | |
| env: | |
| NODE_VERSION: ${{ matrix.node }} | |
| - name: Run all tests | |
| run: yarn test:ci:node | |
| if: github.event_name != 'pull_request' | |
| env: | |
| NODE_VERSION: ${{ matrix.node }} | |
| - name: Parse and Upload Coverage | |
| if: cancelled() == false | |
| continue-on-error: true | |
| uses: getsentry/codecov-action@main | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| name: ${{ matrix.node }} | |
| job_browser_playwright_tests: | |
| name: | |
| Playwright ${{ matrix.bundle }}${{ matrix.project && matrix.project != 'chromium' && format(' {0}', | |
| matrix.project) || ''}}${{ matrix.shard && format(' ({0}/{1})', matrix.shard, matrix.shards) || ''}} Tests | |
| needs: [job_get_metadata, job_build, job_build_bundles] | |
| if: needs.job_build.outputs.changed_browser_integration == 'true' || github.event_name != 'pull_request' | |
| runs-on: ubuntu-24.04-large-js | |
| timeout-minutes: 25 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| bundle: | |
| - esm | |
| - bundle | |
| - bundle_min | |
| - bundle_logs_metrics | |
| - bundle_replay | |
| - bundle_replay_logs_metrics | |
| - bundle_tracing | |
| - bundle_tracing_logs_metrics | |
| - bundle_tracing_replay | |
| - bundle_tracing_replay_logs_metrics | |
| - bundle_tracing_replay_feedback | |
| - bundle_tracing_replay_feedback_logs_metrics | |
| - bundle_tracing_replay_feedback_logs_metrics_min | |
| project: | |
| - chromium | |
| include: | |
| # Only check all projects for full bundle | |
| # We also shard the tests as they take the longest | |
| - bundle: bundle_tracing_replay_feedback_logs_metrics_min | |
| project: 'webkit' | |
| - bundle: bundle_tracing_replay_feedback_logs_metrics_min | |
| project: 'firefox' | |
| - bundle: esm | |
| project: chromium | |
| shard: 1 | |
| shards: 4 | |
| - bundle: esm | |
| project: chromium | |
| shard: 2 | |
| shards: 4 | |
| - bundle: esm | |
| project: chromium | |
| shard: 3 | |
| shards: 4 | |
| - bundle: esm | |
| project: chromium | |
| shard: 4 | |
| shards: 4 | |
| exclude: | |
| # Do not run the un-sharded esm tests | |
| - bundle: esm | |
| project: 'chromium' | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Restore build bundle artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: build-bundle-output | |
| path: ${{ env.BUNDLE_ARTIFACT_DOWNLOAD_PATH }} | |
| - name: Install Playwright | |
| uses: ./.github/actions/install-playwright | |
| with: | |
| browsers: ${{ matrix.project }} | |
| - name: Run Playwright tests | |
| env: | |
| PW_BUNDLE: ${{ matrix.bundle }} | |
| working-directory: dev-packages/browser-integration-tests | |
| run: | |
| yarn test:all${{ matrix.project && format(' --project={0}', matrix.project) || '' }}${{ matrix.shard && | |
| format(' --shard={0}/{1}', matrix.shard, matrix.shards) || '' }} | |
| - name: Upload Playwright Traces | |
| uses: actions/upload-artifact@v7 | |
| if: failure() | |
| with: | |
| name: | |
| playwright-traces-job_browser_playwright_tests-${{ matrix.bundle}}-${{matrix.project}}-${{matrix.shard || | |
| '0'}} | |
| path: dev-packages/browser-integration-tests/test-results | |
| overwrite: true | |
| retention-days: 7 | |
| - name: Parse and Upload Coverage | |
| if: cancelled() == false | |
| continue-on-error: true | |
| uses: getsentry/codecov-action@main | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| directory: dev-packages/browser-integration-tests | |
| enable-coverage: false | |
| name: | |
| browser-playwright-${{ matrix.bundle }}-${{ matrix.project }}${{ matrix.shard && format('-{0}', | |
| matrix.shard) || '' }} | |
| job_browser_loader_tests: | |
| name: PW ${{ matrix.bundle }} Tests | |
| needs: [job_get_metadata, job_build, job_build_bundles] | |
| if: needs.job_build.outputs.changed_browser_integration == 'true' || github.event_name != 'pull_request' | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| bundle: | |
| - loader_base | |
| - loader_eager | |
| - loader_debug | |
| - loader_tracing | |
| - loader_replay | |
| - loader_replay_buffer | |
| - loader_tracing_replay | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Restore build bundle artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: build-bundle-output | |
| path: ${{ env.BUNDLE_ARTIFACT_DOWNLOAD_PATH }} | |
| - name: Install Playwright | |
| uses: ./.github/actions/install-playwright | |
| with: | |
| browsers: chromium | |
| - name: Run Playwright Loader tests | |
| env: | |
| PW_BUNDLE: ${{ matrix.bundle }} | |
| run: | | |
| cd dev-packages/browser-integration-tests | |
| yarn test:loader | |
| - name: Upload Playwright Traces | |
| uses: actions/upload-artifact@v7 | |
| if: failure() | |
| with: | |
| name: playwright-traces-job_browser_loader_tests-${{ matrix.bundle}} | |
| path: dev-packages/browser-integration-tests/test-results | |
| overwrite: true | |
| retention-days: 7 | |
| - name: Parse and Upload Coverage | |
| uses: getsentry/codecov-action@main | |
| if: cancelled() == false | |
| continue-on-error: true | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| directory: dev-packages/browser-integration-tests | |
| enable-coverage: false | |
| name: browser-loader-${{ matrix.bundle }} | |
| job_check_for_faulty_dts: | |
| name: Check for faulty .d.ts files | |
| needs: [job_get_metadata, job_build] | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 5 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Check for dts files that reference stuff in the temporary build folder | |
| run: | | |
| if grep -r --include "*.d.ts" --exclude-dir ".nx" 'import("@sentry(-internal)?/[^/]*/build' .; then | |
| echo "Found illegal TypeScript import statement." | |
| exit 1 | |
| fi | |
| job_node_integration_tests: | |
| name: | |
| Node (${{ matrix.node }})${{ (matrix.typescript && format(' (TS {0})', matrix.typescript)) || '' }} Integration | |
| Tests | |
| needs: [job_get_metadata, job_build] | |
| if: needs.job_build.outputs.changed_node_integration == 'true' || github.event_name != 'pull_request' | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node: [18, 20, 22, 24] | |
| typescript: | |
| - false | |
| include: | |
| # Only check typescript for latest version (to streamline CI) | |
| - node: 24 | |
| typescript: '3.8' | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ matrix.node }} | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Overwrite typescript version | |
| if: matrix.typescript == '3.8' | |
| run: node ./scripts/use-ts-3_8.js | |
| working-directory: dev-packages/node-integration-tests | |
| - name: Run integration tests | |
| working-directory: dev-packages/node-integration-tests | |
| run: yarn test | |
| job_node_core_integration_tests: | |
| name: | |
| Node (${{ matrix.node }})${{ (matrix.typescript && format(' (TS {0})', matrix.typescript)) || '' }} Node-Core | |
| Integration Tests | |
| needs: [job_get_metadata, job_build] | |
| if: needs.job_build.outputs.changed_node_core_integration == 'true' || github.event_name != 'pull_request' | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node: [18, 20, 22, 24] | |
| typescript: | |
| - false | |
| include: | |
| # Only check typescript for latest version (to streamline CI) | |
| - node: 24 | |
| typescript: '3.8' | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ matrix.node }} | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Overwrite typescript version | |
| if: matrix.typescript == '3.8' | |
| run: node ./scripts/use-ts-3_8.js | |
| working-directory: dev-packages/node-core-integration-tests | |
| - name: Run integration tests | |
| working-directory: dev-packages/node-core-integration-tests | |
| run: yarn test | |
| job_cloudflare_integration_tests: | |
| name: Cloudflare Integration Tests | |
| needs: [job_get_metadata, job_build] | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Run integration tests | |
| working-directory: dev-packages/cloudflare-integration-tests | |
| run: yarn test | |
| job_bun_integration_tests: | |
| name: Bun Integration Tests | |
| needs: [job_get_metadata, job_build] | |
| if: needs.job_build.outputs.changed_bun_integration == 'true' || github.event_name != 'pull_request' | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Run integration tests | |
| working-directory: dev-packages/bun-integration-tests | |
| run: yarn test | |
| job_remix_integration_tests: | |
| name: Remix (Node ${{ matrix.node }}) Tests | |
| needs: [job_get_metadata, job_build] | |
| if: needs.job_build.outputs.changed_remix == 'true' || github.event_name != 'pull_request' | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node: [18, 20, 22, 24] | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ matrix.node }} | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Install Playwright | |
| uses: ./.github/actions/install-playwright | |
| with: | |
| browsers: chromium | |
| - name: Run integration tests | |
| env: | |
| NODE_VERSION: ${{ matrix.node }} | |
| run: | | |
| cd packages/remix | |
| yarn test:integration:ci | |
| job_build_tarballs: | |
| name: Build tarballs | |
| # We want to run this if: | |
| # - The build job was successful, not skipped | |
| if: | | |
| always() && | |
| needs.job_build.result == 'success' | |
| needs: [job_get_metadata, job_build] | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'package.json' | |
| - name: Restore NX cache | |
| uses: actions/cache/restore@v5 | |
| with: | |
| path: | | |
| .nx/cache | |
| .nx/workspace-data | |
| key: ${{ env.NX_CACHE_KEY }} | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Build tarballs | |
| run: yarn build:tarball | |
| - name: Upload tarball artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: build-tarball-output | |
| path: ${{ env.TARBALL_ARTIFACT_GLOB }} | |
| if-no-files-found: error | |
| retention-days: 4 | |
| compression-level: 6 | |
| overwrite: true | |
| job_e2e_tests: | |
| name: E2E ${{ matrix.label || matrix.test-application }} Test | |
| # We need to add the `always()` check here because the previous step has this as well :( | |
| # See: https://github.com/actions/runner/issues/2205 | |
| if: | |
| always() && needs.job_build_tarballs.result == 'success' && needs.job_build.outputs.e2e-matrix !='{"include":[]}' | |
| needs: [job_get_metadata, job_build, job_build_layer, job_build_tarballs] | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| env: | |
| # We just use a dummy DSN here, only send to the tunnel anyhow | |
| E2E_TEST_DSN: 'https://username@domain/123' | |
| # Needed because some apps expect a certain prefix | |
| NEXT_PUBLIC_E2E_TEST_DSN: 'https://username@domain/123' | |
| PUBLIC_E2E_TEST_DSN: 'https://username@domain/123' | |
| REACT_APP_E2E_TEST_DSN: 'https://username@domain/123' | |
| E2E_TEST_SENTRY_ORG_SLUG: 'sentry-javascript-sdks' | |
| E2E_TEST_SENTRY_PROJECT: 'sentry-javascript-e2e-tests' | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.job_build.outputs.e2e-matrix) }} | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 | |
| with: | |
| version: 9.15.9 | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'dev-packages/e2e-tests/test-applications/${{ matrix.test-application }}/package.json' | |
| - name: Set up Bun | |
| if: | |
| contains(fromJSON('["node-exports-test-app","nextjs-16-bun", "elysia-bun", "hono-4"]'), | |
| matrix.test-application) | |
| uses: oven-sh/setup-bun@v2 | |
| - name: Set up AWS SAM | |
| if: matrix.test-application == 'aws-serverless' || matrix.test-application == 'aws-serverless-layer' | |
| uses: aws-actions/setup-sam@v2 | |
| with: | |
| use-installer: true | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Set up Deno | |
| if: matrix.test-application == 'deno' || matrix.test-application == 'deno-streamed' | |
| uses: denoland/setup-deno@v2.0.3 | |
| with: | |
| deno-version: v2.1.5 | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Restore tarball artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: build-tarball-output | |
| path: ${{ env.TARBALL_ARTIFACT_DOWNLOAD_PATH }} | |
| - name: Restore build layer artifacts | |
| uses: actions/download-artifact@v7 | |
| if: matrix.test-application == 'aws-serverless' || matrix.test-application == 'aws-serverless-layer' | |
| with: | |
| name: build-layer-output | |
| path: ${{ env.BUILD_LAYER_PATH }} | |
| - name: Prepare e2e tests | |
| run: yarn test:prepare | |
| working-directory: dev-packages/e2e-tests | |
| - name: Validate e2e tests setup | |
| run: yarn test:validate | |
| working-directory: dev-packages/e2e-tests | |
| - name: Copy to temp | |
| run: yarn ci:copy-to-temp ./test-applications/${{ matrix.test-application }} ${{ runner.temp }}/test-application | |
| working-directory: dev-packages/e2e-tests | |
| - name: Add pnpm overrides | |
| run: | |
| yarn ci:pnpm-overrides ${{ runner.temp }}/test-application ${{ github.workspace | |
| }}/dev-packages/e2e-tests/packed | |
| working-directory: dev-packages/e2e-tests | |
| - name: Build E2E app | |
| working-directory: ${{ runner.temp }}/test-application | |
| timeout-minutes: 7 | |
| run: ${{ matrix.build-command || 'pnpm test:build' }} | |
| env: | |
| SENTRY_E2E_WORKSPACE_ROOT: ${{ github.workspace }} | |
| - name: Install Playwright | |
| uses: ./.github/actions/install-playwright | |
| with: | |
| browsers: chromium | |
| cwd: ${{ runner.temp }}/test-application | |
| - name: Run E2E test | |
| working-directory: ${{ runner.temp }}/test-application | |
| timeout-minutes: 10 | |
| run: ${{ matrix.assert-command || 'pnpm test:assert' }} | |
| env: | |
| SENTRY_E2E_WORKSPACE_ROOT: ${{ github.workspace }} | |
| - name: Upload Playwright Traces | |
| uses: actions/upload-artifact@v7 | |
| if: failure() | |
| with: | |
| name: playwright-traces-job_e2e_playwright_tests-${{ matrix.test-application}} | |
| path: ${{ runner.temp }}/test-application/test-results | |
| overwrite: true | |
| retention-days: 7 | |
| - name: Pre-process E2E Test Dumps | |
| if: failure() | |
| run: | | |
| node ./scripts/normalize-e2e-test-dump-transaction-events.js | |
| - name: Upload E2E Test Event Dumps | |
| uses: actions/upload-artifact@v7 | |
| if: failure() | |
| with: | |
| name: E2E Test Dump (${{ matrix.label || matrix.test-application }}) | |
| path: ${{ runner.temp }}/test-application/event-dumps | |
| overwrite: true | |
| retention-days: 7 | |
| if-no-files-found: ignore | |
| # - We skip optional tests on release branches | |
| job_optional_e2e_tests: | |
| name: E2E ${{ matrix.label || matrix.test-application }} Test (optional) | |
| # We only run E2E tests for non-fork PRs because the E2E tests require secrets to work and they can't be accessed from forks | |
| # We need to add the `always()` check here because the previous step has this as well :( | |
| # See: https://github.com/actions/runner/issues/2205 | |
| if: | |
| always() && needs.job_get_metadata.outputs.is_release != 'true' && needs.job_build_tarballs.result == 'success' && | |
| needs.job_build.outputs.e2e-matrix-optional != '{"include":[]}' && (github.event_name != 'pull_request' || | |
| github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' | |
| needs: [job_get_metadata, job_build, job_build_tarballs] | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| env: | |
| E2E_TEST_AUTH_TOKEN: ${{ secrets.E2E_TEST_AUTH_TOKEN }} | |
| E2E_TEST_DSN: ${{ secrets.E2E_TEST_DSN }} | |
| # Needed because some apps expect a certain prefix | |
| NEXT_PUBLIC_E2E_TEST_DSN: ${{ secrets.E2E_TEST_DSN }} | |
| PUBLIC_E2E_TEST_DSN: ${{ secrets.E2E_TEST_DSN }} | |
| REACT_APP_E2E_TEST_DSN: ${{ secrets.E2E_TEST_DSN }} | |
| E2E_TEST_SENTRY_ORG_SLUG: 'sentry-javascript-sdks' | |
| E2E_TEST_SENTRY_PROJECT: 'sentry-javascript-e2e-tests' | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.job_build.outputs.e2e-matrix-optional) }} | |
| steps: | |
| - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ env.HEAD_COMMIT }} | |
| - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 | |
| with: | |
| version: 9.15.9 | |
| - name: Set up Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: 'dev-packages/e2e-tests/test-applications/${{ matrix.test-application }}/package.json' | |
| - name: Restore caches | |
| uses: ./.github/actions/restore-cache | |
| with: | |
| dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }} | |
| - name: Restore tarball artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: build-tarball-output | |
| path: ${{ env.TARBALL_ARTIFACT_DOWNLOAD_PATH }} | |
| - name: Prepare E2E tests | |
| run: yarn test:prepare | |
| working-directory: dev-packages/e2e-tests | |
| - name: Validate test setup | |
| run: yarn test:validate | |
| working-directory: dev-packages/e2e-tests | |
| - name: Copy to temp | |
| run: yarn ci:copy-to-temp ./test-applications/${{ matrix.test-application }} ${{ runner.temp }}/test-application | |
| working-directory: dev-packages/e2e-tests | |
| - name: Add pnpm overrides | |
| run: | |
| yarn ci:pnpm-overrides ${{ runner.temp }}/test-application ${{ github.workspace | |
| }}/dev-packages/e2e-tests/packed | |
| working-directory: dev-packages/e2e-tests | |
| - name: Build E2E app | |
| working-directory: ${{ runner.temp }}/test-application | |
| timeout-minutes: 7 | |
| run: ${{ matrix.build-command || 'pnpm test:build' }} | |
| - name: Install Playwright | |
| uses: ./.github/actions/install-playwright | |
| with: | |
| browsers: chromium | |
| cwd: ${{ runner.temp }}/test-application | |
| - name: Run E2E test | |
| working-directory: ${{ runner.temp }}/test-application | |
| timeout-minutes: 10 | |
| run: ${{ matrix.assert-command || 'pnpm test:assert' }} | |
| - name: Pre-process E2E Test Dumps | |
| if: failure() | |
| run: | | |
| node ./scripts/normalize-e2e-test-dump-transaction-events.js | |
| - name: Upload E2E Test Event Dumps | |
| uses: actions/upload-artifact@v7 | |
| if: failure() | |
| with: | |
| name: E2E Test Dump (${{ matrix.label || matrix.test-application }}) | |
| path: ${{ runner.temp }}/test-application/event-dumps | |
| overwrite: true | |
| retention-days: 7 | |
| if-no-files-found: ignore | |
| job_required_jobs_passed: | |
| name: All required jobs passed or were skipped | |
| needs: | |
| [ | |
| job_build, | |
| job_build_bundles, | |
| job_build_layer, | |
| job_build_tarballs, | |
| job_browser_unit_tests, | |
| job_bun_unit_tests, | |
| job_deno_unit_tests, | |
| job_node_unit_tests, | |
| job_node_integration_tests, | |
| job_node_core_integration_tests, | |
| job_cloudflare_integration_tests, | |
| job_bun_integration_tests, | |
| job_browser_playwright_tests, | |
| job_browser_loader_tests, | |
| job_remix_integration_tests, | |
| job_e2e_tests, | |
| job_artifacts, | |
| job_lint, | |
| job_check_lockfile, | |
| job_check_format, | |
| job_circular_dep_check, | |
| job_size_check, | |
| ] | |
| # Always run this, even if a dependent job failed | |
| if: always() | |
| runs-on: ubuntu-24.04 | |
| permissions: | |
| issues: write | |
| checks: read | |
| steps: | |
| - name: Check out current commit | |
| if: github.ref == 'refs/heads/develop' && contains(needs.*.result, 'failure') | |
| uses: actions/checkout@v6 | |
| with: | |
| sparse-checkout: | | |
| .github | |
| scripts | |
| - name: Create issues for failed jobs | |
| if: github.ref == 'refs/heads/develop' && contains(needs.*.result, 'failure') | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { default: run } = await import( | |
| `${process.env.GITHUB_WORKSPACE}/scripts/report-ci-failures.mjs` | |
| ); | |
| await run({ github, context, core }); | |
| - name: Check for failures | |
| if: cancelled() || contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') | |
| run: | | |
| echo "One of the dependent jobs have failed. You may need to re-run it." && exit 1 |