diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 96c1a8a..96d8702 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -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" @@ -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 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8f118b8..ffbad2e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -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/action@v3.0.1 @@ -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 @@ -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 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bee04aa..cb2c904 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -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 @@ -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] diff --git a/README.md b/README.md index 33cb803..4c62368 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/docs/changelog.rst b/docs/changelog.rst index 03a632b..deffac7 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -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) ------------------- diff --git a/pyproject.toml b/pyproject.toml index 8d20468..ba5fcd5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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", @@ -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]", @@ -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"]