- Создана новая структура проекта с разделением на пакеты - Добавлены интерфейсы для всех сервисов (Git, Quartz, Files, Build) - Реализован Dependency Injection для сервисов - Добавлены middleware для логирования, Request ID и Response Time - Создан пакет конфигурации с валидацией - Улучшено логирование через интерфейс - Добавлены обработчики HTTP в отдельных пакетах - Создана структура для тестирования - Добавлены конфигурационные файлы и документация
156 lines
5.6 KiB
Plaintext
156 lines
5.6 KiB
Plaintext
.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 "Структура проекта создана"
|