version: "3" env: HBOX_STORAGE_SQLITE_URL: .data/homebox.db?_fk=1 HBOX_OPTIONS_ALLOW_REGISTRATION: true UNSAFE_DISABLE_PASSWORD_PROJECTION: "yes_i_am_sure" tasks: setup: desc: Install development dependencies cmds: - go install github.com/swaggo/swag/cmd/swag@latest - cd backend && go mod tidy - cd frontend && pnpm install --shamefully-hoist generate: desc: | Generates collateral files from the backend project including swagger docs and typescripts type for the frontend deps: - db:generate cmds: - cd backend/app/api/static && swag fmt --dir=../ - cd backend/app/api/static && swag init --dir=../,../../../internal,../../../pkgs - | npx swagger-typescript-api \ --no-client \ --modular \ --path ./backend/app/api/static/docs/swagger.json \ --output ./frontend/lib/api/types - go run ./scripts/process-types/*.go ./frontend/lib/api/types/data-contracts.ts - cp ./backend/app/api/static/docs/swagger.json docs/docs/api/openapi-2.0.json sources: - "./backend/app/api/**/*" - "./backend/internal/data/**" - "./backend/internal/services/**/*" - "./scripts/process-types.py" generates: - "./frontend/lib/api/types/data-contracts.ts" - "./backend/internal/data/ent/schema" - "./backend/app/api/static/docs/swagger.json" - "./backend/app/api/static/docs/swagger.yaml" go:run: desc: Starts the backend api server (depends on generate task) deps: - generate cmds: - cd backend && go run ./app/api/ {{ .CLI_ARGS }} silent: false go:test: desc: Runs all go tests using gotestsum - supports passing gotestsum args cmds: - cd backend && gotestsum {{ .CLI_ARGS }} ./... go:coverage: desc: Runs all go tests with -race flag and generates a coverage report cmds: - cd backend && go test -race -coverprofile=coverage.out -covermode=atomic ./app/... ./internal/... ./pkgs/... -v -cover silent: true go:tidy: desc: Runs go mod tidy on the backend cmds: - cd backend && go mod tidy go:lint: desc: Runs golangci-lint cmds: - cd backend && golangci-lint run ./... go:all: desc: Runs all go test and lint related tasks cmds: - task: go:tidy - task: go:lint - task: go:test go:build: desc: Builds the backend binary cmds: - cd backend && go build -o ../build/backend ./app/api db:generate: desc: Run Entgo.io Code Generation cmds: - | cd backend/internal/ && go generate ./... \ --template=./data/ent/schema/templates/has_id.tmpl sources: - "./backend/internal/data/ent/schema/**/*" generates: - "./backend/internal/ent/" db:migration: desc: Runs the database diff engine to generate a SQL migration files deps: - db:generate cmds: - cd backend && go run app/tools/migrations/main.go {{ .CLI_ARGS }} ui:watch: desc: Starts the vitest test runner in watch mode cmds: - cd frontend && pnpm run test:watch ui:dev: desc: Run frontend development server cmds: - cd frontend && pnpm dev ui:fix: desc: Runs prettier and eslint on the frontend cmds: - cd frontend && pnpm run lint:fix ui:check: desc: Runs type checking cmds: - cd frontend && pnpm run typecheck test:ci: desc: Runs end-to-end test on a live server (only for use in CI) cmds: - cd backend && go build ./app/api - backend/api & - sleep 5 - cd frontend && pnpm run test:ci silent: true pr: desc: Runs all tasks required for a PR cmds: - task: generate - task: go:all - task: ui:check - task: ui:fix - task: test:ci