Files
crr-shifts/Makefile
T

81 lines
2.4 KiB
Makefile

COMPOSE ?= docker compose
COMPOSE_DEV = PORT=$(PORT) $(COMPOSE) -f docker-compose.dev.yml
PYTHON ?= .venv/bin/python
PORT ?= 8000
RUNTIME ?= local
ifeq ($(RUNTIME),docker)
RUN_PYTHON = $(COMPOSE_DEV) run --rm --build app python
else ifeq ($(RUNTIME),local)
RUN_PYTHON = $(PYTHON)
else
$(error RUNTIME must be local or docker)
endif
.DEFAULT_GOAL := help
.PHONY: help setup dev-setup dev dev-up dev-down dev-logs check test-docker migrate revision init-db seed-demo db-shell reminders
help:
@echo "Local: make dev-setup && make seed-demo && make dev"
@echo "Docker: make seed-demo RUNTIME=docker && make dev-up"
@echo "Checks: make check (isolated from your development database)"
@echo "Data: make db-shell; make migrate; make revision m='description'"
@echo " Add RUNTIME=docker to run database commands in Docker."
@echo "Port: make dev PORT=8080 or make dev-up PORT=8080"
# Preserve an existing configuration and any populated database.
setup:
@test -f .env || cp .env.example .env
@mkdir -p data
# Host virtualenv, used for local debugging only. Checks always run in Docker.
dev-setup: setup
@python3 -c 'import sys; sys.exit("Python 3.12+ is required; use Docker or install a newer Python.") if sys.version_info < (3, 12) else None'
python3 -m venv .venv
$(PYTHON) -m pip install --upgrade pip
$(PYTHON) -m pip install -r requirements-dev.txt
# Host run with auto-reload, for fast debugging.
dev: setup
@test -x $(PYTHON) || (echo "Run 'make dev-setup' first." && exit 1)
$(PYTHON) -m uvicorn app.main:app --reload --port $(PORT) --proxy-headers --forwarded-allow-ips '*'
# Full app in Docker with bind mounts and auto-reload.
dev-up: setup
$(COMPOSE_DEV) up --build
dev-down:
$(COMPOSE_DEV) down
dev-logs:
$(COMPOSE_DEV) logs -f app
# Compile check plus the test suite, inside Docker.
check:
$(COMPOSE_DEV) --profile check run --rm --build checks
test-docker:
$(MAKE) check
# Apply database migrations (also runs automatically on app start).
migrate: setup
$(RUN_PYTHON) -m app.cli migrate
# Autogenerate a migration: make revision m="add something"
revision: setup
@test -n "$(m)" || (echo 'Use make revision m="short description"' && exit 1)
$(RUN_PYTHON) -m alembic revision --autogenerate -m "$(m)"
init-db: setup
$(RUN_PYTHON) -m app.cli init-db
seed-demo: setup
$(RUN_PYTHON) -m app.cli seed-demo
db-shell: setup
$(RUN_PYTHON) -m app.cli db-shell
reminders: setup
$(RUN_PYTHON) -m app.cli send-reminders