FROM python:3.14-slim COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv # Node.js 22 LTS RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates curl tini \ && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ && apt-get install -y --no-install-recommends nodejs \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Python deps — cached until pyproject.toml / uv.lock change COPY pyproject.toml uv.lock ./ RUN uv sync --group api --group mcp --no-dev --frozen # TypeScript deps — cached until package*.json changes COPY room_cal/service_api/typescript/package*.json \ ./room_cal/service_api/typescript/ RUN cd room_cal/service_api/typescript \ && npm ci \ && node_modules/.bin/playwright install-deps chromium # App source COPY room_cal/ ./room_cal/ COPY docker/uvicorn_log.json /etc/uvicorn_log.json COPY docker/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/usr/bin/tini", "--"] CMD ["/entrypoint.sh"]