DOCKER_COMPOSE_FILE := docker/docker-compose.yml .PHONY: dev dev-down open-api open-api-dart open-api-typescript \ build-server build-web test-server test-medium test-e2e \ lint-server lint-web format # Full development environment dev: @echo "Starting Docker services (Postgres 18 + Redis)..." docker compose -f $(DOCKER_COMPOSE_FILE) up -d @echo "Waiting for services to be healthy..." @sleep 3 # @echo "Starting web dev server (background)..." # pnpm --filter web dev & @echo "Starting NestJS server with hot reload..." DB_HOSTNAME=localhost DB_PORT=5435 DB_DATABASE_NAME=app REDIS_HOSTNAME=localhost pnpm --filter immich start:dev dev-down: docker compose -f $(DOCKER_COMPOSE_FILE) down --remove-orphans @-pkill -f "nest start" 2>/dev/null || true @-pkill -f "vite dev" 2>/dev/null || true @echo "All services stopped." # OpenAPI SDK generation open-api: cd open-api && ./bin/generate-open-api.sh open-api-dart: cd open-api && npx --yes @openapitools/openapi-generator-cli generate -g dart -i ../server/server-openapi-specs.json -o ../mobile/openapi open-api-typescript: cd open-api && npx --yes oazapfts ../server/server-openapi-specs.json --optimistic > typescript-sdk/src/fetch-client.ts # Build targets build-server: pnpm --filter immich build build-web: pnpm --filter web build # Test targets test-server: pnpm --filter immich test test-medium: pnpm --filter immich test:medium test-e2e: pnpm --filter immich-e2e test # Lint & format lint-server: pnpm --filter immich lint lint-web: pnpm --filter web lint format: pnpm format # Install dependencies install: pnpm install # Clean everything clean: docker compose -f $(DOCKER_COMPOSE_FILE) down -v --remove-orphans rm -rf node_modules server/node_modules web/node_modules e2e/node_modules