# Makefile для GPIO Monitor Server .PHONY: all build clean run test fmt lint help install dev # Переменные APP_NAME := gpio-monitor-server CMD_PATH := ./cmd/server BUILD_DIR := ./build BINARY := $(BUILD_DIR)/$(APP_NAME) WEB_DIR := ./cmd/server/web # Целевая платформа (по умолчанию) GOOS ?= linux GOARCH ?= arm64 # Флаги сборки LDFLAGS := -ldflags="-s -w" # Цвета для вывода RED := \033[0;31m GREEN := \033[0;32m YELLOW := \033[0;33m NC := \033[0m # No Color # ============================================ # ОСНОВНЫЕ ЦЕЛИ # ============================================ all: help ## build - Полная сборка проекта (фронтенд + бекенд) build: build-frontend build-backend @echo "$(GREEN)Сборка завершена!$(NC)" @ls -lh $(BINARY) ## build-frontend - Сборка TypeScript фронтенда build-frontend: @echo "$(YELLOW)Сборка TypeScript фронтенда...$(NC)" @cd $(WEB_DIR) && \ if [ ! -d "node_modules" ]; then \ echo " Установка npm зависимостей..."; \ npm install; \ fi && \ echo " Компиляция TypeScript..." && \ npm run build && \ echo "$(GREEN) TypeScript скомпилирован успешно!$(NC)" ## build-backend - Сборка Go сервера build-backend: @echo "$(YELLOW)🔧 Сборка Go сервера...$(NC)" @mkdir -p $(BUILD_DIR) @echo " Целевая платформа: $(GOOS)/$(GOARCH)" @GOOS=$(GOOS) GOARCH=$(GOARCH) go build $(LDFLAGS) -o $(BINARY) $(CMD_PATH) @echo "$(GREEN) Go сервер скомпилирован успешно!$(NC)" ## run - Запуск сервера (сборка + запуск) run: build @echo "$(YELLOW)Запуск сервера...$(NC)" @$(BINARY) ## dev - Режим разработки (без оптимизации, с hot-reload) dev: @echo "$(YELLOW) Режим разработки...$(NC)" @go run $(CMD_PATH) -port :8080 ## clean - Очистка артефактов сборки clean: @echo "$(YELLOW)Очистка...$(NC)" @rm -rf $(BUILD_DIR) @rm -rf $(WEB_DIR)/dist @rm -rf $(WEB_DIR)/node_modules @echo "$(GREEN) Очищено$(NC)" ## test - Запуск тестов test: @echo "$(YELLOW)Запуск тестов...$(NC)" @go test -v ./... ## fmt - Форматирование кода fmt: @echo "$(YELLOW) Форматирование кода...$(NC)" @go fmt ./... @cd $(WEB_DIR) && npm run format 2>/dev/null || true ## lint - Проверка кода lint: @echo "$(YELLOW) Проверка кода...$(NC)" @golangci-lint run ./... 2>/dev/null || echo " Установите golangci-lint: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest" ## deps - Установка зависимостей deps: @echo "$(YELLOW) Установка зависимостей...$(NC)" @go mod download @go mod tidy @cd $(WEB_DIR) && npm install ## install - Установка бинарника в систему install: build @echo "$(YELLOW)Установка $(APP_NAME)...$(NC)" @sudo cp $(BINARY) /usr/local/bin/$(APP_NAME) @echo "$(GREEN) Установлено в /usr/local/bin/$(APP_NAME)$(NC)" ## uninstall - Удаление из системы uninstall: @echo "$(YELLOW)Удаление $(APP_NAME)...$(NC)" @sudo rm -f /usr/local/bin/$(APP_NAME) @echo "$(GREEN)Удалено$(NC)" ## help - Показать справку help: @echo "$(GREEN)GPIO Monitor Server - команды Makefile$(NC)" @echo "" @echo "Доступные команды:" @awk '/^##/ { \ cmd = $$0; \ gsub(/^## /, "", cmd); \ printf " $(GREEN)%-20s$(NC) %s\n", $$2, cmd \ }' $(MAKEFILE_LIST) | sort @echo "" @echo "Примеры:" @echo " make build - Полная сборка" @echo " make run - Сборка и запуск" @echo " make dev - Запуск в режиме разработки" @echo " make clean - Очистка" @echo " make install - Установка в систему" # ============================================ # ДОПОЛНИТЕЛЬНЫЕ ЦЕЛИ # ============================================ ## build-arm64 - Сборка для ARM64 (Raspberry Pi) build-arm64: @$(MAKE) build GOOS=linux GOARCH=arm64 ## build-amd64 - Сборка для AMD64 build-amd64: @$(MAKE) build GOOS=linux GOARCH=amd64 ## build-mac - Сборка для macOS build-mac: @$(MAKE) build GOOS=darwin GOARCH=amd64 ## build-windows - Сборка для Windows build-windows: @$(MAKE) build GOOS=windows GOARCH=amd64 ## build-all - Сборка для всех платформ build-all: build-arm64 build-amd64 build-mac build-windows @echo "$(GREEN)Все платформы собраны$(NC)" ## docker-build - Сборка Docker образа docker-build: @echo "$(YELLOW)Сборка Docker образа...$(NC)" @docker build -t gpio-monitor:latest . ## docker-run - Запуск в Docker docker-run: @echo "$(YELLOW)Запуск в Docker...$(NC)" @docker run -p 8080:8080 gpio-monitor:latest