create-packages.sh 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. #!/bin/bash
  2. # Smartbotic Package Creation Script
  3. # Creates tar.gz distribution packages from built binaries
  4. #
  5. # Environment variables:
  6. # BUILD_DIR - Directory containing built binaries (default: /build/build)
  7. # SOURCE_DIR - Source directory (default: /build)
  8. # OUTPUT_DIR - Output directory for packages (default: /packages)
  9. # BUILD_VERSION - Package version (default: 0.1.0)
  10. set -e
  11. BUILD_DIR="${BUILD_DIR:-/build/build}"
  12. SOURCE_DIR="${SOURCE_DIR:-/build}"
  13. OUTPUT_DIR="${OUTPUT_DIR:-/packages}"
  14. BUILD_VERSION="${BUILD_VERSION:-0.1.0}"
  15. BUILD_TARGET="${BUILD_TARGET:-debian13}"
  16. # Colors for output
  17. GREEN='\033[0;32m'
  18. BLUE='\033[0;34m'
  19. NC='\033[0m'
  20. print_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
  21. print_step() { echo -e "${BLUE}[STEP]${NC} $1"; }
  22. # Load dependencies from config
  23. DEPS_FILE="$SOURCE_DIR/packaging/dependencies.conf"
  24. # Get dependencies for a service (includes common deps)
  25. get_deps() {
  26. local service="$1"
  27. local common_deps=""
  28. local service_deps=""
  29. if [ -f "$DEPS_FILE" ]; then
  30. common_deps=$(grep "^common=" "$DEPS_FILE" 2>/dev/null | cut -d= -f2 || echo "")
  31. service_deps=$(grep "^${service}=" "$DEPS_FILE" 2>/dev/null | cut -d= -f2 || echo "")
  32. fi
  33. echo "$common_deps $service_deps" | xargs
  34. }
  35. print_info "Creating Smartbotic packages version $BUILD_VERSION"
  36. print_info "Target: $BUILD_TARGET"
  37. print_info "Build dir: $BUILD_DIR"
  38. print_info "Source dir: $SOURCE_DIR"
  39. print_info "Output dir: $OUTPUT_DIR"
  40. echo ""
  41. # Full version string includes target
  42. FULL_VERSION="${BUILD_VERSION}-${BUILD_TARGET}"
  43. mkdir -p "$OUTPUT_DIR"
  44. # Create database package
  45. create_database_package() {
  46. print_step "Creating smartbotic-database package..."
  47. local pkg_name="smartbotic-database-$FULL_VERSION"
  48. local pkg_dir="$OUTPUT_DIR/$pkg_name"
  49. rm -rf "$pkg_dir"
  50. mkdir -p "$pkg_dir"/{bin,etc/smartbotic,etc/systemd/system,share/smartbotic/database/migrations}
  51. # Copy binary
  52. local bin_path="$BUILD_DIR/external/smartbotic-database/service/smartbotic-database"
  53. if [ -f "$bin_path" ]; then
  54. print_info " Copying binary..."
  55. cp "$bin_path" "$pkg_dir/bin/smartbotic-database"
  56. chmod 755 "$pkg_dir/bin/smartbotic-database"
  57. else
  58. print_info " Warning: Binary not found at $bin_path"
  59. fi
  60. # Copy default config (storage.json -> database.json.default)
  61. if [ -f "$SOURCE_DIR/config/storage.json" ]; then
  62. print_info " Copying config template..."
  63. cp "$SOURCE_DIR/config/storage.json" "$pkg_dir/etc/smartbotic/database.json.default"
  64. fi
  65. # Copy systemd service
  66. if [ -f "$SOURCE_DIR/packaging/systemd/smartbotic-database.service" ]; then
  67. print_info " Copying systemd unit..."
  68. cp "$SOURCE_DIR/packaging/systemd/smartbotic-database.service" "$pkg_dir/etc/systemd/system/"
  69. fi
  70. # Copy migrations
  71. if [ -d "$SOURCE_DIR/config/migrations" ]; then
  72. print_info " Copying database migrations..."
  73. cp "$SOURCE_DIR/config/migrations"/*.json "$pkg_dir/share/smartbotic/database/migrations/" 2>/dev/null || true
  74. fi
  75. # Version file
  76. echo "$BUILD_VERSION" > "$pkg_dir/VERSION"
  77. # Dependencies file
  78. local deps=$(get_deps "database")
  79. if [ -n "$deps" ]; then
  80. print_info " Adding dependencies: $deps"
  81. echo "$deps" > "$pkg_dir/DEPS"
  82. fi
  83. # Create tarball
  84. tar -czf "$OUTPUT_DIR/$pkg_name.tar.gz" -C "$OUTPUT_DIR" "$pkg_name"
  85. rm -rf "$pkg_dir"
  86. print_info " Created: $pkg_name.tar.gz"
  87. }
  88. # Create microbit package
  89. create_microbit_package() {
  90. print_step "Creating smartbotic-microbit package..."
  91. local pkg_name="smartbotic-microbit-$FULL_VERSION"
  92. local pkg_dir="$OUTPUT_DIR/$pkg_name"
  93. rm -rf "$pkg_dir"
  94. mkdir -p "$pkg_dir"/{bin,etc/smartbotic,etc/systemd/system,share/smartbotic/nginx}
  95. # Copy binary
  96. local bin_path="$BUILD_DIR/src/smartbotic-microbit"
  97. if [ -f "$bin_path" ]; then
  98. print_info " Copying binary..."
  99. cp "$bin_path" "$pkg_dir/bin/smartbotic-microbit"
  100. chmod 755 "$pkg_dir/bin/smartbotic-microbit"
  101. else
  102. print_info " Warning: Binary not found at $bin_path"
  103. fi
  104. # Copy management scripts
  105. for script in install.sh update.sh setup-nginx.sh; do
  106. local src="$SOURCE_DIR/packaging/scripts/$script"
  107. if [ -f "$src" ]; then
  108. local dest_name="smartbotic-${script%.sh}"
  109. print_info " Copying $dest_name..."
  110. cp "$src" "$pkg_dir/bin/$dest_name"
  111. chmod 755 "$pkg_dir/bin/$dest_name"
  112. fi
  113. done
  114. # Copy default config
  115. if [ -f "$SOURCE_DIR/config/microbit.json" ]; then
  116. print_info " Copying config template..."
  117. cp "$SOURCE_DIR/config/microbit.json" "$pkg_dir/etc/smartbotic/microbit.json.default"
  118. fi
  119. # Create environment template
  120. print_info " Creating environment template..."
  121. cat > "$pkg_dir/etc/smartbotic/smartbotic.env.default" <<'EOF'
  122. # Smartbotic Environment Configuration
  123. # Copy this file to smartbotic.env and customize the values
  124. #
  125. # SECURITY: This file contains secrets - ensure proper permissions (chmod 640)
  126. # Database
  127. DB_ADDRESS=localhost:9004
  128. DB_DATA_DIR=/var/lib/smartbotic/database/storage
  129. DB_MIGRATIONS_DIR=/var/lib/smartbotic/database/migrations
  130. # Authentication (REQUIRED - generate secure random values)
  131. # Generate with: openssl rand -hex 32
  132. JWT_SECRET=CHANGE_ME_GENERATE_SECURE_SECRET
  133. # WebUI
  134. WEBUI_PATH=/var/lib/smartbotic/microbit/webui
  135. # SMTP (optional - for invitation emails)
  136. # SMTP_HOST=
  137. # SMTP_PORT=587
  138. # SMTP_USER=
  139. # SMTP_PASSWORD=
  140. # SMTP_FROM=noreply@smartbotics.ai
  141. # CallerAI API (required for voice AI features)
  142. # CALLERAI_API_URL=
  143. # CALLERAI_API_KEY=
  144. EOF
  145. # Copy systemd service
  146. if [ -f "$SOURCE_DIR/packaging/systemd/smartbotic-microbit.service" ]; then
  147. print_info " Copying systemd unit..."
  148. cp "$SOURCE_DIR/packaging/systemd/smartbotic-microbit.service" "$pkg_dir/etc/systemd/system/"
  149. fi
  150. # Copy nginx template
  151. if [ -f "$SOURCE_DIR/packaging/nginx/smartbotic.conf.template" ]; then
  152. print_info " Copying nginx template..."
  153. cp "$SOURCE_DIR/packaging/nginx/smartbotic.conf.template" "$pkg_dir/share/smartbotic/nginx/"
  154. fi
  155. # Version file
  156. echo "$BUILD_VERSION" > "$pkg_dir/VERSION"
  157. # Dependencies file
  158. local deps=$(get_deps "microbit")
  159. if [ -n "$deps" ]; then
  160. print_info " Adding dependencies: $deps"
  161. echo "$deps" > "$pkg_dir/DEPS"
  162. fi
  163. # Create tarball
  164. tar -czf "$OUTPUT_DIR/$pkg_name.tar.gz" -C "$OUTPUT_DIR" "$pkg_name"
  165. rm -rf "$pkg_dir"
  166. print_info " Created: $pkg_name.tar.gz"
  167. }
  168. # Create WebUI package
  169. create_webui_package() {
  170. print_step "Creating smartbotic-webui package..."
  171. local pkg_name="smartbotic-webui-$FULL_VERSION"
  172. local pkg_dir="$OUTPUT_DIR/$pkg_name"
  173. rm -rf "$pkg_dir"
  174. mkdir -p "$pkg_dir/share/smartbotic/webui"
  175. # Copy built WebUI
  176. local webui_dist="$SOURCE_DIR/webui/dist"
  177. if [ -d "$webui_dist" ]; then
  178. print_info " Copying WebUI files..."
  179. cp -a "$webui_dist"/* "$pkg_dir/share/smartbotic/webui/"
  180. else
  181. print_info " Warning: WebUI dist not found at $webui_dist"
  182. fi
  183. # Version file
  184. echo "$BUILD_VERSION" > "$pkg_dir/VERSION"
  185. # Create tarball
  186. tar -czf "$OUTPUT_DIR/$pkg_name.tar.gz" -C "$OUTPUT_DIR" "$pkg_name"
  187. rm -rf "$pkg_dir"
  188. print_info " Created: $pkg_name.tar.gz"
  189. }
  190. # Main execution
  191. main() {
  192. create_database_package
  193. create_microbit_package
  194. create_webui_package
  195. echo ""
  196. print_info "All packages created successfully!"
  197. echo ""
  198. echo "Packages:"
  199. ls -lh "$OUTPUT_DIR"/*.tar.gz
  200. }
  201. main