build.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #!/bin/bash
  2. # Build smartbotic-database package
  3. set -e
  4. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  5. ROOT_DIR="$(dirname "$SCRIPT_DIR")"
  6. # Read version from VERSION file
  7. VERSION=$(cat "$ROOT_DIR/VERSION" | tr -d '[:space:]')
  8. PLATFORM="debian13"
  9. # Parse arguments
  10. REBUILD_BASE=false
  11. CLEAR_CACHE=false
  12. NO_CACHE=false
  13. BUILD_VERSION=""
  14. while [[ $# -gt 0 ]]; do
  15. case $1 in
  16. --rebuild-base)
  17. REBUILD_BASE=true
  18. shift
  19. ;;
  20. --clear-cache)
  21. CLEAR_CACHE=true
  22. shift
  23. ;;
  24. --no-cache)
  25. NO_CACHE=true
  26. shift
  27. ;;
  28. *)
  29. BUILD_VERSION="$1"
  30. shift
  31. ;;
  32. esac
  33. done
  34. # Use provided version or default from VERSION file
  35. VERSION="${BUILD_VERSION:-$VERSION}"
  36. echo "Building smartbotic-database version $VERSION"
  37. # Create dist directory
  38. mkdir -p "$SCRIPT_DIR/dist"
  39. # Build using Docker if Dockerfile exists
  40. if [ -f "$SCRIPT_DIR/Dockerfile.build" ]; then
  41. DOCKER_BUILD_ARGS=""
  42. if [ "$NO_CACHE" = true ]; then
  43. DOCKER_BUILD_ARGS="--no-cache"
  44. fi
  45. docker buildx build \
  46. $DOCKER_BUILD_ARGS \
  47. -f "$SCRIPT_DIR/Dockerfile.build" \
  48. --build-arg BUILD_VERSION="$VERSION" \
  49. --build-arg BUILD_GIT_COMMIT="$(git -C "$ROOT_DIR" rev-parse HEAD 2>/dev/null || echo 'unknown')" \
  50. --build-arg BUILD_GIT_BRANCH="$(git -C "$ROOT_DIR" rev-parse --abbrev-ref HEAD 2>/dev/null || echo 'unknown')" \
  51. --target packages \
  52. --output "type=local,dest=$SCRIPT_DIR/dist/" \
  53. "$ROOT_DIR"
  54. else
  55. # Fall back to local build
  56. echo "No Dockerfile.build found, building locally..."
  57. BUILD_DIR="$ROOT_DIR/build"
  58. PACKAGE_DIR="$SCRIPT_DIR/dist/smartbotic-database-$VERSION-$PLATFORM"
  59. # Configure and build
  60. cmake -B "$BUILD_DIR" -G Ninja \
  61. -DCMAKE_BUILD_TYPE=Release \
  62. -DSMARTBOTIC_DB_BUILD_SERVICE=ON \
  63. -DSMARTBOTIC_DB_BUILD_CLIENT=ON \
  64. "$ROOT_DIR"
  65. ninja -C "$BUILD_DIR"
  66. # Create package structure
  67. rm -rf "$PACKAGE_DIR"
  68. mkdir -p "$PACKAGE_DIR/bin"
  69. mkdir -p "$PACKAGE_DIR/etc/systemd/system"
  70. # Copy binary
  71. cp "$BUILD_DIR/service/smartbotic-database" "$PACKAGE_DIR/bin/"
  72. # Copy config
  73. cp "$ROOT_DIR/service/config/database.json.example" "$PACKAGE_DIR/etc/smartbotic-database.json"
  74. # Copy systemd unit
  75. if [ -f "$SCRIPT_DIR/systemd/smartbotic-database.service" ]; then
  76. cp "$SCRIPT_DIR/systemd/smartbotic-database.service" "$PACKAGE_DIR/etc/systemd/system/"
  77. fi
  78. # Create VERSION file
  79. echo "$VERSION" > "$PACKAGE_DIR/VERSION"
  80. # Create tarball
  81. cd "$SCRIPT_DIR/dist"
  82. tar -czf "smartbotic-database-$VERSION-$PLATFORM.tar.gz" "smartbotic-database-$VERSION-$PLATFORM"
  83. rm -rf "smartbotic-database-$VERSION-$PLATFORM"
  84. echo "Package created: $SCRIPT_DIR/dist/smartbotic-database-$VERSION-$PLATFORM.tar.gz"
  85. fi