Files
go-webhook/Makefile-refactored
Andrey Epifancev 04cea69d6e refactor: разделение кода на пакеты и улучшение архитектуры
- Создана новая структура проекта с разделением на пакеты
- Добавлены интерфейсы для всех сервисов (Git, Quartz, Files, Build)
- Реализован Dependency Injection для сервисов
- Добавлены middleware для логирования, Request ID и Response Time
- Создан пакет конфигурации с валидацией
- Улучшено логирование через интерфейс
- Добавлены обработчики HTTP в отдельных пакетах
- Создана структура для тестирования
- Добавлены конфигурационные файлы и документация
2025-08-11 19:45:54 +04:00

156 lines
5.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.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 "Структура проекта создана"