Delete vendor_build.sh

This commit is contained in:
2026-05-17 14:33:43 +00:00
parent aa888132f9
commit dfb3d6e541

View File

@@ -1,412 +0,0 @@
#!/usr/bin/env bash
# Copyright 2026 Safronov Grigorii
#
# Licensed under the CDDL, Version 1.0 (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at
# https://opensource.org/licenses/CDDL-1.0
#
# Скрипт сборки futriis с использованием vendoring зависимостей
# Поддерживает Linux и Illumos (OpenIndiana)
# После внеснения изменения(й) в файл "go.mod" требует ручного обновления зависимостей командой "go mod vendor"
# Ключевые отличия от исходного build.sh:
# Использование -mod=vendor - сборка из локальной копии зависимостей
# Автоматическое создание vendor - если директория отсутствует
# Проверка актуальности vendor - сравнение времени изменения go.mod и vendor/
# Дополнительные флаги - очистка, обновление, информация
# Кросс-компиляция - поддержка сборки для других ОС
# Улучшенный вывод - цветной, информативный
#########################################
# Как использовать скрипт
########################################
# Полная сборка для всех платформ
# ./vendoring_build.sh
# Сборка только для Linux
# ./vendoring_build.sh -l
# Сборка только для Illumos
# ./vendoring_build.sh -m
# Сборка только для текущей ОС
# ./vendoring_build.sh -o
# Очистка бинарников
# ./vendoring_build.sh -c
# Полная очистка (бинарники + vendor)
# ./vendoring_build.sh -C
# Обновление зависимостей
# ./vendoring_build.sh -u
# Показать информацию о зависимостях
# ./vendoring_build.sh -i
# Показать справку
# ./vendoring_build.sh -h
set -e
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Функции для вывода сообщений
error_msg() {
echo -e "${RED}$1${NC}"
}
success_msg() {
echo -e "${GREEN}$1${NC}"
}
info_msg() {
echo -e "${BLUE}📋 $1${NC}"
}
warning_msg() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
print_separator() {
echo "================================================"
}
# Проверка наличия Go
check_go() {
info_msg "Checking Go installation..."
if ! command -v go &> /dev/null; then
error_msg "Go is not installed or not in PATH"
exit 1
fi
GO_VERSION=$(go version | awk '{print $3}')
success_msg "Go found: $GO_VERSION"
}
# Проверка и создание vendor директории
setup_vendor() {
info_msg "Checking vendor directory..."
if [ ! -d "vendor" ]; then
warning_msg "Vendor directory not found. Creating vendor dependencies..."
info_msg "Running: go mod vendor"
if go mod vendor; then
success_msg "Vendor dependencies created successfully"
else
error_msg "Failed to create vendor dependencies"
exit 1
fi
else
info_msg "Vendor directory already exists"
# Проверяем, не изменился ли go.mod
if [ -f "go.mod" ] && [ -f "vendor/modules.txt" ]; then
GO_MOD_TIME=$(stat -c %Y "go.mod" 2>/dev/null || stat -f %m "go.mod" 2>/dev/null)
VENDOR_TIME=$(stat -c %Y "vendor/modules.txt" 2>/dev/null || stat -f %m "vendor/modules.txt" 2>/dev/null)
if [ "$GO_MOD_TIME" -gt "$VENDOR_TIME" ] 2>/dev/null; then
warning_msg "go.mod is newer than vendor directory"
warning_msg "Consider running: go mod vendor"
fi
fi
fi
}
# Создание директории bin
create_bin_dir() {
if [ ! -d "bin" ]; then
info_msg "Creating bin directory..."
mkdir -p bin
success_msg "Bin directory created"
fi
}
# Сборка для Linux
build_linux() {
info_msg "Building for Linux..."
OUTPUT="bin/futriis-linux-vendor"
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -mod=vendor \
-ldflags="-s -w -X main.buildTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
-o "$OUTPUT" ./cmd/futriis
if [ $? -eq 0 ]; then
success_msg "Linux build successful: $OUTPUT"
# Копируем в корень для удобства
cp "$OUTPUT" ./futriis-linux-vendor 2>/dev/null || true
info_msg "Binary copied to: ./futriis-linux-vendor"
# Показываем размер бинарника
SIZE=$(ls -lh "$OUTPUT" | awk '{print $5}')
info_msg "Binary size: $SIZE"
else
error_msg "Linux build failed"
return 1
fi
}
# Сборка для Illumos (OpenIndiana)
build_illumos() {
info_msg "Building for Illumos (OpenIndiana)..."
OUTPUT="bin/futriis-illumos-vendor"
# Для Illumos используем теги и включаем CGO
GOOS=illumos GOARCH=amd64 CGO_ENABLED=1 go build -mod=vendor \
-tags=illumos \
-ldflags="-s -w -X main.buildTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
-o "$OUTPUT" ./cmd/futriis
if [ $? -eq 0 ]; then
success_msg "Illumos build successful: $OUTPUT"
# Копируем в корень для удобства
cp "$OUTPUT" ./futriis-illumos-vendor 2>/dev/null || true
info_msg "Binary copied to: ./futriis-illumos-vendor"
# Показываем размер бинарника
SIZE=$(ls -lh "$OUTPUT" | awk '{print $5}')
info_msg "Binary size: $SIZE"
else
error_msg "Illumos build failed"
return 1
fi
}
# Сборка для текущей ОС (для разработки)
build_current() {
info_msg "Building for current OS ($(uname -s))..."
OUTPUT="bin/futriis-current-vendor"
go build -mod=vendor \
-ldflags="-s -w -X main.buildTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
-o "$OUTPUT" ./cmd/futriis
if [ $? -eq 0 ]; then
success_msg "Current OS build successful: $OUTPUT"
# Копируем в корень для удобства
cp "$OUTPUT" ./futriis-current-vendor 2>/dev/null || true
info_msg "Binary copied to: ./futriis-current-vendor"
SIZE=$(ls -lh "$OUTPUT" | awk '{print $5}')
info_msg "Binary size: $SIZE"
else
error_msg "Current OS build failed"
return 1
fi
}
# Очистка бинарных файлов
clean() {
info_msg "Cleaning binary files..."
rm -f bin/futriis-*-vendor
rm -f ./futriis-*-vendor
success_msg "Clean completed"
}
# Очистка vendor директории
clean_vendor() {
info_msg "Cleaning vendor directory..."
rm -rf vendor
success_msg "Vendor directory removed"
}
# Обновление зависимостей
update_deps() {
info_msg "Updating dependencies..."
info_msg "Running: go get -u ./..."
go get -u ./...
info_msg "Running: go mod tidy"
go mod tidy
info_msg "Running: go mod vendor"
go mod vendor
success_msg "Dependencies updated"
}
# Показать информацию о зависимостях
show_deps() {
info_msg "Project dependencies:"
echo ""
if [ -f "go.mod" ]; then
echo "Direct dependencies:"
go list -m all | head -20
echo ""
fi
if [ -d "vendor" ]; then
echo "Vendor directory size:"
du -sh vendor 2>/dev/null || echo "Cannot determine size"
echo ""
echo "Number of packages in vendor:"
find vendor -name "*.go" 2>/dev/null | wc -l
fi
}
# Показать справку
show_help() {
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Options:"
echo " -h, --help Show this help message"
echo " -c, --clean Clean build artifacts"
echo " -C, --clean-all Clean build artifacts and vendor directory"
echo " -u, --update Update dependencies and rebuild vendor"
echo " -i, --info Show dependency information"
echo " -l, --linux Build only for Linux"
echo " -m, --illumos Build only for Illumos"
echo " -o, --only-os Build only for current OS"
echo ""
echo "Examples:"
echo " $0 # Build for all supported platforms"
echo " $0 -l # Build only for Linux"
echo " $0 -c # Clean build artifacts"
echo " $0 -u # Update dependencies and rebuild"
}
# Основная функция
main() {
print_separator
echo -e "${GREEN}🔨 Building futriis database with vendoring${NC}"
print_separator
# Определяем ОС
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
info_msg "Detected OS: $OS"
# Обработка аргументов командной строки
BUILD_LINUX=true
BUILD_ILLUMOS=true
BUILD_CURRENT=false
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-c|--clean)
clean
exit 0
;;
-C|--clean-all)
clean
clean_vendor
exit 0
;;
-u|--update)
update_deps
exit 0
;;
-i|--info)
show_deps
exit 0
;;
-l|--linux)
BUILD_LINUX=true
BUILD_ILLUMOS=false
BUILD_CURRENT=false
shift
;;
-m|--illumos)
BUILD_LINUX=false
BUILD_ILLUMOS=true
BUILD_CURRENT=false
shift
;;
-o|--only-os)
BUILD_LINUX=false
BUILD_ILLUMOS=false
BUILD_CURRENT=true
shift
;;
*)
error_msg "Unknown option: $1"
show_help
exit 1
;;
esac
done
# Проверяем Go
check_go
# Создаём vendor зависимости
setup_vendor
# Создаём bin директорию
create_bin_dir
print_separator
# Сборка
BUILD_FAILED=0
if [ "$BUILD_CURRENT" = true ]; then
if ! build_current; then
BUILD_FAILED=1
fi
else
if [ "$BUILD_LINUX" = true ] && [ "$OS" != "linux" ]; then
info_msg "Cross-compiling for Linux..."
if ! build_linux; then
BUILD_FAILED=1
fi
elif [ "$BUILD_LINUX" = true ] && [ "$OS" = "linux" ]; then
if ! build_current; then
BUILD_FAILED=1
fi
fi
if [ "$BUILD_ILLUMOS" = true ] && [ "$OS" != "sunos" ] && [ "$OS" != "illumos" ]; then
info_msg "Cross-compiling for Illumos..."
if ! build_illumos; then
BUILD_FAILED=1
fi
elif [ "$BUILD_ILLUMOS" = true ] && ([ "$OS" = "sunos" ] || [ "$OS" = "illumos" ]); then
if ! build_current; then
BUILD_FAILED=1
fi
fi
fi
print_separator
if [ $BUILD_FAILED -eq 0 ]; then
success_msg "All builds completed successfully!"
# Показываем список созданных бинарников
echo ""
info_msg "Generated binaries:"
ls -lh bin/futriis-*-vendor 2>/dev/null || echo " No binaries in bin/"
echo ""
info_msg "To run the database:"
echo " ./futriis-linux-vendor # On Linux"
echo " ./futriis-illumos-vendor # On Illumos/OpenIndiana"
else
error_msg "Some builds failed"
exit 1
fi
}
# Запуск основной функции
main "$@"