mirror of
https://github.com/arsvendg/Stirling-PDF.git
synced 2026-07-14 10:34:06 +02:00
## Description Consolidates Playwright running under cohesive Task namespaces, isolates Playwright state from the developer's local working tree, and swaps CI's frontend webserver from `vite` dev to `vite preview` against a pre-built `dist/`. ### `e2e:*` namespace Renames `.taskfiles/testing.yml` to `.taskfiles/e2e.yml` and consolidates everything Playwright-related under one `e2e:` namespace: - `e2e:stubbed` / `e2e:live` / `e2e:enterprise` / `e2e:cross-browser`: project-specific runners - `e2e:check` (no-Docker subset) and `e2e:check:all` (full) - `e2e:oauth:up` / `:down`, `e2e:saml:up` / `:down`: symmetric lifecycle for the keycloak compose stacks - `e2e:install`: Playwright browser install - `docker:test`: full Docker integration suite The redundant `frontend:test:e2e:*` project shortcuts are removed. CI workflows (`e2e-stubbed.yml`, `e2e-live.yml`, `build-enterprise.yml`, `nightly.yml`) are updated to call the new task names. ### Isolated Playwright state New `STIRLING_BASE_PATH` (and `-Dstirling.base-path=`) override in `InstallationPathConfig` redirects the entire state tree (configs, backups, customFiles, pipeline, logs) at startup. `task e2e:live` points it at `.test-state/playwright/` (purged on every invocation) so the suite never touches the developer's local DB, settings.yml or backups. `task e2e:live` auto-spawns gradle, waits for `/api/v1/info/status` to come up, runs Playwright, then tears down the whole backend process tree. ### CI runs Playwright against `vite preview` Builds the frontend up-front with `VITE_BUILD_FOR_PREVIEW=1` (forces absolute base so deep SPA routes resolve `/assets/...`) and the playwright `webServer` now uses `vite preview --port 5173 --strictPort` in CI. Avoids the per-page on-demand transform cost that was blowing the 30s navigation timeout under `--workers=3` on `all-tool-pages-load.spec.ts`. Local dev keeps `vite` dev for HMR. ### OAuth/SAML compose helpers `start-oauth-test.sh` and `start-saml-test.sh` gain a `--license-key <KEY>` (`-k`) flag so CI and scripted runs can skip the interactive license prompt. `start-oauth-test.sh` also moves from `for arg in "$@"` to a `while`-with-`shift` arg loop to support multi-arg flags consistently with the SAML script. ### Backend gradlew unification Drops the per-platform `cmd /c gradlew.bat` branches from `backend.yml` and routes every gradle invocation through `bash gradlew`. Works uniformly on Linux/macOS and Windows-with-Git-Bash. ### Compare.tsx flake fix (re-land of [#6316](https://github.com/Stirling-Tools/Stirling-PDF/pull/6316)) Piggybacks Anthony's never-merged fix from #6316. Without it, `e2e:stubbed` continues to flake under `--workers=3` on `compare.spec.ts`'s second-upload case via a React "Maximum update depth exceeded" infinite loop in the Compare auto-fill effect. CI traces from recent failed runs match exactly; 10 local runs of `compare.spec.ts` with `CI=1 --workers=3` pass cleanly with the fix applied. --------- Co-authored-by: James Brunton <[email protected]>
296 lines
7.0 KiB
YAML
296 lines
7.0 KiB
YAML
version: '3'
|
|
|
|
tasks:
|
|
install:
|
|
desc: "Install dependencies"
|
|
run: once
|
|
cmds:
|
|
- '{{ if eq .CI "true" }}npm ci{{ else }}npm install{{ end }}'
|
|
sources:
|
|
- package-lock.json
|
|
- package.json
|
|
status:
|
|
- test -d node_modules
|
|
env:
|
|
CI: '{{ .CI | default "false" }}'
|
|
|
|
prepare:env:
|
|
internal: true
|
|
run: when_changed
|
|
deps: [install]
|
|
vars:
|
|
MODE: '{{.MODE | default ""}}'
|
|
cmds:
|
|
- npx tsx scripts/setup-env.ts{{if .MODE}} --{{.MODE}}{{end}}
|
|
sources:
|
|
- scripts/setup-env.ts
|
|
generates:
|
|
- .env.local
|
|
- .env{{if .MODE}}.{{.MODE}}{{end}}.local
|
|
|
|
prepare:icons:
|
|
internal: true
|
|
run: once
|
|
deps: [install]
|
|
cmds:
|
|
- node scripts/generate-icons.js
|
|
|
|
prepare:
|
|
desc: "Set up dev environment"
|
|
run: when_changed
|
|
vars:
|
|
MODE: '{{.MODE | default ""}}'
|
|
deps:
|
|
- task: prepare:env
|
|
vars: { MODE: '{{.MODE}}' }
|
|
- prepare:icons
|
|
|
|
# ============================================================
|
|
# Development
|
|
# ============================================================
|
|
|
|
dev:_run:
|
|
internal: true
|
|
ignore_error: true
|
|
vars:
|
|
MODE: '{{.MODE}}'
|
|
PORT: '{{.PORT | default "5173"}}'
|
|
BACKEND_URL: '{{.BACKEND_URL | default "http://localhost:8080"}}'
|
|
OPEN: '{{.OPEN | default ""}}'
|
|
env:
|
|
BACKEND_URL: '{{.BACKEND_URL}}'
|
|
cmds:
|
|
- npx vite --mode {{.MODE}} --port {{.PORT}}{{if .OPEN}} --open{{end}}
|
|
|
|
dev:
|
|
desc: "Start frontend dev server"
|
|
cmds:
|
|
- task: dev:proprietary
|
|
vars: { PORT: '{{.PORT}}', BACKEND_URL: '{{.BACKEND_URL}}', OPEN: '{{.OPEN}}' }
|
|
|
|
dev:core:
|
|
desc: "Start frontend dev server in core mode"
|
|
deps: [prepare]
|
|
cmds:
|
|
- task: dev:_run
|
|
vars: { MODE: core, PORT: '{{.PORT}}', BACKEND_URL: '{{.BACKEND_URL}}', OPEN: '{{.OPEN}}' }
|
|
|
|
dev:proprietary:
|
|
desc: "Start frontend dev server in proprietary mode"
|
|
deps: [prepare]
|
|
cmds:
|
|
- task: dev:_run
|
|
vars: { MODE: proprietary, PORT: '{{.PORT}}', BACKEND_URL: '{{.BACKEND_URL}}', OPEN: '{{.OPEN}}' }
|
|
|
|
dev:saas:
|
|
desc: "Start frontend dev server in SaaS mode"
|
|
deps:
|
|
- task: prepare
|
|
vars: { MODE: saas }
|
|
cmds:
|
|
- task: dev:_run
|
|
vars: { MODE: saas, PORT: '{{.PORT}}', BACKEND_URL: '{{.BACKEND_URL}}', OPEN: '{{.OPEN}}' }
|
|
|
|
dev:desktop:
|
|
desc: "Start frontend dev server in desktop mode"
|
|
deps:
|
|
- task: prepare
|
|
vars: { MODE: desktop }
|
|
cmds:
|
|
- task: dev:_run
|
|
vars: { MODE: desktop, PORT: '{{.PORT}}', BACKEND_URL: '{{.BACKEND_URL}}', OPEN: '{{.OPEN}}' }
|
|
|
|
dev:prototypes:
|
|
desc: "Start frontend dev server in prototypes mode"
|
|
deps: [prepare]
|
|
cmds:
|
|
- task: dev:_run
|
|
vars: { MODE: prototypes, PORT: '{{.PORT}}', BACKEND_URL: '{{.BACKEND_URL}}', OPEN: '{{.OPEN}}' }
|
|
|
|
# ============================================================
|
|
# Build
|
|
# ============================================================
|
|
|
|
build:
|
|
desc: "Production build (default mode)"
|
|
deps: [prepare]
|
|
cmds:
|
|
- npx vite build
|
|
|
|
build:core:
|
|
desc: "Build for core mode"
|
|
deps: [prepare]
|
|
cmds:
|
|
- npx vite build --mode core
|
|
|
|
build:proprietary:
|
|
desc: "Build for proprietary mode"
|
|
deps: [prepare]
|
|
cmds:
|
|
- npx vite build --mode proprietary
|
|
|
|
build:saas:
|
|
desc: "Build for SaaS mode"
|
|
deps:
|
|
- task: prepare
|
|
vars: { MODE: saas }
|
|
cmds:
|
|
- npx vite build --mode saas
|
|
|
|
build:desktop:
|
|
desc: "Build for desktop mode"
|
|
deps:
|
|
- task: prepare
|
|
vars: { MODE: desktop }
|
|
cmds:
|
|
- npx vite build --mode desktop
|
|
|
|
build:prototypes:
|
|
desc: "Build for prototypes mode"
|
|
deps: [prepare]
|
|
cmds:
|
|
- npx vite build --mode prototypes
|
|
|
|
# ============================================================
|
|
# Code quality
|
|
# ============================================================
|
|
|
|
lint:
|
|
desc: "Run linting"
|
|
deps: [install]
|
|
cmds:
|
|
- npx eslint --max-warnings=0
|
|
- npx dpdm src --circular --no-warning --no-tree --exit-code circular:1
|
|
|
|
lint:fix:
|
|
desc: "Auto-fix lint issues"
|
|
deps: [install]
|
|
cmds:
|
|
- npx eslint --fix
|
|
|
|
format:
|
|
desc: "Auto-fix code formatting"
|
|
deps: [install]
|
|
cmds:
|
|
- npx prettier --write .
|
|
|
|
format:check:
|
|
desc: "Check code formatting"
|
|
deps: [install]
|
|
cmds:
|
|
- npx prettier --check .
|
|
|
|
fix:
|
|
desc: "Auto-fix lint and format"
|
|
cmds:
|
|
- task: format
|
|
- task: lint:fix
|
|
|
|
typecheck:
|
|
desc: "Typecheck default build of the app"
|
|
cmds:
|
|
- task: typecheck:proprietary
|
|
|
|
typecheck:core:
|
|
desc: "Typecheck core build variant"
|
|
deps: [prepare]
|
|
cmds:
|
|
- npx tsc --noEmit --project src/core/tsconfig.json
|
|
|
|
typecheck:proprietary:
|
|
desc: "Typecheck proprietary build variant"
|
|
deps: [prepare]
|
|
cmds:
|
|
- npx tsc --noEmit --project src/proprietary/tsconfig.json
|
|
|
|
typecheck:saas:
|
|
desc: "Typecheck SaaS build variant"
|
|
deps:
|
|
- task: prepare
|
|
vars: { MODE: saas }
|
|
cmds:
|
|
- npx tsc --noEmit --project src/saas/tsconfig.json
|
|
|
|
typecheck:desktop:
|
|
desc: "Typecheck desktop build variant"
|
|
deps:
|
|
- task: prepare
|
|
vars: { MODE: desktop }
|
|
cmds:
|
|
- npx tsc --noEmit --project src/desktop/tsconfig.json
|
|
|
|
typecheck:scripts:
|
|
desc: "Typecheck scripts"
|
|
deps: [prepare]
|
|
cmds:
|
|
- npx tsc --noEmit --project scripts/tsconfig.json
|
|
|
|
typecheck:prototypes:
|
|
desc: "Typecheck prototypes build variant"
|
|
deps: [prepare]
|
|
cmds:
|
|
- npx tsc --noEmit --project src/prototypes/tsconfig.json
|
|
|
|
typecheck:all:
|
|
desc: "Typecheck all build variants"
|
|
cmds:
|
|
- task: typecheck:core
|
|
- task: typecheck:proprietary
|
|
- task: typecheck:saas
|
|
- task: typecheck:desktop
|
|
- task: typecheck:scripts
|
|
- task: typecheck:prototypes
|
|
|
|
# ============================================================
|
|
# Quality Gate
|
|
# ============================================================
|
|
|
|
check:
|
|
desc: "Quick quality gate for local development"
|
|
cmds:
|
|
- task: typecheck
|
|
- task: lint
|
|
- task: format:check
|
|
- task: test
|
|
|
|
check:all:
|
|
desc: "Full CI quality gate"
|
|
cmds:
|
|
- task: typecheck:all
|
|
- task: lint
|
|
- task: format:check
|
|
- task: build
|
|
- task: test
|
|
|
|
# ============================================================
|
|
# Test
|
|
# ============================================================
|
|
|
|
test:
|
|
desc: "Run tests"
|
|
deps: [install]
|
|
cmds:
|
|
- npx vitest run
|
|
|
|
test:watch:
|
|
desc: "Run tests in watch mode"
|
|
deps: [install]
|
|
cmds:
|
|
- npx vitest --watch
|
|
|
|
test:coverage:
|
|
desc: "Run tests with coverage"
|
|
deps: [install]
|
|
cmds:
|
|
- npx vitest --coverage
|
|
|
|
# ============================================================
|
|
# Code Generation
|
|
# ============================================================
|
|
|
|
licenses:generate:
|
|
desc: "Generate frontend license report"
|
|
deps: [install]
|
|
cmds:
|
|
- node scripts/generate-licenses.js
|