diff --git a/template/{% if enable_container %}Dockerfile{% endif %}.jinja b/template/{% if enable_container %}Dockerfile{% endif %}.jinja index 52ff5a2..f5171bf 100644 --- a/template/{% if enable_container %}Dockerfile{% endif %}.jinja +++ b/template/{% if enable_container %}Dockerfile{% endif %}.jinja @@ -1,20 +1,24 @@ {%- import "includes/python.jinja" as py with context -%} -FROM ghcr.io/astral-sh/uv:python{{ py.latest() }}-bookworm-slim +FROM ghcr.io/astral-sh/uv:python{{ py.latest() }}-bookworm-slim AS builder WORKDIR /app # Install dependencies first (cached layer, only invalidated by pyproject.toml changes) -COPY pyproject.toml ./ +COPY pyproject.toml README.md . RUN --mount=type=cache,target=/root/.cache/uv \ uv sync --no-dev --no-install-project # Copy source and install project COPY {{ project_slug }}/ ./{{ project_slug }}/ RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --no-dev + uv sync --no-dev --no-editable + +FROM python:{{ py.latest() }}-slim + +COPY --from=builder /app/.venv /app/.venv RUN useradd --no-create-home --shell /bin/false app USER app -CMD ["uv", "run", "python", "-m", "{{ project_slug }}"] +CMD ["/app/.venv/bin/python", "-m", "{{ project_slug }}"] {#- vim: set ft=dockerfile: #} diff --git a/tests/__snapshots__/test_dockerfile.ambr b/tests/__snapshots__/test_dockerfile.ambr index ace3cf3..b351974 100644 --- a/tests/__snapshots__/test_dockerfile.ambr +++ b/tests/__snapshots__/test_dockerfile.ambr @@ -1,139 +1,163 @@ # serializer version: 1 # name: test_workflows_container[3.12-3.10] ''' - FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim + FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS builder WORKDIR /app # Install dependencies first (cached layer, only invalidated by pyproject.toml changes) - COPY pyproject.toml ./ + COPY pyproject.toml README.md . RUN --mount=type=cache,target=/root/.cache/uv \ uv sync --no-dev --no-install-project # Copy source and install project COPY pkfire/ ./pkfire/ RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --no-dev + uv sync --no-dev --no-editable + + FROM python:3.12-slim + + COPY --from=builder /app/.venv /app/.venv RUN useradd --no-create-home --shell /bin/false app USER app - CMD ["uv", "run", "python", "-m", "pkfire"] + CMD ["/app/.venv/bin/python", "-m", "pkfire"] ''' # --- # name: test_workflows_container[3.12-3.12] ''' - FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim + FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS builder WORKDIR /app # Install dependencies first (cached layer, only invalidated by pyproject.toml changes) - COPY pyproject.toml ./ + COPY pyproject.toml README.md . RUN --mount=type=cache,target=/root/.cache/uv \ uv sync --no-dev --no-install-project # Copy source and install project COPY pkfire/ ./pkfire/ RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --no-dev + uv sync --no-dev --no-editable + + FROM python:3.12-slim + + COPY --from=builder /app/.venv /app/.venv RUN useradd --no-create-home --shell /bin/false app USER app - CMD ["uv", "run", "python", "-m", "pkfire"] + CMD ["/app/.venv/bin/python", "-m", "pkfire"] ''' # --- # name: test_workflows_container[3.14-3.10] ''' - FROM ghcr.io/astral-sh/uv:python3.14-bookworm-slim + FROM ghcr.io/astral-sh/uv:python3.14-bookworm-slim AS builder WORKDIR /app # Install dependencies first (cached layer, only invalidated by pyproject.toml changes) - COPY pyproject.toml ./ + COPY pyproject.toml README.md . RUN --mount=type=cache,target=/root/.cache/uv \ uv sync --no-dev --no-install-project # Copy source and install project COPY pkfire/ ./pkfire/ RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --no-dev + uv sync --no-dev --no-editable + + FROM python:3.14-slim + + COPY --from=builder /app/.venv /app/.venv RUN useradd --no-create-home --shell /bin/false app USER app - CMD ["uv", "run", "python", "-m", "pkfire"] + CMD ["/app/.venv/bin/python", "-m", "pkfire"] ''' # --- # name: test_workflows_container[3.14-3.12] ''' - FROM ghcr.io/astral-sh/uv:python3.14-bookworm-slim + FROM ghcr.io/astral-sh/uv:python3.14-bookworm-slim AS builder WORKDIR /app # Install dependencies first (cached layer, only invalidated by pyproject.toml changes) - COPY pyproject.toml ./ + COPY pyproject.toml README.md . RUN --mount=type=cache,target=/root/.cache/uv \ uv sync --no-dev --no-install-project # Copy source and install project COPY pkfire/ ./pkfire/ RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --no-dev + uv sync --no-dev --no-editable + + FROM python:3.14-slim + + COPY --from=builder /app/.venv /app/.venv RUN useradd --no-create-home --shell /bin/false app USER app - CMD ["uv", "run", "python", "-m", "pkfire"] + CMD ["/app/.venv/bin/python", "-m", "pkfire"] ''' # --- # name: test_workflows_container[No maximum-3.10] ''' - FROM ghcr.io/astral-sh/uv:python3.14-bookworm-slim + FROM ghcr.io/astral-sh/uv:python3.14-bookworm-slim AS builder WORKDIR /app # Install dependencies first (cached layer, only invalidated by pyproject.toml changes) - COPY pyproject.toml ./ + COPY pyproject.toml README.md . RUN --mount=type=cache,target=/root/.cache/uv \ uv sync --no-dev --no-install-project # Copy source and install project COPY pkfire/ ./pkfire/ RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --no-dev + uv sync --no-dev --no-editable + + FROM python:3.14-slim + + COPY --from=builder /app/.venv /app/.venv RUN useradd --no-create-home --shell /bin/false app USER app - CMD ["uv", "run", "python", "-m", "pkfire"] + CMD ["/app/.venv/bin/python", "-m", "pkfire"] ''' # --- # name: test_workflows_container[No maximum-3.12] ''' - FROM ghcr.io/astral-sh/uv:python3.14-bookworm-slim + FROM ghcr.io/astral-sh/uv:python3.14-bookworm-slim AS builder WORKDIR /app # Install dependencies first (cached layer, only invalidated by pyproject.toml changes) - COPY pyproject.toml ./ + COPY pyproject.toml README.md . RUN --mount=type=cache,target=/root/.cache/uv \ uv sync --no-dev --no-install-project # Copy source and install project COPY pkfire/ ./pkfire/ RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --no-dev + uv sync --no-dev --no-editable + + FROM python:3.14-slim + + COPY --from=builder /app/.venv /app/.venv RUN useradd --no-create-home --shell /bin/false app USER app - CMD ["uv", "run", "python", "-m", "pkfire"] + CMD ["/app/.venv/bin/python", "-m", "pkfire"] ''' # ---