# syntax=docker/dockerfile:1.4 # Smartbotic Database Package Builder — Debian 13 (trixie) # Produces 4 .deb packages: server, libclient, libclient-dev, cli # # Usage: # docker buildx build -f packaging/Dockerfile.build \ # --build-arg BASE_IMAGE=smartbotic-db-build-base:debian13 \ # --target packages --output "type=local,dest=dist/" . ARG BASE_IMAGE=debian:trixie FROM ${BASE_IMAGE} AS builder ARG BUILD_VERSION=0.0.0 ARG BUILD_DEB_REVISION=1 ARG BUILD_JOBS=16 ARG BUILD_GIT_COMMIT=unknown ENV DEBIAN_FRONTEND=noninteractive ENV BUILD_VERSION=${BUILD_VERSION} ENV BUILD_DEB_REVISION=${BUILD_DEB_REVISION} ENV BUILD_JOBS=${BUILD_JOBS} ENV CCACHE_DIR=/ccache ENV CCACHE_MAXSIZE=2G ENV CCACHE_COMPRESS=1 ENV CCACHE_COMPRESSLEVEL=6 ENV PATH="/usr/lib/ccache:${PATH}" # Install deps if not using pre-built base RUN if [ ! -f /etc/smartbotic-db-build-base ]; then \ apt-get update && apt-get install -y --no-install-recommends \ build-essential cmake ninja-build git pkg-config ca-certificates ccache \ libssl-dev liblz4-dev \ protobuf-compiler libprotobuf-dev libgrpc++-dev protobuf-compiler-grpc \ nlohmann-json3-dev libspdlog-dev libfmt-dev dpkg-dev \ && rm -rf /var/lib/apt/lists/*; \ else echo "Using pre-built base: $(cat /etc/smartbotic-db-build-base)"; fi WORKDIR /build COPY CMakeLists.txt VERSION ./ COPY cmake/ ./cmake/ COPY proto/ ./proto/ COPY client/ ./client/ COPY service/ ./service/ COPY cli/ ./cli/ COPY tests/ ./tests/ COPY packaging/ ./packaging/ # Build with shared libs + Release RUN --mount=type=cache,target=/ccache,id=smartbotic-db-ccache \ cmake -B build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DSMARTBOTIC_DB_BUILD_SERVICE=ON \ -DSMARTBOTIC_DB_BUILD_CLIENT=ON \ -DSMARTBOTIC_DB_BUILD_CLI=ON \ -DSMARTBOTIC_DB_BUILD_TESTS=ON \ -DBUILD_SHARED_LIBS=ON \ && cmake --build build --parallel ${BUILD_JOBS} \ && ccache --show-stats || true # Run tests RUN cd build && LD_LIBRARY_PATH=./client:$LD_LIBRARY_PATH ./tests/test_vector_storage # Package FROM builder AS packager RUN mkdir -p /packages ENV OUTPUT_DIR=/packages RUN chmod +x /build/packaging/deb/create-debs.sh && \ /build/packaging/deb/create-debs.sh # Output FROM scratch AS packages COPY --from=packager /packages/*.deb /