refactor: разделение кода на пакеты и улучшение архитектуры
- Создана новая структура проекта с разделением на пакеты - Добавлены интерфейсы для всех сервисов (Git, Quartz, Files, Build) - Реализован Dependency Injection для сервисов - Добавлены middleware для логирования, Request ID и Response Time - Создан пакет конфигурации с валидацией - Улучшено логирование через интерфейс - Добавлены обработчики HTTP в отдельных пакетах - Создана структура для тестирования - Добавлены конфигурационные файлы и документация
This commit is contained in:
155
Makefile-refactored
Normal file
155
Makefile-refactored
Normal file
@@ -0,0 +1,155 @@
|
||||
.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 "Структура проекта создана"
|
||||
Reference in New Issue
Block a user