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` pushes the pnpm store through the Gitea # Actions cache service which is currently unreachable # (192.168.0.222:43513 ETIMEDOUT). In host-mode the real # store lives in ~/.local/share/pnpm and persists between # jobs without any action plumbing. - 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