Dockerfile.build 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 proto/ ./proto/
  36. COPY client/ ./client/
  37. COPY service/ ./service/
  38. COPY cli/ ./cli/
  39. COPY tests/ ./tests/
  40. COPY packaging/ ./packaging/
  41. # Build with shared libs + Release
  42. RUN --mount=type=cache,target=/ccache,id=smartbotic-db-ccache \
  43. cmake -B build -G Ninja \
  44. -DCMAKE_BUILD_TYPE=Release \
  45. -DCMAKE_C_COMPILER_LAUNCHER=ccache \
  46. -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
  47. -DSMARTBOTIC_DB_BUILD_SERVICE=ON \
  48. -DSMARTBOTIC_DB_BUILD_CLIENT=ON \
  49. -DSMARTBOTIC_DB_BUILD_CLI=ON \
  50. -DSMARTBOTIC_DB_BUILD_TESTS=ON \
  51. -DBUILD_SHARED_LIBS=ON \
  52. && cmake --build build --parallel ${BUILD_JOBS} \
  53. && ccache --show-stats || true
  54. # Run tests
  55. RUN cd build && LD_LIBRARY_PATH=./client:$LD_LIBRARY_PATH ./tests/test_vector_storage
  56. # Package
  57. FROM builder AS packager
  58. RUN mkdir -p /packages
  59. ENV OUTPUT_DIR=/packages
  60. RUN chmod +x /build/packaging/deb/create-debs.sh && \
  61. /build/packaging/deb/create-debs.sh
  62. # Output
  63. FROM scratch AS packages
  64. COPY --from=packager /packages/*.deb /