|
@@ -0,0 +1,75 @@
|
|
|
|
|
+# 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 /
|