diff --git a/.github/workflows/publish-to-pypi.yaml b/.github/workflows/publish-to-pypi.yaml index ea667db..085248f 100644 --- a/.github/workflows/publish-to-pypi.yaml +++ b/.github/workflows/publish-to-pypi.yaml @@ -13,7 +13,7 @@ jobs: steps: - uses: actions/checkout@v7 - name: Set up Python - uses: actions/setup-python@v6 + uses: actions/setup-python@v7 with: python-version: "3.x" - name: Install hatch @@ -50,7 +50,7 @@ jobs: name: python-package-distributions path: dist/ - name: Publish distribution 📦 to PyPI - uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 + uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2 github-release: name: >- @@ -71,7 +71,7 @@ jobs: name: python-package-distributions path: dist/ - name: Sign the dists with Sigstore - uses: sigstore/gh-action-sigstore-python@5b79a39c381910c090341a2c9b0bf022c8b387e1 #v3.4.0 + uses: sigstore/gh-action-sigstore-python@790bc6befb9d733738f18d8f895854b453640ec9 #v3.5.0 with: inputs: >- ./dist/*.tar.gz @@ -115,6 +115,12 @@ jobs: name: python-package-distributions path: dist/ - name: Publish distribution 📦 to TestPyPI - uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 + uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2 with: repository-url: https://test.pypi.org/legacy/ + # This job runs on every push, but the project version only changes at + # release time, so most runs re-upload an already-published file and + # TestPyPI rejects it with "400 File already exists". Skip files that + # are already there instead of failing the build. Deliberately not set + # on the real PyPI job, where a duplicate upload should fail loudly. + skip-existing: true diff --git a/.github/workflows/pyright.yaml b/.github/workflows/pyright.yaml index b0da9d6..e2cc5b9 100644 --- a/.github/workflows/pyright.yaml +++ b/.github/workflows/pyright.yaml @@ -14,7 +14,7 @@ jobs: steps: - uses: actions/checkout@v7 - name: Set up Python - uses: actions/setup-python@v6 + uses: actions/setup-python@v7 with: python-version: '3.x' - name: Install dependencies diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml index e50b2d7..54c3d7a 100644 --- a/.github/workflows/pytest.yaml +++ b/.github/workflows/pytest.yaml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v7 - name: Set up Python - uses: actions/setup-python@v6 + uses: actions/setup-python@v7 with: python-version: '3.x' - name: Install dependencies diff --git a/.github/workflows/ruff.yaml b/.github/workflows/ruff.yaml index ff87d99..f8a277e 100644 --- a/.github/workflows/ruff.yaml +++ b/.github/workflows/ruff.yaml @@ -14,7 +14,7 @@ jobs: steps: - uses: actions/checkout@v7 - name: Set up Python - uses: actions/setup-python@v6 + uses: actions/setup-python@v7 with: python-version: '3.x' - name: Install dependencies diff --git a/pyproject.toml b/pyproject.toml index 8c37081..da8d525 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -101,8 +101,21 @@ lint.ignore = [ "W191", "E111", "E114", "E117", "D206", "D300", "Q000", "Q001", "Q002", "Q003", "COM812", "COM819", "ISC001", "ISC002", # Conflicts with other rule, choosing one "D203", "D213", + # Stabilised out of preview in ruff 0.16 and pulled in by "ALL". + # This project does not use per-file copyright headers, and the public + # AnnotatedLogger constructor keeps its positional signature for + # backwards compatibility. + "CPY001", "PLR0917", ] +[tool.ruff.format] +# ruff 0.16 began formatting Python code blocks embedded in Markdown. The +# README's ```python blocks deliberately show sample JSON log output beneath +# the source; the formatter parses those lines as Python and rewrites them +# into multi-line dict literals, destroying the documentation. Keep Markdown +# out of the formatter. +exclude = ["*.md"] + [tool.ruff.lint.per-file-ignores] "test/*" = ["E501", "D10", "ANN", "S101", "PLR2004"] diff --git a/requirements.txt b/requirements.txt index bec5f6b..94b4aea 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ # - requests # -certifi==2026.6.17 +certifi==2026.7.22 # via requests charset-normalizer==3.4.9 # via requests diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt index 2d21e24..19245d9 100644 --- a/requirements/requirements-dev.txt +++ b/requirements/requirements-dev.txt @@ -19,19 +19,19 @@ # - requests # -certifi==2026.6.17 +certifi==2026.7.22 # via requests cfgv==3.5.0 # via pre-commit charset-normalizer==3.4.9 # via requests -coverage==7.15.1 +coverage==7.15.4 # via # hatch.envs.dev # pytest-cov distlib==0.4.3 # via virtualenv -filelock==3.29.7 +filelock==3.32.2 # via virtualenv freezegun==1.5.5 # via pytest-freezer @@ -47,15 +47,15 @@ nodeenv==1.10.0 # via # pre-commit # pyright -packaging==26.2 +packaging==26.3 # via pytest -platformdirs==4.10.0 +platformdirs==4.11.0 # via virtualenv pluggy==1.6.0 # via # pytest # pytest-cov -pre-commit==4.6.0 +pre-commit==4.6.1 # via hatch.envs.dev pychoir==0.0.30 # via hatch.envs.dev @@ -93,7 +93,7 @@ requests==2.34.2 # requests-mock requests-mock==1.12.1 # via hatch.envs.dev -ruff==0.15.21 +ruff==0.16.1 # via hatch.envs.dev six==1.17.0 # via python-dateutil @@ -103,5 +103,5 @@ typing-extensions==4.16.0 # pyright urllib3==2.7.0 # via requests -virtualenv==21.6.1 +virtualenv==21.7.1 # via pre-commit