Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 4 additions & 4 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
with:
fetch-depth: 0

- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: "3.13"
python-version: "3.14"
cache: "pip"
cache-dependency-path: "**/pyproject.toml"

Expand All @@ -43,7 +43,7 @@ jobs:
# Mandatory for trusted publishing
id-token: write
steps:
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v5

- name: 🚀 Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
Expand Down
18 changes: 9 additions & 9 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@ env:
TOX_TESTENV_PASSENV: FORCE_COLOR
PIP_DISABLE_PIP_VERSION_CHECK: "1"
COVERAGE_CORE: sysmon # Only supported on Python 3.12+, ignore on older versions
PYTHON_LATEST: "3.13"
PYTHON_LATEST: "3.14"

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: ${{ env.PYTHON_LATEST }}
- uses: pre-commit/[email protected]
Expand All @@ -32,14 +32,14 @@ jobs:
needs: lint
strategy:
matrix:
python: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
python: ["3.10", "3.11", "3.12", "3.13", "3.14"]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Install optimizers
run: |
sudo apt-get install -y jpegoptim pngquant gifsicle optipng libjpeg-progs webp
- name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python }}
allow-prereleases: true
Expand All @@ -65,14 +65,14 @@ jobs:
needs: test

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: ${{ env.PYTHON_LATEST }}
cache: pip

- name: Download coverage data
uses: actions/download-artifact@v4
uses: actions/download-artifact@v5
with:
pattern: coverage-data-*
merge-multiple: true
Expand Down
8 changes: 4 additions & 4 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
exclude: "^tests/images/"
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
rev: v6.0.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
Expand All @@ -15,13 +15,13 @@ repos:
- id: check-yaml
- id: debug-statements
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.7.1"
rev: "v0.14.0"
hooks:
- id: ruff
- id: ruff-check
args: [--fix, --exit-non-zero-on-fix]
- id: ruff-format
- repo: https://github.com/pycontribs/mirrors-prettier
rev: v3.3.3
rev: v3.6.2
hooks:
- id: prettier
types_or: [json, yaml, markdown, bash, editorconfig, toml]
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ It converts the image between the libraries when necessary.
Willow currently has basic resize and crop operations, face and feature detection and animated GIF support.
New operations and library integrations can also be [easily implemented](https://willow.wagtail.org/latest/guide/extend.html).

The library is written in pure Python and supports versions 3.9, 3.10, 3.11, 3.12, and 3.13.
The library is written in pure Python and supports versions 3.10, 3.11, 3.12, 3.13 and 3.14.

## Examples

Expand Down
5 changes: 4 additions & 1 deletion docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ Changelog
1.12.0 (UNRELEASED)
-------------------

- Add provisional support for Python 3.14 pending its general release (Storm Heg)
- Add support for Python 3.14 (Storm Heg)
- Drop support for Python 3.9 (Storm Heg)
- The minimum required pillow-heif version is now 1.0.0 (Storm Heg)
- Add support for Pillow 12 and beyond, removed hard upper bound (Storm Heg)

1.11.0 (2025-07-16)
-------------------
Expand Down
12 changes: 4 additions & 8 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ classifiers = [
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
Expand All @@ -25,19 +24,16 @@ classifiers = [
]

dynamic = ["version"] # will read __version__ from willow/__init__.py
requires-python = ">=3.9"
requires-python = ">=3.10"
dependencies = [
"filetype>=1.0.10,!=1.1.0",
"defusedxml>=0.7,<1.0",
]

[project.optional-dependencies]
pillow = ["Pillow>=11.3.0,<12.0.0"]
pillow = ["Pillow>=11.3.0"]
wand = ["Wand>=0.6,<1.0"]
heif = [
"pillow-heif>=0.10.0; python_version < '3.12'",
"pillow-heif>=0.13.0; python_version >= '3.12'",
]
heif = ["pillow-heif>=1.0.0"]

testing = [
"willow[pillow,wand,heif]",
Expand Down Expand Up @@ -117,7 +113,7 @@ exclude_lines = [
]

[tool.ruff]
target-version = "py39" # minimum target version
target-version = "py310" # minimum target version

# E501: Line too long
lint.ignore = ["E501"]
Expand Down