From 8173e7bf59600c775dd07a2e4c0ee589c116dad7 Mon Sep 17 00:00:00 2001 From: Tyler Eastman Date: Tue, 22 Sep 2026 15:46:57 -0700 Subject: [PATCH] chore: test Python 3.14 in CI and declare supported versions on PyPI Three metadata and coverage gaps found while releasing 3.5.0. The CI matrix stopped at 3.13 while requires-python is ">=3.10" with no upper bound, so 3.14 users were installing and running the SDK unverified. Confirmed 3.14.7 passes everything before adding it: 450 offline tests, 33 perf tests, mypy clean over 87 files, pylint 10.00/10 on the errors-only gate, and a clean-room install of the published 3.5.0 wheel running a documented example against the live API. actions/python-versions carries 3.14.7, so setup-python resolves it. The package declared no classifiers at all, so PyPI could not filter it by Python version and the project page showed no supported-version metadata. Requires-Python was already correct and is what pip and uv resolve against, so this is discoverability rather than installability. No `License ::` trove classifier: the SPDX `license` expression already emits `License-Expression`, and declaring both is what newer setuptools warns about. Verified all ten classifiers and the four URLs land in the built wheel's METADATA. No project URLs were declared either, so PyPI showed no Homepage, Repository, Changelog or Issues links. Homepage points at the canonical https://you.com/docs/welcome rather than https://you.com/docs, which 301s. Metadata only: uv.lock is unchanged (`uv lock --check` clean), the build emits no warnings, and the version stays at 3.5.0 -- these take effect with the next release rather than re-cutting one already on PyPI. --- .github/workflows/test.yml | 2 +- pyproject.toml | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 77e33d6..80d8cf4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v7 diff --git a/pyproject.toml b/pyproject.toml index c3e29e8..c778fd5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,27 @@ dependencies = [ ] license = "MIT" license-files = ["LICENSE"] +# No `License ::` trove classifier: the SPDX `license` expression above already +# produces `License-Expression` in the metadata, and declaring both is what newer +# setuptools warns about. +classifiers = [ + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "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", + "Typing :: Typed", +] + +[project.urls] +Homepage = "https://you.com/docs/welcome" +Repository = "https://github.com/youdotcom-oss/youdotcom-python-sdk" +Changelog = "https://github.com/youdotcom-oss/youdotcom-python-sdk/blob/main/CHANGELOG.md" +Issues = "https://github.com/youdotcom-oss/youdotcom-python-sdk/issues" [dependency-groups] # The single source of truth for dev tooling — CI installs this group with