ci(frontend): add vitest job to Forgejo Actions gate
Run the merged frontend vitest suite on every frontend-touching PR so the tests don't rot. Mirrors the #1032 backend gate: per-job dorny/paths-filter (new `frontend` output, `frontend/**`), node:20 + npm cache on the lockfile, `npm ci --legacy-peer-deps --no-audit --no-fund` (exact frontend/Dockerfile flags), then `npm run test`. Additive — backend-tests job unchanged; no top-level paths filter so frontend-only PRs already trigger the workflow. Making frontend-tests a required check is a follow-up in the Forgejo UI. Refs #999.
This commit is contained in:
parent
97731a2b09
commit
795661557f
1 changed files with 36 additions and 0 deletions
|
|
@ -43,6 +43,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
backend: ${{ steps.filter.outputs.backend }}
|
backend: ${{ steps.filter.outputs.backend }}
|
||||||
|
frontend: ${{ steps.filter.outputs.frontend }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: dorny/paths-filter@v3
|
- uses: dorny/paths-filter@v3
|
||||||
|
|
@ -53,6 +54,9 @@ jobs:
|
||||||
- 'backend/**'
|
- 'backend/**'
|
||||||
- 'data/sql/**'
|
- 'data/sql/**'
|
||||||
- '.forgejo/workflows/ci.yml'
|
- '.forgejo/workflows/ci.yml'
|
||||||
|
frontend:
|
||||||
|
- 'frontend/**'
|
||||||
|
- '.forgejo/workflows/ci.yml'
|
||||||
|
|
||||||
backend-tests:
|
backend-tests:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
@ -116,3 +120,35 @@ jobs:
|
||||||
# (5432 недоступен в этом mock-lane) → SKIP. Это intended.
|
# (5432 недоступен в этом mock-lane) → SKIP. Это intended.
|
||||||
# PDF-тесты ИДУТ (libpango выше). Target: 0 failed, skips OK.
|
# PDF-тесты ИДУТ (libpango выше). Target: 0 failed, skips OK.
|
||||||
run: uv run pytest -q --ignore=tests/smoke
|
run: uv run pytest -q --ignore=tests/smoke
|
||||||
|
|
||||||
|
frontend-tests:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: changes
|
||||||
|
if: needs.changes.outputs.frontend == 'true'
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: frontend
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Node
|
||||||
|
# Node 20 — совпадает с major из frontend/Dockerfile (node:20-alpine).
|
||||||
|
# cache=npm + cache-dependency-path на lockfile → переиспользуем ~/.npm
|
||||||
|
# между прогонами (mirror Dockerfile's `--mount=type=cache,target=/root/.npm`).
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
cache: npm
|
||||||
|
cache-dependency-path: frontend/package-lock.json
|
||||||
|
|
||||||
|
- name: Install deps (npm ci, frozen lockfile)
|
||||||
|
# ТОЧНЫЕ флаги из frontend/Dockerfile (deps stage):
|
||||||
|
# --legacy-peer-deps — Tailwind 4 alpha + React 19 peer-dep mismatches;
|
||||||
|
# --no-audit --no-fund — тише и быстрее в CI. `ci` (не `install`) =
|
||||||
|
# детерминированно из package-lock.json, fail при дрейфе lock vs package.json.
|
||||||
|
run: npm ci --legacy-peer-deps --no-audit --no-fund
|
||||||
|
|
||||||
|
- name: Test (vitest)
|
||||||
|
# `npm run test` = `vitest run` (single-shot, не watch). Только тесты —
|
||||||
|
# `next build` НАМЕРЕННО не здесь (тяжёлый, verified в deploy.yml build).
|
||||||
|
run: npm run test
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue