diff --git a/Dockerfile b/Dockerfile index 6444b21..9b7c01b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.12-slim-bullseye +FROM python:3.12-slim-bookworm # PYTHONFAULTHANDLER: Propagate tracebacks from all threads. # PYTHONUNBUFFERED: Write terminal output straight to docker (to not confuse Docker Compose). @@ -13,14 +13,19 @@ ENV PYTHONFAULTHANDLER=1 \ PIP_DISABLE_PIP_VERSION_CHECK=on \ PIP_DEFAULT_TIMEOUT=100 ARG BUILD -ENV BUILD ${BUILD} +ENV BUILD=${BUILD} ARG REQUIREMENTS_FILE=requirements.txt WORKDIR /app RUN groupadd -g 1000 www && useradd -u 1000 -ms /bin/bash -g www www -COPY --chown=www:www . . -RUN apt-get update && \ + +# Only copy the requirements file first to leverage Docker cache +COPY $REQUIREMENTS_FILE . + +RUN mkdir -p /app/src/static && \ + chown www:www /app/src/static && \ + apt-get update && \ apt-get install -y \ binutils \ libpq-dev \ @@ -32,15 +37,13 @@ RUN apt-get update && \ libgdk-pixbuf2.0-0 \ libffi-dev \ shared-mime-info \ - gettext + gettext && \ + pip install --no-cache-dir -r $REQUIREMENTS_FILE -COPY --chown=www:www . . +# Copy the rest of the application +COPY . . -RUN mkdir /app/src/static && \ - chown www:www /app/src/static - -RUN pip install --no-cache-dir -r $REQUIREMENTS_FILE -RUN django-admin compilemessages +RUN django-admin compilemessages ENTRYPOINT ["./entrypoint.sh"] diff --git a/Makefile b/Makefile index 651ed32..0eeaafa 100644 --- a/Makefile +++ b/Makefile @@ -6,12 +6,6 @@ MANAGE_COMMAND = ${DOCKER_RUN} app ${MANAGE_EXEC} run: ${DOCKER_COMPOSE} up -pre_commit_install: - venv/bin/pre-commit install - -pre_commit_run_all: - venv/bin/pre-commit run --all-files - makemigrations: ${MANAGE_COMMAND} makemigrations ${ARGS} diff --git a/README.md b/README.md index 41ef329..a91763d 100644 --- a/README.md +++ b/README.md @@ -84,3 +84,13 @@ make makemigrations ```bash hatch run dev:server ``` + +#### Updating requirements + +If you want to update the requirements, you can run the following command: + +```bash +hatch run requirements +``` + +This uses [hatch-pip-compile](https://juftin.com/hatch-pip-compile/) to update the requirements. diff --git a/pyproject.toml b/pyproject.toml index 643b1cd..fc88792 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,17 +12,17 @@ authors = [ { name = "Víðir Valberg Guðmundsson", email = "valberg@orn.li" }, ] dependencies = [ - "Django==5.0.7", - "django-money==3.5.2", - "django-allauth==0.63.6", - "psycopg[binary]==3.2.1", - "environs[django]==11.0.0", - "uvicorn==0.30.1", - "whitenoise==6.7.0", - "django-zen-queries==2.1.0", + "Django~=5.0", + "django-money~=3.5", + "django-allauth~=0.63", + "psycopg[binary]~=3.2", + "environs[django]>=11,<12", + "uvicorn~=0.30", + "whitenoise~=6.7", + "django-zen-queries~=2.1", "django-registries==0.0.3", "django-view-decorator==0.0.4", - "django-oauth-toolkit==2.4.0", + "django-oauth-toolkit~=2.4", ] version = "0.0.1" @@ -62,11 +62,11 @@ matrix.python.dependencies = [ { value = "typing_extensions==4.5.0", if = ["3.10"]}, ] -[tool.hatch.envs.dev.scripts] +[tool.hatch.envs.default.scripts] cov = "pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=src --cov=tests --cov=append {args}" no-cov = "cov --no-cov {args}" typecheck = "mypy --config-file=pyproject.toml ." -requirements = "pip-compile --output-file requirements/base.txt pyproject.toml" +requirements = "hatch env run --env default -- python --version; hatch env run --env dev -- python --version" server = "./src/manage.py runserver 0.0.0.0:8000" migrate = "./src/manage.py migrate" makemigrations = "./src/manage.py makemigrations" diff --git a/requirements.txt b/requirements.txt index 5642b3a..5052e2a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,17 +1,17 @@ # # This file is autogenerated by hatch-pip-compile with Python 3.12 # -# - django-allauth==0.63.6 -# - django-money==3.5.2 -# - django-oauth-toolkit==2.4.0 +# - django-allauth~=0.63 +# - django-money~=3.5 +# - django-oauth-toolkit~=2.4 # - django-registries==0.0.3 # - django-view-decorator==0.0.4 -# - django-zen-queries==2.1.0 -# - django==5.0.7 -# - environs[django]==11.0.0 -# - psycopg[binary]==3.2.1 -# - uvicorn==0.30.1 -# - whitenoise==6.7.0 +# - django-zen-queries~=2.1 +# - django~=5.0 +# - environs[django]<12,>=11 +# - psycopg[binary]~=3.2 +# - uvicorn~=0.30 +# - whitenoise~=6.7 # asgiref==3.8.1 @@ -26,7 +26,7 @@ charset-normalizer==3.3.2 # via requests click==8.1.7 # via uvicorn -cryptography==42.0.8 +cryptography==43.0.0 # via jwcrypto dj-database-url==2.2.0 # via environs @@ -94,7 +94,7 @@ typing-extensions==4.12.2 # py-moneyed urllib3==2.2.2 # via requests -uvicorn==0.30.1 +uvicorn==0.30.3 # via hatch.envs.default whitenoise==6.7.0 # via hatch.envs.default diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt index f044e8c..39faa96 100644 --- a/requirements/requirements-dev.txt +++ b/requirements/requirements-dev.txt @@ -11,17 +11,17 @@ # - django-debug-toolbar==4.2.0 # - django-browser-reload==1.7.0 # - model-bakery==1.17.0 -# - django-allauth==0.63.6 -# - django-money==3.5.2 -# - django-oauth-toolkit==2.4.0 +# - django-allauth~=0.63 +# - django-money~=3.5 +# - django-oauth-toolkit~=2.4 # - django-registries==0.0.3 # - django-view-decorator==0.0.4 -# - django-zen-queries==2.1.0 -# - django==5.0.7 -# - environs[django]==11.0.0 -# - psycopg[binary]==3.2.1 -# - uvicorn==0.30.1 -# - whitenoise==6.7.0 +# - django-zen-queries~=2.1 +# - django~=5.0 +# - environs[django]<12,>=11 +# - psycopg[binary]~=3.2 +# - uvicorn~=0.30 +# - whitenoise~=6.7 # asgiref==3.8.1 @@ -45,9 +45,8 @@ click==8.1.7 coverage==7.3.0 # via # hatch.envs.dev - # coverage # pytest-cov -cryptography==42.0.8 +cryptography==43.0.0 # via jwcrypto dj-database-url==2.2.0 # via environs @@ -84,16 +83,14 @@ django-registries==0.0.3 # via hatch.envs.dev django-stubs==1.16.0 # via hatch.envs.dev -django-stubs-ext==5.0.2 +django-stubs-ext==5.0.4 # via django-stubs django-view-decorator==0.0.4 # via hatch.envs.dev django-zen-queries==2.1.0 # via hatch.envs.dev environs==11.0.0 - # via - # hatch.envs.dev - # environs + # via hatch.envs.dev h11==0.14.0 # via uvicorn idna==3.7 @@ -124,9 +121,7 @@ pip-tools==7.3.0 pluggy==1.5.0 # via pytest psycopg==3.2.1 - # via - # hatch.envs.dev - # psycopg + # via hatch.envs.dev psycopg-binary==3.2.1 # via psycopg py-moneyed==3.0 @@ -158,7 +153,7 @@ tomli==2.0.1 # via django-stubs types-pytz==2024.1.0.20240417 # via django-stubs -types-pyyaml==6.0.12.20240311 +types-pyyaml==6.0.12.20240724 # via django-stubs typing-extensions==4.12.2 # via @@ -171,7 +166,7 @@ typing-extensions==4.12.2 # py-moneyed urllib3==2.2.2 # via requests -uvicorn==0.30.1 +uvicorn==0.30.3 # via hatch.envs.dev wheel==0.43.0 # via pip-tools