fix(header): don't close the "More" nav menu when clicking a hover-opened trigger #244
Workflow file for this run
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: [master] | |
| # Every PR (any target branch) gets the smoke gate. The suite is the source of | |
| # truth for "is the feature working / is the bug fixed" — so it must run before | |
| # merge, not only nightly. | |
| pull_request: | |
| schedule: | |
| # Nightly desktop full + mobile at 06:00 UTC. | |
| - cron: '0 6 * * *' | |
| workflow_dispatch: | |
| # One E2E run per ref at a time. A new push cancels the in-flight run (PRs) so we | |
| # never burn minutes on stale commits; the fixed Vite port means concurrent runs | |
| # on the same runner would contend anyway. | |
| concurrency: | |
| group: e2e-${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| # Fast PR gate: typecheck + mock-contract unit tests + snapshot freshness + | |
| # desktop smoke. Target: green in a few minutes. Keep slow write/lifecycle | |
| # specs OUT of smoke (they belong to the nightly full run). | |
| smoke: | |
| if: github.event_name == 'push' || github.event_name == 'pull_request' | |
| timeout-minutes: 30 | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: pnpm | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Typecheck (app + e2e) | |
| run: pnpm typecheck | |
| - name: Mock-contract unit tests (fail-loud trust layer) | |
| run: pnpm exec vitest run e2e/helpers/tests | |
| - name: Snapshot manifest and freshness | |
| run: pnpm e2e:check | |
| - name: Install Chromium | |
| run: pnpm exec playwright install --with-deps chromium | |
| - name: Smoke suite | |
| run: pnpm e2e:smoke | |
| - uses: actions/upload-artifact@v4 | |
| if: failure() | |
| with: | |
| name: smoke-report | |
| path: playwright-report/ | |
| retention-days: 14 | |
| # Nightly / on-demand: the full desktop flows AND the mobile project, so mobile | |
| # is genuinely verified on a schedule (not merely "declared but never run"). | |
| # Not on PRs — this is the slow, comprehensive pass. | |
| full: | |
| if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' | |
| timeout-minutes: 60 | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: pnpm | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Typecheck (app + e2e) | |
| run: pnpm typecheck | |
| - name: Mock-contract unit tests (fail-loud trust layer) | |
| run: pnpm exec vitest run e2e/helpers/tests | |
| - name: Snapshot manifest and freshness | |
| run: pnpm e2e:check | |
| - name: Install Chromium | |
| run: pnpm exec playwright install --with-deps chromium | |
| - name: Full desktop suite | |
| run: pnpm e2e:full | |
| # Mobile runs after desktop (same runner, sequential — the fixed Vite port | |
| # forbids parallel suites). This is the only continuous mobile coverage. | |
| - name: Mobile suite | |
| run: pnpm e2e:mobile | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: full-report | |
| path: playwright-report/ | |
| retention-days: 30 |