test: add race-condition e2e (#1896) #3339
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: E2E | |
| on: | |
| push: | |
| branches: [main] | |
| paths: | |
| - 'packages/**' | |
| - 'examples/**' | |
| - 'e2e/**' | |
| - '.github/workflows/e2e.yml' | |
| - 'pnpm-lock.yaml' | |
| pull_request: | |
| types: [opened, synchronize] | |
| paths: | |
| - 'packages/**' | |
| - 'examples/**' | |
| - 'e2e/**' | |
| - '.github/workflows/e2e.yml' | |
| - 'pnpm-lock.yaml' | |
| merge_group: | |
| workflow_call: | |
| inputs: | |
| ref: | |
| required: true | |
| type: string | |
| react_version: | |
| required: true | |
| type: string | |
| workflow_dispatch: | |
| inputs: | |
| react_version: | |
| required: true | |
| type: string | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.react_version }} | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ inputs.ref || '' }} | |
| - uses: pnpm/action-setup@v4 | |
| - uses: actions/setup-node@v6 | |
| with: | |
| node-version: 'lts/*' | |
| cache: ${{ !inputs.react_version && 'pnpm' || '' }} | |
| - if: ${{ inputs.react_version }} | |
| run: | | |
| yq eval -i '.overrides |= (.react = "${{ inputs.react_version }}" | .["react-dom"] = "${{ inputs.react_version }}" | .["react-server-dom-webpack"] = "${{ inputs.react_version }}")' pnpm-workspace.yaml | |
| pnpm install --no-frozen-lockfile | |
| - run: pnpm install | |
| - run: pnpm run compile | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: create-waku | |
| path: | | |
| packages/create-waku | |
| !packages/create-waku/node_modules | |
| if-no-files-found: error | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: waku | |
| path: | | |
| packages/waku | |
| !packages/waku/node_modules | |
| if-no-files-found: error | |
| e2e: | |
| name: E2E on ${{ matrix.os }} (Node ${{ matrix.version }}) - (${{ matrix.shared }}/4)${{ inputs.react_version && format(' with react@{0}', inputs.react_version) || '' }} | |
| needs: | |
| - build | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| shared: [1, 2, 3, 4] | |
| shardTotal: [4] | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| version: [24.0.0, 22.12.0, 20.19.0] | |
| exclude: | |
| - os: macos-latest | |
| version: 20.19.0 | |
| - os: windows-latest | |
| version: 20.19.0 | |
| - os: macos-latest | |
| version: 22.12.0 | |
| - os: windows-latest | |
| version: 22.12.0 | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ inputs.ref || '' }} | |
| - uses: pnpm/action-setup@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.version }} | |
| cache: ${{ !inputs.react_version && 'pnpm' || '' }} | |
| - if: runner.os == 'Windows' | |
| run: choco install yq -y | |
| - if: ${{ inputs.react_version }} | |
| run: | | |
| yq eval -i '.overrides |= (.react = "${{ inputs.react_version }}" | .["react-dom"] = "${{ inputs.react_version }}" | .["react-server-dom-webpack"] = "${{ inputs.react_version }}")' pnpm-workspace.yaml | |
| pnpm install --no-frozen-lockfile | |
| - run: pnpm install | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: create-waku | |
| path: packages/create-waku | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: waku | |
| path: packages/waku | |
| - name: Install Playwright | |
| id: install-playwright | |
| uses: ./.github/actions/playwright | |
| - run: pnpm exec playwright test --shard=${{ matrix.shared }}/${{ matrix.shardTotal }} | |
| timeout-minutes: 30 | |
| env: | |
| TEMP_DIR: ${{ runner.temp }} | |
| VITE_EXPERIMENTAL_WAKU_ROUTER: true | |
| - uses: actions/upload-artifact@v4 | |
| if: failure() | |
| with: | |
| name: playwright-report-${{ matrix.os }}-${{ matrix.version }}-${{ matrix.shared }} | |
| path: test-results/ | |
| retention-days: 30 | |
| if-no-files-found: ignore | |
| - uses: actions/upload-artifact@v4 | |
| if: failure() | |
| with: | |
| name: output-${{ matrix.os }}-${{ matrix.version }}-${{ matrix.shared }} | |
| path: | | |
| **/dist | |
| **/node_modules/.vite | |
| !**/node_modules | |
| retention-days: 30 | |
| if-no-files-found: ignore |