{%- set svc_modules = [] -%} {%- if 'api' in backend_services %}{% set _ = svc_modules.append("api") %}{% endif -%} {%- if 'aiogram_bot' in backend_services %}{% set _ = svc_modules.append("bot") %}{% endif -%} {%- if 'taskiq_worker' in backend_services %}{% set _ = svc_modules.append("worker") %}{% endif -%} {%- if 'kurigram_userbot' in backend_services %}{% set _ = svc_modules.append("userbot") %}{% endif -%} {%- if 'scheduler' in backend_services and 'taskiq_worker' not in backend_services %}{% set _ = svc_modules.append("scheduler") %}{% endif -%} {%- set app_services = [] -%} {%- if 'api' in backend_services %}{% set _ = app_services.append("api") %}{% endif -%} {%- if 'aiogram_bot' in backend_services %}{% set _ = app_services.append("bot") %}{% endif -%} {%- if 'taskiq_worker' in backend_services %}{% set _ = app_services.append("worker") %}{% endif -%} {%- if 'kurigram_userbot' in backend_services %}{% set _ = app_services.append("userbot") %}{% endif -%} {%- if 'scheduler' in backend_services %}{% set _ = app_services.append("scheduler") %}{% endif -%} {%- set has_script = dynamic_config and svc_modules -%} {%- set has_scripts = dynamic_config or 'kurigram_userbot' in backend_services -%} COMPOSE := docker compose{% if layout == 'part' %} --project-directory ..{% endif %} {% if svc_modules %}IMAGE := {{ project_slug }}/backend IMAGE_INPUTS := pyproject.toml uv.lock Dockerfile CODE := src{% if has_scripts %} scripts{% endif %} SERVICES := {{ app_services | join(' ') }} changed = ! git diff --quiet $(1) -- $(2) 2>/dev/null stamp = { git update-ref $(1) HEAD 2>/dev/null || true; } {% endif %} .PHONY: {% if layout == 'root' %}env recreate rebuild restart logs down deploy {% endif %}fmt check{% if svc_modules %} build pre-deploy post-deploy{% endif %}{% if database == 'postgres' %} migrate revision{% endif %}{% if has_script %} script{% endif %}{% if 'kurigram_userbot' in backend_services %} session{% endif %} fmt: uv run ruff format uv run ruff check --fix check: uv run ruff format --check uv run ruff check uv run ty check {% if svc_modules %} build: $(COMPOSE) build {{ svc_modules[0] }} pre-deploy: @if $(call changed,refs/deploy/backend,$(IMAGE_INPUTS)) || ! docker image inspect $(IMAGE) >/dev/null 2>&1; then \ $(MAKE) build && $(call stamp,refs/deploy/backend) && $(call stamp,refs/deploy/backend-code); \ fi {% if database == 'postgres' %} @$(COMPOSE) config --services | grep -qx postgres && $(COMPOSE) up -d postgres || true $(MAKE) migrate {% endif %} post-deploy: @if $(call changed,refs/deploy/backend-code,$(CODE)); then \ running=$$($(COMPOSE) ps --services --status running | grep -x $(addprefix -e ,$(SERVICES))); \ [ -z "$$running" ] || $(COMPOSE) restart $$running; \ $(call stamp,refs/deploy/backend-code); \ fi {% endif %}{% if layout == 'root' %} env: @test -f .env || cp .env.example .env @test -f docker-compose.override.yml || cp docker-compose.override.yml.example docker-compose.override.yml recreate: $(COMPOSE) up -d --force-recreate rebuild: build $(COMPOSE) up -d restart: $(COMPOSE) restart logs: $(COMPOSE) logs -f --tail=100 down: $(COMPOSE) down {% if svc_modules %} deploy: pre-deploy $(COMPOSE) up -d $(MAKE) post-deploy {% endif %}{% endif %}{% if database == 'postgres' %} migrate: $(COMPOSE) run --rm migrator revision: $(COMPOSE) run --rm migrator revision --autogenerate -m "$(m)" {% endif %}{% if has_script %} script: @$(COMPOSE) run --rm {{ svc_modules[0] }} scripts.$(word 2,$(MAKECMDGOALS)) $(wordlist 3,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) %: @: {% endif %}{% if 'kurigram_userbot' in backend_services %} session: uv run python scripts/session/create.py {% endif %}