Files
iLSP/Dockerfile
Henrik Jess Nielsen 6b38cbd70c
Some checks failed
Build and Deploy iLSP / build-and-deploy (push) Has been cancelled
Build and Deploy iLSP / test (push) Successful in 18s
feat: bake bicep catalog into image; fix dict-based modules parsing
- Remove all DevOpsMCP/aiohttp runtime deps from BicepModuleCatalog
- BicepModuleCatalog.load() reads bicep_modules_catalog.json from disk at startup (sync)
- Fix _load_catalog: catalog uses dict {path: {versions, schema}} not a list
- server.py: call BicepModuleCatalog.load() synchronously, not via asyncio.gather
- Dockerfile: COPY bicep_modules_catalog.json into both builder + runtime stages
- Health endpoint now reports bicep_modules: 27

Verified locally: make run-quick → health returns pypi_packages:40 bicep_modules:27
2026-05-10 13:40:48 +02:00

61 lines
2.4 KiB
Docker

# 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/
COPY bicep_modules_catalog.json .
RUN pip install --upgrade pip build \
&& python -m build --wheel --outdir /dist
# ── Stage 3: final runtime ────────────────────────────────────────────────────
# Use Microsoft's official .NET runtime image — avoids the SHA1-signed APT key
# issue on newer Debian hosts (trixie+ rejects packages.microsoft.com GPG since 2026-02-01).
FROM mcr.microsoft.com/dotnet/runtime:10.0
# Install Python 3 + pip (the dotnet base image is Debian bookworm)
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
python3 python3-pip wget \
&& 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/
COPY --from=builder /build/bicep_modules_catalog.json /bicep_modules_catalog.json
RUN pip3 install --no-cache-dir --break-system-packages /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"]