From aa079cd65d83d6d6649acb1cb3433b9a9adc4763 Mon Sep 17 00:00:00 2001 From: Alex Tomkins Date: Tue, 20 Jan 2026 21:29:54 +0000 Subject: [PATCH 1/5] No need for a .flake8 file --- {{cookiecutter.project_slug}}/.flake8 | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 {{cookiecutter.project_slug}}/.flake8 diff --git a/{{cookiecutter.project_slug}}/.flake8 b/{{cookiecutter.project_slug}}/.flake8 deleted file mode 100644 index b7e502da..00000000 --- a/{{cookiecutter.project_slug}}/.flake8 +++ /dev/null @@ -1,7 +0,0 @@ -[flake8] -max-line-length = 99 -exclude = apps/*/migrations -# F405 - ignore wildcard variable warnings, as F403 (don't use wildcard imports) should show the -# problem anyway. But if we really need wildcard imports - we don't want to noqa every variable. -# W503 - line break before binary operator, considered not PEP 8 compliant by black. -ignore = F405,W503 From 0bccd75df79f3fa91a7ff7b8e86d737f94f12e17 Mon Sep 17 00:00:00 2001 From: Alex Tomkins Date: Tue, 20 Jan 2026 21:30:15 +0000 Subject: [PATCH 2/5] Package upgrades --- requirements/local.txt | 4 +-- tox.ini | 2 +- .../apps/core/context_processors.py | 2 +- .../requirements/base.txt | 36 +++++++++---------- .../requirements/local.txt | 8 ++--- .../requirements/production.txt | 2 +- .../requirements/testing.txt | 10 +++--- 7 files changed, 32 insertions(+), 32 deletions(-) diff --git a/requirements/local.txt b/requirements/local.txt index 1c3ff9be..fde5147c 100644 --- a/requirements/local.txt +++ b/requirements/local.txt @@ -1,4 +1,4 @@ -r testing.txt -tox==4.27.0 -tox-uv==1.26.1 +tox==4.34.1 +tox-uv==1.29.0 diff --git a/tox.ini b/tox.ini index ecaca3ba..9be94ff5 100644 --- a/tox.ini +++ b/tox.ini @@ -3,7 +3,7 @@ envlist = django, django-multilingual, geodjango no_package = true [testenv] -basepython = python3.12 +basepython = python3.14 deps = -rrequirements/testing.txt changedir = {envtmpdir} diff --git a/{{cookiecutter.project_slug}}/apps/core/context_processors.py b/{{cookiecutter.project_slug}}/apps/core/context_processors.py index 01839913..f29c1cbb 100644 --- a/{{cookiecutter.project_slug}}/apps/core/context_processors.py +++ b/{{cookiecutter.project_slug}}/apps/core/context_processors.py @@ -34,7 +34,7 @@ def browsersync(request): """ host = request.get_host() if ":" in host: - host, port = host.split(":") + host, _port = host.split(":") url = browsersync_url(host=host) diff --git a/{{cookiecutter.project_slug}}/requirements/base.txt b/{{cookiecutter.project_slug}}/requirements/base.txt index f0246ae1..87a30c24 100644 --- a/{{cookiecutter.project_slug}}/requirements/base.txt +++ b/{{cookiecutter.project_slug}}/requirements/base.txt @@ -1,15 +1,15 @@ -Django==5.2.9 -asgiref==3.9.1 -psycopg==3.2.9 -Pillow==11.3.0 +Django==5.2.10 +asgiref==3.11.0 +psycopg==3.3.2 +Pillow==12.1.0 olefile==0.47 -dj-database-url==3.0.1 -sqlparse==0.5.3 -typing-extensions==4.14.1 +dj-database-url==3.1.0 +sqlparse==0.5.5 +typing-extensions==4.15.0 # Caching django-redis==6.0.0 -redis==6.2.0 +redis==7.1.0 # Masked database backups django-maskpostgresdata==0.2.1 @@ -17,23 +17,23 @@ django-maskpostgresdata==0.2.1 # Storage devsoc-contentfiles==0.5 django-storages==1.14.6 -boto3==1.39.4 -botocore==1.39.4 +boto3==1.42.30 +botocore==1.42.30 jmespath==1.0.1 python-dateutil==2.9.0.post0 -s3transfer==0.13.0 +s3transfer==0.16.0 six==1.17.0 -urllib3==2.5.0 +urllib3==2.6.3 # Reporting (Errors, APM) -elastic-apm==6.23.0 -sentry-sdk==2.32.0 -certifi==2025.7.9 -ecs-logging==2.2.0 -wrapt==1.17.2 +elastic-apm==6.25.0 +sentry-sdk==2.50.0 +certifi==2026.1.4 +ecs-logging==2.3.0 +wrapt==2.0.1 # Axes -django-axes==8.0.0 +django-axes==8.1.0 # Email interception django-email-bandit==2.0 diff --git a/{{cookiecutter.project_slug}}/requirements/local.txt b/{{cookiecutter.project_slug}}/requirements/local.txt index defe07ee..86391ec2 100644 --- a/{{cookiecutter.project_slug}}/requirements/local.txt +++ b/{{cookiecutter.project_slug}}/requirements/local.txt @@ -1,8 +1,8 @@ -r testing.txt -black==25.1.0 -django-debug-toolbar==5.2.0 +black==26.1.0 +django-debug-toolbar==6.2.0 ipdb==0.13.13 pywatchman==3.0.0 -tox==4.27.0 -tox-uv==1.26.1 +tox==4.34.1 +tox-uv==1.29.0 diff --git a/{{cookiecutter.project_slug}}/requirements/production.txt b/{{cookiecutter.project_slug}}/requirements/production.txt index 004f582f..c423c28b 100644 --- a/{{cookiecutter.project_slug}}/requirements/production.txt +++ b/{{cookiecutter.project_slug}}/requirements/production.txt @@ -1,3 +1,3 @@ -r base.txt -psycopg-c==3.2.9 +psycopg-c==3.3.2 diff --git a/{{cookiecutter.project_slug}}/requirements/testing.txt b/{{cookiecutter.project_slug}}/requirements/testing.txt index 7a787495..fe847c85 100644 --- a/{{cookiecutter.project_slug}}/requirements/testing.txt +++ b/{{cookiecutter.project_slug}}/requirements/testing.txt @@ -1,10 +1,10 @@ -r base.txt -coverage==7.9.2 +coverage==7.13.1 django-extensions==4.1 djlint==1.36.4 factory-boy==3.3.3 -pipdeptree==2.27.0 -ruff==0.12.3 -tblib==3.1.0 -unittest-xml-reporting==3.2.0 +pipdeptree==2.30.0 +ruff==0.14.13 +tblib==3.2.2 +unittest-xml-reporting==4.0.0 From d478090d6465b59d58a64984d5ee01929432abba Mon Sep 17 00:00:00 2001 From: Alex Tomkins Date: Tue, 20 Jan 2026 21:30:21 +0000 Subject: [PATCH 3/5] Python 3.14 --- .github/workflows/ci.yml | 2 +- .../.github/workflows/ci_geodjango.yml | 2 +- .../.github/workflows/ci_standard.yml | 2 +- {{cookiecutter.project_slug}}/pyproject.toml | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3d27711d..d08ac7a9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version: '3.14' cache: 'pip' cache-dependency-path: 'requirements/*.txt' - name: Setup Node.js diff --git a/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml b/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml index c4c43668..38e52bda 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml @@ -22,7 +22,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version: '3.14' cache: 'pip' cache-dependency-path: 'requirements/*.txt' - name: Setup Node.js diff --git a/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml b/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml index 1dd9b4ff..082a091a 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml @@ -17,7 +17,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version: '3.14' cache: 'pip' cache-dependency-path: 'requirements/*.txt' - name: Setup Node.js diff --git a/{{cookiecutter.project_slug}}/pyproject.toml b/{{cookiecutter.project_slug}}/pyproject.toml index 39ab9d88..4d2c548b 100644 --- a/{{cookiecutter.project_slug}}/pyproject.toml +++ b/{{cookiecutter.project_slug}}/pyproject.toml @@ -1,6 +1,6 @@ [tool.black] line-length = 99 -target-version = ["py312"] +target-version = ["py314"] [tool.djlint] profile = "django" @@ -26,7 +26,7 @@ ignore = "T002" extend-exclude = ["apps/*/migrations"] src = ["apps"] line-length = 99 -target-version = "py312" +target-version = "py314" [tool.ruff.lint] exclude = ["apps/*/migrations"] From fc3272586c9a9afe36666da99049aa945fca2afe Mon Sep 17 00:00:00 2001 From: Alex Tomkins Date: Tue, 20 Jan 2026 21:36:13 +0000 Subject: [PATCH 4/5] Actions upgrades --- .github/workflows/ci.yml | 6 +++--- .../.github/workflows/ci_geodjango.yml | 8 ++++---- .../.github/workflows/ci_standard.yml | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d08ac7a9..de4e22d3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: fail-fast: false steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: persist-credentials: false ref: ${{ github.event.pull_request.head.sha }} @@ -26,13 +26,13 @@ jobs: sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ libgdal34t64 - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.14' cache: 'pip' cache-dependency-path: 'requirements/*.txt' - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' - name: Configure Postgres (for faster tests) diff --git a/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml b/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml index 38e52bda..605bb67f 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml @@ -10,7 +10,7 @@ jobs: timeout-minutes: 10 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: persist-credentials: false ref: ${{ github.event.pull_request.head.sha }} @@ -20,17 +20,17 @@ jobs: sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ libgdal34t64 - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.14' cache: 'pip' cache-dependency-path: 'requirements/*.txt' - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' - name: Node.js npm cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.npm diff --git a/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml b/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml index 082a091a..fce2a307 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml @@ -10,22 +10,22 @@ jobs: timeout-minutes: 10 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: persist-credentials: false ref: ${{ github.event.pull_request.head.sha }} - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.14' cache: 'pip' cache-dependency-path: 'requirements/*.txt' - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' - name: Node.js npm cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.npm From e462091750300613a487a92028467c8d2a3b9ea8 Mon Sep 17 00:00:00 2001 From: Alex Tomkins Date: Tue, 20 Jan 2026 21:36:19 +0000 Subject: [PATCH 5/5] Postgres 18 --- .github/workflows/ci.yml | 2 +- .../.github/workflows/ci_geodjango.yml | 2 +- {{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index de4e22d3..726ea5d0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: tox -e ${{ matrix.testenv }} services: postgres: - image: postgis/postgis:17-3.5-alpine + image: postgis/postgis:18-3.6-alpine env: POSTGRES_PASSWORD: password ports: diff --git a/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml b/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml index 605bb67f..11237b90 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/ci_geodjango.yml @@ -58,7 +58,7 @@ jobs: tox services: postgres: - image: postgis/postgis:17-3.5-alpine + image: postgis/postgis:18-3.6-alpine env: POSTGRES_PASSWORD: password ports: diff --git a/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml b/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml index fce2a307..1a7bd8a8 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/ci_standard.yml @@ -53,7 +53,7 @@ jobs: tox services: postgres: - image: postgres:17-alpine + image: postgres:18-alpine env: POSTGRES_PASSWORD: password ports: