diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 30159b9b..b8bb00c9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,8 +29,13 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] install-profile: ["core", "nlp", "nlp-advanced"] + exclude: + - python-version: "3.14" + install-profile: nlp + - python-version: "3.14" + install-profile: nlp-advanced steps: - uses: actions/checkout@v6 - name: Set up Python @@ -162,6 +167,10 @@ jobs: - distributed - web include: + - python-version: "3.14" + install-profile: core + - python-version: "3.14" + install-profile: cli - python-version: "3.13" install-profile: nlp - python-version: "3.13" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a2d5a95c..30bd23b4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -140,7 +140,7 @@ jobs: OMP_NUM_THREADS=4 MKL_NUM_THREADS=4 OPENBLAS_NUM_THREADS=4 python tests/simple_performance_test.py # ── 3. Build & Publish ──────────────────────────────────────────────── - python313-core: + python314-core: needs: determine-release if: needs.determine-release.outputs.has_changes == 'true' runs-on: ubuntu-latest @@ -150,10 +150,10 @@ jobs: fetch-depth: 0 ref: ${{ needs.determine-release.outputs.target_branch }} - - name: Set up Python 3.13 + - name: Set up Python 3.14 uses: actions/setup-python@v6 with: - python-version: "3.13" + python-version: "3.14" cache: "pip" - name: Install core + CLI dependencies @@ -161,7 +161,7 @@ jobs: python -m pip install --upgrade pip pip install -e ".[test,cli]" -r requirements-test.txt - - name: Run Python 3.13 core + CLI tests + - name: Run Python 3.14 core + CLI tests run: | pytest tests/ \ -m "not slow" \ @@ -172,7 +172,7 @@ jobs: --ignore=tests/test_text_service_integration.py publish: - needs: [determine-release, test, python313-core] + needs: [determine-release, test, python314-core] runs-on: ubuntu-latest outputs: version: ${{ steps.version.outputs.version }} diff --git a/CHANGELOG.MD b/CHANGELOG.MD index a2655567..2dca5bba 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -2,6 +2,11 @@ ## [Unreleased] +#### Fixed + +- Allow installation on Python 3.14 and certify the core SDK and CLI with + dedicated CI and release-gate coverage. + ## [2026-07-05] ### `datafog-python` [4.8.0] diff --git a/README.md b/README.md index b974e48a..b38345b3 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,10 @@ Python 3.13 support is certified for the core SDK, CLI, `nlp`, that is available locally before runtime use. `distributed` and `all` remain optional, heavier profiles and are not part of the lightweight core path. +Python 3.14 support is certified for the core SDK and CLI. Optional profiles +remain dependent on upstream Python 3.14 package availability until they are +covered by the corresponding CI install-profile checks. + ## Quick Start ```python diff --git a/docs/contributing.rst b/docs/contributing.rst index 7f00e029..60e50cf0 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -22,11 +22,12 @@ final version and release-note alignment in the dedicated release slice. Python Environments =================== -DataFog currently declares support for Python ``>=3.10,<3.14``. The CI matrix -tests core, NLP, and NLP-advanced installs on Python 3.10, 3.11, 3.12, and -3.13. OCR profile smoke checks also run on Python 3.13 with system Tesseract -installed. Distributed and all-profile installs remain heavier optional -profiles rather than the lightweight core support claim. +DataFog declares support for Python ``>=3.10``. The CI matrix tests core, NLP, +and NLP-advanced installs on Python 3.10, 3.11, 3.12, and 3.13. Python 3.14 +is certified for the core SDK and CLI. OCR profile smoke checks also run on +Python 3.13 with system Tesseract installed. Optional Python 3.14 profiles +remain dependent on upstream package availability until their install-profile +checks are added to CI. Create one virtual environment per Python version when you need to compare profiles locally: diff --git a/setup.py b/setup.py index 1da9ebe3..1b4723ef 100644 --- a/setup.py +++ b/setup.py @@ -117,7 +117,7 @@ package_data={"datafog": ["py.typed"]}, install_requires=core_deps, extras_require=extras_require, - python_requires=">=3.10,<3.14", + python_requires=">=3.10", entry_points={ "console_scripts": [ "datafog=datafog.client:app [cli]", # Requires cli extra @@ -133,6 +133,7 @@ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing", "Topic :: Security", diff --git a/setup_lean.py b/setup_lean.py index c3b8e15e..57315788 100644 --- a/setup_lean.py +++ b/setup_lean.py @@ -84,7 +84,7 @@ packages=find_packages(), install_requires=core_deps, extras_require=extras_require, - python_requires=">=3.10,<3.13", + python_requires=">=3.10", entry_points={ "console_scripts": [ "datafog=datafog.client:app [cli]", # Requires cli extra @@ -98,6 +98,8 @@ "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", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing", "Topic :: Security", diff --git a/setup_original.py b/setup_original.py index 23692041..006a3608 100644 --- a/setup_original.py +++ b/setup_original.py @@ -47,7 +47,7 @@ "sphinx", "cryptography", ], - python_requires=">=3.10,<3.13", + python_requires=">=3.10", entry_points={ "console_scripts": [ "datafog=datafog.client:app", @@ -55,6 +55,8 @@ }, classifiers=[ "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.10", "License :: OSI Approved :: MIT License",