# syntax=docker/dockerfile:1.6 # iLSP — multi-stage: downloads Bicep LS, then builds the Python package # Final image: dotnet runtime + Python 3.12 # ── Stage 1: download Bicep Language Server ────────────────────────────────── FROM debian:bookworm-slim AS bicep-downloader ARG BICEP_VERSION=latest RUN apt-get update && apt-get install -y --no-install-recommends curl unzip ca-certificates \ && rm -rf /var/lib/apt/lists/* COPY scripts/download_bicep_ls.sh /scripts/ RUN chmod +x /scripts/download_bicep_ls.sh && BICEP_VERSION=${BICEP_VERSION} /scripts/download_bicep_ls.sh # ── Stage 2: Python wheel build ─────────────────────────────────────────────── FROM python:3.12-slim AS builder WORKDIR /build COPY pyproject.toml . COPY ilsp/ ilsp/ RUN pip install --upgrade pip build \ && python -m build --wheel --outdir /dist # ── Stage 3: final runtime ──────────────────────────────────────────────────── FROM python:3.12-slim # Install .NET runtime (needed by Bicep.LangServer.dll) RUN apt-get update \ && apt-get install -y --no-install-recommends \ wget apt-transport-https ca-certificates \ && wget -q https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb \ && dpkg -i packages-microsoft-prod.deb && rm packages-microsoft-prod.deb \ && apt-get update \ && apt-get install -y --no-install-recommends dotnet-runtime-8.0 \ && rm -rf /var/lib/apt/lists/* # Copy Bicep Language Server (baked in at build time — no volume needed) COPY --from=bicep-downloader /opt/bicep-langserver /opt/bicep-langserver # Install Python package and dependencies COPY --from=builder /dist/*.whl /tmp/ RUN pip install --no-cache-dir /tmp/*.whl && rm /tmp/*.whl # Configuration defaults (override via Nomad env) ENV PYTHON_LSP_PORT=2087 \ BICEP_LSP_PORT=2088 \ HEALTH_PORT=2089 \ BICEP_LS_PATH=/opt/bicep-langserver/Bicep.LangServer.dll \ DEVOPS_MCP_URL=https://devops-mcp.i80.dk \ PYTHONUNBUFFERED=1 EXPOSE 2087 2088 2089 HEALTHCHECK --interval=15s --timeout=5s --retries=3 \ CMD wget -qO- http://localhost:${HEALTH_PORT}/health || exit 1 CMD ["ilsp"]