Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
0fa0cd5
Upgrade Wagtail 7.4 → 8.0
nickmoreton Sep 1, 2026
361f740
Upgrade Python dependencies
nickmoreton Sep 1, 2026
b6c2019
Upgrade Node dependencies
nickmoreton Sep 1, 2026
74aaeec
Add ESLint v9 migration reference to the ceiling note
nickmoreton Sep 1, 2026
c1fe1d7
Migrate Tailwind CSS to v4
nickmoreton Sep 1, 2026
5516468
Fix upgrade-log entry per self-review: thing-named heading, drop cycl…
nickmoreton Sep 1, 2026
72525b0
Record Trivy security review
nickmoreton Sep 1, 2026
82d3d16
Refresh pre-commit hooks; hold ruff back from v0.16 pending follow-up
nickmoreton Sep 1, 2026
2eb0bed
Fix ruff 0.16 default rule-selection drift; lift pre-commit hold
nickmoreton Sep 1, 2026
0e14d27
Translate Tailwind config to CSS @theme; drop tailwind.config.js
damwaingames Sep 8, 2026
31ceb41
TWE-730: Security update: Django 5.2.17 -> 5.2.18
damwaingames Oct 6, 2026
d6d67ca
TWE-730: Trivy remediation: raise urllib3 security floor ~2.7 -> ~2.8…
damwaingames Oct 6, 2026
ec936dd
Bump versions
nickmoreton Oct 12, 2026
ceb7147
Upgrade platform: Python 3.13 → 3.14
nickmoreton Oct 12, 2026
77bc8a6
Update the pre-commit config and poetry lock file to use Python 3.14
nickmoreton Oct 12, 2026
c5a0420
Update README python 3.14
nickmoreton Oct 13, 2026
9a44237
Experiment: revert ruff.toml to extend-select per zerolab's PR #456 r…
nickmoreton Oct 13, 2026
4cab187
Bump ruff target-version to py314 to match the platform upgrade
nickmoreton Oct 13, 2026
477a369
Resolve the RUF012 noise and fix the remaining extend-select findings
nickmoreton Oct 13, 2026
22704ef
Move ruff RUF012 ignore to only apply to migrations
nickmoreton Oct 13, 2026
8916ba8
Keep taxonomy Meta.ordering as a list instead of forcing a migration
nickmoreton Oct 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,5 @@ module.exports = {
// This is actually because we don't have react in this project
react: { version: '18.2.0' },
},
rules: {
// tailwindcss@4 uses package.json exports which eslint-import-resolver-node doesn't support.
'import/no-unresolved': ['error', { ignore: ['^tailwindcss'] }],
},
rules: {},
};
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[Link to Ticket]()
[Link to Ticket](<>)

### Description of Changes Made

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/flightpath.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.13'
python-version: '3.14'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/flightpath_status_check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.13'
python-version: '3.14'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/gh-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
python-version: '3.14'
cache: 'pip'

- name: Install dependencies
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
python-version: '3.14'
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
Expand Down Expand Up @@ -94,7 +94,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
python-version: '3.14'
cache: 'poetry'
- uses: actions/download-artifact@v4
with:
Expand Down
6 changes: 3 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
default_language_version:
node: system
python: python3.13
python: python3.14
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: 'v0.15.15' # keep in sync with pyproject.toml
rev: 'v0.16.5' # keep in sync with pyproject.toml
hooks:
- id: ruff
args: [--fix, --exit-non-zero-on-fix]
Expand Down Expand Up @@ -51,7 +51,7 @@ repos:
files: ^pyproject.toml$

