Files

100 lines
3.2 KiB
Makefile

APP_MODULE=app.main:app
HOST=0.0.0.0
-include .env
APP_PORT ?= 8000
PYTHON_RUN=uv run
CONTAINER_ENGINE:=$(shell if command -v podman >/dev/null 2>&1; then echo podman; elif command -v docker >/dev/null 2>&1; then echo docker; else echo ""; fi)
COMPOSE_CMD:=$(shell if command -v podman >/dev/null 2>&1; then if podman compose version >/dev/null 2>&1; then echo "podman compose"; elif command -v podman-compose >/dev/null 2>&1; then echo podman-compose; fi; elif command -v docker >/dev/null 2>&1; then echo "docker compose"; else echo ""; fi)
.DEFAULT_GOAL := help
.PHONY: help check-engine check-compose sync run dev prod compile clean \
image-build image-run image-stop compose-up compose-down compose-logs compose-ps \
valkey-up valkey-down
help:
@echo "Targets:"
@echo " sync Install/sync dependencies via uv"
@echo " run Run API in dev mode (reload)"
@echo " dev Alias for run"
@echo " prod Run API with gunicorn via uv"
@echo " compile Compile-check Python sources"
@echo " clean Remove local virtual env and caches"
@echo " image-build Build container image with Dockerfile"
@echo " image-run Run container image (detached)"
@echo " image-stop Stop and remove running container"
@echo " compose-up Start compose stack (Podman or Docker)"
@echo " compose-down Stop compose stack"
@echo " compose-logs Follow compose logs"
@echo " compose-ps Show compose services"
@echo " valkey-up Start only Valkey service"
@echo " valkey-down Stop and remove only Valkey service"
@echo ""
@echo "Detected container engine: $(if $(CONTAINER_ENGINE),$(CONTAINER_ENGINE),none)"
@echo "Detected compose command: $(if $(COMPOSE_CMD),$(COMPOSE_CMD),none)"
check-engine:
@if [ -z "$(CONTAINER_ENGINE)" ]; then \
echo "No container engine found. Install podman or docker."; \
exit 1; \
fi
check-compose:
@if [ -z "$(COMPOSE_CMD)" ]; then \
echo "No compose command found. Install podman compose, podman-compose, or docker compose."; \
exit 1; \
fi
sync:
$(PYTHON_RUN) python --version >/dev/null
uv sync
run:
$(PYTHON_RUN) uvicorn $(APP_MODULE) --host $(HOST) --port $(APP_PORT) --reload
dev: run
prod:
$(PYTHON_RUN) gunicorn $(APP_MODULE) -k uvicorn.workers.UvicornWorker -w 4 -b $(HOST):$(APP_PORT) --access-logfile - --error-logfile -
compile:
$(PYTHON_RUN) python -m compileall app
clean:
rm -rf .venv
find . -type d -name __pycache__ -prune -exec rm -rf {} +
find . -type f -name "*.pyc" -delete
image-build: check-engine
$(CONTAINER_ENGINE) build -t lta-datamall-bus-backend:latest .
image-run: check-engine
$(CONTAINER_ENGINE) run -d --name lta-datamall-bus-backend --env-file .env -p $(APP_PORT):$(APP_PORT) lta-datamall-bus-backend:latest
image-stop: check-engine
-$(CONTAINER_ENGINE) stop lta-datamall-bus-backend
-$(CONTAINER_ENGINE) rm lta-datamall-bus-backend
compose-up: check-compose
$(COMPOSE_CMD) up --build -d
compose-down: check-compose
$(COMPOSE_CMD) down
compose-logs: check-compose
$(COMPOSE_CMD) logs -f
compose-ps: check-compose
$(COMPOSE_CMD) ps
valkey-up: check-compose
$(COMPOSE_CMD) up -d valkey
valkey-down: check-compose
$(COMPOSE_CMD) stop valkey
$(COMPOSE_CMD) rm -f valkey