From 5282d3955dd4792a423492be5928e90c80ef903e Mon Sep 17 00:00:00 2001 From: benoit74 Date: Tue, 4 Nov 2025 09:28:07 +0000 Subject: [PATCH 1/8] Upgrade CI actions --- .github/workflows/CI-wheels.yaml | 10 +++++----- .github/workflows/Publish.yaml | 20 ++++++++++---------- .github/workflows/QA.yaml | 4 ++-- .github/workflows/Tests.yaml | 8 ++++---- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/workflows/CI-wheels.yaml b/.github/workflows/CI-wheels.yaml index 754b925..53f1df3 100644 --- a/.github/workflows/CI-wheels.yaml +++ b/.github/workflows/CI-wheels.yaml @@ -22,7 +22,7 @@ jobs: os: [macos-13, windows-2022, ubuntu-24.04] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up QEMU if: runner.os == 'Linux' @@ -31,9 +31,9 @@ jobs: platforms: all - name: Build wheels - uses: pypa/cibuildwheel@v2.22 + uses: pypa/cibuildwheel@v3.2 - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v5 with: name: wheels-${{ matrix.os }} path: ./wheelhouse/*.whl @@ -42,12 +42,12 @@ jobs: name: Build source distribution runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Build sdist run: pipx run build --sdist - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v5 with: name: sdist path: dist/*.tar.gz diff --git a/.github/workflows/Publish.yaml b/.github/workflows/Publish.yaml index 0330344..cb05e98 100644 --- a/.github/workflows/Publish.yaml +++ b/.github/workflows/Publish.yaml @@ -25,7 +25,7 @@ jobs: os: [ubuntu-24.04, macos-13, windows-2022] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up QEMU if: runner.os == 'Linux' @@ -68,7 +68,7 @@ jobs: security unlock-keychain -p mysecretpassword ${APPLE_SIGNING_KEYCHAIN_PATH} - name: Build wheels - uses: pypa/cibuildwheel@v2.22 + uses: pypa/cibuildwheel@v3.2 - name: Cleanup Apple Keychain if: matrix.os == 'macos-13' @@ -78,7 +78,7 @@ jobs: security delete-keychain ${APPLE_SIGNING_KEYCHAIN_PATH} rm -f ${APPLE_SIGNING_KEYCHAIN_PATH} - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v5 with: name: wheels-${{ matrix.os }} path: ./wheelhouse/*.whl @@ -87,12 +87,12 @@ jobs: name: Build source distribution runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Build sdist run: pipx run build --sdist - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v5 with: name: sdist path: dist/*.tar.gz @@ -103,24 +103,24 @@ jobs: environment: release steps: # retrieve all artifacts - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v6 with: name: sdist path: dist - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v6 with: name: wheels-ubuntu-24.04 path: dist - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v6 with: name: wheels-macos-13 path: dist - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v6 with: name: wheels-windows-2022 path: dist - - uses: pypa/gh-action-pypi-publish@v1.9.0 + - uses: pypa/gh-action-pypi-publish@v1.13.0 with: user: __token__ # password: ${{ secrets.PYPI_TEST_API_TOKEN }} diff --git a/.github/workflows/QA.yaml b/.github/workflows/QA.yaml index 3be3e0c..cc24490 100644 --- a/.github/workflows/QA.yaml +++ b/.github/workflows/QA.yaml @@ -9,10 +9,10 @@ jobs: lint: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.13" architecture: x64 diff --git a/.github/workflows/Tests.yaml b/.github/workflows/Tests.yaml index 7a8c746..b30d223 100644 --- a/.github/workflows/Tests.yaml +++ b/.github/workflows/Tests.yaml @@ -16,10 +16,10 @@ jobs: python: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Python ${{ matrix.python }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python }} architecture: x64 @@ -38,8 +38,8 @@ jobs: run: inv coverage --args "-vvv" - name: Upload coverage report to codecov - if: matrix.os == 'ubuntu-24.04' && matrix.python == '3.13' - uses: codecov/codecov-action@v4 + if: matrix.os == 'ubuntu-24.04' && matrix.python == '3.14' + uses: codecov/codecov-action@v5 with: fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} From 85326515ffeb55367b310dae3372357e5fb2ed84 Mon Sep 17 00:00:00 2001 From: benoit74 Date: Tue, 4 Nov 2025 12:34:03 +0000 Subject: [PATCH 2/8] Drop support for Python 3.9, add support for Python 3.14, upgrade dependencies Python 3.9 is EOL and coverage 7.11.0 supports only Python >= 3.10 --- .github/workflows/QA.yaml | 2 +- .github/workflows/Tests.yaml | 2 +- CHANGELOG.md | 4 +++ libzim/writer.pyi | 4 +-- pyproject.toml | 56 +++++++++++++++++------------------- setup.py | 2 +- tests/test_libzim_creator.py | 5 +++- tests/test_libzim_version.py | 4 +-- 8 files changed, 42 insertions(+), 37 deletions(-) diff --git a/.github/workflows/QA.yaml b/.github/workflows/QA.yaml index cc24490..ea14c54 100644 --- a/.github/workflows/QA.yaml +++ b/.github/workflows/QA.yaml @@ -14,7 +14,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v6 with: - python-version: "3.13" + python-version: "3.14" architecture: x64 - name: Install dependencies (and project) diff --git a/.github/workflows/Tests.yaml b/.github/workflows/Tests.yaml index b30d223..10809df 100644 --- a/.github/workflows/Tests.yaml +++ b/.github/workflows/Tests.yaml @@ -13,7 +13,7 @@ jobs: strategy: matrix: os: [macos-13, windows-2022, ubuntu-24.04] - python: ["3.9", "3.10", "3.11", "3.12", "3.13"] + python: ["3.10", "3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v5 diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ee16b6..99a8b1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Drop support of Python 3.9, add support for Python 3.14, upgrade dependencies (#237) + ## [3.7.0] - 2025-04-18 ### Added diff --git a/libzim/writer.pyi b/libzim/writer.pyi index 5288e7a..7bf3afa 100644 --- a/libzim/writer.pyi +++ b/libzim/writer.pyi @@ -23,9 +23,9 @@ class Blob: class ContentProvider: def feed(self) -> Blob: ... def get_size(self) -> int: ... - def gen_blob(self) -> Generator[Blob, None, None]: ... + def gen_blob(self) -> Generator[Blob]: ... - generator: Generator[Blob, None, None] + generator: Generator[Blob] class StringProvider(ContentProvider): def __init__(self, content: str | bytes) -> None: ... diff --git a/pyproject.toml b/pyproject.toml index 9d127c1..60620d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,17 +1,17 @@ [build-system] requires = [ - "setuptools == 74.1.1", - "wheel == 0.44.0", - "cython == 3.0.11", + "setuptools == 80.9.0", + "wheel == 0.45.1", + "cython == 3.1.6", # https://github.com/pypa/cibuildwheel/blob/v2.22/cibuildwheel/resources/constraints.txt - "delocate == 0.12.0 ; platform_system=='Windows'", + "delocate == 0.13.0 ; platform_system=='Windows'", ] build-backend = "setuptools.build_meta" [project] name = "libzim" version = "3.7.1-dev0" -requires-python = ">=3.9,<3.14" +requires-python = ">=3.10,<3.15" description = "A python-facing API for creating and interacting with ZIM files" authors = [ {name = "openZIM", email = "dev@kiwix.org"}, @@ -30,11 +30,11 @@ classifiers = [ "Intended Audience :: Developers", "Programming Language :: Cython", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Typing :: Stubs Only", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: MacOS", @@ -50,43 +50,43 @@ scripts = [ "invoke==2.2.0", ] lint = [ - "black==25.1.0", - "ruff==0.9.5", + "black==25.9.0", + "ruff==0.14.3", "libzim", "libzim[build]", ] check = [ - "pyright==1.1.393", + "pyright==1.1.407", "libzim", "libzim[build]", "libzim[test]", "types-setuptools", ] test = [ - "pytest==8.3.4", - "coverage==7.6.10", + "pytest==8.4.2", + "coverage==7.11.0", # for cython coverage plugin "libzim[build]", ] build = [ - "setuptools == 75.8.0", + "setuptools == 80.9.0", "wheel == 0.45.1", - "cython == 3.0.11", - "delocate == 0.12.0 ; platform_system=='Windows'", + "cython == 3.1.6", + "delocate == 0.13.0 ; platform_system=='Windows'", ] docs = [ "mkdocs==1.6.1", - "mkdocstrings-python==1.14.5", - "mkdocs-material==9.5.49", - "pymdown-extensions==10.14", + "mkdocstrings-python==1.18.2", + "mkdocs-material==9.6.23", + "pymdown-extensions==10.16.1", "mkdocs-gen-files==0.5.0", - "mkdocs-literate-nav==0.6.1", - "mkdocs-include-markdown-plugin==7.1.2", - "griffe==1.5.6", + "mkdocs-literate-nav==0.6.2", + "mkdocs-include-markdown-plugin==7.2.0", + "griffe==1.14.0", ] dev = [ - "pre-commit==4.1.0", - "ipython==8.32.0", + "pre-commit==4.3.0", + "ipython==9.6.0", "types-setuptools", "libzim[scripts]", "libzim[lint]", @@ -139,10 +139,8 @@ archs = ["x86_64", "aarch64"] archs = ["x86_64", "arm64"] # macOS arm64 is cross-compiled and can not be tested. # cibuildwheel skips it already. *_arm64 this removes the warning -# skipping tests on cp <=3.9 as the wheels we produce are on unexpected combinations -# because those python versions were released before our building host version # > requires changing wheel names -test-skip = "*_arm64 cp39*" +test-skip = "*_arm64" [tool.hatch.build] exclude = [ @@ -168,7 +166,7 @@ features = ["scripts", "test"] PROFILE = "1" [[tool.hatch.envs.test.matrix]] -python = ["3.9", "3.10", "3.11", "3.12", "3.13"] +python = ["3.10", "3.11", "3.12", "3.13", "3.14"] [tool.hatch.envs.test.scripts] run = "inv test --args '{args}'" @@ -206,10 +204,10 @@ all = "inv checkall --args '{args}'" [tool.black] line-length = 88 -target-version = ['py312'] +target-version = ['py314'] [tool.ruff] -target-version = "py312" +target-version = "py314" line-length = 88 src = ["src"] @@ -336,6 +334,6 @@ exclude_lines = [ [tool.pyright] include = ["libzim", "tests", "tasks.py"] exclude = [".env/**", ".venv/**"] -pythonVersion = "3.13" +pythonVersion = "3.14" typeCheckingMode="basic" disableBytesTypePromotions = true diff --git a/setup.py b/setup.py index 0368baf..2e677d1 100755 --- a/setup.py +++ b/setup.py @@ -349,7 +349,7 @@ def repair_windows_wheel(self, wheel: Path, dest_dir: Path): """opens windows wheels in target folder and moves all DLLs files inside subdirectories of the wheel to the root one (where wrapper is expected)""" - from delocate.wheeltools import InWheel + from delocate.wheeltools import InWheel # noqa : PLC0415 # we're only interested in windows wheels if not re.match(r"libzim-.+-win_.+", wheel.stem): diff --git a/tests/test_libzim_creator.py b/tests/test_libzim_creator.py index 2478997..8485849 100644 --- a/tests/test_libzim_creator.py +++ b/tests/test_libzim_creator.py @@ -373,7 +373,10 @@ def test_creator_additem(fpath, lipsum_item): c.add_item(None) # pyright: ignore [reportCallIssue, reportArgumentType] with pytest.raises(RuntimeError): c.add_item("hello") # pyright: ignore [reportCallIssue, reportArgumentType] - with pytest.raises(TypeError, match="takes exactly 1 positional argument"): + with pytest.raises( + TypeError, + match="got an unexpected keyword argument 'mimetype'", + ): c.add_item(mimetype="text/html") # pyright: ignore [reportCallIssue] diff --git a/tests/test_libzim_version.py b/tests/test_libzim_version.py index 41d3d73..89de1d2 100644 --- a/tests/test_libzim_version.py +++ b/tests/test_libzim_version.py @@ -11,14 +11,14 @@ def test_version_print_version_with_stdout(capsys): print_versions() print("", file=sys.stdout, flush=True) - stdout, stderr = capsys.readouterr() + stdout, _ = capsys.readouterr() assert len(stdout) != 0 def test_version_print_version_with_stderr(capsys): print_versions(sys.stderr) print("", file=sys.stderr, flush=True) - stdout, stderr = capsys.readouterr() + _, stderr = capsys.readouterr() assert len(stderr) != 0 From 036a5ec8df389d021979a253f299773975233a23 Mon Sep 17 00:00:00 2001 From: benoit74 Date: Tue, 4 Nov 2025 17:41:19 +0000 Subject: [PATCH 3/8] Ensure coverage still work on Cython 3.1+ and Python 3.13+ --- .coveragerc | 1 + setup.py | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.coveragerc b/.coveragerc index 82d6b6e..86bf0a2 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,3 +1,4 @@ [run] +core = ctrace plugins = Cython.Coverage source = libzim diff --git a/setup.py b/setup.py index 2e677d1..32f2ef3 100755 --- a/setup.py +++ b/setup.py @@ -392,7 +392,13 @@ def get_cython_extension() -> list[Extension]: compiler_directives = {"language_level": "3"} if config.profiling: - define_macros += [("CYTHON_TRACE", "1"), ("CYTHON_TRACE_NOGIL", "1")] + define_macros += [ + ("CYTHON_TRACE", "1"), + ("CYTHON_TRACE_NOGIL", "1"), + # Disable sys.monitoring for Python 3.13+ to enable coverage.py support + # coverage.py doesn't support sys.monitoring yet (Cython 3.1+ issue) + ("CYTHON_USE_SYS_MONITORING", "0"), + ] compiler_directives.update(linetrace="true") include_dirs: list[str] = [] From dbac219df387b9c9da05c8dbe465a22f492ed043 Mon Sep 17 00:00:00 2001 From: benoit74 Date: Tue, 4 Nov 2025 17:07:06 +0000 Subject: [PATCH 4/8] Fix for free-threaded Python tests --- README.md | 2 ++ pyproject.toml | 5 +++++ tests/test_libzim_creator.py | 14 +++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0d278d8..551ee79 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,8 @@ Our [PyPI wheels](https://pypi.org/project/libzim/) bundle a [recent release](ht Wheels are available for CPython only (but can be built for Pypy). +Free-threaded CPython is not supported. If you use a free-threaded CPython, GIL must be turned on (using the environment variable PYTHON_GIL or the command-line option -X gil). If you don't turn it on yourself, GIL will be forced-on and you will get a warning. Only few methods support the GIL to be disabled. + Users on other platforms can install the source distribution (see [Building](#Building) below). diff --git a/pyproject.toml b/pyproject.toml index 60620d5..7423de5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -123,6 +123,11 @@ skip = "pp* *win32*" test-requires = ["pytest"] test-command = "py.test {project}/tests/" +# Override test command for free-threaded builds to force GIL on +[[tool.cibuildwheel.overrides]] +select = "cp313t-* cp314t-*" +test-command = "python -X gil=1 -m pytest {project}/tests/" + manylinux-x86_64-image = "manylinux_2_28" manylinux-aarch64-image = "manylinux_2_28" manylinux-pypy_x86_64-image = "manylinux_2_28" diff --git a/tests/test_libzim_creator.py b/tests/test_libzim_creator.py index 8485849..3bc627f 100644 --- a/tests/test_libzim_creator.py +++ b/tests/test_libzim_creator.py @@ -162,8 +162,20 @@ def get_creator_output(fpath, verbose): ).replace( "{verbose}", str(verbose) ) + + # Build command with appropriate GIL settings for free-threaded Python + cmd = [sys.executable] + + # Check if we're running in free-threaded mode (Python 3.13+) + if sys.version_info >= (3, 13) and hasattr(sys, "_is_gil_enabled"): + # If GIL is enabled, explicitly pass -X gil=1 to subprocess + if sys._is_gil_enabled(): + cmd.extend(["-X", "gil=1"]) + + cmd.extend(["-c", code]) + ps = subprocess.run( - [sys.executable, "-c", code], + cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, From 2ed2bd991b32d85079772489b813e4c145c57ab8 Mon Sep 17 00:00:00 2001 From: benoit74 Date: Tue, 4 Nov 2025 17:47:28 +0000 Subject: [PATCH 5/8] Replace deprecated macos-13 by macos-14 --- .github/workflows/Tests.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/Tests.yaml b/.github/workflows/Tests.yaml index 10809df..b8af05c 100644 --- a/.github/workflows/Tests.yaml +++ b/.github/workflows/Tests.yaml @@ -12,7 +12,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [macos-13, windows-2022, ubuntu-24.04] + os: [macos-14, windows-2022, ubuntu-24.04] python: ["3.10", "3.11", "3.12", "3.13", "3.14"] steps: @@ -22,7 +22,6 @@ jobs: uses: actions/setup-python@v6 with: python-version: ${{ matrix.python }} - architecture: x64 - name: Install dependencies (and project) From eb58e992cfbff1f9c06a3a23a5953ec670a029cf Mon Sep 17 00:00:00 2001 From: benoit74 Date: Tue, 4 Nov 2025 19:37:50 +0000 Subject: [PATCH 6/8] Add all supported OS + add free-thread Python versions --- .github/workflows/Tests.yaml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/Tests.yaml b/.github/workflows/Tests.yaml index b8af05c..f1a84f2 100644 --- a/.github/workflows/Tests.yaml +++ b/.github/workflows/Tests.yaml @@ -12,8 +12,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [macos-14, windows-2022, ubuntu-24.04] - python: ["3.10", "3.11", "3.12", "3.13", "3.14"] + os: [macos-14, macos-15, macos-15-intel, windows-2022, windows-2025, ubuntu-22.04, ubuntu-24.04] + python: ["3.10", "3.11", "3.12", "3.13", "3.13t", "3.14", "3.14t"] steps: - uses: actions/checkout@v5 @@ -23,6 +23,8 @@ jobs: with: python-version: ${{ matrix.python }} + - name: Display Python version + run: python -VV - name: Install dependencies (and project) run: | @@ -30,7 +32,7 @@ jobs: pip install -e .[test,scripts] - name: move DLLs next to wrapper - if: matrix.os == 'windows-2022' + if: startsWith(matrix.os, 'windows-') run: Move-Item -Force -Path .\libzim\*.dll -Destination .\ - name: Run the tests From 9e068a2435e8104b17a5820d21fb6c5045abbd4f Mon Sep 17 00:00:00 2001 From: benoit74 Date: Tue, 4 Nov 2025 19:48:44 +0000 Subject: [PATCH 7/8] Support only macOS 14.0+ --- .github/workflows/CI-wheels.yaml | 2 +- .github/workflows/Publish.yaml | 8 ++++---- pyproject.toml | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/CI-wheels.yaml b/.github/workflows/CI-wheels.yaml index 53f1df3..79a8703 100644 --- a/.github/workflows/CI-wheels.yaml +++ b/.github/workflows/CI-wheels.yaml @@ -19,7 +19,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [macos-13, windows-2022, ubuntu-24.04] + os: [macos-14, windows-2022, ubuntu-24.04] steps: - uses: actions/checkout@v5 diff --git a/.github/workflows/Publish.yaml b/.github/workflows/Publish.yaml index cb05e98..a692ab2 100644 --- a/.github/workflows/Publish.yaml +++ b/.github/workflows/Publish.yaml @@ -22,7 +22,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-24.04, macos-13, windows-2022] + os: [ubuntu-24.04, macos-14, windows-2022] steps: - uses: actions/checkout@v5 @@ -34,7 +34,7 @@ jobs: platforms: all - name: Prepare Apple Keychain for Signing - if: matrix.os == 'macos-13' + if: matrix.os == 'macos-14' shell: bash run: | # store certificate on filesystem @@ -71,7 +71,7 @@ jobs: uses: pypa/cibuildwheel@v3.2 - name: Cleanup Apple Keychain - if: matrix.os == 'macos-13' + if: matrix.os == 'macos-14' shell: bash run: | security lock-keychain ${APPLE_SIGNING_KEYCHAIN_PATH} @@ -113,7 +113,7 @@ jobs: path: dist - uses: actions/download-artifact@v6 with: - name: wheels-macos-13 + name: wheels-macos-14 path: dist - uses: actions/download-artifact@v6 with: diff --git a/pyproject.toml b/pyproject.toml index 7423de5..65a9712 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -142,10 +142,10 @@ archs = ["x86_64", "aarch64"] [tool.cibuildwheel.macos] archs = ["x86_64", "arm64"] -# macOS arm64 is cross-compiled and can not be tested. -# cibuildwheel skips it already. *_arm64 this removes the warning +# macOS x86_64 is cross-compiled and can not be tested. +# cibuildwheel skips it already. *_x86_64 this removes the warning # > requires changing wheel names -test-skip = "*_arm64" +test-skip = "*_x86_64" [tool.hatch.build] exclude = [ From 82b5eac9f27897834fc164102baecc1dbaef5c71 Mon Sep 17 00:00:00 2001 From: benoit74 Date: Tue, 4 Nov 2025 20:10:25 +0000 Subject: [PATCH 8/8] Update CHANGELOG --- CHANGELOG.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99a8b1c..eb9c05c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Drop support of Python 3.9, add support for Python 3.14, upgrade dependencies (#237) +- Maintenance upgrades (#237): + - Drop support of Python 3.9 + - Add support for Python 3.14 + - Upgrade dependencies, especially Cython 3.1.6 + - Upgrade supported macOS to 14.0+ (instead of 13.0+) + - Add support for free-threaded CPython (3.13 and 3.14) + - Upgrade Github CI Actions + - Run tests on minimum supported platforms + more recent stable ones ## [3.7.0] - 2025-04-18