- repo: https://github.com/adamchainz/django-upgrade
rev: '1.30.0' # update with latest tag on GitHub
rev: '1.32.0' # update with latest tag on GitHub
hooks:
- id: django-upgrade
args: [--target-version, '5.2'] # Django version used in this site
Expand Down
24 changes: 17 additions & 7 deletions .stylelintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,29 @@ module.exports = {
{
ignoreAtRules: [
'container',
'config',
'custom-variant',
'source',
'utility',
'theme',
],
},
],
'no-invalid-position-declaration': [
true,
{
ignoreAtRules: ['utility'],
},
],
'no-invalid-position-declaration': true,
'scss/dollar-variable-no-missing-interpolation': null,
},
overrides: [
{
// Tailwind v4 CSS-first syntax (@utility/@theme/@custom-variant).
// A newer stylelint's plain-CSS rules don't recognise these
// at-rules as scoping contexts, so they false-positive on valid
// v4 syntax. Null exactly these two rules for this directory —
// every other rule (including scss/at-rule-no-unknown, which
// already doesn't flag these at-rules as unknown) stays live.
files: ['tbx/static_src/css/**/*.css'],
rules: {
'nesting-selector-no-missing-scoping-root': null,
'no-invalid-position-declaration': null,
},
},
],
};
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. This projec

Add your changes to the Unreleased section and move them to the appropriate section when they are merged.

## Unreleased

