106 lines
3.2 KiB
Makefile
106 lines
3.2 KiB
Makefile
# mycoolmusicapp — dev workflow shortcuts.
|
|
# `make` or `make help` lists targets.
|
|
|
|
COMPOSE := docker compose
|
|
|
|
.DEFAULT_GOAL := help
|
|
.PHONY: help env up build rebuild down stop restart ps logs logs-api logs-webui \
|
|
sh-api sh-webui db-shell redis-cli migrate makemigration downgrade \
|
|
test test-api test-webui lint fmt clean prune \
|
|
prod-build prod-build-api prod-build-webui
|
|
|
|
help: ## Show this help
|
|
@grep -hE '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
|
|
| awk 'BEGIN{FS=":.*?## "}{printf " \033[36m%-18s\033[0m %s\n", $$1, $$2}'
|
|
|
|
env: ## Create .env from .env.example (no overwrite)
|
|
@test -f .env || cp .env.example .env && echo ".env ready"
|
|
|
|
## ---- lifecycle -------------------------------------------------------
|
|
up: env ## Build (if needed) + start the full dev stack
|
|
$(COMPOSE) up --build
|
|
|
|
build: ## Build all images
|
|
$(COMPOSE) build
|
|
|
|
rebuild: ## Rebuild images with no cache
|
|
$(COMPOSE) build --no-cache
|
|
|
|
down: ## Stop and remove containers
|
|
$(COMPOSE) down
|
|
|
|
stop: ## Stop containers (keep them)
|
|
$(COMPOSE) stop
|
|
|
|
restart: ## Restart all services
|
|
$(COMPOSE) restart
|
|
|
|
ps: ## Show container status
|
|
$(COMPOSE) ps
|
|
|
|
## ---- logs ------------------------------------------------------------
|
|
logs: ## Tail logs (all services)
|
|
$(COMPOSE) logs -f --tail=100
|
|
|
|
logs-api: ## Tail api logs
|
|
$(COMPOSE) logs -f --tail=100 api
|
|
|
|
logs-webui: ## Tail webui logs
|
|
$(COMPOSE) logs -f --tail=100 webui
|
|
|
|
## ---- shells ----------------------------------------------------------
|
|
sh-api: ## Shell into the api container
|
|
$(COMPOSE) exec api bash
|
|
|
|
sh-webui: ## Shell into the webui container
|
|
$(COMPOSE) exec webui sh
|
|
|
|
db-shell: ## psql into the database
|
|
$(COMPOSE) exec db psql -U $${POSTGRES_USER:-mcma} -d $${POSTGRES_DB:-mcma}
|
|
|
|
redis-cli: ## redis-cli into redis
|
|
$(COMPOSE) exec redis redis-cli
|
|
|
|
## ---- database migrations (alembic) -----------------------------------
|
|
migrate: ## Apply latest migrations
|
|
$(COMPOSE) exec api alembic upgrade head
|
|
|
|
makemigration: ## Autogenerate a migration: make makemigration m="msg"
|
|
$(COMPOSE) exec api alembic revision --autogenerate -m "$(m)"
|
|
|
|
downgrade: ## Roll back one migration
|
|
$(COMPOSE) exec api alembic downgrade -1
|
|
|
|
## ---- quality ---------------------------------------------------------
|
|
test: test-api test-webui ## Run all tests
|
|
|
|
test-api: ## Run backend tests
|
|
$(COMPOSE) exec api pytest
|
|
|
|
test-webui: ## Run frontend tests
|
|
$(COMPOSE) exec webui npm test
|
|
|
|
lint: ## Lint backend + frontend
|
|
$(COMPOSE) exec api ruff check .
|
|
$(COMPOSE) exec webui npm run lint
|
|
|
|
fmt: ## Format backend + frontend
|
|
$(COMPOSE) exec api ruff format .
|
|
$(COMPOSE) exec webui npm run format
|
|
|
|
## ---- cleanup ---------------------------------------------------------
|
|
clean: ## Stop + remove containers AND volumes (DESTROYS db data)
|
|
$(COMPOSE) down -v
|
|
|
|
prune: ## Docker system prune (dangling images/build cache)
|
|
docker system prune -f
|
|
|
|
## ---- production image builds (no compose yet) ------------------------
|
|
prod-build: prod-build-api prod-build-webui ## Build both prod images
|
|
|
|
prod-build-api: ## Build the backend prod image
|
|
docker build -f mcma-backend/dockerfiles/Dockerfile.prod -t mcma-backend:prod ./mcma-backend
|
|
|
|
prod-build-webui: ## Build the webui prod image
|
|
docker build -f mcma-webui/dockerfiles/Dockerfile.prod -t mcma-webui:prod ./mcma-webui
|