.PHONY: help clean compile shell test eunit test-api test-all \ dialyzer xref cover docs release run stop logs # Цвета для вывода (только для команд, где нужны) GREEN := \033[0;32m YELLOW := \033[1;33m RED := \033[0;31m BLUE := \033[0;34m NC := \033[0m # Переменные REBAR3 := rebar3 SNAME := eventhub SHELL := /bin/bash # ============================================================================ # HELP # ============================================================================ help: ## Показать это сообщение @echo "EventHub - Makefile команды:" @echo "" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \ awk 'BEGIN {FS = ":.*?## "}; {printf " %-20s %s\n", $$1, $$2}' # ============================================================================ # BUILD # ============================================================================ compile: ## Скомпилировать проект @echo "Компиляция проекта..." @$(REBAR3) clean compile @echo "✓ Компиляция завершена" clean: ## Очистить проект @echo "Очистка проекта..." @$(REBAR3) clean @rm -rf _build deps logs *.log @echo "✓ Очистка завершена" deps: ## Установить зависимости @echo "Установка зависимостей..." @$(REBAR3) get-deps @echo "✓ Зависимости установлены" update-deps: ## Обновить зависимости @echo "Обновление зависимостей..." @$(REBAR3) update-deps @echo "✓ Зависимости обновлены" # ============================================================================ # DEVELOPMENT # ============================================================================ shell: ## Запустить интерактивную оболочку @echo "Запуск Erlang shell..." @$(REBAR3) shell --sname $(SNAME) run: ## Запустить приложение (foreground) @echo "Запуск приложения..." @$(REBAR3) shell --sname $(SNAME) test-server: ## Запустить тестовый сервер в фоне @echo "Cleaning old data..." @rm -rf Mnesia.* @pkill -f "beam.*eventhub_test" 2>/dev/null || true @echo "Starting server..." @rebar3 shell --sname eventhub_test /tmp/eventhub_test.log 2>&1 & @echo "PID: $$!" @for i in 1 2 3 4 5 6 7 8 9 10; do \ if curl -s http://localhost:8080/health | grep -q "ok"; then \ echo "✓ Server ready at http://localhost:8080"; \ break; \ fi; \ sleep 1; \ done stop: ## Остановить приложение @echo "Остановка приложения..." @pkill -f "rebar3 shell --sname $(SNAME)" || true @pkill -f "beam.*$(SNAME)" || true @echo "✓ Приложение остановлено" restart: stop run ## Перезапустить приложение # ============================================================================ # TESTING # ============================================================================ test: eunit ## Запустить все тесты (алиас для eunit) eunit: ## Запустить EUnit тесты @echo "Запуск EUnit тестов..." @$(REBAR3) eunit --sname $(SNAME)_test eunit-module: ## Запустить тесты для модуля (make eunit-module MODULE=core_calendar_tests) @echo "Запуск тестов для модуля $(MODULE)..." @$(REBAR3) eunit --sname $(SNAME)_test --module=$(MODULE) eunit-verbose: ## Запустить EUnit тесты с подробным выводом @echo "Запуск EUnit тестов (verbose)..." @$(REBAR3) eunit --sname $(SNAME)_test --verbose test-search-unit: ## Запустить unit-тесты поиска @echo "Запуск unit-тестов поиска (logic)..." @$(REBAR3) eunit --sname test_search1 --module=logic_search_tests test-search-handler: ## Запустить handler тесты поиска @echo "Запуск handler тестов поиска..." @$(REBAR3) eunit --sname test_search2 --module=handler_search_tests test-api: ## Запустить API тесты (авто-запуск сервера) @./test/scripts/run_tests.sh test-full: ## Полный цикл тестирования @./test/scripts/run_tests.sh $(PATTERN) test-full-search: ## Полный цикл для поиска @./test/scripts/run_tests.sh search test-full-booking: ## Полный цикл для бронирований @./test/scripts/run_tests.sh booking test-api-existing: ## Запустить API тесты на уже работающем сервере @chmod +x test/scripts/*.sh @cd test/scripts && ./test_runner.sh -s $(PATTERN) test-server-stop: ## Остановить тестовый сервер @pkill -f "beam.*eventhub" 2>/dev/null || true @echo "✓ Servers stopped" @rm -rf Mnesia.* 2>/dev/null || true test-runner: ## Запустить тесты с фильтром (make test-runner PATTERN=booking) @chmod +x test/scripts/*.sh @cd test/scripts && ./test_runner.sh $(PATTERN) test-quick: ## Запустить тесты используя уже запущенный сервер @chmod +x test/scripts/*.sh @cd test/scripts && ./test_runner.sh -s $(PATTERN) test-auth: ## Запустить тесты аутентификации @chmod +x test/scripts/test_auth_api.sh @./test/scripts/test_auth_api.sh test-calendar: ## Запустить тесты календарей @chmod +x test/scripts/test_calendar_api.sh @./test/scripts/test_calendar_api.sh test-event: ## Запустить тесты событий @chmod +x test/scripts/test_event_api.sh @./test/scripts/test_event_api.sh test-booking: ## Запустить тесты бронирований @chmod +x test/scripts/test_booking_api.sh @./test/scripts/test_booking_api.sh test-all: eunit ## Запустить ВСЕ тесты (EUnit + API) @sleep 1 make test-api @echo "========================================" @echo " ВСЕ ТЕСТЫ ПРОЙДЕНЫ!" @echo "========================================" # ============================================================================ # CODE QUALITY # ============================================================================ dialyzer: ## Запустить Dialyzer (статический анализ) @echo "Запуск Dialyzer..." @$(REBAR3) dialyzer @echo "✓ Dialyzer завершён" xref: ## Запустить Xref (кросс-ссылки) @echo "Запуск Xref..." @$(REBAR3) xref @echo "✓ Xref завершён" cover: ## Запустить тесты с покрытием кода @echo "Запуск тестов с покрытием..." @$(REBAR3) eunit --sname $(SNAME)_test --cover @$(REBAR3) cover --verbose @echo "✓ Отчёт о покрытии в _build/test/cover/" docs: ## Сгенерировать документацию (EDoc) @echo "Генерация документации..." @$(REBAR3) edoc @echo "✓ Документация в doc/" # ============================================================================ # RELEASE & DOCKER # ============================================================================ release: ## Собрать релиз @echo "Сборка релиза..." @$(REBAR3) as prod release @echo "✓ Релиз собран в _build/prod/rel/eventhub/" docker-build: ## Собрать Docker образ @echo "Сборка Docker образа..." @docker build -t eventhub:latest . @echo "✓ Docker образ собран" docker-run: ## Запустить Docker контейнер @echo "Запуск Docker контейнера..." @docker run -p 8080:8080 -p 8445:8445 --name eventhub eventhub:latest docker-stop: ## Остановить Docker контейнер @echo "Остановка Docker контейнера..." @docker stop eventhub || true @docker rm eventhub || true @echo "✓ Контейнер остановлен" # ============================================================================ # UTILITIES # ============================================================================ status: ## Проверить статус сервера @echo "Проверка статуса сервера..." @if curl -s http://localhost:8080/health > /dev/null 2>&1; then \ echo "✓ Сервер запущен на http://localhost:8080"; \ curl -s http://localhost:8080/health; \ else \ echo "✗ Сервер не запущен"; \ fi tree: ## Показать структуру проекта @tree -I '_build|deps|logs|.git' --dirsfirst 2>/dev/null || ls -la info: ## Показать информацию о проекте @echo "EventHub - информация о проекте:" @echo "" @echo "API эндпоинты:" @echo " POST /v1/register - Регистрация" @echo " POST /v1/login - Логин" @echo " POST /v1/refresh - Обновление токена" @echo " GET /v1/user/me - Профиль" @echo " POST /v1/calendars - Создание календаря" @echo " GET /v1/calendars - Список календарей" @echo " POST /v1/calendars/:id/events - Создание события" @echo " POST /v1/events/:id/bookings - Запись на событие" @echo "" @echo "Порты:" @echo " HTTP API: 8080" @echo " Admin HTTP: 8445" # ============================================================================ # DEVELOPMENT WORKFLOW # ============================================================================ dev-setup: deps compile ## Настроить окружение для разработки @echo "✓ Окружение настроено" dev-test: ## Быстрый цикл: compile + eunit @make compile @make eunit # ============================================================================ # GIT HELPERS # ============================================================================ git-status: ## Показать статус Git @git status --short git-log: ## Показать лог Git (последние 10) @git log --oneline -10 git-save: ## Сохранить изменения (commit + push) @read -p "Сообщение коммита: " msg; \ git add .; \ git commit -m "$$msg"; \ git push # ============================================================================ # DEFAULT # ============================================================================ .DEFAULT_GOAL := help