83 lines
3 KiB
Docker
83 lines
3 KiB
Docker
FROM debian:trixie-slim AS builder
|
|
|
|
# Build args
|
|
ARG YAMS_VERSION=dev
|
|
ARG GIT_COMMIT=""
|
|
ARG GIT_TAG=""
|
|
|
|
# Base toolchain + headers
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
build-essential git curl pkg-config ca-certificates \
|
|
libssl-dev libsqlite3-dev protobuf-compiler libprotobuf-dev \
|
|
python3 python3-venv python3-pip \
|
|
gcc-13 g++-13 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Python toolchain in a venv (bypass PEP 668) + pin versions
|
|
RUN python3 -m venv /opt/venv \
|
|
&& /opt/venv/bin/pip install --upgrade pip \
|
|
&& /opt/venv/bin/pip install "conan==2.3.*" "cmake==3.27.*" "ninja==1.11.*"
|
|
ENV PATH="/opt/venv/bin:${PATH}"
|
|
|
|
# Force GCC 13 so Conan detects a supported compiler.version
|
|
ENV CC=/usr/bin/gcc-13
|
|
ENV CXX=/usr/bin/g++-13
|
|
|
|
WORKDIR /src
|
|
COPY . .
|
|
|
|
# Conan profile (C++20), generated by conanfile (no -g flags here)
|
|
RUN conan profile detect --force \
|
|
&& sed -i 's/compiler.cppstd=.*/compiler.cppstd=20/' ~/.conan2/profiles/default \
|
|
&& conan profile show
|
|
|
|
# Install deps; static to reduce runtime deps
|
|
RUN conan install . \
|
|
--output-folder=build/conan-release \
|
|
-s build_type=Release \
|
|
--build=missing \
|
|
-o "*:shared=False" \
|
|
-o "boost/*:without_locale=True" \
|
|
-o "boost/*:without_stacktrace=True" \
|
|
-c tools.cmake.cmaketoolchain:generator=Ninja
|
|
|
|
# Compute a semver for CMake and an optional suffix for runtime info
|
|
# - If GIT_TAG looks like vMAJOR.MINOR.PATCH, use that (strip leading v)
|
|
# - Else use 0.0.0 and keep a dev suffix with the short commit
|
|
RUN if printf '%s' "${GIT_TAG}" | grep -Eq '^v[0-9]+\.[0-9]+\.[0-9]+$'; then \
|
|
CMAKE_VERSION="${GIT_TAG#v}"; \
|
|
VERSION_SUFFIX=""; \
|
|
else \
|
|
CMAKE_VERSION="0.0.0"; \
|
|
VERSION_SUFFIX="dev-${GIT_COMMIT}"; \
|
|
fi && \
|
|
cmake --preset conan-release \
|
|
-DYAMS_BUILD_PROFILE=release \
|
|
-DYAMS_BUILD_DOCS=OFF \
|
|
-DYAMS_BUILD_TESTS=OFF \
|
|
-DYAMS_BUILD_MCP_SERVER=ON \
|
|
-DYAMS_VERSION="${CMAKE_VERSION}" \
|
|
-DYAMS_VERSION_SUFFIX="${VERSION_SUFFIX}" && \
|
|
cmake --build --preset conan-release --parallel
|
|
|
|
RUN cmake --install build/conan-release/build/Release --prefix /opt/yams
|
|
|
|
FROM debian:trixie-slim AS runtime
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN groupadd -r yams && useradd -r -g yams -s /bin/false yams
|
|
COPY --from=builder /opt/yams/bin/yams /usr/local/bin/yams
|
|
COPY --from=builder /src/data/magic_numbers.json /usr/local/share/yams/data
|
|
RUN mkdir -p /home/yams/.local/share/yams /home/yams/.config/yams && chown -R yams:yams /home/yams
|
|
USER yams
|
|
WORKDIR /home/yams
|
|
ENV YAMS_STORAGE="/home/yams/.local/share/yams" \
|
|
XDG_DATA_HOME="/home/yams/.local/share" \
|
|
XDG_CONFIG_HOME="/home/yams/.config"
|
|
EXPOSE 8777
|
|
LABEL org.opencontainers.image.description="YAMS MCP server (stdio and HTTP). For HTTP: run 'yams serve --transport http --host 0.0.0.0 --path /mcp' and map -p 8777:8777. For stdio: 'yams serve'."
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD yams --version || exit 1
|
|
ENTRYPOINT ["yams"]
|
|
CMD ["--help"]
|