256 lines
7.9 KiB
Bash
256 lines
7.9 KiB
Bash
#!/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
|