name: ui-extended-main on: schedule: # 02:00 UTC = 10:00 Asia/Shanghai - cron: "0 2 * * *" workflow_dispatch: inputs: suite: description: "UI suite to run" required: true default: p0 type: choice options: - p0 - p0p1 - full permissions: contents: read concurrency: group: ui-extended-main-${{ github.event_name }}-${{ github.ref || github.run_id }} cancel-in-progress: true jobs: ui_p0: name: UI P0 (${{ matrix.name }}) if: ${{ github.repository == 'nexu-io/open-design' && github.event_name == 'workflow_dispatch' && inputs.suite != 'full' }} runs-on: ubuntu-latest timeout-minutes: 45 strategy: fail-fast: false matrix: include: - name: entry-settings shard: entry-settings - name: project-runtime shard: project-runtime - name: workspace-restoration shard: workspace-restoration steps: - name: Checkout uses: actions/checkout@v6.0.2 - name: Setup workspace uses: ./.github/actions/setup-workspace - name: Setup Playwright uses: ./.github/actions/setup-playwright with: package-json-path: e2e/package.json install-command: pnpm -C e2e exec playwright install --with-deps chromium - name: Prebuild workspace type declarations run: | pnpm --filter @open-design/daemon build pnpm --filter @open-design/desktop build pnpm --filter @open-design/web build:sidecar - name: Clean Playwright state run: pnpm -C e2e exec tsx scripts/playwright.ts clean - name: Run UI shell smoke run: pnpm -C e2e exec tsx scripts/playwright.ts run-ui-group smoke - name: Run UI P0 domain run: pnpm -C e2e exec tsx scripts/playwright.ts run-ui-group ${{ matrix.shard }} - name: Upload Playwright debug artifact if: ${{ always() }} uses: actions/upload-artifact@v7 with: name: ui-p0-${{ github.run_id }}-${{ matrix.name }} path: | e2e/ui/reports/playwright-html-report e2e/ui/reports/test-results e2e/ui/reports/results.json e2e/ui/test-results if-no-files-found: ignore retention-days: 7 ui_extended: name: UI P1 (${{ matrix.name }}) if: ${{ github.repository == 'nexu-io/open-design' && github.event_name == 'workflow_dispatch' && inputs.suite == 'p0p1' }} runs-on: ubuntu-latest timeout-minutes: 45 strategy: fail-fast: false matrix: include: - name: P1 shard 1 part: p1 command: pnpm -C e2e exec playwright test -c playwright.config.ts ui --grep '\[P1\]' --shard=1/2 - name: P1 shard 2 part: p1 command: pnpm -C e2e exec playwright test -c playwright.config.ts ui --grep '\[P1\]' --shard=2/2 steps: - name: Checkout uses: actions/checkout@v6.0.2 - name: Setup workspace uses: ./.github/actions/setup-workspace - name: Setup Playwright uses: ./.github/actions/setup-playwright with: package-json-path: e2e/package.json install-command: pnpm -C e2e exec playwright install --with-deps chromium - name: Prebuild workspace type declarations run: | pnpm --filter @open-design/daemon build pnpm --filter @open-design/desktop build pnpm --filter @open-design/web build:sidecar - name: Clean Playwright state run: pnpm -C e2e exec tsx scripts/playwright.ts clean - name: Run UI P1 shard run: ${{ matrix.command }} - name: Upload Playwright debug artifact if: ${{ always() }} uses: actions/upload-artifact@v7 with: name: ui-extended-main-${{ github.run_id }}-${{ matrix.part }}-${{ matrix.name }} path: | e2e/ui/reports/playwright-html-report e2e/ui/reports/test-results e2e/ui/reports/results.json e2e/ui/test-results if-no-files-found: ignore retention-days: 7 ui_full: name: Full UI regression if: ${{ github.repository == 'nexu-io/open-design' && (github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && inputs.suite == 'full')) }} runs-on: ubuntu-latest timeout-minutes: 120 steps: - name: Checkout uses: actions/checkout@v6.0.2 - name: Setup workspace uses: ./.github/actions/setup-workspace - name: Setup Playwright uses: ./.github/actions/setup-playwright with: package-json-path: e2e/package.json install-command: pnpm -C e2e exec playwright install --with-deps chromium - name: Prebuild workspace type declarations run: | pnpm --filter @open-design/daemon build pnpm --filter @open-design/desktop build pnpm --filter @open-design/web build:sidecar - name: Clean Playwright state run: pnpm -C e2e exec tsx scripts/playwright.ts clean - name: Run full UI run: pnpm -C e2e test:ui - name: Upload Playwright debug artifact if: ${{ always() }} uses: actions/upload-artifact@v7 with: name: ui-full-${{ github.run_id }} path: | e2e/ui/reports/playwright-html-report e2e/ui/reports/test-results e2e/ui/reports/results.json e2e/ui/test-results if-no-files-found: ignore retention-days: 7