Files
dbbackup/build_all.sh
Renz 9b3c3f2b1b Initial commit: Database Backup Tool v1.1.0
- PostgreSQL and MySQL support
- Interactive TUI with fixed menu navigation
- Line-by-line progress display
- CPU-aware parallel processing
- Cross-platform build support
- Configuration settings menu
- Silent mode for TUI operations
2025-10-22 19:27:38 +00:00

286 lines
8.8 KiB
Bash
Executable File

#!/bin/bash
# Cross-platform build script for dbbackup
# Builds binaries for all major platforms and architectures
set -e
# Check prerequisites
if ! command -v go &> /dev/null; then
echo "❌ Error: Go is not installed or not in PATH"
exit 1
fi
GO_VERSION=$(go version | awk '{print $3}' | sed 's/go//')
echo "🔧 Using Go version: $GO_VERSION"
# Configuration
APP_NAME="dbbackup"
VERSION="1.1.0"
BUILD_TIME=$(date -u '+%Y-%m-%d_%H:%M:%S_UTC')
GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
BIN_DIR="bin"
# Build flags
LDFLAGS="-w -s -X main.version=${VERSION} -X main.buildTime=${BUILD_TIME} -X main.gitCommit=${GIT_COMMIT}"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m'
# Platform configurations
# Format: "GOOS/GOARCH:binary_suffix:description"
PLATFORMS=(
"linux/amd64::Linux 64-bit (Intel/AMD)"
"linux/arm64::Linux 64-bit (ARM)"
"linux/arm:_armv7:Linux 32-bit (ARMv7)"
"darwin/amd64::macOS 64-bit (Intel)"
"darwin/arm64::macOS 64-bit (Apple Silicon)"
"windows/amd64:.exe:Windows 64-bit (Intel/AMD)"
"windows/arm64:.exe:Windows 64-bit (ARM)"
"freebsd/amd64::FreeBSD 64-bit (Intel/AMD)"
"openbsd/amd64::OpenBSD 64-bit (Intel/AMD)"
"netbsd/amd64::NetBSD 64-bit (Intel/AMD)"
)
echo -e "${BOLD}${BLUE}🔨 Cross-Platform Build Script for ${APP_NAME}${NC}"
echo -e "${BOLD}${BLUE}================================================${NC}"
echo -e "Version: ${YELLOW}${VERSION}${NC}"
echo -e "Build Time: ${YELLOW}${BUILD_TIME}${NC}"
echo -e "Git Commit: ${YELLOW}${GIT_COMMIT}${NC}"
echo ""
# Create bin directory
mkdir -p "${BIN_DIR}"
# Clean previous builds
echo -e "${CYAN}🧹 Cleaning previous builds...${NC}"
rm -f "${BIN_DIR}"/*
# Build counter
total_platforms=${#PLATFORMS[@]}
current=0
echo -e "${CYAN}🏗️ Building for ${total_platforms} platforms...${NC}"
echo ""
# Build for each platform
for platform_config in "${PLATFORMS[@]}"; do
current=$((current + 1))
# Parse platform configuration
IFS=':' read -r platform suffix description <<< "$platform_config"
IFS='/' read -r GOOS GOARCH <<< "$platform"
# Generate binary name
binary_name="${APP_NAME}_${GOOS}_${GOARCH}${suffix}"
echo -e "${YELLOW}[$current/$total_platforms]${NC} Building for ${BOLD}$description${NC} (${platform})"
# Set environment and build
if env GOOS=$GOOS GOARCH=$GOARCH go build -ldflags "$LDFLAGS" -o "${BIN_DIR}/${binary_name}" . 2>/dev/null; then
# Get file size
if [[ "$OSTYPE" == "darwin"* ]]; then
size=$(stat -f%z "${BIN_DIR}/${binary_name}" 2>/dev/null || echo "0")
else
size=$(stat -c%s "${BIN_DIR}/${binary_name}" 2>/dev/null || echo "0")
fi
# Format size
if [ $size -gt 1048576 ]; then
size_mb=$((size / 1048576))
size_formatted="${size_mb}M"
elif [ $size -gt 1024 ]; then
size_kb=$((size / 1024))
size_formatted="${size_kb}K"
else
size_formatted="${size}B"
fi
echo -e " ${GREEN}✅ Success${NC} - ${binary_name} (${size_formatted})"
# Test binary validity (quick check)
if [[ "$GOOS" == "$(go env GOOS)" && "$GOARCH" == "$(go env GOARCH)" ]]; then
if "${BIN_DIR}/${binary_name}" --help >/dev/null 2>&1; then
echo -e " ${GREEN} ✓ Binary test passed${NC}"
else
echo -e " ${YELLOW} ⚠ Binary test failed (may still work)${NC}"
fi
fi
else
echo -e " ${RED}❌ Failed${NC} - ${binary_name}"
echo -e " ${RED} Error during compilation${NC}"
fi
done
echo ""
echo -e "${BOLD}${GREEN}🎉 Build completed!${NC}"
echo ""
# Show build results
echo -e "${BOLD}${PURPLE}📦 Build Results:${NC}"
echo -e "${PURPLE}================${NC}"
ls -la "${BIN_DIR}/" | tail -n +2 | while read -r line; do
filename=$(echo "$line" | awk '{print $9}')
size=$(echo "$line" | awk '{print $5}')
if [[ "$filename" == *"linux_amd64"* ]]; then
echo -e " 🐧 $filename (${size} bytes)"
elif [[ "$filename" == *"linux_arm"* ]]; then
echo -e " 🤖 $filename (${size} bytes)"
elif [[ "$filename" == *"darwin"* ]]; then
echo -e " 🍎 $filename (${size} bytes)"
elif [[ "$filename" == *"windows"* ]]; then
echo -e " 🪟 $filename (${size} bytes)"
elif [[ "$filename" == *"freebsd"* ]]; then
echo -e " 😈 $filename (${size} bytes)"
elif [[ "$filename" == *"openbsd"* ]]; then
echo -e " 🐡 $filename (${size} bytes)"
elif [[ "$filename" == *"netbsd"* ]]; then
echo -e " 🐅 $filename (${size} bytes)"
else
echo -e " 📦 $filename (${size} bytes)"
fi
done
echo ""
# Generate README for bin directory
cat > "${BIN_DIR}/README.md" << EOF
# DB Backup Tool - Pre-compiled Binaries
This directory contains pre-compiled binaries for the DB Backup Tool across multiple platforms and architectures.
## Build Information
- **Version**: ${VERSION}
- **Build Time**: ${BUILD_TIME}
- **Git Commit**: ${GIT_COMMIT}
## Recent Updates (v1.1.0)
- ✅ Fixed TUI progress display with line-by-line output
- ✅ Added interactive configuration settings menu
- ✅ Improved menu navigation and responsiveness
- ✅ Enhanced completion status handling
- ✅ Better CPU detection and optimization
- ✅ Silent mode support for TUI operations
## Available Binaries
### Linux
- \`dbbackup_linux_amd64\` - Linux 64-bit (Intel/AMD)
- \`dbbackup_linux_arm64\` - Linux 64-bit (ARM)
- \`dbbackup_linux_arm_armv7\` - Linux 32-bit (ARMv7)
### macOS
- \`dbbackup_darwin_amd64\` - macOS 64-bit (Intel)
- \`dbbackup_darwin_arm64\` - macOS 64-bit (Apple Silicon)
### Windows
- \`dbbackup_windows_amd64.exe\` - Windows 64-bit (Intel/AMD)
- \`dbbackup_windows_arm64.exe\` - Windows 64-bit (ARM)
### BSD Systems
- \`dbbackup_freebsd_amd64\` - FreeBSD 64-bit
- \`dbbackup_openbsd_amd64\` - OpenBSD 64-bit
- \`dbbackup_netbsd_amd64\` - NetBSD 64-bit
## Usage
1. Download the appropriate binary for your platform
2. Make it executable (Unix-like systems): \`chmod +x dbbackup_*\`
3. Run: \`./dbbackup_* --help\`
## Interactive Mode
Launch the interactive TUI menu for easy configuration and operation:
\`\`\`bash
# Interactive mode with TUI menu
./dbbackup_linux_amd64
# Features:
# - Interactive configuration settings
# - Real-time progress display
# - Operation history and status
# - CPU detection and optimization
\`\`\`
## Command Line Mode
Direct command line usage with line-by-line progress:
\`\`\`bash
# Show CPU information and optimization settings
./dbbackup_linux_amd64 cpu
# Auto-optimize for your hardware
./dbbackup_linux_amd64 backup cluster --auto-detect-cores
# Manual CPU configuration
./dbbackup_linux_amd64 backup single mydb --jobs 8 --dump-jobs 4
# Line-by-line progress output
./dbbackup_linux_amd64 backup cluster --progress-type line
\`\`\`
## CPU Detection
All binaries include advanced CPU detection capabilities:
- Automatic core detection for optimal parallelism
- Support for different workload types (CPU-intensive, I/O-intensive, balanced)
- Platform-specific optimizations for Linux, macOS, and Windows
- Interactive CPU configuration in TUI mode
## Support
For issues or questions, please refer to the main project documentation.
EOF
echo -e "${BOLD}${CYAN}📄 Generated ${BIN_DIR}/README.md${NC}"
echo ""
# Count successful builds
success_count=$(ls -1 "${BIN_DIR}"/dbbackup_* 2>/dev/null | wc -l)
echo -e "${BOLD}${GREEN}✨ Build Summary:${NC}"
echo -e " ${GREEN}${success_count}/${total_platforms} binaries built successfully${NC}"
if [ $success_count -eq $total_platforms ]; then
echo -e " ${GREEN}🎉 All binaries are ready for distribution!${NC}"
else
failed_count=$((total_platforms - success_count))
echo -e " ${YELLOW}⚠️ ${failed_count} builds failed${NC}"
fi
# Detect current platform binary
CURRENT_OS=$(uname -s | tr '[:upper:]' '[:lower:]')
CURRENT_ARCH=$(uname -m)
# Map architecture names
case "$CURRENT_ARCH" in
"x86_64") CURRENT_ARCH="amd64";;
"aarch64") CURRENT_ARCH="arm64";;
"armv7l") CURRENT_ARCH="arm_armv7";;
esac
CURRENT_BINARY="${BIN_DIR}/dbbackup_${CURRENT_OS}_${CURRENT_ARCH}"
if [[ "$CURRENT_OS" == "windows" ]]; then
CURRENT_BINARY="${CURRENT_BINARY}.exe"
fi
echo ""
echo -e "${BOLD}${BLUE}📋 Next Steps:${NC}"
if [[ -f "$CURRENT_BINARY" ]]; then
echo -e " 1. Test current platform: ${CYAN}${CURRENT_BINARY} --help${NC}"
echo -e " 2. Interactive mode: ${CYAN}${CURRENT_BINARY}${NC}"
else
echo -e " 1. Test binary (adjust for your platform): ${CYAN}./bin/dbbackup_*${NC}"
fi
echo -e " 3. Create release: ${CYAN}git tag v${VERSION} && git push --tags${NC}"
echo -e " 4. Archive builds: ${CYAN}tar -czf dbbackup-v${VERSION}-all-platforms.tar.gz bin/${NC}"
echo ""