Dockerfile.build 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # syntax=docker/dockerfile:1.4
  2. # Smartbotic Database Package Builder — Debian 13 (trixie)
  3. # Produces 4 .deb packages: server, libclient, libclient-dev, cli
  4. #
  5. # Usage:
  6. # docker buildx build -f packaging/Dockerfile.build \
  7. # --build-arg BASE_IMAGE=smartbotic-db-build-base:debian13 \
  8. # --target packages --output "type=local,dest=dist/" .
  9. ARG BASE_IMAGE=debian:trixie
  10. FROM ${BASE_IMAGE} AS builder
  11. ARG BUILD_VERSION=0.0.0
  12. ARG BUILD_DEB_REVISION=1
  13. ARG BUILD_JOBS=16
  14. ARG BUILD_GIT_COMMIT=unknown
  15. ENV DEBIAN_FRONTEND=noninteractive
  16. ENV BUILD_VERSION=${BUILD_VERSION}
  17. ENV BUILD_DEB_REVISION=${BUILD_DEB_REVISION}
  18. ENV BUILD_JOBS=${BUILD_JOBS}
  19. ENV CCACHE_DIR=/ccache
  20. ENV CCACHE_MAXSIZE=2G
  21. ENV CCACHE_COMPRESS=1
  22. ENV CCACHE_COMPRESSLEVEL=6
  23. ENV PATH="/usr/lib/ccache:${PATH}"
  24. # Install deps if not using pre-built base
  25. RUN if [ ! -f /etc/smartbotic-db-build-base ]; then \
  26. apt-get update && apt-get install -y --no-install-recommends \
  27. build-essential cmake ninja-build git pkg-config ca-certificates ccache \
  28. libssl-dev liblz4-dev \
  29. protobuf-compiler libprotobuf-dev libgrpc++-dev protobuf-compiler-grpc \
  30. nlohmann-json3-dev libspdlog-dev libfmt-dev dpkg-dev \
  31. && rm -rf /var/lib/apt/lists/*; \
  32. else echo "Using pre-built base: $(cat /etc/smartbotic-db-build-base)"; fi
  33. WORKDIR /build
  34. COPY CMakeLists.txt VERSION ./
  35. COPY cmake/ ./cmake/
  36. COPY proto/ ./proto/
  37. COPY client/ ./client/
  38. COPY service/ ./service/
  39. COPY cli/ ./cli/
  40. COPY tests/ ./tests/
  41. COPY packaging/ ./packaging/
  42. # Build with shared libs + Release
  43. RUN --mount=type=cache,target=/ccache,id=smartbotic-db-ccache \
  44. cmake -B build -G Ninja \
  45. -DCMAKE_BUILD_TYPE=Release \
  46. -DCMAKE_C_COMPILER_LAUNCHER=ccache \
  47. -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
  48. -DSMARTBOTIC_DB_BUILD_SERVICE=ON \
  49. -DSMARTBOTIC_DB_BUILD_CLIENT=ON \
  50. -DSMARTBOTIC_DB_BUILD_CLI=ON \
  51. -DSMARTBOTIC_DB_BUILD_TESTS=ON \
  52. -DBUILD_SHARED_LIBS=ON \
  53. && cmake --build build --parallel ${BUILD_JOBS} \
  54. && ccache --show-stats || true
  55. # Run tests
  56. RUN cd build && LD_LIBRARY_PATH=./client:$LD_LIBRARY_PATH ./tests/test_vector_storage
  57. # Package
  58. FROM builder AS packager
  59. RUN mkdir -p /packages
  60. ENV OUTPUT_DIR=/packages
  61. RUN chmod +x /build/packaging/deb/create-debs.sh && \
  62. /build/packaging/deb/create-debs.sh
  63. # Output
  64. FROM scratch AS packages
  65. COPY --from=packager /packages/*.deb /