Files
Senko-san 6883dce24d build: force BuildKit in Makefile so RUN --mount cache works on Linux
Legacy Docker builders fall back without BuildKit and fail on
`RUN --mount=type=cache`. Export DOCKER_BUILDKIT and
COMPOSE_DOCKER_CLI_BUILD for all make targets.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 13:36:36 +03:00

111 lines
3.5 KiB
Makefile

# mycoolmusicapp — dev workflow shortcuts.
# `make` or `make help` lists targets.
COMPOSE := docker compose
# Force BuildKit so `RUN --mount=type=cache` works everywhere (older/Linux
# Docker engines otherwise fall back to the legacy builder and fail the build).
export DOCKER_BUILDKIT := 1
export COMPOSE_DOCKER_CLI_BUILD := 1
.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