- [TWE-730](https://torchbox.atlassian.net/browse/TWE-730) - Django 5.2.18 security update

## 2026-05-21

- [TWE-711](https://torchbox.atlassian.net/browse/TWE-711) - Fix RelatedBlog error edge case
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ ARG CI=true
WORKDIR /app

# Install front-end dependencies.
COPY package.json package-lock.json tsconfig.json webpack.config.js tailwind.config.js ./
COPY package.json package-lock.json tsconfig.json webpack.config.js ./
RUN npm ci --no-audit --progress=false

FROM frontend-deps AS frontend
Expand All @@ -21,7 +21,7 @@ RUN npm run build:prod
# all useful packages required for image manipulation out of the box. They
# however weight a lot, approx. up to 1.5GiB per built image.
# Pinned to a particlar version as requested by support team 6/10/25
FROM python:3.13-trixie AS python-base
FROM python:3.14-trixie AS python-base

ARG POETRY_INSTALL_ARGS="--no-dev"

Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ mkdocs serve

The documentation will be available at: <http://localhost:8001/>

It is also available via github pages at https://torchbox.github.io/torchbox.com/
It is also available via github pages at <https://torchbox.github.io/torchbox.com/>

## Setting up a local build

Expand All @@ -50,7 +50,7 @@ if you have older versions already installed they _may_ work, but are not guaran
- [Install instructions](https://docs.docker.com/compose/install/) (Linux-only: Compose is already installed for Mac users as part of Docker Desktop or Orbstack.)
- [Fabric](https://www.fabfile.org/), version 2.4.0 or up
- [Install instructions](https://www.fabfile.org/installing.html)
- Python, version 3.6.9 or up
- Python, version 3.14 or up

Note that on Mac OS, if you have an older version of fabric installed, you may need to uninstall the old one and then install the new version with pip3:

Expand All @@ -59,7 +59,7 @@ pip uninstall fabric
pip3 install fabric
```

You can manage different python versions by setting up `pyenv`: https://realpython.com/intro-to-pyenv/
You can manage different python versions by setting up `pyenv`: <https://realpython.com/intro-to-pyenv/>

Additionally, for interacting with production / staging environments, you'll need:

Expand Down Expand Up @@ -89,7 +89,7 @@ dj createcachetable
dj createsuperuser
```

The site should be available on the host machine at: http://127.0.0.1:8000/
The site should be available on the host machine at: <http://127.0.0.1:8000/>

If you only wish to run the frontend or backend tooling, the commands `honcho` runs are in `docker/Procfile`.

Expand Down
1 change: 0 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ services:
- ./.stylelintrc.js:/app/.stylelintrc.js:rw
- ./package-lock.json:/app/package-lock.json:rw
- ./package.json:/app/package.json:rw
- ./tailwind.config.js:/app/tailwind.config.js:rw
- ./tsconfig.json:/app/tsconfig.json:rw
- ./webpack.config.js:/app/webpack.config.js:rw

Expand Down
2 changes: 1 addition & 1 deletion docs/front-end/breakpoints.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@ $breakpoints: (

Other breakpoints can be added to this map as required, however the breakpoints should be used sparingly and only when the design requires it.

These breakpoints should match the screen sizes set up in `tailwind.config.js`.
These breakpoints should match the breakpoints set up in the `@theme` block in `tbx/static_src/css/tailwind.css`.
2 changes: 1 addition & 1 deletion docs/front-end/utility-classes.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ Some, such as the `listing` component are designed to be a base with variations

However, we have some utility classes which are designed for re-use, along with the option to to use Tailwind utility classes. Classes that are designed for re-use include `button`, `heading--[xyz]`, `text--[xyz]`, `link`, and `icon--listing-arrow`.

The same tailwind utility classes that are avialable in `wagtail-kit` are available in this build. `tailwind.config.js` includes the custom spacing for the build, allowing us to use classes such as `mb-spacerMini` where it wouldn't be practical to create a new scss component just for a one-off spacing adjustment.
The same tailwind utility classes that are avialable in `wagtail-kit` are available in this build. The `@theme` block in `tbx/static_src/css/tailwind.css` includes the custom spacing for the build, allowing us to use classes such as `mb-spacerMini` where it wouldn't be practical to create a new scss component just for a one-off spacing adjustment.
20 changes: 20 additions & 0 deletions docs/upgrading.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,3 +87,23 @@ As much as possible, we want to use the official releases available on PyPI for
**Last checked** Wagtail 7.3 upgrade

Add references to any custom templates that override the Wagtail admin templates. These should be checked to ensure they still work as expected after the upgrade.

## Node dependency holds

### typescript

**Last checked** Wagtail 8.0 upgrade

- Held at `^6.0.3`. `ts-jest` (latest 29.4.12) declares a peer range of `typescript >=4.3 <7`, so TypeScript 7 fails to install.
- Lift when a `ts-jest` release supports TypeScript 7.

### eslint and eslint-webpack-plugin

**Last checked** Wagtail 8.0 upgrade

- Held at `^8.57.1` and `^5.0.3`, the range `eslint-config-torchbox@^1.1.0` supports. No flat-config (ESLint v9) release of that package exists yet.
- This is the fleet-wide ESLint v8 ceiling applied by the Node bump tooling. It lifts via the ESLint to Biome migration, not per project. See the [ESLint v9 migration guide](https://eslint.org/docs/latest/use/migrate-to-9.0.0).

## Security

Last security review: 2026-09-01
13 changes: 8 additions & 5 deletions fabfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
# Process .env file
if os.path.exists(".env"):
with open(".env") as f:
for line in f.readlines():
for line in f:
if not line or line.startswith("#") or "=" not in line:
continue
var, value = line.strip().split("=", 1)
Expand Down Expand Up @@ -102,15 +102,17 @@ def sh(c, service="web"):
"""
Run bash in a local container
"""
subprocess.run(["docker", "compose", "exec", service, "bash"])
subprocess.run(["docker", "compose", "exec", service, "bash"], check=False)
Comment thread
zerolab marked this conversation as resolved.
Resolved


@task
def sh_root(c, service="web"):
"""
Run bash as root in the local web container.
"""
subprocess.run(["docker", "compose", "exec", "--user=root", "web", "bash"])
subprocess.run(
["docker", "compose", "exec", "--user=root", "web", "bash"], check=False
)


@task
Expand All @@ -130,7 +132,7 @@ def psql(c, command=None):
if command:
cmd_list.extend(["-c", command])

subprocess.run(cmd_list)
subprocess.run(cmd_list, check=False)


# TODO check the rest of these work correctly from here down
Expand Down Expand Up @@ -474,5 +476,6 @@ def migrate(c):
Run database migrations
"""
subprocess.run(
["docker", "compose", "run", "--rm", "web", "./manage.py", "migrate"]
["docker", "compose", "run", "--rm", "web", "./manage.py", "migrate"],
check=False,
)
Loading
Loading