| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- #!/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
|