name: Tests ยท UI # UI-side unit and end-to-end tests (Vitest + Playwright). The Go side # of the workspace is tested in `go-unit.yaml`. Both workflows can run # in parallel for a push that touches Go and UI together. on: push: paths: - 'ui/**' - '.gitea/workflows/ui-test.yaml' - '!**/*.md' pull_request: paths: - 'ui/**' - '.gitea/workflows/ui-test.yaml' - '!**/*.md' jobs: test: runs-on: ubuntu-latest defaults: run: shell: bash steps: - name: Checkout uses: actions/checkout@v4 with: submodules: recursive - name: Set up pnpm uses: pnpm/action-setup@v4 with: version: 11.0.7 - name: Set up Node uses: actions/setup-node@v4 with: node-version: 22 cache: pnpm cache-dependency-path: ui/pnpm-lock.yaml - name: Install npm dependencies working-directory: ui run: pnpm install --frozen-lockfile - name: Install Playwright browsers # `--with-deps` would shell out to `sudo apt-get install` for # the system .so libraries, which the host-mode runner cannot # run non-interactively. The host has the deps installed once, # globally; we only need to fetch the browser binaries here. # If a future run fails with missing libraries, install them # on the host via `pnpm exec playwright install-deps` (one # shot, requires sudo). working-directory: ui/frontend run: pnpm exec playwright install - name: Run Vitest working-directory: ui/frontend run: pnpm test - name: Run Playwright working-directory: ui/frontend run: pnpm exec playwright test - name: Upload Playwright report on failure if: failure() uses: actions/upload-artifact@v4 with: name: playwright-report path: ui/frontend/playwright-report/ retention-days: 14 - name: Upload Playwright traces on failure if: failure() uses: actions/upload-artifact@v4 with: name: playwright-traces path: ui/frontend/test-results/ retention-days: 14