- Add scripts/sync_pipeline_templates.py — scans LRU AzDO and GHA template repos; outputs unified pipeline_templates_catalog.json (48 templates: 45 AzDO + 3 GHA) - Add scripts/template_sources.yml — source config (AzDO alias, GHA org) - Add pipeline_templates_catalog.json — baked catalog (49 KB) - Add ilsp/yaml_lsp/catalog.py — PipelineTemplateCatalog with completion item generators for template paths, param names, allowed values, GHA inputs - Add ilsp/yaml_lsp/proxy.py — async WS↔TCP bridge with LSP frame buffering, per-connection document tracking, AzDO/GHA context detection, and completion injection (LRU items sortText 0_, standard items downgraded to 9_) - Wire yaml_ws_handler into server.py (replaces raw _ws_proxy call) - Load PipelineTemplateCatalog at startup; reload + health report template count - Update push_catalogs.sh to push pipeline_templates_catalog.json - Update Dockerfile to bake pipeline_templates_catalog.json as image fallback - Add tests/test_yaml_catalog.py (14 tests) + tests/test_yaml_proxy.py (18 tests) All 67 tests green
65 lines
2.6 KiB
Docker
65 lines
2.6 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 .
|
|
COPY pipeline_templates_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 + Node.js (for yaml-language-server)
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
python3 python3-pip wget nodejs npm \
|
|
&& npm install -g yaml-language-server \
|
|
&& 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
|
|
COPY --from=builder /build/pipeline_templates_catalog.json /pipeline_templates_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 \
|
|
YAML_LSP_PORT=2090 \
|
|
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"]
|