mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2026-09-03 05:10:16 +03:00
# Conflicts: # .github/workflows/PR-Auto-Deploy-V2.yml # app/proprietary/src/main/java/stirling/software/proprietary/accountlink/AccountLinkController.java # app/proprietary/src/main/java/stirling/software/proprietary/accountlink/AccountLinkService.java # app/proprietary/src/main/java/stirling/software/proprietary/failure/FailureKind.java # app/proprietary/src/test/java/stirling/software/proprietary/accountlink/AccountLinkControllerTest.java # app/proprietary/src/test/java/stirling/software/proprietary/failure/FailureKindTest.java # frontend/editor/public/locales/en-US/translation.toml # frontend/editor/src/core/components/shared/AppSwitcher.tsx # frontend/editor/src/core/components/shared/BrandSwitcher.tsx # frontend/editor/src/core/query/keys.ts # frontend/editor/src/core/services/notifications.ts # frontend/editor/src/desktop/components/shared/AppSwitcher.tsx # frontend/editor/src/portal/PortalApp.tsx # frontend/editor/src/portal/queryClient.ts # frontend/editor/src/processor/ProcessorProviders.tsx # frontend/editor/src/processor/ViewRouter.tsx # frontend/editor/src/processor/api/demoData.test.ts # frontend/editor/src/processor/api/link.test.ts # frontend/editor/src/processor/api/link.ts # frontend/editor/src/processor/components/AppShell.tsx # frontend/editor/src/processor/components/ConnectAccountRail.css # frontend/editor/src/processor/components/ConnectAccountRail.stories.tsx # frontend/editor/src/processor/components/ConnectAccountRail.tsx # frontend/editor/src/processor/components/EditorStatusCard.tsx # frontend/editor/src/processor/components/HomeHero.tsx # frontend/editor/src/processor/components/ProcessorSearchBar.css # frontend/editor/src/processor/components/Sidebar.css # frontend/editor/src/processor/components/Sidebar.tsx # frontend/editor/src/processor/components/account-link/ConnectCallbackHost.tsx # frontend/editor/src/processor/components/account-link/ConnectCallbackView.tsx # frontend/editor/src/processor/components/account-link/ConnectGuardedRoute.tsx # frontend/editor/src/processor/components/account-link/LinkAccountModal.test.tsx # frontend/editor/src/processor/components/account-link/LinkAccountModal.tsx # frontend/editor/src/processor/components/account-link/LinkGate.tsx # frontend/editor/src/processor/components/account-link/connect/ConnectAskStep.tsx # frontend/editor/src/processor/components/account-link/connect/ConnectBenefitsSlide.stories.tsx # frontend/editor/src/processor/components/account-link/connect/ConnectBenefitsSlide.tsx # frontend/editor/src/processor/components/account-link/connect/ConnectDoneSlide.test.tsx # frontend/editor/src/processor/components/account-link/connect/ConnectDoneSlide.tsx # frontend/editor/src/processor/components/account-link/connect/ConnectHandoffGhost.tsx # frontend/editor/src/processor/components/account-link/connect/connect.css # frontend/editor/src/processor/components/billing/FreePlanView.tsx # frontend/editor/src/processor/components/billing/LinkAccountPrompt.stories.tsx # frontend/editor/src/processor/components/billing/LinkAccountPrompt.tsx # frontend/editor/src/processor/components/billing/ProcessorBillingGate.test.tsx # frontend/editor/src/processor/components/billing/ProcessorBillingGate.tsx # frontend/editor/src/processor/components/docs/EndpointReferenceSection.tsx # frontend/editor/src/processor/components/pipelines/PipelineInputTrigger.tsx # frontend/editor/src/processor/components/policies/PolicyDetailPanel.tsx # frontend/editor/src/processor/components/policies/PolicySetupWizard.tsx # frontend/editor/src/processor/components/shared/StepModalHeader.css # frontend/editor/src/processor/components/shared/StepModalHeader.tsx # frontend/editor/src/processor/contexts/LinkContext.tsx # frontend/editor/src/processor/hooks/useAccountLink.test.tsx # frontend/editor/src/processor/hooks/useAccountLink.ts # frontend/editor/src/processor/hooks/useConnectGate.test.tsx # frontend/editor/src/processor/hooks/useConnectGate.ts # frontend/editor/src/processor/hooks/useConnectHandoff.ts # frontend/editor/src/processor/hooks/useConnectPrompt.test.tsx # frontend/editor/src/processor/hooks/useConnectPrompt.ts # frontend/editor/src/processor/hooks/useDevConnectBypass.test.tsx # frontend/editor/src/processor/hooks/useDevConnectBypass.ts # frontend/editor/src/processor/mocks/handlers/link.ts # frontend/editor/src/processor/queries/sharing.test.tsx # frontend/editor/src/processor/queryClient.test.tsx # frontend/editor/src/processor/views/ConnectCallback.css # frontend/editor/src/processor/views/ConnectCallback.test.tsx # frontend/editor/src/processor/views/ConnectCallback.tsx # frontend/editor/src/processor/views/Integrations.tsx # frontend/editor/src/processor/views/PipelineBuilder.css # frontend/editor/src/processor/views/PipelineBuilder.tsx # frontend/editor/src/processor/views/Pipelines.gated.test.tsx # frontend/editor/src/processor/views/Pipelines.tsx # frontend/editor/src/processor/views/Policies.tsx # frontend/editor/src/processor/views/Sources.gated.test.tsx # frontend/editor/src/processor/views/Sources.tsx # frontend/editor/src/processor/views/Users.caching.test.tsx # frontend/editor/src/processor/views/Users.gated.test.tsx # frontend/editor/src/processor/views/Users.tsx # frontend/editor/src/processor/views/teamMyCache.saas.test.ts # frontend/editor/src/proprietary/App.tsx # frontend/editor/src/proprietary/data/processorEntitySearch.ts # frontend/editor/src/proprietary/data/processorSearchIndex.ts # frontend/editor/src/proprietary/hooks/useOtherAppSwitch.ts # frontend/editor/src/proprietary/routes/adminRouteExtensions.tsx # frontend/editor/src/saas/App.tsx # frontend/editor/src/saas/hooks/useOtherAppSwitch.ts
350 lines
11 KiB
YAML
350 lines
11 KiB
YAML
version: '3'
|
|
|
|
output: prefixed
|
|
|
|
vars:
|
|
FIND_FREE_PORT_PS: powershell -NoProfile -File scripts/find-free-port.ps1
|
|
FIND_FREE_PORT_SH: bash scripts/find-free-port.sh
|
|
|
|
includes:
|
|
backend:
|
|
taskfile: .taskfiles/backend.yml
|
|
dir: .
|
|
frontend:
|
|
taskfile: .taskfiles/frontend.yml
|
|
dir: frontend
|
|
engine:
|
|
taskfile: .taskfiles/engine.yml
|
|
dir: engine
|
|
docker:
|
|
taskfile: .taskfiles/docker.yml
|
|
dir: .
|
|
desktop:
|
|
taskfile: .taskfiles/desktop.yml
|
|
dir: frontend
|
|
e2e:
|
|
taskfile: .taskfiles/e2e.yml
|
|
dir: .
|
|
cucumber:
|
|
taskfile: .taskfiles/cucumber.yml
|
|
dir: testing/cucumber
|
|
pre-commit:
|
|
taskfile: .taskfiles/pre-commit.yml
|
|
dir: .
|
|
|
|
tasks:
|
|
# ============================================================
|
|
# Help (shown when you run `task` with no arguments)
|
|
# ============================================================
|
|
|
|
default:
|
|
desc: "List the most common commands"
|
|
silent: true
|
|
cmds:
|
|
- |
|
|
echo "Common commands (run 'task --list' to see all):"
|
|
echo ""
|
|
echo " task dev Start backend & frontend on free ports"
|
|
echo " task backend:dev Start backend on default port"
|
|
echo " task frontend:dev Start frontend on default port"
|
|
echo " task desktop:dev Start desktop app"
|
|
echo " task check Quality gate (lint, typecheck, test, etc.)"
|
|
|
|
# ============================================================
|
|
# Setup & Prerequisites
|
|
# ============================================================
|
|
|
|
install:
|
|
desc: "Install all project dependencies"
|
|
cmds:
|
|
- task: frontend:install
|
|
- task: engine:install
|
|
|
|
# ============================================================
|
|
# Development
|
|
# ============================================================
|
|
|
|
dev:
|
|
desc: "Start backend + frontend concurrently on free ports"
|
|
vars:
|
|
PORTS:
|
|
sh: '{{if eq OS "windows"}}{{.FIND_FREE_PORT_PS}} 8080 5173{{else}}{{.FIND_FREE_PORT_SH}} 8080 5173{{end}}'
|
|
BACKEND_PORT: '{{index (splitList "\n" .PORTS) 0}}'
|
|
FRONTEND_PORT: '{{index (splitList "\n" .PORTS) 1}}'
|
|
deps:
|
|
- task: backend:dev
|
|
vars:
|
|
PORT: '{{.BACKEND_PORT}}'
|
|
- task: frontend:dev
|
|
vars:
|
|
PORT: '{{.FRONTEND_PORT}}'
|
|
BACKEND_URL: 'http://localhost:{{.BACKEND_PORT}}'
|
|
OPEN: "true"
|
|
|
|
dev:processor:
|
|
desc: "Start backend + editor; the processor is an admin route at /processor"
|
|
vars:
|
|
PORTS:
|
|
sh: '{{if eq OS "windows"}}{{.FIND_FREE_PORT_PS}} 8080 5173{{else}}{{.FIND_FREE_PORT_SH}} 8080 5173{{end}}'
|
|
BACKEND_PORT: '{{index (splitList "\n" .PORTS) 0}}'
|
|
EDITOR_PORT: '{{index (splitList "\n" .PORTS) 1}}'
|
|
deps:
|
|
- task: backend:dev
|
|
vars:
|
|
PORT: '{{.BACKEND_PORT}}'
|
|
SECURITY_ENABLELOGIN: "true"
|
|
- task: frontend:dev:proprietary
|
|
vars:
|
|
PORT: '{{.EDITOR_PORT}}'
|
|
BACKEND_URL: 'http://localhost:{{.BACKEND_PORT}}'
|
|
OPEN: "true"
|
|
|
|
# Set SAAS_DEV_PROJECT_REF in app/.env.saas.local to pick the PR.
|
|
dev:saas:
|
|
desc: "Start SaaS backend + frontend + engine against the current PR's preview branch"
|
|
cmds:
|
|
- task: dev:_all
|
|
vars: { FRONTEND: saas, BACKEND: saas, SAAS_ENV: dev }
|
|
|
|
staging:saas:
|
|
desc: "Start SaaS backend + frontend + engine against the shared v3 staging project"
|
|
cmds:
|
|
- task: dev:_all
|
|
vars:
|
|
FRONTEND: saas
|
|
BACKEND: saas
|
|
BACKEND_TASK: backend:staging:saas
|
|
SAAS_ENV: staging
|
|
|
|
dev:all:
|
|
desc: "Start backend + frontend + engine concurrently on free ports"
|
|
cmds:
|
|
- task: dev:_all
|
|
|
|
# No engine: linking never calls it.
|
|
linked:staging:
|
|
desc: "SaaS on the shared v3 project + a self-hosted instance linked to it"
|
|
cmds:
|
|
- task: linked:_all
|
|
vars: { SAAS_ENV: staging }
|
|
|
|
linked:dev:
|
|
desc: "SaaS on the current PR's preview branch + a self-hosted instance linked to it"
|
|
cmds:
|
|
- task: linked:_all
|
|
vars: { SAAS_ENV: dev }
|
|
|
|
linked:_all:
|
|
internal: true
|
|
vars:
|
|
SAAS_ENV: '{{.SAAS_ENV | default "staging"}}'
|
|
PORTS:
|
|
sh: '{{if eq OS "windows"}}{{.FIND_FREE_PORT_PS}} 8081 5174 8080 5173{{else}}{{.FIND_FREE_PORT_SH}} 8081 5174 8080 5173{{end}}'
|
|
SAAS_BACKEND_PORT: '{{index (splitList "\n" .PORTS) 0}}'
|
|
SAAS_FRONTEND_PORT: '{{index (splitList "\n" .PORTS) 1}}'
|
|
APP_BACKEND_PORT: '{{index (splitList "\n" .PORTS) 2}}'
|
|
APP_FRONTEND_PORT: '{{index (splitList "\n" .PORTS) 3}}'
|
|
deps:
|
|
# APP_BASE_URL is the SaaS *frontend*: the approval page is served by vite, not
|
|
# by the API. BASE_PATH moves this backend's configs/pipeline aside so it does not
|
|
# race the self-hosted one, which keeps ./configs and its existing database.
|
|
- task: 'backend:{{.SAAS_ENV}}:saas'
|
|
vars:
|
|
PORT: '{{.SAAS_BACKEND_PORT}}'
|
|
APP_BASE_URL: 'http://localhost:{{.SAAS_FRONTEND_PORT}}'
|
|
BASE_PATH: 'tmp/linked-saas'
|
|
- task: frontend:dev:saas
|
|
vars:
|
|
PORT: '{{.SAAS_FRONTEND_PORT}}'
|
|
BACKEND_URL: 'http://localhost:{{.SAAS_BACKEND_PORT}}'
|
|
SAAS_ENV: '{{.SAAS_ENV}}'
|
|
- task: backend:dev:linked
|
|
vars:
|
|
PORT: '{{.APP_BACKEND_PORT}}'
|
|
SAAS_BASE_URL: 'http://localhost:{{.SAAS_BACKEND_PORT}}'
|
|
- task: frontend:dev:proprietary
|
|
vars:
|
|
PORT: '{{.APP_FRONTEND_PORT}}'
|
|
BACKEND_URL: 'http://localhost:{{.APP_BACKEND_PORT}}'
|
|
OPEN: "true"
|
|
- task: linked:_ready
|
|
vars:
|
|
SAAS_BACKEND_PORT: '{{.SAAS_BACKEND_PORT}}'
|
|
SAAS_FRONTEND_PORT: '{{.SAAS_FRONTEND_PORT}}'
|
|
APP_BACKEND_PORT: '{{.APP_BACKEND_PORT}}'
|
|
APP_FRONTEND_PORT: '{{.APP_FRONTEND_PORT}}'
|
|
|
|
# Waits for all four to answer, then prints where they landed.
|
|
linked:_ready:
|
|
internal: true
|
|
cmds:
|
|
- cmd: |
|
|
n=0
|
|
ok=0
|
|
while [ "$n" -lt 150 ]; do
|
|
ok=1
|
|
for u in "http://localhost:{{.SAAS_BACKEND_PORT}}" \
|
|
"http://localhost:{{.SAAS_FRONTEND_PORT}}" \
|
|
"http://localhost:{{.APP_BACKEND_PORT}}" \
|
|
"http://localhost:{{.APP_FRONTEND_PORT}}"; do
|
|
# Not -o /dev/null: Windows curl.exe treats it as a real path and exits 23.
|
|
curl -s -m 2 "$u" >/dev/null 2>&1 || ok=0
|
|
done
|
|
if [ "$ok" = 1 ]; then break; fi
|
|
n=$((n + 1))
|
|
# `sleep` is a binary, not a builtin, and Windows has none.
|
|
{{if eq OS "windows"}}powershell -NoProfile -Command "Start-Sleep -Seconds 2"{{else}}sleep 2{{end}}
|
|
done
|
|
echo ""
|
|
if [ "$ok" = 1 ]; then
|
|
echo ">> all four answering"
|
|
else
|
|
echo ">> still waiting on one or more after 5 minutes; addresses below anyway"
|
|
fi
|
|
echo ">> self-hosted UI http://localhost:{{.APP_FRONTEND_PORT}}/processor"
|
|
echo ">> self-hosted api http://localhost:{{.APP_BACKEND_PORT}}"
|
|
echo ">> saas UI http://localhost:{{.SAAS_FRONTEND_PORT}}"
|
|
echo ">> saas api http://localhost:{{.SAAS_BACKEND_PORT}}"
|
|
echo ""
|
|
|
|
dev:_all:
|
|
internal: true
|
|
vars:
|
|
FRONTEND: '{{.FRONTEND | default "proprietary"}}'
|
|
BACKEND: '{{.BACKEND | default "proprietary"}}'
|
|
BACKEND_TASK: '{{.BACKEND_TASK | default (printf "backend:dev:%s" .BACKEND)}}'
|
|
# Only meaningful to the saas frontend; every other flavor ignores it.
|
|
SAAS_ENV: '{{.SAAS_ENV | default ""}}'
|
|
PORTS:
|
|
sh: '{{if eq OS "windows"}}{{.FIND_FREE_PORT_PS}} 8080 5173 5001{{else}}{{.FIND_FREE_PORT_SH}} 8080 5173 5001{{end}}'
|
|
BACKEND_PORT: '{{index (splitList "\n" .PORTS) 0}}'
|
|
FRONTEND_PORT: '{{index (splitList "\n" .PORTS) 1}}'
|
|
ENGINE_PORT: '{{index (splitList "\n" .PORTS) 2}}'
|
|
deps:
|
|
- task: engine:dev
|
|
vars:
|
|
PORT: '{{.ENGINE_PORT}}'
|
|
- task: '{{.BACKEND_TASK}}'
|
|
vars:
|
|
PORT: '{{.BACKEND_PORT}}'
|
|
AIENGINE_URL: 'http://localhost:{{.ENGINE_PORT}}'
|
|
AIENGINE_ENABLED: "true"
|
|
- task: 'frontend:dev:{{.FRONTEND}}'
|
|
vars:
|
|
PORT: '{{.FRONTEND_PORT}}'
|
|
BACKEND_URL: 'http://localhost:{{.BACKEND_PORT}}'
|
|
OPEN: "true"
|
|
SAAS_ENV: '{{.SAAS_ENV}}'
|
|
|
|
# ============================================================
|
|
# Build
|
|
# ============================================================
|
|
|
|
build:
|
|
desc: "Build all components"
|
|
cmds:
|
|
- task: backend:build
|
|
- task: frontend:build
|
|
|
|
# ============================================================
|
|
# Test
|
|
# ============================================================
|
|
|
|
test:
|
|
desc: "Run ALL tests (backend + frontend + engine)"
|
|
cmds:
|
|
- task: backend:test
|
|
- task: frontend:test
|
|
- task: engine:test
|
|
|
|
# ============================================================
|
|
# Lint & Format
|
|
# ============================================================
|
|
|
|
lint:
|
|
desc: "Run all linters"
|
|
cmds:
|
|
- task: frontend:lint
|
|
- task: engine:lint
|
|
- task: comment-lint
|
|
|
|
comment-lint:
|
|
desc: "Check comment quality on the lines this branch adds"
|
|
aliases: [comments]
|
|
cmds:
|
|
- task: pre-commit:comment-lint
|
|
vars: { CLI_ARGS: '{{.CLI_ARGS}}' }
|
|
|
|
comment-lint:branch:
|
|
desc: "Check comment quality on everything this branch adds over its base"
|
|
cmds:
|
|
- task: pre-commit:comment-lint:branch
|
|
vars: { BASE: '{{.BASE}}' }
|
|
|
|
fix:
|
|
desc: "Auto-fix all components"
|
|
cmds:
|
|
- task: backend:fix
|
|
- task: frontend:fix
|
|
- task: engine:fix
|
|
|
|
format:
|
|
desc: "Auto-fix formatting across all components"
|
|
cmds:
|
|
- task: backend:format
|
|
- task: frontend:format
|
|
- task: engine:format
|
|
|
|
format:check:
|
|
desc: "Check formatting across all components"
|
|
cmds:
|
|
- task: backend:format:check
|
|
- task: frontend:format:check
|
|
- task: engine:format:check
|
|
|
|
# ============================================================
|
|
# Code generation
|
|
# ============================================================
|
|
|
|
tool-models:
|
|
desc: "Generate all API models from the Java OpenAPI spec"
|
|
cmds:
|
|
- task: frontend:tool-models
|
|
- task: engine:tool-models
|
|
|
|
tool-models:check:
|
|
desc: "Fail if any committed API model is out of date"
|
|
cmds:
|
|
- task: frontend:tool-models:check
|
|
- task: engine:tool-models:check
|
|
|
|
# ============================================================
|
|
# Quality Gate
|
|
# ============================================================
|
|
|
|
check:
|
|
desc: "Quick quality gate for local development"
|
|
cmds:
|
|
- task: backend:check
|
|
- task: frontend:check
|
|
- task: engine:check
|
|
|
|
check:all:
|
|
desc: "Full CI quality gate"
|
|
cmds:
|
|
- task: backend:check
|
|
- task: frontend:check:all
|
|
- task: engine:check
|
|
|
|
# ============================================================
|
|
# Clean
|
|
# ============================================================
|
|
|
|
clean:
|
|
desc: "Clean all build artifacts"
|
|
cmds:
|
|
- task: backend:clean
|
|
- task: frontend:clean
|
|
- task: engine:clean
|
|
- task: pre-commit:clean
|