Files
doorman/Makefile
2025-12-02 19:19:57 -05:00

111 lines
4.0 KiB
Makefile

SHELL := /bin/bash
# Read configuration from .env files
PORT ?= $(shell grep '^PORT=' backend-services/.env 2>/dev/null | cut -d'=' -f2 || grep '^PORT=' .env 2>/dev/null | cut -d'=' -f2 || echo 3001)
HTTPS_ONLY ?= $(shell grep '^HTTPS_ONLY=' backend-services/.env 2>/dev/null | cut -d'=' -f2 || grep '^HTTPS_ONLY=' .env 2>/dev/null | cut -d'=' -f2 || echo false)
ADMIN_EMAIL ?= $(shell grep '^DOORMAN_ADMIN_EMAIL=' backend-services/.env 2>/dev/null | cut -d'=' -f2 || grep '^DOORMAN_ADMIN_EMAIL=' .env 2>/dev/null | cut -d'=' -f2)
ADMIN_PASSWORD ?= $(shell grep '^DOORMAN_ADMIN_PASSWORD=' backend-services/.env 2>/dev/null | cut -d'=' -f2 || grep '^DOORMAN_ADMIN_PASSWORD=' .env 2>/dev/null | cut -d'=' -f2)
# Construct BASE_URL from PORT and HTTPS_ONLY (can still override on CLI)
PROTOCOL := $(shell [ "$(HTTPS_ONLY)" = "true" ] && echo "https" || echo "http")
BASE_URL ?= $(PROTOCOL)://localhost:$(PORT)
# Set to 1 when running tests against Doorman in Docker (affects test server host references)
DOORMAN_IN_DOCKER ?= 0
.PHONY: unit unitq live liveq live-docker liveq-docker smoke soak preflight
unit:
cd backend-services && pytest
unitq:
cd backend-services && pytest -q
live:
cd backend-services/live-tests && \
DOORMAN_BASE_URL=$(BASE_URL) \
DOORMAN_ADMIN_EMAIL=$(ADMIN_EMAIL) \
DOORMAN_ADMIN_PASSWORD=$(ADMIN_PASSWORD) \
DOORMAN_IN_DOCKER=$(DOORMAN_IN_DOCKER) \
pytest
liveq:
cd backend-services/live-tests && \
DOORMAN_BASE_URL=$(BASE_URL) \
DOORMAN_ADMIN_EMAIL=$(ADMIN_EMAIL) \
DOORMAN_ADMIN_PASSWORD=$(ADMIN_PASSWORD) \
DOORMAN_IN_DOCKER=$(DOORMAN_IN_DOCKER) \
pytest -q
# Run live tests against Doorman running in Docker
live-docker:
cd backend-services/live-tests && \
DOORMAN_BASE_URL=$(BASE_URL) \
DOORMAN_ADMIN_EMAIL=$(ADMIN_EMAIL) \
DOORMAN_ADMIN_PASSWORD=$(ADMIN_PASSWORD) \
DOORMAN_IN_DOCKER=1 \
pytest
liveq-docker:
cd backend-services/live-tests && \
DOORMAN_BASE_URL=$(BASE_URL) \
DOORMAN_ADMIN_EMAIL=$(ADMIN_EMAIL) \
DOORMAN_ADMIN_PASSWORD=$(ADMIN_PASSWORD) \
DOORMAN_IN_DOCKER=1 \
pytest -q
# Lightweight readiness + platform smoke (optionally gateway if SMOKE_UPSTREAM_URL provided)
smoke preflight:
BASE_URL=$(BASE_URL) \
DOORMAN_ADMIN_EMAIL=$(ADMIN_EMAIL) \
DOORMAN_ADMIN_PASSWORD=$(ADMIN_PASSWORD) \
bash scripts/preflight.sh
# Placeholder: requires k6/locust. Provide your own script path via SOAK_SCRIPT.
soak:
@echo "Define SOAK_SCRIPT and ARGS to run your soak tool, e.g.:" ; \
echo " SOAK_SCRIPT=scripts/k6-rest-smoke.js ARGS='-d 1h -u 200' make soak" ; \
if [[ -n "$(SOAK_SCRIPT)" ]]; then \
k6 run $(ARGS) $(SOAK_SCRIPT) ; \
else \
echo "No SOAK_SCRIPT provided" ; \
fi
.PHONY: coverage-unit coverage-html coverage-all
coverage-unit:
cd backend-services && \
coverage run -m pytest && \
coverage report -m
coverage-html:
cd backend-services && \
coverage run -m pytest && \
coverage html -d coverage_html && \
echo "HTML report at backend-services/coverage_html/index.html"
# Runs server under coverage (parallel mode), executes live-tests, then combines
coverage-all:
BASE_URL=$(BASE_URL) DOORMAN_ADMIN_EMAIL=$(ADMIN_EMAIL) DOORMAN_ADMIN_PASSWORD=$(ADMIN_PASSWORD) \
bash scripts/coverage_all.sh
.PHONY: clean clean-deep
# Remove common local build/test artifacts without touching dependencies
clean:
@echo "Cleaning caches and runtime artifacts..."
@find . -type d -name "__pycache__" -prune -exec rm -rf {} + || true
@find . -type d -name ".pytest_cache" -prune -exec rm -rf {} + || true
@find . -type f -name "*.py[co]" -delete || true
@find . -type f -name ".DS_Store" -delete || true
@rm -rf backend-services/platform-logs/*.log backend-services/doorman.pid doorman.pid uvicorn.pid || true
@rm -rf web-client/.next || true
@rm -f pytest_backend_verbose.log || true
@echo "Done."
# Deeper cleanup that also removes generated dev artifacts
clean-deep: clean
@echo "Removing generated dev artifacts..."
@rm -rf generated backend-services/generated || true
@echo "Done."