diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..c809de1 --- /dev/null +++ b/build.sh @@ -0,0 +1,255 @@ +#!/bin/bash +# /futriis/build.sh +# Bash-скрипт для сборки проекта futriis на Unix-системах (Solaris, OpenIndiana, Linux) +# При запуске без параметров выполняет полную сборку проекта: установка зависимостей, +# сборка сервера, сборка клиента и очистка кеша. + +# Цвета для вывода +GREEN='\033[1;32m' +RED='\033[1;91m' # Изменено с 0;31 на 1;91 для более яркого красного +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