90 lines
2.1 KiB
Bash
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" |