.PHONY: build build-linux build-windows clean test help # Переменные BINARY_NAME=port-knocker VERSION=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") BUILD_TIME=$(shell date -u '+%Y-%m-%d_%H:%M:%S') LDFLAGS=-ldflags "-X main.Version=${VERSION} -X main.BuildTime=${BUILD_TIME} -s -w" # Цвета для вывода GREEN=\033[0;32m NC=\033[0m # No Color help: ## Показать справку @echo "$(GREEN)Port Knocker - Утилита для port knocking$(NC)" @echo "" @echo "Доступные команды:" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " $(GREEN)%-15s$(NC) %s\n", $$1, $$2}' build: ## Собрать для текущей платформы @echo "$(GREEN)Сборка для текущей платформы...$(NC)" go build ${LDFLAGS} -o ${BINARY_NAME} . build-linux: ## Собрать для Linux (amd64) @echo "$(GREEN)Сборка для Linux (amd64)...$(NC)" GOOS=linux GOARCH=amd64 go build ${LDFLAGS} -o ${BINARY_NAME}-linux-amd64 . build-windows: ## Собрать для Windows (amd64) @echo "$(GREEN)Сборка для Windows (amd64)...$(NC)" GOOS=windows GOARCH=amd64 go build ${LDFLAGS} -o ${BINARY_NAME}-windows-amd64.exe . build-all: build-linux build-windows ## Собрать для всех платформ test: ## Запустить тесты @echo "$(GREEN)Запуск тестов...$(NC)" go test -v ./... clean: ## Очистить собранные файлы @echo "$(GREEN)Очистка...$(NC)" rm -f ${BINARY_NAME}* rm -f *.exe install: build ## Установить в систему @echo "$(GREEN)Установка...$(NC)" sudo cp ${BINARY_NAME} /usr/local/bin/ uninstall: ## Удалить из системы @echo "$(GREEN)Удаление...$(NC)" sudo rm -f /usr/local/bin/${BINARY_NAME} deps: ## Установить зависимости @echo "$(GREEN)Установка зависимостей...$(NC)" go mod tidy go mod download example-encrypt: ## Пример шифрования конфигурации @echo "$(GREEN)Шифрование примера конфигурации...$(NC)" ./${BINARY_NAME} encrypt -c examples/config.yaml -o examples/config.encrypted -k examples/key.txt example-decrypt: ## Пример расшифровки зашифрованной конфигурации @echo "$(GREEN)Расшифровка зашифрованной конфигурации...$(NC)" ./${BINARY_NAME} decrypt -c examples/config.encrypted -o examples/config.decrypted.yaml -k examples/key.txt example-encrypt-alt: ## Пример шифрования с опцией -i @echo "$(GREEN)Шифрование с опцией -i...$(NC)" ./${BINARY_NAME} encrypt -i examples/config.yaml -o examples/config.encrypted -k examples/key.txt example-run: ## Пример запуска с обычной конфигурацией @echo "$(GREEN)Запуск с обычной конфигурацией...$(NC)" ./${BINARY_NAME} -c examples/config.yaml -v example-inline: ## Пример запуска с инлайн целями @echo "$(GREEN)Запуск с инлайн целями...$(NC)" ./${BINARY_NAME} -t "tcp:192.168.1.1:22;tcp:192.168.1.1:80;udp:192.168.1.1:53" -d 500ms -v example-inline-simple: ## Простой пример с одной целью @echo "$(GREEN)Простой пример с одной целью...$(NC)" ./${BINARY_NAME} -t "tcp:127.0.0.1:22" -v release-tag: ## Создать git tag для release (например: make release-tag VERSION=v1.0.0) @if [ -z "$(VERSION)" ]; then \ echo "Использование: make release-tag VERSION=v1.0.0"; \ exit 1; \ fi @echo "$(GREEN)Создание тега $(VERSION)...$(NC)" git tag -a $(VERSION) -m "Release $(VERSION)" git push origin $(VERSION) check-git: ## Проверить git статус перед коммитом @echo "$(GREEN)Проверка git статуса...$(NC)" git status @echo "" @echo "$(GREEN)Файлы в .gitignore:$(NC)" @echo "- *knock*.yaml (конфигурации с 'knock' в имени)" @echo "- *.encrypted (зашифрованные файлы)" @echo "- Бинарные файлы и ключи"