#!/bin/bash # /futriis/build.sh # Bash-скрипт для сборки проекта futriis на Unix-системах (Solaris, OpenIndiana, Linux) # При запуске без параметров выполняет полную сборку проекта: установка зависимостей, # сборка сервера, сборка клиента и очистка кеша. # Цвета для вывода GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' # No Color # Проверка операционной системы UNAME_S=$(uname -s) if [ "$UNAME_S" != "Linux" ] && [ "$UNAME_S" != "SunOS" ]; then echo -e "${RED}Ошибка: Операционная система $UNAME_S не поддерживается. Проект поддерживает только Solaris, OpenIndiana и Linux.${NC}" exit 1 fi # Переменные BINARY_NAME="futriis" SERVER_BINARY_NAME="futriisd" BUILD_DIR="build" CMD_DIR="./cmd/futriis" # Функция для отображения разделителя print_separator() { echo -e "${CYAN}════════════════════════════════════════════════════════════════${NC}" } # Функция для отображения заголовка print_header() { echo -e "${YELLOW}▶ $1${NC}" } # Функция для отображения успеха print_success() { echo -e "${GREEN}✓ $1${NC}" } # Функция для отображения ошибки print_error() { echo -e "${RED}✗ $1${NC}" } # Создание директории для сборки create_build_dir() { if [ ! -d "$BUILD_DIR" ]; then mkdir -p "$BUILD_DIR" mkdir -p "$BUILD_DIR/plugins" mkdir -p "$BUILD_DIR/data" print_success "Создана директория сборки: $BUILD_DIR" fi } # Установка зависимостей deps() { print_header "Установка зависимостей..." go mod download if [ $? -ne 0 ]; then print_error "Ошибка при загрузке зависимостей" return 1 fi go mod tidy if [ $? -ne 0 ]; then print_error "Ошибка при обновлении go.mod" return 1 fi print_success "Зависимости установлены" return 0 } # Сборка клиента build_client() { print_header "Сборка клиента для $UNAME_S..." create_build_dir go build -ldflags="-s -w" -o "$BUILD_DIR/$BINARY_NAME" "$CMD_DIR" if [ $? -eq 0 ]; then print_success "Клиент собран: $BUILD_DIR/$BINARY_NAME" return 0 else print_error "Ошибка сборки клиента" return 1 fi } # Сборка сервера build_server() { print_header "Сборка сервера для $UNAME_S..." create_build_dir go build -ldflags="-s -w" -o "$BUILD_DIR/$SERVER_BINARY_NAME" "$CMD_DIR" if [ $? -eq 0 ]; then print_success "Сервер собран: $BUILD_DIR/$SERVER_BINARY_NAME" return 0 else print_error "Ошибка сборки сервера" return 1 fi } # Очистка кеша Go clean_cache() { print_header "Очистка кеша сборки Go..." go clean -cache if [ $? -eq 0 ]; then print_success "Кеш сборки очищен" return 0 else print_error "Ошибка при очистке кеша" return 1 fi } # Полная сборка проекта full_build() { echo print_separator echo -e "${GREEN} F U T R I I S - Полная сборка проекта${NC}" print_separator echo local errors=0 # Шаг 1: Установка зависимостей deps if [ $? -ne 0 ]; then errors=$((errors + 1)) fi echo # Шаг 2: Сборка сервера build_server if [ $? -ne 0 ]; then errors=$((errors + 1)) fi echo # Шаг 3: Сборка клиента build_client if [ $? -ne 0 ]; then errors=$((errors + 1)) fi echo # Шаг 4: Очистка кеша clean_cache if [ $? -ne 0 ]; then errors=$((errors + 1)) fi echo # Итоговый отчёт print_separator if [ $errors -eq 0 ]; then echo -e "${GREEN}✅ СБОРКА УСПЕШНО ЗАВЕРШЕНА${NC}" echo -e "${GREEN} Сервер: $BUILD_DIR/$SERVER_BINARY_NAME${NC}" echo -e "${GREEN} Клиент: $BUILD_DIR/$BINARY_NAME${NC}" else echo -e "${RED}❌ СБОРКА ЗАВЕРШЕНА С ОШИБКАМИ ($errors ошибок)${NC}" fi print_separator echo # Показываем размер бинарных файлов if [ -f "$BUILD_DIR/$SERVER_BINARY_NAME" ]; then SERVER_SIZE=$(du -h "$BUILD_DIR/$SERVER_BINARY_NAME" | cut -f1) echo -e "Размер сервера: ${YELLOW}$SERVER_SIZE${NC}" fi if [ -f "$BUILD_DIR/$BINARY_NAME" ]; then CLIENT_SIZE=$(du -h "$BUILD_DIR/$BINARY_NAME" | cut -f1) echo -e "Размер клиента: ${YELLOW}$CLIENT_SIZE${NC}" fi echo } # Функция для отображения справки show_help() { echo "Использование: ./build.sh [КОМАНДА]" echo echo "Доступные команды:" echo " (без параметров) - полная сборка проекта (зависимости + сервер + клиент + очистка)" echo " deps - только установка зависимостей" echo " build - только сборка клиента" echo " build-server - только сборка сервера" echo " install - установка проекта в систему" echo " run - сборка и запуск клиента" echo " run-server - сборка и запуск сервера" echo " test - запуск тестов" echo " clean - очистка директории сборки" echo " clean-cache - только очистка кеша Go" echo " help - показать эту справку" echo } # Обработка аргументов командной строки case "$1" in deps) deps ;; build) build_client ;; build-server) build_server ;; install) echo -e "${GREEN}Установка проекта...${NC}" go install -ldflags="-s -w" "$CMD_DIR" if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Установка завершена${NC}" else echo -e "${RED}✗ Ошибка установки${NC}" exit 1 fi ;; run) build_client && "./$BUILD_DIR/$BINARY_NAME" ;; run-server) build_server && "./$BUILD_DIR/$SERVER_BINARY_NAME" -server -config config.toml ;; test) echo -e "${GREEN}Запуск тестов...${NC}" go test -v ./... ;; clean) echo -e "${GREEN}Очистка...${NC}" rm -rf "$BUILD_DIR" go clean echo -e "${GREEN}✓ Очистка завершена${NC}" ;; clean-cache) clean_cache ;; help|"") if [ "$1" = "" ]; then full_build else show_help fi ;; *) echo -e "${RED}Неизвестная команда: $1${NC}" show_help exit 1 ;; esac exit 0