From ab20e20e60a71c166f8ca463b0b17d758732a39b Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Thu, 28 Aug 2025 17:34:55 +0100 Subject: [PATCH] Use minimal Docker image to run uv resolution --- hooks/post_gen_project.py | 32 +++++++++++++++---- .../compose/local/uv/Dockerfile | 5 +++ 2 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 {{cookiecutter.project_slug}}/compose/local/uv/Dockerfile diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index a0975c574..54c0a0c44 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -1,6 +1,5 @@ # ruff: noqa: PLR0133 import json -import os import random import shutil import string @@ -515,15 +514,29 @@ def setup_dependencies(): print("Installing python dependencies using uv...") if "{{ cookiecutter.use_docker }}".lower() == "y": - # Build the Docker service using Docker Compose + # Build a trimmed down Docker image add dependencies with uv + uv_docker_image_path = Path("compose/local/uv/Dockerfile") + uv_image_tag = "cookiecutter-django-uv-runner:latest" try: - subprocess.run(["docker", "compose", "-f", "docker-compose.local.yml", "build", "django"], check=True) # noqa: S607 + subprocess.run( # noqa: S603 + [ # noqa: S607 + "docker", + "build", + "-t", + uv_image_tag, + "-f", + str(uv_docker_image_path), + "-q", + ".", + ], + check=True, + ) except subprocess.CalledProcessError as e: - print(f"Error building Docker service: {e}", file=sys.stderr) + print(f"Error building Docker image: {e}", file=sys.stderr) sys.exit(1) # Use Docker to run the uv command - uv_cmd = ["docker", "compose", "-f", "docker-compose.local.yml", "run", "--rm", "django", "uv"] + uv_cmd = ["docker", "run", "--rm", "-v", ".:/app", uv_image_tag, "uv"] else: # Use uv command directly uv_cmd = ["uv"] @@ -543,13 +556,18 @@ def setup_dependencies(): sys.exit(1) # Remove the requirements directory - if os.path.exists("requirements"): # noqa: PTH110 + requirements_dir = Path("requirements") + if requirements_dir.exists(): try: - shutil.rmtree("requirements") + shutil.rmtree(requirements_dir) except Exception as e: # noqa: BLE001 print(f"Error removing 'requirements' folder: {e}", file=sys.stderr) sys.exit(1) + uv_image_parent_dir_path = Path("compose/local/uv") + if uv_image_parent_dir_path.exists(): + shutil.rmtree(str(uv_image_parent_dir_path)) + print("Setup complete!") diff --git a/{{cookiecutter.project_slug}}/compose/local/uv/Dockerfile b/{{cookiecutter.project_slug}}/compose/local/uv/Dockerfile new file mode 100644 index 000000000..310ee0c0a --- /dev/null +++ b/{{cookiecutter.project_slug}}/compose/local/uv/Dockerfile @@ -0,0 +1,5 @@ +FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS python + +ARG APP_HOME=/app + +WORKDIR ${APP_HOME}