diff --git a/.github/contributors.json b/.github/contributors.json index f97aecfea..cac1fd537 100644 --- a/.github/contributors.json +++ b/.github/contributors.json @@ -1698,5 +1698,10 @@ "name": "Kawsar Alam Foysal", "github_login": "iamfoysal", "twitter_username": "" + }, + { + "name": "Igor Jerosimić", + "github_login": "igor-wl", + "twitter_username": "" } ] \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d99290ea4..4eb01036e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -44,7 +44,7 @@ repos: - id: isort - repo: https://github.com/PyCQA/flake8 - rev: 7.1.2 + rev: 7.2.0 hooks: - id: flake8 diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bc69a7d9..31c1a1847 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,46 @@ All enhancements and patches to Cookiecutter Django will be documented in this f +## 2025.04.01 + + +### Updated + +- Update pillow to 11.2.0 ([#5751](https://github.com/cookiecutter/cookiecutter-django/pull/5751)) + +- Bump traefik from 3.3.4 to 3.3.5 ([#5750](https://github.com/cookiecutter/cookiecutter-django/pull/5750)) + +- Update celery to 5.5.0 ([#5748](https://github.com/cookiecutter/cookiecutter-django/pull/5748)) + +## 2025.03.31 + + +### Updated + +- Update django-allauth to 65.6.0 ([#5741](https://github.com/cookiecutter/cookiecutter-django/pull/5741)) + +- Update sentry-sdk to 2.25.0 ([#5747](https://github.com/cookiecutter/cookiecutter-django/pull/5747)) + +- Update coverage to 7.8.0 ([#5745](https://github.com/cookiecutter/cookiecutter-django/pull/5745)) + +## 2025.03.28 + + +### Updated + +- Update djangorestframework to 3.16.0 ([#5743](https://github.com/cookiecutter/cookiecutter-django/pull/5743)) + +- Update django-upgrade pre-commit hook to v1.24.0 ([#5742](https://github.com/cookiecutter/cookiecutter-django/pull/5742)) + +## 2025.03.24 + + +### Updated + +- Update django-allauth to 65.5.0 ([#5723](https://github.com/cookiecutter/cookiecutter-django/pull/5723)) + +- Update sentry-sdk to 2.24.1 ([#5739](https://github.com/cookiecutter/cookiecutter-django/pull/5739)) + ## 2025.03.22 diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 36912e89e..491c20a2c 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -1104,6 +1104,13 @@ Listed in alphabetical order. + + Igor Jerosimić + + igor-wl + + + Imran Rahman diff --git a/pyproject.toml b/pyproject.toml index 243e5bc56..13d333953 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "cookiecutter-django" -version = "2025.03.22" +version = "2025.04.01" description = "A Cookiecutter template for creating production-ready Django projects quickly." readme = "README.md" keywords = [ diff --git a/uv.lock b/uv.lock index 49f01cc06..8e591d038 100644 --- a/uv.lock +++ b/uv.lock @@ -182,7 +182,7 @@ wheels = [ [[package]] name = "cookiecutter-django" -version = "2025.3.22" +version = "2025.4.1" source = { virtual = "." } dependencies = [ { name = "binaryornot" }, diff --git a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml index 0b0f6e960..e7a024d1d 100644 --- a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml +++ b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml @@ -29,7 +29,7 @@ repos: exclude: '{{cookiecutter.project_slug}}/templates/' - repo: https://github.com/adamchainz/django-upgrade - rev: '1.23.1' + rev: '1.24.0' hooks: - id: django-upgrade args: ['--target-version', '5.0'] diff --git a/{{cookiecutter.project_slug}}/compose/production/traefik/Dockerfile b/{{cookiecutter.project_slug}}/compose/production/traefik/Dockerfile index 7ec39ad20..3c9b1d8ab 100644 --- a/{{cookiecutter.project_slug}}/compose/production/traefik/Dockerfile +++ b/{{cookiecutter.project_slug}}/compose/production/traefik/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.io/traefik:3.3.4 +FROM docker.io/traefik:3.3.5 RUN mkdir -p /etc/traefik/acme \ && touch /etc/traefik/acme/acme.json \ && chmod 600 /etc/traefik/acme/acme.json diff --git a/{{cookiecutter.project_slug}}/config/settings/base.py b/{{cookiecutter.project_slug}}/config/settings/base.py index 22876096c..ba0a7ce46 100644 --- a/{{cookiecutter.project_slug}}/config/settings/base.py +++ b/{{cookiecutter.project_slug}}/config/settings/base.py @@ -337,10 +337,10 @@ ACCOUNT_ALLOW_REGISTRATION = env.bool("DJANGO_ACCOUNT_ALLOW_REGISTRATION", True) # https://docs.allauth.org/en/latest/account/configuration.html ACCOUNT_LOGIN_METHODS = {"{{cookiecutter.username_type}}"} # https://docs.allauth.org/en/latest/account/configuration.html -ACCOUNT_EMAIL_REQUIRED = True -{%- if cookiecutter.username_type == "email" %} -# https://docs.allauth.org/en/latest/account/configuration.html -ACCOUNT_USERNAME_REQUIRED = False +{%- if cookiecutter.username_type == "username" %} +ACCOUNT_SIGNUP_FIELDS = ["email*", "username*", "password1*", "password2*"] +{%- else %} +ACCOUNT_SIGNUP_FIELDS = ["email*", "password1*", "password2*"] # https://docs.allauth.org/en/latest/account/configuration.html ACCOUNT_USER_MODEL_USERNAME_FIELD = None {%- endif %} diff --git a/{{cookiecutter.project_slug}}/merge_production_dotenvs_in_dotenv.py b/{{cookiecutter.project_slug}}/merge_production_dotenvs_in_dotenv.py index 35139fb2e..b05037433 100644 --- a/{{cookiecutter.project_slug}}/merge_production_dotenvs_in_dotenv.py +++ b/{{cookiecutter.project_slug}}/merge_production_dotenvs_in_dotenv.py @@ -1,4 +1,3 @@ -import os from collections.abc import Sequence from pathlib import Path @@ -18,7 +17,7 @@ def merge( merged_content = "" for merge_file in files_to_merge: merged_content += merge_file.read_text() - merged_content += os.linesep + merged_content += "\n" output_file.write_text(merged_content) diff --git a/{{cookiecutter.project_slug}}/requirements/base.txt b/{{cookiecutter.project_slug}}/requirements/base.txt index a6bf5d477..dcd676012 100644 --- a/{{cookiecutter.project_slug}}/requirements/base.txt +++ b/{{cookiecutter.project_slug}}/requirements/base.txt @@ -1,5 +1,5 @@ python-slugify==8.0.4 # https://github.com/un33k/python-slugify -Pillow==11.1.0 # https://github.com/python-pillow/Pillow +Pillow==11.2.0 # https://github.com/python-pillow/Pillow {%- if cookiecutter.frontend_pipeline == 'Django Compressor' %} {%- if cookiecutter.windows == 'y' and cookiecutter.use_docker == 'n' %} rcssmin==1.1.2 --install-option="--without-c-extensions" # https://github.com/ndparker/rcssmin @@ -16,7 +16,7 @@ redis==5.2.1 # https://github.com/redis/redis-py hiredis==3.1.0 # https://github.com/redis/hiredis-py {%- endif %} {%- if cookiecutter.use_celery == "y" %} -celery==5.4.0 # pyup: < 6.0 # https://github.com/celery/celery +celery==5.5.0 # pyup: < 6.0 # https://github.com/celery/celery django-celery-beat==2.7.0 # https://github.com/celery/django-celery-beat {%- if cookiecutter.use_docker == 'y' %} flower==2.0.1 # https://github.com/mher/flower @@ -32,7 +32,7 @@ uvicorn-worker==0.3.0 # https://github.com/Kludex/uvicorn-worker django==5.1.7 # pyup: < 5.2 # https://www.djangoproject.com/ django-environ==0.12.0 # https://github.com/joke2k/django-environ django-model-utils==5.0.0 # https://github.com/jazzband/django-model-utils -django-allauth[mfa]==65.4.1 # https://github.com/pennersr/django-allauth +django-allauth[mfa]==65.6.0 # https://github.com/pennersr/django-allauth django-crispy-forms==2.3 # https://github.com/django-crispy-forms/django-crispy-forms crispy-bootstrap5==2024.10 # https://github.com/django-crispy-forms/crispy-bootstrap5 {%- if cookiecutter.frontend_pipeline == 'Django Compressor' %} @@ -41,7 +41,7 @@ django-compressor==4.5.1 # https://github.com/django-compressor/django-compress django-redis==5.4.0 # https://github.com/jazzband/django-redis {%- if cookiecutter.use_drf == 'y' %} # Django REST Framework -djangorestframework==3.15.2 # https://github.com/encode/django-rest-framework +djangorestframework==3.16.0 # https://github.com/encode/django-rest-framework django-cors-headers==4.7.0 # https://github.com/adamchainz/django-cors-headers # DRF-spectacular for api documentation drf-spectacular==0.28.0 # https://github.com/tfranzel/drf-spectacular diff --git a/{{cookiecutter.project_slug}}/requirements/local.txt b/{{cookiecutter.project_slug}}/requirements/local.txt index d568b70f8..414ac1a9c 100644 --- a/{{cookiecutter.project_slug}}/requirements/local.txt +++ b/{{cookiecutter.project_slug}}/requirements/local.txt @@ -29,7 +29,7 @@ sphinx-autobuild==2024.10.3 # https://github.com/GaretJax/sphinx-autobuild # Code quality # ------------------------------------------------------------------------------ ruff==0.11.2 # https://github.com/astral-sh/ruff -coverage==7.7.1 # https://github.com/nedbat/coveragepy +coverage==7.8.0 # https://github.com/nedbat/coveragepy djlint==1.36.4 # https://github.com/Riverside-Healthcare/djLint pre-commit==4.2.0 # https://github.com/pre-commit/pre-commit @@ -40,4 +40,4 @@ factory-boy==3.3.2 # https://github.com/FactoryBoy/factory_boy django-debug-toolbar==5.1.0 # https://github.com/jazzband/django-debug-toolbar django-extensions==3.2.3 # https://github.com/django-extensions/django-extensions django-coverage-plugin==3.1.0 # https://github.com/nedbat/django_coverage_plugin -pytest-django==4.10.0 # https://github.com/pytest-dev/pytest-django +pytest-django==4.11.0 # https://github.com/pytest-dev/pytest-django diff --git a/{{cookiecutter.project_slug}}/requirements/production.txt b/{{cookiecutter.project_slug}}/requirements/production.txt index d1495d8cb..ff725409b 100644 --- a/{{cookiecutter.project_slug}}/requirements/production.txt +++ b/{{cookiecutter.project_slug}}/requirements/production.txt @@ -8,7 +8,7 @@ psycopg[c]==3.2.6 # https://github.com/psycopg/psycopg Collectfasta==3.2.1 # https://github.com/jasongi/collectfasta {%- endif %} {%- if cookiecutter.use_sentry == "y" %} -sentry-sdk==2.24.1 # https://github.com/getsentry/sentry-python +sentry-sdk==2.25.1 # https://github.com/getsentry/sentry-python {%- endif %} {%- if cookiecutter.use_docker == "n" and cookiecutter.windows == "y" %} hiredis==3.1.0 # https://github.com/redis/hiredis-py @@ -17,11 +17,11 @@ hiredis==3.1.0 # https://github.com/redis/hiredis-py # Django # ------------------------------------------------------------------------------ {%- if cookiecutter.cloud_provider == 'AWS' %} -django-storages[s3]==1.14.5 # https://github.com/jschneier/django-storages +django-storages[s3]==1.14.6 # https://github.com/jschneier/django-storages {%- elif cookiecutter.cloud_provider == 'GCP' %} -django-storages[google]==1.14.5 # https://github.com/jschneier/django-storages +django-storages[google]==1.14.6 # https://github.com/jschneier/django-storages {%- elif cookiecutter.cloud_provider == 'Azure' %} -django-storages[azure]==1.14.5 # https://github.com/jschneier/django-storages +django-storages[azure]==1.14.6 # https://github.com/jschneier/django-storages {%- endif %} {%- if cookiecutter.mail_service == 'Mailgun' %} django-anymail[mailgun]==12.0 # https://github.com/anymail/django-anymail