Delete vendor_build.sh
This commit is contained in:
264
vendor_build.sh
264
vendor_build.sh
@@ -1,264 +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)
|
|
||||||
# НЕ ТРЕБУЕТ GCC - использует CGO_ENABLED=0 для всех платформ
|
|
||||||
|
|
||||||
# Цвета для вывода
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m'
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Функции для вывода сообщений
|
|
||||||
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..."
|
|
||||||
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"
|
|
||||||
|
|
||||||
# Проверяем актуальность vendor
|
|
||||||
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() {
|
|
||||||
mkdir -p bin
|
|
||||||
}
|
|
||||||
|
|
||||||
# Сборка для указанной ОС (статическая, без CGO)
|
|
||||||
build_static() {
|
|
||||||
local target_os=$1
|
|
||||||
local target_arch="amd64"
|
|
||||||
local output_name="futriis-${target_os}-vendor"
|
|
||||||
|
|
||||||
info_msg "Building for ${target_os} (static, no CGO)..."
|
|
||||||
|
|
||||||
export GOOS="${target_os}"
|
|
||||||
export GOARCH="${target_arch}"
|
|
||||||
export CGO_ENABLED=0
|
|
||||||
|
|
||||||
local build_tags=""
|
|
||||||
if [ "${target_os}" = "illumos" ] || [ "${target_os}" = "solaris" ]; then
|
|
||||||
build_tags="-tags=illumos"
|
|
||||||
output_name="futriis-illumos-vendor"
|
|
||||||
elif [ "${target_os}" = "linux" ]; then
|
|
||||||
output_name="futriis-linux-vendor"
|
|
||||||
fi
|
|
||||||
|
|
||||||
local output_path="bin/${output_name}"
|
|
||||||
|
|
||||||
go build -mod=vendor ${build_tags} \
|
|
||||||
-ldflags="-s -w -X main.buildTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
|
||||||
-o "${output_path}" ./cmd/futriis
|
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
success_msg "Build successful for ${target_os}: ${output_path}"
|
|
||||||
cp "${output_path}" "./${output_name}" 2>/dev/null || true
|
|
||||||
info_msg "Binary copied to: ./${output_name}"
|
|
||||||
|
|
||||||
SIZE=$(ls -lh "${output_path}" | awk '{print $5}')
|
|
||||||
info_msg "Binary size: $SIZE"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
error_msg "Build failed for ${target_os}"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Сборка для текущей ОС
|
|
||||||
build_current() {
|
|
||||||
local os=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
||||||
info_msg "Building for current OS (${os})..."
|
|
||||||
|
|
||||||
export CGO_ENABLED=0
|
|
||||||
|
|
||||||
local output_path="bin/futriis-current-vendor"
|
|
||||||
go build -mod=vendor \
|
|
||||||
-ldflags="-s -w -X main.buildTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
|
||||||
-o "${output_path}" ./cmd/futriis
|
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
success_msg "Current OS build successful: ${output_path}"
|
|
||||||
cp "${output_path}" ./futriis-current-vendor 2>/dev/null || true
|
|
||||||
info_msg "Binary copied to: ./futriis-current-vendor"
|
|
||||||
|
|
||||||
SIZE=$(ls -lh "${output_path}" | awk '{print $5}')
|
|
||||||
info_msg "Binary size: $SIZE"
|
|
||||||
return 0
|
|
||||||
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"
|
|
||||||
}
|
|
||||||
|
|
||||||
clean_vendor() {
|
|
||||||
info_msg "Cleaning vendor directory..."
|
|
||||||
rm -rf vendor
|
|
||||||
success_msg "Vendor directory removed"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Обновление зависимостей
|
|
||||||
update_deps() {
|
|
||||||
info_msg "Updating dependencies..."
|
|
||||||
go get -u ./...
|
|
||||||
go mod tidy
|
|
||||||
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 "Note: All builds use CGO_ENABLED=0 (no GCC required)"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Основная функция
|
|
||||||
main() {
|
|
||||||
print_separator
|
|
||||||
echo -e "${GREEN}🔨 Building futriis database with vendoring (no GCC required)${NC}"
|
|
||||||
print_separator
|
|
||||||
|
|
||||||
local os=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
||||||
info_msg "Detected OS: $os"
|
|
||||||
|
|
||||||
local BUILD_LINUX=true
|
|
||||||
local BUILD_ILLUMOS=true
|
|
||||||
local 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
|
|
||||||
|
|
||||||
check_go
|
|
||||||
setup_vendor
|
|
||||||
create_bin_dir
|
|
||||||
|
|
||||||
print_separator
|
|
||||||
|
|
||||||
local BUILD_FAILED=0
|
|
||||||
|
|
||||||
if [ "$BUILD_CURRENT" = true ]; then
|
|
||||||
build_current || BUILD_FAILED=1
|
|
||||||
else
|
|
||||||
if [ "$BUILD_LINUX" = true ]; then
|
|
||||||
build_static "linux" || BUILD_FAILED=1
|
|
||||||
fi
|
|
||||||
if [ "$BUILD_ILLUMOS" = true ]; then
|
|
||||||
build_static "illumos" || BUILD_FAILED=1
|
|
||||||
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"
|
|
||||||
echo ""
|
|
||||||
info_msg "Note: All binaries are statically linked and do not require GCC"
|
|
||||||
else
|
|
||||||
error_msg "Some builds failed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
Reference in New Issue
Block a user