mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2026-04-22 23:08:53 +02:00
## Add Taskfile for unified dev workflow ### Summary - Introduces [Taskfile](https://taskfile.dev/) as the single CLI entry point for all development workflows across backend, frontend, engine, Docker, and desktop - ~80 tasks organized into 6 namespaces: `backend:`, `frontend:`, `engine:`, `docker:`, `desktop:`, plus root-level composites - All CI workflows migrated to use Task - Deletes `engine/Makefile` and `scripts/build-tauri-jlink.{sh,bat}` — replaced by Task equivalents - Removes redundant npm scripts (`dev`, `build`, `prep`, `lint`, `test`, `typecheck:all`) from `package.json` - Smart dependency caching: `sources`/`status`/`generates` fingerprinting, CI-aware `npm ci` vs `npm install`, `run: once` for parallel dep deduplication ### What this does NOT do - Does not replace Gradle, npm, or Docker — Taskfile is a thin orchestration wrapper - Does not change application code or behavior ### Install ``` npm install -g @go-task/cli # or: brew install go-task, winget install Task.Task ``` ### Quick start ``` task --list # discover all tasks task install # install all deps task dev # start backend + frontend task dev:all # also start AI engine task test # run all tests task check # quick quality gate (local dev) task check:all # full CI quality gate ``` ### Test plan - [ ] Install `task` CLI and run `task --list` — verify all tasks display - [ ] Run `task install` — verify frontend + engine deps install - [ ] Run `task dev` — verify backend + frontend start, Ctrl+C exits cleanly - [ ] Run `task frontend:check` — verify typecheck + lint + test pass - [ ] Run `task desktop:dev` — verify jlink builds are cached on second run - [ ] Verify CI passes on all workflows --------- Co-authored-by: James Brunton <jbrunton96@gmail.com>
314 lines
6.9 KiB
YAML
314 lines
6.9 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:
|
|
desc: "Generate .env from example if missing"
|
|
run: once
|
|
deps: [install]
|
|
cmds:
|
|
- npx tsx scripts/setup-env.ts
|
|
sources:
|
|
- scripts/setup-env.ts
|
|
- config/.env.example
|
|
generates:
|
|
- .env
|
|
|
|
prepare:env:saas:
|
|
desc: "Generate .env and .env.saas from examples if missing"
|
|
run: once
|
|
deps: [install]
|
|
cmds:
|
|
- npx tsx scripts/setup-env.ts --saas
|
|
sources:
|
|
- scripts/setup-env.ts
|
|
- config/.env.example
|
|
- config/.env.saas.example
|
|
generates:
|
|
- .env
|
|
- .env.saas
|
|
|
|
prepare:env:desktop:
|
|
desc: "Generate .env and .env.desktop from examples if missing"
|
|
run: once
|
|
deps: [install]
|
|
cmds:
|
|
- npx tsx scripts/setup-env.ts --desktop
|
|
sources:
|
|
- scripts/setup-env.ts
|
|
- config/.env.example
|
|
- config/.env.desktop.example
|
|
generates:
|
|
- .env
|
|
- .env.desktop
|
|
|
|
prepare:icons:
|
|
desc: "Generate icon bundle from source references"
|
|
run: once
|
|
deps: [install]
|
|
cmds:
|
|
- node scripts/generate-icons.js
|
|
|
|
prepare:
|
|
desc: "Set up dev environment"
|
|
run: once
|
|
deps: [prepare:env, prepare:icons]
|
|
|
|
prepare:saas:
|
|
desc: "Prepare for SaaS mode"
|
|
run: once
|
|
deps: [prepare:env:saas, prepare:icons]
|
|
|
|
prepare:desktop:
|
|
desc: "Prepare for desktop mode"
|
|
run: once
|
|
deps: [prepare:env:desktop, prepare:icons]
|
|
|
|
# ============================================================
|
|
# Development
|
|
# ============================================================
|
|
|
|
dev:
|
|
desc: "Start frontend dev server"
|
|
deps: [prepare]
|
|
ignore_error: true
|
|
cmds:
|
|
- npx vite
|
|
|
|
dev:core:
|
|
desc: "Start frontend dev server in core mode"
|
|
deps: [prepare]
|
|
ignore_error: true
|
|
cmds:
|
|
- npx vite --mode core
|
|
|
|
dev:proprietary:
|
|
desc: "Start frontend dev server in proprietary mode"
|
|
deps: [prepare]
|
|
ignore_error: true
|
|
cmds:
|
|
- npx vite --mode proprietary
|
|
|
|
dev:saas:
|
|
desc: "Start frontend dev server in SaaS mode"
|
|
deps: [prepare:saas]
|
|
ignore_error: true
|
|
cmds:
|
|
- npx vite --mode saas
|
|
|
|
dev:desktop:
|
|
desc: "Start frontend dev server in desktop mode"
|
|
deps: [prepare:desktop]
|
|
ignore_error: true
|
|
cmds:
|
|
- npx vite --mode desktop
|
|
|
|
dev:prototypes:
|
|
desc: "Start frontend dev server in prototypes mode"
|
|
deps: [prepare]
|
|
ignore_error: true
|
|
cmds:
|
|
- npx vite --mode prototypes
|
|
|
|
# ============================================================
|
|
# 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: [prepare:saas]
|
|
cmds:
|
|
- npx vite build --mode saas
|
|
|
|
build:desktop:
|
|
desc: "Build for desktop mode"
|
|
deps: [prepare: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: [prepare:saas]
|
|
cmds:
|
|
- npx tsc --noEmit --project src/saas/tsconfig.json
|
|
|
|
typecheck:desktop:
|
|
desc: "Typecheck desktop build variant"
|
|
deps: [prepare: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
|
|
|
|
# ============================================================
|
|
# 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
|
|
|
|
test:e2e:
|
|
desc: "Run E2E tests"
|
|
deps: [prepare]
|
|
cmds:
|
|
- npx playwright test {{.CLI_ARGS}}
|
|
|
|
test:e2e:install:
|
|
desc: "Install E2E test browsers"
|
|
deps: [install]
|
|
cmds:
|
|
- npx playwright install {{.CLI_ARGS}} --with-deps
|
|
|
|
# ============================================================
|
|
# Code Generation
|
|
# ============================================================
|
|
|
|
licenses:generate:
|
|
desc: "Generate frontend license report"
|
|
deps: [install]
|
|
cmds:
|
|
- node scripts/generate-licenses.js
|