SHELL := /bin/sh BUF ?= buf .PHONY: buf-lint buf-generate py-sync py-test go-test test compose-up compose-up-dev s3-init run-server buf-lint: $(BUF) lint buf-generate: $(BUF) generate py-sync: uv sync --project python --all-packages py-test: @set -e; \ if [ -n "$${TEST:-}" ]; then \ uv run --project python --package officeconvert python -m unittest "$$TEST"; \ else \ uv run --project python --package officeconvert python -m unittest discover -s python/packages/officeconvert/tests; \ fi go-test: go test ./... test: go-test py-test compose-up: docker compose --env-file .env.example -f deploy/docker-compose.yml up --build compose-up-dev: docker compose --env-file .env.example -f deploy/docker-compose.dev.yml up s3-init: @set -a; \ if [ -f .env ]; then . ./.env; fi; \ set +a; \ endpoint="$${S3_ENDPOINT:-localhost:8333}"; \ case "$$endpoint" in seaweedfs:8333) endpoint=localhost:8333 ;; esac; \ bucket="$${S3_BUCKET:-officeconvert}"; \ access_key="$${S3_ACCESS_KEY:-minioadmin}"; \ secret_key="$${S3_SECRET_KEY:-minioadmin}"; \ port="$${endpoint#*:}"; \ docker run --rm --add-host=host.docker.internal:host-gateway minio/mc:latest /bin/sh -c " \ mc alias set local http://host.docker.internal:$$port '$$access_key' '$$secret_key' && \ mc mb local/$$bucket --ignore-existing" run-server: s3-init @set -a; \ if [ -f .env ]; then . ./.env; fi; \ set +a; \ export PYTHONPATH="$${PYTHONPATH:-gen/python:python/packages/officeconvert/src:python/packages/server/src}"; \ if [ "$${S3_ENDPOINT:-}" = "seaweedfs:8333" ]; then S3_ENDPOINT=localhost:8333; fi; \ if [ "$${S3_PUBLIC_ENDPOINT:-}" = "seaweedfs:8333" ]; then S3_PUBLIC_ENDPOINT=localhost:8333; fi; \ export S3_ENDPOINT="$${S3_ENDPOINT:-localhost:8333}"; \ export S3_PUBLIC_ENDPOINT="$${S3_PUBLIC_ENDPOINT:-localhost:8333}"; \ export S3_BUCKET="$${S3_BUCKET:-officeconvert}"; \ export S3_USE_SSL="$${S3_USE_SSL:-false}"; \ export S3_ACCESS_KEY="$${S3_ACCESS_KEY:-minioadmin}"; \ export S3_SECRET_KEY="$${S3_SECRET_KEY:-minioadmin}"; \ export S3_SESSION_TTL_SECONDS="$${S3_SESSION_TTL_SECONDS:-3600}"; \ export CONVERSION_PPTX_TO_PDF_TIMEOUT_SECONDS="$${CONVERSION_PPTX_TO_PDF_TIMEOUT_SECONDS:-180}"; \ export CONVERSION_PDF_TO_IMAGES_TIMEOUT_SECONDS="$${CONVERSION_PDF_TO_IMAGES_TIMEOUT_SECONDS:-1800}"; \ export CONVERSION_PPTX_TO_PDF_BASE_TIMEOUT_SECONDS="$${CONVERSION_PPTX_TO_PDF_BASE_TIMEOUT_SECONDS:-45}"; \ export CONVERSION_PPTX_TO_PDF_PER_SLIDE_TIMEOUT_SECONDS="$${CONVERSION_PPTX_TO_PDF_PER_SLIDE_TIMEOUT_SECONDS:-3}"; \ export CONVERSION_PDF_TO_IMAGES_BASE_TIMEOUT_SECONDS="$${CONVERSION_PDF_TO_IMAGES_BASE_TIMEOUT_SECONDS:-30}"; \ export CONVERSION_PDF_TO_IMAGES_PER_SLIDE_TIMEOUT_SECONDS="$${CONVERSION_PDF_TO_IMAGES_PER_SLIDE_TIMEOUT_SECONDS:-8}"; \ export CONVERSION_CLEANUP_DELAY_SECONDS="$${CONVERSION_CLEANUP_DELAY_SECONDS:-3600}"; \ uv run --project python --package officeconvert-server python -m uvicorn officeconvert_server.app:app --host "$${UVICORN_HOST:-0.0.0.0}" --port "$${UVICORN_PORT:-8080}"