81 lines
2.4 KiB
Makefile
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
|