.PHONY: dev up down test backend-test frontend-test services-install services-test typecheck prepare release-check release-rehearsal version-check backup verify-backup restore-test backend-check dependency-check BACKEND_PYTHON := $(if $(wildcard backend/.venv/bin/python),cd backend && .venv/bin/python,cd backend && uv run --locked --extra dev --extra sdrf python) BACKEND_PYTEST := $(if $(wildcard backend/.venv/bin/pytest),cd backend && .venv/bin/pytest,cd backend && uv run --locked --extra dev --extra sdrf pytest) SERVICE_PYTHON := services/.venv/bin/python MSCONVERT_CLI_SOURCE ?= ../msconvert-cli MZMLPY_SOURCE ?= ../mzmlpy SPXTACULAR_SOURCE ?= ../spxtacular RELEASE_ENV ?= release/.env TEST_JOBS ?= 3 prepare: mkdir -p data/storage data/scratch imports dev: prepare docker compose up --build up: prepare docker compose up -d --build down: docker compose down test: version-check dependency-check +$(MAKE) --output-sync=target -j$(TEST_JOBS) backend-test frontend-test services-test dependency-check: python3 scripts/check_dependencies.py version-check: python3 scripts/check_version.py backend-check: $(BACKEND_PYTHON) -m ruff check --config pyproject.toml src tests ../scripts/check_dependencies.py $(BACKEND_PYTHON) -m mypy backend-test: backend-check $(BACKEND_PYTEST) frontend-test: cd frontend && npm test -- --run && npm run typecheck && npm run lint && npm run build services-install: uv venv --allow-existing --python 3.14 services/.venv test -f "$(MSCONVERT_CLI_SOURCE)/pyproject.toml" test -f "$(MZMLPY_SOURCE)/pyproject.toml" test -f "$(SPXTACULAR_SOURCE)/pyproject.toml" uv pip install --constraint constraints.txt --python $(SERVICE_PYTHON) "$(MSCONVERT_CLI_SOURCE)" "$(MZMLPY_SOURCE)" "$(SPXTACULAR_SOURCE)" services/agent services/converter services/extractor services/mcp services/webhooks services-test: services-install PYTHONPATH=services/agent/src $(SERVICE_PYTHON) -m unittest discover -s services/agent/tests PYTHONPATH=services/converter/src $(SERVICE_PYTHON) -m unittest discover -s services/converter/tests PYTHONPATH=services/extractor/src $(SERVICE_PYTHON) -m unittest discover -s services/extractor/tests PYTHONPATH=services/mcp/src $(SERVICE_PYTHON) -m unittest discover -s services/mcp/tests PYTHONPATH=services/webhooks/src $(SERVICE_PYTHON) -m unittest discover -s services/webhooks/tests typecheck: cd frontend && npm run typecheck release-check: version-check docker compose --env-file "$(if $(wildcard $(RELEASE_ENV)),$(RELEASE_ENV),/dev/null)" -f release/compose.yaml config --quiet release-rehearsal: version-check scripts/release-rehearsal.sh backup: test -n "$(BACKUP_DIR)" scripts/backup.sh "$(BACKUP_DIR)" verify-backup: test -n "$(BACKUP_DIR)" scripts/verify-backup.sh "$(BACKUP_DIR)" restore-test: test -n "$(BACKUP_DIR)" test -n "$(RESTORE_DIR)" scripts/restore-test.sh "$(BACKUP_DIR)" "$(RESTORE_DIR)"