name: ui-test # Tier 1 (per-PR) workflow. Runs Vitest + Playwright for the UI client and # the monorepo Go service tests (everything except the integration suite, # which lives behind `make -C integration integration` and needs a Docker # daemon set up for testcontainers). # # The path filter is intentionally broad until a dedicated go-test # workflow is introduced; this is the only CI gate today. on: push: paths: - 'ui/**' - 'backend/**' - 'gateway/**' - 'game/**' - 'pkg/**' - 'go.work' - 'go.work.sum' - '.gitea/workflows/ui-test.yaml' pull_request: paths: - 'ui/**' - 'backend/**' - 'gateway/**' - 'game/**' - 'pkg/**' - 'go.work' - 'go.work.sum' - '.gitea/workflows/ui-test.yaml' jobs: test: runs-on: ubuntu-latest defaults: run: shell: bash steps: - name: Checkout uses: actions/checkout@v4 with: submodules: recursive - name: Set up Go uses: actions/setup-go@v5 with: go-version-file: go.work cache: true - name: Run Go tests # client/ is the deprecated Fyne client; excluded from CI per # ui/PLAN.md ยง74. -count=1 disables Go's test cache so a green # run never depends on a previous runner's cached state. The # backend suite is run with -p 1 because most backend packages # spawn their own Postgres testcontainer, and parallel # Postgres bootstraps starve each other on a constrained # runner. pkg modules are listed one by one because ./pkg/... # does not recurse across the independent go.work modules # under pkg/. run: | go test -count=1 -p 1 ./backend/... go test -count=1 \ ./gateway/... \ ./game/... \ ./ui/core/... \ ./pkg/calc/... \ ./pkg/connector/... \ ./pkg/cronutil/... \ ./pkg/error/... \ ./pkg/geoip/... \ ./pkg/model/... \ ./pkg/postgres/... \ ./pkg/redisconn/... \ ./pkg/schema/... \ ./pkg/storage/... \ ./pkg/transcoder/... \ ./pkg/util/... - 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 working-directory: ui/frontend run: pnpm exec playwright install --with-deps - 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