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 # ============================================================ # 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