CollisionAvoidance/scripts/build_execute_package.sh

90 lines
2.1 KiB
Bash

#!/bin/bash
# Color definitions for output
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Logging functions
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Get script directory and project root
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")"
PROJECT_NAME="collision_avoidance"
# Generate version number based on current time
VERSION=$(date +"%Y%m%d_%H%M%S")
log_info "Building version: ${VERSION}"
# Create temp directory
TEMP_DIR="${PROJECT_ROOT}/temp_build"
rm -rf "${TEMP_DIR}"
mkdir -p "${TEMP_DIR}/bin"
# Build the project
log_info "Building project..."
cd "${PROJECT_ROOT}"
rm -rf build
mkdir build
cd build
# Configure and build
cmake3 -DCMAKE_BUILD_TYPE=Release ..
if [ $? -ne 0 ]; then
log_error "CMake configuration failed"
exit 1
fi
make -j$(nproc)
if [ $? -ne 0 ]; then
log_error "Build failed"
exit 1
fi
# Copy executable
log_info "Copying executable..."
cp "bin/${PROJECT_NAME}" "${TEMP_DIR}/bin/" || {
log_error "Failed to copy executable"
exit 1
}
# Generate version file
echo "${VERSION}" > "${TEMP_DIR}/bin/version.txt"
# Generate checksum
cd "${TEMP_DIR}/bin"
sha256sum "${PROJECT_NAME}" > "${PROJECT_NAME}.sha256"
# Create deployment archive
cd "${TEMP_DIR}"
PACKAGE_NAME="${PROJECT_NAME}_${VERSION}.tar.gz"
tar czf "${PROJECT_ROOT}/${PACKAGE_NAME}" bin/
# Cleanup
cd "${PROJECT_ROOT}"
rm -rf "${TEMP_DIR}"
log_info "Package created: ${PACKAGE_NAME}"
log_info "Package contents:"
log_info " - Executable binary"
log_info " - Version file"
log_info " - Checksum file"
# Print instructions
echo
log_info "To deploy:"
echo "1. Copy ${PACKAGE_NAME} to production environment"
echo "2. Extract: tar xzf ${PACKAGE_NAME}"
echo "3. Verify checksum: sha256sum -c ${PROJECT_NAME}.sha256"
echo "4. Stop service: systemctl stop collision-avoidance"
echo "5. Backup old binary"
echo "6. Copy new binary: cp bin/${PROJECT_NAME} /opt/collision_avoidance/bin/"
echo "7. Start service: systemctl start collision-avoidance"
echo "8. Check status: systemctl status collision-avoidance"