Files
iLSP/Dockerfile
Henrik Jess Nielsen 1a594c78c3
Some checks failed
Build and Deploy iLSP / test (push) Successful in 6s
Build and Deploy iLSP / build-and-deploy (push) Failing after 20s
Fix Dockerfile: use mcr.microsoft.com/dotnet/runtime:8.0 as base, add Makefile
Dockerfile:
- Final stage now FROM mcr.microsoft.com/dotnet/runtime:8.0 instead of python:3.12-slim
  + MS apt repo. Reason: packages.microsoft.com GPG key uses SHA1 which Debian trixie
  rejects since 2026-02-01. The official MS container image has no signing issue.
- Add python3 + pip3 + wget on top of dotnet base (bookworm)
- pip3 install --break-system-packages for debian bookworm compatibility

Makefile targets:
  make build        - build image locally
  make rebuild      - force no-cache build
  make run          - build + start container with port mappings
  make run-quick    - start without rebuilding
  make stop/restart - container lifecycle
  make logs         - follow logs
  make shell        - bash into running container
  make health       - curl health endpoint
  make smoke        - end-to-end TCP + health test (scripts/smoke_test.sh)
  make test         - unit tests (pytest, no Docker)
  make ps/ports     - status helpers
  make clean        - stop + remove image
2026-05-10 12:43:09 +02:00

59 lines
2.3 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/
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:8.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/
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"]