futriis/build.sh

256 lines
7.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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