120 lines
4.5 KiB
Makefile
120 lines
4.5 KiB
Makefile
.PHONY: build clean run test install help
|
|
|
|
# Переменные
|
|
BINARY_NAME=vpn-client
|
|
BINARY_UNIX=$(BINARY_NAME)
|
|
BINARY_WINDOWS=$(BINARY_NAME).exe
|
|
GO=go
|
|
GOFLAGS=-ldflags="-s -w"
|
|
|
|
# Цвета для вывода
|
|
GREEN=\033[0;32m
|
|
NC=\033[0m # No Color
|
|
|
|
help: ## Показать справку
|
|
@echo "Доступные команды:"
|
|
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}'
|
|
|
|
build: ## Собрать для текущей платформы
|
|
@echo "$(GREEN)Сборка VPN Client...$(NC)"
|
|
$(GO) mod download
|
|
$(GO) build $(GOFLAGS) -o $(BINARY_NAME) main.go
|
|
@echo "$(GREEN)✓ Сборка завершена: $(BINARY_NAME)$(NC)"
|
|
|
|
build-all: ## Собрать для всех платформ
|
|
@echo "$(GREEN)Сборка для всех платформ...$(NC)"
|
|
@$(MAKE) build-linux
|
|
@$(MAKE) build-windows
|
|
@$(MAKE) build-darwin
|
|
@echo "$(GREEN)✓ Сборка для всех платформ завершена$(NC)"
|
|
|
|
build-linux: ## Собрать для Linux
|
|
@echo "$(GREEN)Сборка для Linux...$(NC)"
|
|
GOOS=linux GOARCH=amd64 $(GO) build $(GOFLAGS) -o $(BINARY_UNIX)-linux-amd64 main.go
|
|
@echo "$(GREEN)✓ Linux: $(BINARY_UNIX)-linux-amd64$(NC)"
|
|
|
|
build-windows: ## Собрать для Windows
|
|
@echo "$(GREEN)Сборка для Windows...$(NC)"
|
|
GOOS=windows GOARCH=amd64 $(GO) build $(GOFLAGS) -o $(BINARY_WINDOWS) main.go
|
|
@echo "$(GREEN)✓ Windows: $(BINARY_WINDOWS)$(NC)"
|
|
|
|
build-darwin: ## Собрать для macOS
|
|
@echo "$(GREEN)Сборка для macOS...$(NC)"
|
|
GOOS=darwin GOARCH=amd64 $(GO) build $(GOFLAGS) -o $(BINARY_UNIX)-darwin-amd64 main.go
|
|
GOOS=darwin GOARCH=arm64 $(GO) build $(GOFLAGS) -o $(BINARY_UNIX)-darwin-arm64 main.go
|
|
@echo "$(GREEN)✓ macOS Intel: $(BINARY_UNIX)-darwin-amd64$(NC)"
|
|
@echo "$(GREEN)✓ macOS ARM: $(BINARY_UNIX)-darwin-arm64$(NC)"
|
|
|
|
run: build ## Собрать и запустить
|
|
@echo "$(GREEN)Запуск VPN Client...$(NC)"
|
|
./$(BINARY_NAME)
|
|
|
|
test: ## Запустить тесты
|
|
@echo "$(GREEN)Запуск тестов...$(NC)"
|
|
$(GO) test -v ./...
|
|
|
|
clean: ## Очистить собранные файлы
|
|
@echo "$(GREEN)Очистка...$(NC)"
|
|
$(GO) clean
|
|
rm -f $(BINARY_NAME)
|
|
rm -f $(BINARY_WINDOWS)
|
|
rm -f $(BINARY_UNIX)-*
|
|
@echo "$(GREEN)✓ Очистка завершена$(NC)"
|
|
|
|
install: build ## Установить в систему
|
|
@echo "$(GREEN)Установка VPN Client...$(NC)"
|
|
@if [ "$(shell uname)" = "Linux" ] || [ "$(shell uname)" = "Darwin" ]; then \
|
|
sudo cp $(BINARY_NAME) /usr/local/bin/; \
|
|
sudo chmod +x /usr/local/bin/$(BINARY_NAME); \
|
|
echo "$(GREEN)✓ Установлено в /usr/local/bin/$(BINARY_NAME)$(NC)"; \
|
|
else \
|
|
echo "Установка поддерживается только на Linux и macOS"; \
|
|
fi
|
|
|
|
uninstall: ## Удалить из системы
|
|
@echo "$(GREEN)Удаление VPN Client...$(NC)"
|
|
@if [ "$(shell uname)" = "Linux" ] || [ "$(shell uname)" = "Darwin" ]; then \
|
|
sudo rm -f /usr/local/bin/$(BINARY_NAME); \
|
|
echo "$(GREEN)✓ Удалено из /usr/local/bin/$(BINARY_NAME)$(NC)"; \
|
|
else \
|
|
echo "Удаление поддерживается только на Linux и macOS"; \
|
|
fi
|
|
|
|
deps: ## Установить зависимости
|
|
@echo "$(GREEN)Установка зависимостей...$(NC)"
|
|
$(GO) mod download
|
|
$(GO) mod tidy
|
|
@echo "$(GREEN)✓ Зависимости установлены$(NC)"
|
|
|
|
fmt: ## Форматировать код
|
|
@echo "$(GREEN)Форматирование кода...$(NC)"
|
|
$(GO) fmt ./...
|
|
@echo "$(GREEN)✓ Код отформатирован$(NC)"
|
|
|
|
lint: ## Проверить код линтером
|
|
@echo "$(GREEN)Проверка кода...$(NC)"
|
|
@if command -v golangci-lint > /dev/null; then \
|
|
golangci-lint run; \
|
|
else \
|
|
echo "golangci-lint не установлен. Установите: https://golangci-lint.run/usage/install/"; \
|
|
fi
|
|
|
|
dev: ## Режим разработки (сборка и запуск при изменениях)
|
|
@echo "$(GREEN)Режим разработки...$(NC)"
|
|
@if command -v air > /dev/null; then \
|
|
air; \
|
|
else \
|
|
echo "air не установлен. Установите: go install github.com/cosmtrek/air@latest"; \
|
|
echo "Запуск обычной сборки..."; \
|
|
$(MAKE) run; \
|
|
fi
|
|
|
|
size: build ## Показать размер бинарника
|
|
@echo "$(GREEN)Размер бинарника:$(NC)"
|
|
@ls -lh $(BINARY_NAME) | awk '{print $$5 " " $$9}'
|
|
|
|
version: ## Показать версию Go
|
|
@$(GO) version
|
|
|
|
.DEFAULT_GOAL := help
|