.PHONY: help build run test clean docker-build docker-run docker-stop install-deps # Переменные BINARY_NAME=go-webhook-server DOCKER_IMAGE=go-webhook-server DOCKER_CONTAINER=go-webhook-server BUILD_DIR=cmd/server # Помощь help: ## Показать справку по командам @echo "Доступные команды:" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' # Установка зависимостей install-deps: ## Установить Go зависимости go mod download go mod tidy # Сборка build: install-deps ## Собрать бинарный файл @echo "Сборка $(BINARY_NAME)..." go build -o $(BINARY_NAME) $(BUILD_DIR)/main.go @echo "Сборка завершена: $(BINARY_NAME)" # Запуск run: build ## Запустить сервис локально @echo "Запуск $(BINARY_NAME)..." ./$(BINARY_NAME) # Запуск без сборки run-dev: ## Запустить сервис в режиме разработки @echo "Запуск в режиме разработки..." cd $(BUILD_DIR) && go run main.go # Тестирование test: install-deps ## Запустить тесты @echo "Запуск тестов..." go test -v ./internal/... go test -v ./pkg/... # Тестирование с покрытием test-coverage: install-deps ## Запустить тесты с покрытием @echo "Запуск тестов с покрытием..." go test -v -coverprofile=coverage.out ./internal/... go test -v -coverprofile=pkg-coverage.out ./pkg/... go tool cover -html=coverage.out -o coverage.html go tool cover -html=pkg-coverage.out -o pkg-coverage.html @echo "Отчеты покрытия созданы: coverage.html, pkg-coverage.html" # Очистка clean: ## Очистить собранные файлы @echo "Очистка..." rm -f $(BINARY_NAME) rm -f coverage.out pkg-coverage.out rm -f coverage.html pkg-coverage.html @echo "Очистка завершена" # Docker команды docker-build: ## Собрать Docker образ @echo "Сборка Docker образа..." docker build -t $(DOCKER_IMAGE) . @echo "Docker образ собран: $(DOCKER_IMAGE)" docker-run: docker-build ## Запустить Docker контейнер @echo "Запуск Docker контейнера..." docker run -d \ --name $(DOCKER_CONTAINER) \ -p 3000:3000 \ -v obsidian_repo:/obsidian:ro \ -v quartz_repo:/quartz:ro \ -v public_site:/public \ $(DOCKER_IMAGE) @echo "Docker контейнер запущен: $(DOCKER_CONTAINER)" docker-stop: ## Остановить Docker контейнер @echo "Остановка Docker контейнера..." docker stop $(DOCKER_CONTAINER) || true docker rm $(DOCKER_CONTAINER) || true @echo "Docker контейнер остановлен" docker-logs: ## Показать логи Docker контейнера docker logs -f $(DOCKER_CONTAINER) # Docker Compose команды compose-up: ## Запустить сервис через Docker Compose @echo "Запуск через Docker Compose..." docker-compose up -d @echo "Сервис запущен" compose-down: ## Остановить сервис через Docker Compose @echo "Остановка через Docker Compose..." docker-compose down @echo "Сервис остановлен" compose-logs: ## Показать логи Docker Compose docker-compose logs -f # Проверка состояния status: ## Показать статус сервиса @echo "Проверка статуса сервиса..." @curl -s http://localhost:3000/health || echo "Сервис недоступен" # Webhook тест test-webhook: ## Отправить тестовый webhook @echo "Отправка тестового webhook..." @curl -X POST http://localhost:3000/webhook @echo "" # Проверка структуры lint: ## Проверить код линтером @echo "Проверка кода..." @if command -v golangci-lint > /dev/null; then \ golangci-lint run; \ else \ echo "golangci-lint не установлен. Установите: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest"; \ fi # Форматирование кода fmt: ## Отформатировать код @echo "Форматирование кода..." go fmt ./... @echo "Код отформатирован" # Проверка зависимостей deps-check: ## Проверить зависимости @echo "Проверка зависимостей..." go mod verify go list -m all # Полная пересборка rebuild: clean build ## Полная пересборка проекта # Разработка dev: ## Запуск в режиме разработки с автоперезагрузкой @echo "Запуск в режиме разработки..." @if command -v air > /dev/null; then \ air; \ else \ echo "Air не установлен. Установите: go install github.com/cosmtrek/air@latest"; \ cd $(BUILD_DIR) && go run main.go; \ fi # Создание структуры проекта create-structure: ## Создать структуру директорий @echo "Создание структуры проекта..." mkdir -p cmd/server mkdir -p internal/{config,handlers,services,middleware} mkdir -p pkg/logger mkdir -p api mkdir -p configs mkdir -p tests/{unit,integration} mkdir -p scripts mkdir -p docs mkdir -p deployments @echo "Структура проекта создана"