#!/bin/bash # Smartbotic Package Creation Script # Creates tar.gz distribution packages from built binaries # # Environment variables: # BUILD_DIR - Directory containing built binaries (default: /build/build) # SOURCE_DIR - Source directory (default: /build) # OUTPUT_DIR - Output directory for packages (default: /packages) # BUILD_VERSION - Package version (default: 0.1.0) set -e BUILD_DIR="${BUILD_DIR:-/build/build}" SOURCE_DIR="${SOURCE_DIR:-/build}" OUTPUT_DIR="${OUTPUT_DIR:-/packages}" BUILD_VERSION="${BUILD_VERSION:-0.1.0}" BUILD_TARGET="${BUILD_TARGET:-debian13}" # Colors for output GREEN='\033[0;32m' BLUE='\033[0;34m' NC='\033[0m' print_info() { echo -e "${GREEN}[INFO]${NC} $1"; } print_step() { echo -e "${BLUE}[STEP]${NC} $1"; } # Load dependencies from config DEPS_FILE="$SOURCE_DIR/packaging/dependencies.conf" # Get dependencies for a service (includes common deps) get_deps() { local service="$1" local common_deps="" local service_deps="" if [ -f "$DEPS_FILE" ]; then common_deps=$(grep "^common=" "$DEPS_FILE" 2>/dev/null | cut -d= -f2 || echo "") service_deps=$(grep "^${service}=" "$DEPS_FILE" 2>/dev/null | cut -d= -f2 || echo "") fi echo "$common_deps $service_deps" | xargs } print_info "Creating Smartbotic packages version $BUILD_VERSION" print_info "Target: $BUILD_TARGET" print_info "Build dir: $BUILD_DIR" print_info "Source dir: $SOURCE_DIR" print_info "Output dir: $OUTPUT_DIR" echo "" # Full version string includes target FULL_VERSION="${BUILD_VERSION}-${BUILD_TARGET}" mkdir -p "$OUTPUT_DIR" # Create database package create_database_package() { print_step "Creating smartbotic-database package..." local pkg_name="smartbotic-database-$FULL_VERSION" local pkg_dir="$OUTPUT_DIR/$pkg_name" rm -rf "$pkg_dir" mkdir -p "$pkg_dir"/{bin,etc/smartbotic,etc/systemd/system,share/smartbotic/database/migrations} # Copy binary local bin_path="$BUILD_DIR/external/smartbotic-database/service/smartbotic-database" if [ -f "$bin_path" ]; then print_info " Copying binary..." cp "$bin_path" "$pkg_dir/bin/smartbotic-database" chmod 755 "$pkg_dir/bin/smartbotic-database" else print_info " Warning: Binary not found at $bin_path" fi # Copy default config (storage.json -> database.json.default) if [ -f "$SOURCE_DIR/config/storage.json" ]; then print_info " Copying config template..." cp "$SOURCE_DIR/config/storage.json" "$pkg_dir/etc/smartbotic/database.json.default" fi # Copy systemd service if [ -f "$SOURCE_DIR/packaging/systemd/smartbotic-database.service" ]; then print_info " Copying systemd unit..." cp "$SOURCE_DIR/packaging/systemd/smartbotic-database.service" "$pkg_dir/etc/systemd/system/" fi # Copy migrations if [ -d "$SOURCE_DIR/config/migrations" ]; then print_info " Copying database migrations..." cp "$SOURCE_DIR/config/migrations"/*.json "$pkg_dir/share/smartbotic/database/migrations/" 2>/dev/null || true fi # Version file echo "$BUILD_VERSION" > "$pkg_dir/VERSION" # Dependencies file local deps=$(get_deps "database") if [ -n "$deps" ]; then print_info " Adding dependencies: $deps" echo "$deps" > "$pkg_dir/DEPS" fi # Create tarball tar -czf "$OUTPUT_DIR/$pkg_name.tar.gz" -C "$OUTPUT_DIR" "$pkg_name" rm -rf "$pkg_dir" print_info " Created: $pkg_name.tar.gz" } # Create microbit package create_microbit_package() { print_step "Creating smartbotic-microbit package..." local pkg_name="smartbotic-microbit-$FULL_VERSION" local pkg_dir="$OUTPUT_DIR/$pkg_name" rm -rf "$pkg_dir" mkdir -p "$pkg_dir"/{bin,etc/smartbotic,etc/systemd/system,share/smartbotic/nginx} # Copy binary local bin_path="$BUILD_DIR/src/smartbotic-microbit" if [ -f "$bin_path" ]; then print_info " Copying binary..." cp "$bin_path" "$pkg_dir/bin/smartbotic-microbit" chmod 755 "$pkg_dir/bin/smartbotic-microbit" else print_info " Warning: Binary not found at $bin_path" fi # Copy management scripts for script in install.sh update.sh setup-nginx.sh; do local src="$SOURCE_DIR/packaging/scripts/$script" if [ -f "$src" ]; then local dest_name="smartbotic-${script%.sh}" print_info " Copying $dest_name..." cp "$src" "$pkg_dir/bin/$dest_name" chmod 755 "$pkg_dir/bin/$dest_name" fi done # Copy default config if [ -f "$SOURCE_DIR/config/microbit.json" ]; then print_info " Copying config template..." cp "$SOURCE_DIR/config/microbit.json" "$pkg_dir/etc/smartbotic/microbit.json.default" fi # Create environment template print_info " Creating environment template..." cat > "$pkg_dir/etc/smartbotic/smartbotic.env.default" <<'EOF' # Smartbotic Environment Configuration # Copy this file to smartbotic.env and customize the values # # SECURITY: This file contains secrets - ensure proper permissions (chmod 640) # Database DB_ADDRESS=localhost:9004 DB_DATA_DIR=/var/lib/smartbotic/database/storage DB_MIGRATIONS_DIR=/var/lib/smartbotic/database/migrations # Authentication (REQUIRED - generate secure random values) # Generate with: openssl rand -hex 32 JWT_SECRET=CHANGE_ME_GENERATE_SECURE_SECRET # WebUI WEBUI_PATH=/var/lib/smartbotic/microbit/webui # SMTP (optional - for invitation emails) # SMTP_HOST= # SMTP_PORT=587 # SMTP_USER= # SMTP_PASSWORD= # SMTP_FROM=noreply@smartbotics.ai # CallerAI API (required for voice AI features) # CALLERAI_API_URL= # CALLERAI_API_KEY= EOF # Copy systemd service if [ -f "$SOURCE_DIR/packaging/systemd/smartbotic-microbit.service" ]; then print_info " Copying systemd unit..." cp "$SOURCE_DIR/packaging/systemd/smartbotic-microbit.service" "$pkg_dir/etc/systemd/system/" fi # Copy nginx template if [ -f "$SOURCE_DIR/packaging/nginx/smartbotic.conf.template" ]; then print_info " Copying nginx template..." cp "$SOURCE_DIR/packaging/nginx/smartbotic.conf.template" "$pkg_dir/share/smartbotic/nginx/" fi # Version file echo "$BUILD_VERSION" > "$pkg_dir/VERSION" # Dependencies file local deps=$(get_deps "microbit") if [ -n "$deps" ]; then print_info " Adding dependencies: $deps" echo "$deps" > "$pkg_dir/DEPS" fi # Create tarball tar -czf "$OUTPUT_DIR/$pkg_name.tar.gz" -C "$OUTPUT_DIR" "$pkg_name" rm -rf "$pkg_dir" print_info " Created: $pkg_name.tar.gz" } # Create WebUI package create_webui_package() { print_step "Creating smartbotic-webui package..." local pkg_name="smartbotic-webui-$FULL_VERSION" local pkg_dir="$OUTPUT_DIR/$pkg_name" rm -rf "$pkg_dir" mkdir -p "$pkg_dir/share/smartbotic/webui" # Copy built WebUI local webui_dist="$SOURCE_DIR/webui/dist" if [ -d "$webui_dist" ]; then print_info " Copying WebUI files..." cp -a "$webui_dist"/* "$pkg_dir/share/smartbotic/webui/" else print_info " Warning: WebUI dist not found at $webui_dist" fi # Version file echo "$BUILD_VERSION" > "$pkg_dir/VERSION" # Create tarball tar -czf "$OUTPUT_DIR/$pkg_name.tar.gz" -C "$OUTPUT_DIR" "$pkg_name" rm -rf "$pkg_dir" print_info " Created: $pkg_name.tar.gz" } # Main execution main() { create_database_package create_microbit_package create_webui_package echo "" print_info "All packages created successfully!" echo "" echo "Packages:" ls -lh "$OUTPUT_DIR"/*.tar.gz } main