Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-hatch-fancy-pypi-readme for 
openSUSE:Factory checked in at 2023-05-23 14:53:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-hatch-fancy-pypi-readme (Old)
 and      /work/SRC/openSUSE:Factory/.python-hatch-fancy-pypi-readme.new.1533 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-hatch-fancy-pypi-readme"

Tue May 23 14:53:23 2023 rev:5 rq:1088336 version:23.1.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-hatch-fancy-pypi-readme/python-hatch-fancy-pypi-readme.changes
    2023-05-19 11:56:01.679437048 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-hatch-fancy-pypi-readme.new.1533/python-hatch-fancy-pypi-readme.changes
  2023-05-23 14:53:32.806129332 +0200
@@ -1,0 +2,8 @@
+Mon May 22 07:30:03 UTC 2023 - Johannes Kastl <ka...@b1-systems.de>
+
+- update to 23.1.0 (there is no 23.0.0):
+  The only change is that our CLI now also takes the presence of an
+  hatch.toml file into account.
+  The packaging side always supported it.
+
+-------------------------------------------------------------------

Old:
----
  hatch_fancy_pypi_readme-22.8.0.tar.gz

New:
----
  hatch_fancy_pypi_readme-23.1.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-hatch-fancy-pypi-readme.spec ++++++
--- /var/tmp/diff_new_pack.ROxAsY/_old  2023-05-23 14:53:33.262132031 +0200
+++ /var/tmp/diff_new_pack.ROxAsY/_new  2023-05-23 14:53:33.266132054 +0200
@@ -26,7 +26,7 @@
 %endif
 %{?sle15_python_module_pythons}
 Name:           python-hatch-fancy-pypi-readme%{psuffix}
-Version:        22.8.0
+Version:        23.1.0
 Release:        0
 Summary:        Fancy PyPI READMEs with Hatch
 License:        MIT

++++++ hatch_fancy_pypi_readme-22.8.0.tar.gz -> 
hatch_fancy_pypi_readme-23.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hatch_fancy_pypi_readme-22.8.0/.github/FUNDING.yml 
new/hatch_fancy_pypi_readme-23.1.0/.github/FUNDING.yml
--- old/hatch_fancy_pypi_readme-22.8.0/.github/FUNDING.yml      2020-02-02 
01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/.github/FUNDING.yml      2023-05-22 
08:59:35.000000000 +0200
@@ -1,3 +1,2 @@
 ---
 github: hynek
-ko_fi: the_hynek
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hatch_fancy_pypi_readme-22.8.0/.github/dependabot.yml 
new/hatch_fancy_pypi_readme-23.1.0/.github/dependabot.yml
--- old/hatch_fancy_pypi_readme-22.8.0/.github/dependabot.yml   1970-01-01 
01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/.github/dependabot.yml   2023-05-22 
08:59:35.000000000 +0200
@@ -0,0 +1,6 @@
+version: 2
+updates:
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "monthly"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hatch_fancy_pypi_readme-22.8.0/.github/workflows/ci.yml 
new/hatch_fancy_pypi_readme-23.1.0/.github/workflows/ci.yml
--- old/hatch_fancy_pypi_readme-22.8.0/.github/workflows/ci.yml 2020-02-02 
01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/.github/workflows/ci.yml 2023-05-22 
08:59:35.000000000 +0200
@@ -13,28 +13,29 @@
   FORCE_COLOR: "1" # Make tools pretty.
   PYTHONIOENCODING: utf-8
   TOX_TESTENV_PASSENV: FORCE_COLOR
+  PIP_DISABLE_PIP_VERSION_CHECK: "1"
+  PIP_NO_PYTHON_VERSION_WARNING: "1"
   SETUPTOOLS_SCM_PRETEND_VERSION: "1.0" # avoid warnings about shallow checkout
-  PYTHON_LATEST: "3.10"
+  PYTHON_LATEST: "3.11"
 
 jobs:
   tests:
-    name: tox on ${{ matrix.python-version }}
+    name: Tests on ${{ matrix.python-version }}
     runs-on: ubuntu-latest
 
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["3.7", "3.8", "3.9", "3.10", "~3.11.0-0"]
+        python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
 
     steps:
       - uses: actions/checkout@v3
       - uses: actions/setup-python@v4
         with:
           python-version: ${{ matrix.python-version }}
+      - run: python -Im pip install --upgrade wheel tox
 
-      - run: python -m pip install --upgrade tox tox-gh-actions
-
-      - run: python -m tox
+      - run: python -Im tox run -f py$(echo ${{ matrix.python-version }} | tr 
-d .)
 
       - name: Upload coverage data
         uses: actions/upload-artifact@v3
@@ -51,9 +52,9 @@
       - uses: actions/checkout@v3
       - uses: actions/setup-python@v4
         with:
-          python-version: ${{env.PYTHON_LATEST}}
+          python-version: ${{ env.PYTHON_LATEST }}
 
-      - run: python -m pip install --upgrade coverage[toml]
+      - run: python -Im pip install --upgrade coverage[toml]
 
       - name: Download coverage data
         uses: actions/download-artifact@v3
@@ -62,9 +63,9 @@
 
       - name: Combine coverage and fail if it's <100%.
         run: |
-          python -m coverage combine
-          python -m coverage html --skip-covered --skip-empty
-          python -m coverage report --fail-under=100
+          python -Im coverage combine
+          python -Im coverage html --skip-covered --skip-empty
+          python -Im coverage report --fail-under=100
 
       - name: Upload HTML report if check failed.
         uses: actions/upload-artifact@v3
@@ -73,13 +74,18 @@
           path: htmlcov
         if: ${{ failure() }}
 
-  package:
-    name: Build & verify package
+  mypy:
+    name: Mypy
     runs-on: ubuntu-latest
 
     steps:
       - uses: actions/checkout@v3
-      - uses: hynek/build-and-inspect-python-package@v1
+      - uses: actions/setup-python@v4
+        with:
+          python-version: ${{ env.PYTHON_LATEST }}
+      - run: python -Im pip install --upgrade wheel tox
+
+      - run: python -Im tox run -e mypy
 
   install-dev:
     name: Verify dev env
@@ -92,9 +98,9 @@
       - uses: actions/checkout@v3
       - uses: actions/setup-python@v4
         with:
-          python-version: ${{env.PYTHON_LATEST}}
-      - run: python -m pip install -e .[dev]
-      - run: python -c 'import hatch_fancy_pypi_readme'
+          python-version: ${{ env.PYTHON_LATEST }}
+      - run: python -Im pip install -e .[dev]
+      - run: python -Ic 'import hatch_fancy_pypi_readme'
       - run: python -m hatch_fancy_pypi_readme tests/example_pyproject.toml
       - run: hatch-fancy-pypi-readme tests/example_pyproject.toml
 
@@ -105,7 +111,6 @@
     needs:
       - coverage
       - install-dev
-      - package
 
     runs-on: ubuntu-latest
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hatch_fancy_pypi_readme-22.8.0/.github/workflows/pypi-package.yml 
new/hatch_fancy_pypi_readme-23.1.0/.github/workflows/pypi-package.yml
--- old/hatch_fancy_pypi_readme-22.8.0/.github/workflows/pypi-package.yml       
1970-01-01 01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/.github/workflows/pypi-package.yml       
2023-05-22 08:59:35.000000000 +0200
@@ -0,0 +1,65 @@
+---
+name: Build & maybe upload PyPI package
+
+on:
+  push:
+    branches: [main]
+    tags: ["*"]
+  pull_request:
+    branches: [main]
+  release:
+    types:
+      - published
+  workflow_dispatch:
+
+permissions:
+  contents: read
+  id-token: write
+
+jobs:
+  # Always build & lint package.
+  build-package:
+    name: Build & verify package
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v3
+      - uses: hynek/build-and-inspect-python-package@v1
+
+  # Upload to Test PyPI on every tag on main.
+  release-test-pypi:
+    name: Publish tagged version to test.pypi.org
+    environment: release-test-pypi
+    if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
+    runs-on: ubuntu-latest
+    needs: build-package
+
+    steps:
+      - name: Download packages built by build-and-inspect-python-package
+        uses: actions/download-artifact@v3
+        with:
+          name: Packages
+          path: dist
+
+      - name: Upload package to Test PyPI
+        uses: pypa/gh-action-pypi-publish@release/v1
+        with:
+          repository-url: https://test.pypi.org/legacy/
+
+  # Upload to real PyPI on GitHub Releases.
+  release-pypi:
+    name: Publish released package to pypi.org
+    environment: release-pypi
+    if: github.event.action == 'published'
+    runs-on: ubuntu-latest
+    needs: build-package
+
+    steps:
+      - name: Download packages built by build-and-inspect-python-package
+        uses: actions/download-artifact@v3
+        with:
+          name: Packages
+          path: dist
+
+      - name: Upload package to PyPI
+        uses: pypa/gh-action-pypi-publish@release/v1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hatch_fancy_pypi_readme-22.8.0/.pre-commit-config.yaml 
new/hatch_fancy_pypi_readme-23.1.0/.pre-commit-config.yaml
--- old/hatch_fancy_pypi_readme-22.8.0/.pre-commit-config.yaml  2020-02-02 
01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/.pre-commit-config.yaml  2023-05-22 
08:59:35.000000000 +0200
@@ -2,45 +2,23 @@
 ci:
   autoupdate_schedule: monthly
 
-default_language_version:
-  python: python3.10
-
 repos:
   - repo: https://github.com/psf/black
-    rev: 22.8.0
+    rev: 23.3.0
     hooks:
       - id: black
 
-  - repo: https://github.com/asottile/pyupgrade
-    rev: v2.37.3
-    hooks:
-      - id: pyupgrade
-        args: [--py37-plus]
-
-  - repo: https://github.com/PyCQA/isort
-    rev: 5.10.1
-    hooks:
-      - id: isort
-        additional_dependencies: [toml]
-
-  - repo: https://github.com/asottile/yesqa
-    rev: v1.4.0
-    hooks:
-      - id: yesqa
-        additional_dependencies: [flake8-bugbear]
-
-  - repo: https://github.com/PyCQA/flake8
-    rev: 5.0.4
+  - repo: https://github.com/charliermarsh/ruff-pre-commit
+    rev: v0.0.269
     hooks:
-      - id: flake8
-        additional_dependencies: [flake8-bugbear]
+      - id: ruff
+        args: [--fix, --exit-non-zero-on-fix]
 
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.3.0
+    rev: v4.4.0
     hooks:
       - id: trailing-whitespace
       - id: end-of-file-fixer
         exclude: (.*\.svg)
-      - id: debug-statements
       - id: check-toml
       - id: check-yaml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hatch_fancy_pypi_readme-22.8.0/CHANGELOG.md 
new/hatch_fancy_pypi_readme-23.1.0/CHANGELOG.md
--- old/hatch_fancy_pypi_readme-22.8.0/CHANGELOG.md     2020-02-02 
01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/CHANGELOG.md     2023-05-22 
08:59:35.000000000 +0200
@@ -10,6 +10,13 @@
 
 <!-- changelog follows -->
 
+## 
[23.1.0](https://github.com/hynek/hatch-fancy-pypi-readme/compare/22.8.0...23.1.0)
 - 2023-05-22
+
+### Added
+
+- CLI support for `hatch.toml`.
+  [#27](https://github.com/hynek/hatch-fancy-pypi-readme/issues/27)
+
 
 ## 
[22.8.0](https://github.com/hynek/hatch-fancy-pypi-readme/compare/22.7.0...22.8.0)
 - 2022-10-02
 
@@ -18,7 +25,7 @@
 - Added `start-at` in addition to `start-after` that preserves the string that 
is looked for. This often removes the need for adding markers because you can 
define the starting point using a heading that becomes part of the fragment.
 
    For example: `start-at = "## License"` gives you `## License` and 
everything that follows.
-   [#71](https://github.com/hynek/hatch-fancy-pypi-readme/issues/71)
+   [#16](https://github.com/hynek/hatch-fancy-pypi-readme/issues/16)
 
 
 ## 
[22.7.0](https://github.com/hynek/hatch-fancy-pypi-readme/compare/22.6.0...22.7.0)
 - 2022-09-12
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hatch_fancy_pypi_readme-22.8.0/PKG-INFO 
new/hatch_fancy_pypi_readme-23.1.0/PKG-INFO
--- old/hatch_fancy_pypi_readme-22.8.0/PKG-INFO 2020-02-02 01:00:00.000000000 
+0100
+++ new/hatch_fancy_pypi_readme-23.1.0/PKG-INFO 2023-05-22 08:59:35.000000000 
+0200
@@ -1,14 +1,13 @@
 Metadata-Version: 2.1
 Name: hatch-fancy-pypi-readme
-Version: 22.8.0
+Version: 23.1.0
 Summary: Fancy PyPI READMEs with Hatch
 Project-URL: Documentation, 
https://github.com/hynek/hatch-fancy-pypi-readme#readme
 Project-URL: Changelog, 
https://github.com/hynek/hatch-fancy-pypi-readme/blob/main/CHANGELOG.md
 Project-URL: Source Code, https://github.com/hynek/hatch-fancy-pypi-readme
 Project-URL: Funding, https://github.com/sponsors/hynek
-Project-URL: Ko-fi, https://ko-fi.com/the_hynek
 Author-email: Hynek Schlawack <h...@ox.cx>
-License: MIT
+License-Expression: MIT
 License-File: AUTHORS.md
 License-File: LICENSE.txt
 Keywords: documentation,hatch,pypi,readme
@@ -16,14 +15,11 @@
 Classifier: Framework :: Hatch
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
-Classifier: Programming Language :: Python :: Implementation :: CPython
-Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Software Development :: Build Tools
 Requires-Python: >=3.7
 Requires-Dist: hatchling
@@ -38,15 +34,9 @@
 Requires-Dist: wheel; extra == 'tests'
 Description-Content-Type: text/markdown
 
-# Your ✨Fancy✨ Project Deserves a ✨Fancy✨ PyPI Readme! 🧐
+# Your ✨Fancy✨ Project Deserves a ✨Fancy✨ PyPI Readme!
 
-[![PyPI - 
Version](https://img.shields.io/pypi/v/hatch-fancy-pypi-readme.svg)](https://pypi.org/project/hatch-fancy-pypi-readme)
-[![PyPI - Python 
Version](https://img.shields.io/pypi/pyversions/hatch-fancy-pypi-readme.svg)](https://pypi.org/project/hatch-fancy-pypi-readme)
-[![Hatch 
project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg)](https://github.com/pypa/hatch)
-[![License: 
MIT](https://img.shields.io/badge/license-MIT-C06524)](https://github.com/hynek/hatch-fancy-pypi-readme/blob/main/LICENSE.txt)
-
-
-*hatch-fancy-pypi-readme* is an MIT-licensed metadata plugin for 
[*Hatch*](https://hatch.pypa.io/).
+*hatch-fancy-pypi-readme* is an MIT-licensed metadata plugin for 
[Hatch](https://hatch.pypa.io/) by [Hynek Schlawack](https://hynek.me/).
 
 Its purpose is to help you to have fancy PyPI readmes – unlike *this* one 
you’re looking at right now.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hatch_fancy_pypi_readme-22.8.0/README.md 
new/hatch_fancy_pypi_readme-23.1.0/README.md
--- old/hatch_fancy_pypi_readme-22.8.0/README.md        2020-02-02 
01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/README.md        2023-05-22 
08:59:35.000000000 +0200
@@ -1,11 +1,11 @@
-# Your ✨Fancy✨ Project Deserves a ✨Fancy✨ PyPI Readme! 🧐
+# Your ✨Fancy✨ Project Deserves a ✨Fancy✨ PyPI Readme!
 
 [![PyPI - 
Version](https://img.shields.io/pypi/v/hatch-fancy-pypi-readme.svg)](https://pypi.org/project/hatch-fancy-pypi-readme)
 [![PyPI - Python 
Version](https://img.shields.io/pypi/pyversions/hatch-fancy-pypi-readme.svg)](https://pypi.org/project/hatch-fancy-pypi-readme)
 [![Hatch 
project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg)](https://github.com/pypa/hatch)
 [![License: 
MIT](https://img.shields.io/badge/license-MIT-C06524)](https://github.com/hynek/hatch-fancy-pypi-readme/blob/main/LICENSE.txt)
 
-*hatch-fancy-pypi-readme* is a [*Hatch*] metadata plugin for everyone who 
cares about the first impression of their project’s PyPI landing page.
+*hatch-fancy-pypi-readme* is a [Hatch] metadata plugin for everyone who cares 
about the first impression of their project’s PyPI landing page.
 It allows you to define your PyPI project description in terms of concatenated 
fragments that are based on **static strings**, **files**, and most importantly:
 **parts of files** defined using **cut-off points** or **regular expressions**.
 
@@ -21,15 +21,23 @@
 > We refer to it as “readme” because that’s how it’s called in [PEP 
 > 621](https://peps.python.org/pep-0621/)-based `pyproject.toml` files.
 
 
-### Showcases
+### Showcases 🧐
 
 <!-- Please add your project in alphabetic order, except leave 
hatch-fancy-pypi-readme last. -->
+- [*Awkward Array*](https://pypi.org/project/awkward/) 
([`pyproject.toml`](https://github.com/scikit-hep/awkward/blob/main/pyproject.toml))
+- [*Black*](https://pypi.org/project/black/) 
([`pyproject.toml`](https://github.com/psf/black/blob/main/pyproject.toml))
+- [*doc2dash*](https://pypi.org/project/doc2dash/) 
([`pyproject.toml`](https://github.com/hynek/doc2dash/blob/main/pyproject.toml))
+- [*environ-config*](https://pypi.org/project/environ-config/) 
([`pyproject.toml`](https://github.com/hynek/environ-config/blob/main/pyproject.toml))
 - [*jsonschema*](https://pypi.org/project/jsonschema/) 
([`pyproject.toml`](https://github.com/python-jsonschema/jsonschema/blob/main/pyproject.toml))
 - [*Gradio*](https://pypi.org/project/gradio/) 
([`pyproject.toml`](https://github.com/gradio-app/gradio/blob/main/pyproject.toml))
+- [*httpx*](https://pypi.org/project/httpx/) 
([`pyproject.toml`](https://github.com/encode/httpx/blob/master/pyproject.toml))
 - [*pytermgui*](https://pypi.org/project/pytermgui/) 
([`pyproject.toml`](https://github.com/bczsalba/pytermgui/blob/master/pyproject.toml))
+- [*scikit-build*](https://pypi.org/project/scikit-build/) 
([`pyproject.toml`](https://github.com/scikit-build/scikit-build/blob/main/pyproject.toml))
 - [*stamina*](https://pypi.org/project/stamina/) 
([`pyproject.toml`](https://github.com/hynek/stamina/blob/main/pyproject.toml))
-- And finally 
[*hatch-fancy-pypi-readme*](https://pypi.org/project/hatch-fancy-pypi-readme/22.5.0/)
 22.5.0 
([`pyproject.toml`](https://github.com/hynek/hatch-fancy-pypi-readme/blob/1a76f0d6cb78448e59466716ee3d5b5ea99915d1/pyproject.toml#L125-L168)),
 before we went back to a static readme to avoid a circular dependency that can 
be problematic in some cases.
-  The shoemaker’s kids always go barefoot.
+- [*structlog*](https://pypi.org/project/structlog/) 
([`pyproject.toml`](https://github.com/hynek/structlog/blob/main/pyproject.toml))
+
+*hatch-fancy-pypi-readme* doesn’t use itself to avoid a circular dependency 
that can be problematic in some cases.
+The shoemaker’s kids always go barefoot.
 
 <!-- start docs -->
 
@@ -43,13 +51,17 @@
 For example 
[this](https://github.com/python-attrs/attrs/blob/b3dfebe2e10b44437c4f97d788fb5220d790efd0/setup.py#L110-L124)
 is the code that gave me the PyPI readme for [*attrs* 
22.1.0](https://pypi.org/project/attrs/22.1.0/).
 Especially having a summary of the *latest* changes is something I’ve found 
users to appreciate.
 
-[*Hatch*]’s extensibility finally allowed me to build this plugin that 
allows you to switch away from `setup.py` without compromising on the user 
experience.
+[Hatch]’s extensibility finally allowed me to build this plugin that allows 
you to switch away from `setup.py` without compromising on the user experience.
 Now *you* too can have fancy PyPI readmes – just by adding a few lines of 
configuration to your `pyproject.toml`.
 
 
 ## Configuration
 
-*hatch-fancy-pypi-readme* is, like [*Hatch*], configured in your project’s 
`pyproject.toml`.
+*hatch-fancy-pypi-readme* is, like [Hatch], configured in your project’s 
`pyproject.toml`[^hatch-toml].
+
+[^hatch-toml]: As with Hatch, you can also use `hatch.toml` for configuration 
options that start with `tool.hatch` and leave that prefix out.
+  That means `pyprojects.toml`’s 
`[tool.hatch.metadata.hooks.fancy-pypi-readme]` becomes 
`[metadata.hooks.fancy-pypi-readme]` when in `hatch.toml`.
+  To keep the documentation simple, the more common `pyproject.toml` syntax is 
used throughout.
 
 First you add *hatch-fancy-pypi-readme* to your `[build-system]`:
 
@@ -86,7 +98,7 @@
 Finally, you also **must** supply an *array* of `fragments`.
 A fragment is a piece of text that is appended to your readme in the order 
that it’s specified.
 
-We recommend *TOML*’s [syntactic sugar for arrays of wrapping the array name 
in double brackets](https://toml.io/en/v1.0.0#array-of-tables) and will use it 
throughout this documentation.
+We recommend TOML’s [syntactic sugar for arrays of wrapping the array name 
in double brackets](https://toml.io/en/v1.0.0#array-of-tables) and will use it 
throughout this documentation.
 
 
 #### Text
@@ -136,7 +148,7 @@
 
   to find it.
 
-Both *Markdown* and *reST* have comments (`<!-- this is a Markdown comment 
-->` and `.. this is a reST comment`) that you can use for invisible markers:
+Both Markdown and *reST* have comments (`<!-- this is a Markdown comment -->` 
and `.. this is a reST comment`) that you can use for invisible markers:
 
 ```markdown
 # Boring Header
@@ -246,22 +258,27 @@
 ![rich-cli output](rich-cli-out.svg)
 
 > **Warning**
-> While the execution model is somewhat different from the [*Hatch*]-Python 
packaging pipeline, it uses the same configuration validator and text renderer, 
so the fidelity should be high.
+> While the execution model is somewhat different from the [Hatch]-Python 
packaging pipeline, it uses the same configuration validator and text renderer, 
so the fidelity should be high.
 >
 > It will **not** help you debug **packaging issues**, though.
 >
 > To verify your PyPI readme using the full packaging pipeline, check out my 
 > [*build-and-inspect-python-package*](https://github.com/hynek/build-and-inspect-python-package)
 >  GitHub Action.
+>
+> If you ensure that *hatch-fancy-pypi-readme* is installed in your Hatch 
environment (that means where the `hatch` CLI command lives – not your 
development environment), you can also let Hatch render it for you:
+>
+> - `hatch project metadata readme` gives you a rendered version of the readme.
+> - `hatch project metadata | jq -r .readme.text` gives you the raw Markdown 
(needs [*jq*](https://stedolan.github.io/jq/)).
 
-<!-- end docs -->
 
 ## Project Links
 
 - **License**: [MIT](LICENSE.txt)
-- **Documentation**:  https://github.com/hynek/hatch-fancy-pypi-readme#readme
-- **Changelog**: [CHANGELOG.md](CHANGELOG.md)
-- **PyPI**: https://pypi.org/project/hatch-fancy-pypi-readme/
-- **Source Code**: https://github.com/hynek/hatch-fancy-pypi-readme
-- **Supported Python Versions**: 3.7 and later (follows [*Hatch*])
+- **Supported Python Versions**: 3.7 and later (follows [Hatch])
+- [**Documentation**](https://github.com/hynek/hatch-fancy-pypi-readme#readme)
+- [**Changelog**](CHANGELOG.md)
+- [**PyPI**](https://pypi.org/project/hatch-fancy-pypi-readme/)
+- [**Source Code**](https://github.com/hynek/hatch-fancy-pypi-readme)
+
 
 [example-config]: tests/example_pyproject.toml
-[*Hatch*]: https://hatch.pypa.io/
+[Hatch]: https://hatch.pypa.io/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hatch_fancy_pypi_readme-22.8.0/pyproject.toml 
new/hatch_fancy_pypi_readme-23.1.0/pyproject.toml
--- old/hatch_fancy_pypi_readme-22.8.0/pyproject.toml   2020-02-02 
01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/pyproject.toml   2023-05-22 
08:59:35.000000000 +0200
@@ -5,12 +5,12 @@
 
 [project]
 name = "hatch-fancy-pypi-readme"
-version = "22.8.0"
+version = "23.1.0"
 description = "Fancy PyPI READMEs with Hatch"
 requires-python = ">=3.7"
 keywords = ["hatch", "pypi", "readme", "documentation"]
 authors = [{ name = "Hynek Schlawack", email = "h...@ox.cx" }]
-license = { text = "MIT" }
+license = "MIT"
 classifiers = [
   "Development Status :: 5 - Production/Stable",
   "Framework :: Hatch",
@@ -18,14 +18,11 @@
   "Operating System :: OS Independent",
   "Topic :: Software Development :: Build Tools",
 
-  "Programming Language :: Python",
   "Programming Language :: Python :: 3.7",
   "Programming Language :: Python :: 3.8",
   "Programming Language :: Python :: 3.9",
   "Programming Language :: Python :: 3.10",
   "Programming Language :: Python :: 3.11",
-  "Programming Language :: Python :: Implementation :: CPython",
-  "Programming Language :: Python :: Implementation :: PyPy",
 ]
 dependencies = [
   "hatchling",
@@ -48,19 +45,12 @@
 Changelog = 
"https://github.com/hynek/hatch-fancy-pypi-readme/blob/main/CHANGELOG.md";
 "Source Code" = "https://github.com/hynek/hatch-fancy-pypi-readme";
 Funding = "https://github.com/sponsors/hynek";
-Ko-fi = "https://ko-fi.com/the_hynek";
 
 [project.readme]
 content-type = "text/markdown"
-text = """# Your ✨Fancy✨ Project Deserves a ✨Fancy✨ PyPI Readme! 🧐
+text = """# Your ✨Fancy✨ Project Deserves a ✨Fancy✨ PyPI Readme!
 
-[![PyPI - 
Version](https://img.shields.io/pypi/v/hatch-fancy-pypi-readme.svg)](https://pypi.org/project/hatch-fancy-pypi-readme)
-[![PyPI - Python 
Version](https://img.shields.io/pypi/pyversions/hatch-fancy-pypi-readme.svg)](https://pypi.org/project/hatch-fancy-pypi-readme)
-[![Hatch 
project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg)](https://github.com/pypa/hatch)
-[![License: 
MIT](https://img.shields.io/badge/license-MIT-C06524)](https://github.com/hynek/hatch-fancy-pypi-readme/blob/main/LICENSE.txt)
-
-
-*hatch-fancy-pypi-readme* is an MIT-licensed metadata plugin for 
[*Hatch*](https://hatch.pypa.io/).
+*hatch-fancy-pypi-readme* is an MIT-licensed metadata plugin for 
[Hatch](https://hatch.pypa.io/) by [Hynek Schlawack](https://hynek.me/).
 
 Its purpose is to help you to have fancy PyPI readmes – unlike *this* one 
you’re looking at right now.
 
@@ -82,7 +72,7 @@
 source = ["hatch_fancy_pypi_readme"]
 
 [tool.coverage.paths]
-source = ["src", ".tox/*/site-packages"]
+source = ["src", ".tox/py*/**/site-packages"]
 
 [tool.coverage.report]
 show_missing = true
@@ -117,10 +107,6 @@
 line-length = 79
 
 
-[tool.isort]
-profile = "attrs"
-
-
 [tool.mypy]
 strict = true
 follow_imports = "normal"
@@ -132,3 +118,43 @@
 [[tool.mypy.overrides]]
 module = "tests.*"
 ignore_errors = true
+
+
+[tool.ruff]
+src = ["src", "tests"]
+select = [
+  "E",   # pycodestyle
+  "W",   # pycodestyle
+  "F",   # Pyflakes
+  "UP",  # pyupgrade
+  "N",   # pep8-naming
+  "YTT", # flake8-2020
+  "S",   # flake8-bandit
+  "B",   # flake8-bugbear
+  "C4",  # flake8-comprehensions
+  "T10", # flake8-debugger
+  "ISC", # flake8-implicit-str-concat
+  "RET", # flake8-return
+  "SIM", # flake8-simplify
+  "DTZ", # flake8-datetimez
+  "I",   # isort
+  "PGH", # pygrep-hooks
+  "PLC", # Pylint
+  "PIE", # flake8-pie
+  "RUF", # ruff
+]
+
+ignore = [
+  "E501", # leave line-length enforcement to Black
+]
+
+[tool.ruff.per-file-ignores]
+"tests/*" = [
+  "S101",    # assert
+  "SIM300",  # Yoda rocks in tests
+  "PLC1901", # empty strings are falsey, but are less specific in tests
+]
+
+[tool.ruff.isort]
+lines-between-types = 1
+lines-after-imports = 2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hatch_fancy_pypi_readme-22.8.0/src/hatch_fancy_pypi_readme/__main__.py 
new/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/__main__.py
--- old/hatch_fancy_pypi_readme-22.8.0/src/hatch_fancy_pypi_readme/__main__.py  
2020-02-02 01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/__main__.py  
2023-05-22 08:59:35.000000000 +0200
@@ -8,6 +8,7 @@
 import sys
 
 from contextlib import closing
+from pathlib import Path
 from typing import TextIO
 
 from ._cli import cli_run
@@ -21,7 +22,8 @@
 
 def main() -> None:
     parser = argparse.ArgumentParser(
-        description="Render a README from a pyproject.toml"
+        description="Render a README from a pyproject.toml & hatch.toml."
+        " If a hatch.toml is passed / detected, it's preferred."
     )
     parser.add_argument(
         "pyproject_path",
@@ -32,23 +34,41 @@
         "Default: pyproject.toml in current directory.",
     )
     parser.add_argument(
+        "--hatch-toml",
+        nargs="?",
+        metavar="PATH-TO-HATCH.TOML",
+        default=None,
+        help="Path to an additional hatch.toml to use for rendering. "
+        "Default: Auto-detect in the current directory.",
+    )
+    parser.add_argument(
         "-o",
         help="Target file for output. Default: standard out.",
         metavar="TARGET-FILE-PATH",
     )
     args = parser.parse_args()
 
-    with open(args.pyproject_path, "rb") as fp:
-        cfg = tomllib.load(fp)
+    pyproject = tomllib.loads(Path(args.pyproject_path).read_text())
+    hatch_toml = _maybe_load_hatch_toml(args.hatch_toml)
 
     out: TextIO
-    if args.o:
-        out = open(args.o, "w")
-    else:
-        out = sys.stdout
+    out = open(args.o, "w") if args.o else sys.stdout  # noqa: SIM115
 
     with closing(out):
-        cli_run(cfg, out)
+        cli_run(pyproject, hatch_toml, out)
+
+
+def _maybe_load_hatch_toml(hatch_toml_arg: str | None) -> dict[str, object]:
+    """
+    If hatch.toml is passed or detected, load it.
+    """
+    if hatch_toml_arg:
+        return tomllib.loads(Path(hatch_toml_arg).read_text())
+
+    if Path("hatch.toml").exists():
+        return tomllib.loads(Path("hatch.toml").read_text())
+
+    return {}
 
 
 if __name__ == "__main__":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hatch_fancy_pypi_readme-22.8.0/src/hatch_fancy_pypi_readme/_cli.py 
new/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/_cli.py
--- old/hatch_fancy_pypi_readme-22.8.0/src/hatch_fancy_pypi_readme/_cli.py      
2020-02-02 01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/_cli.py      
2023-05-22 08:59:35.000000000 +0200
@@ -6,6 +6,7 @@
 
 import sys
 
+from contextlib import suppress
 from typing import Any, NoReturn, TextIO
 
 from hatch_fancy_pypi_readme.exceptions import ConfigurationError
@@ -14,28 +15,47 @@
 from ._config import load_and_validate_config
 
 
-def cli_run(pyproject: dict[str, Any], out: TextIO) -> None:
+def cli_run(
+    pyproject: dict[str, Any], hatch_toml: dict[str, Any], out: TextIO
+) -> None:
     """
     Best-effort verify config and print resulting PyPI readme.
     """
     is_dynamic = False
-    try:
+    with suppress(KeyError):
         is_dynamic = "readme" in pyproject["project"]["dynamic"]
-    except KeyError:
-        pass
 
     if not is_dynamic:
         _fail("You must add 'readme' to 'project.dynamic'.")
 
     try:
-        cfg = pyproject["tool"]["hatch"]["metadata"]["hooks"][
-            "fancy-pypi-readme"
-        ]
+        if (
+            pyproject["tool"]["hatch"]["metadata"]["hooks"][
+                "fancy-pypi-readme"
+            ]
+            and hatch_toml["metadata"]["hooks"]["fancy-pypi-readme"]
+        ):
+            _fail(
+                "Both pyproject.toml and hatch.toml contain "
+                "hatch-fancy-pypi-readme configuration."
+            )
+    except KeyError:
+        pass
+
+    try:
+        cfg = hatch_toml["metadata"]["hooks"]["fancy-pypi-readme"]
     except KeyError:
-        _fail(
-            "Missing configuration "
-            "(`[tool.hatch.metadata.hooks.fancy-pypi-readme]`)",
-        )
+        try:
+            cfg = pyproject["tool"]["hatch"]["metadata"]["hooks"][
+                "fancy-pypi-readme"
+            ]
+        except KeyError:
+            _fail(
+                "Missing configuration "
+                "(`[tool.hatch.metadata.hooks.fancy-pypi-readme]` in"
+                " pyproject.toml or `[metadata.hooks.fancy-pypi-readme]`"
+                " in hatch.toml)",
+            )
 
     try:
         config = load_and_validate_config(cfg)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hatch_fancy_pypi_readme-22.8.0/src/hatch_fancy_pypi_readme/_fragments.py 
new/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/_fragments.py
--- 
old/hatch_fancy_pypi_readme-22.8.0/src/hatch_fancy_pypi_readme/_fragments.py    
    2020-02-02 01:00:00.000000000 +0100
+++ 
new/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/_fragments.py    
    2023-05-22 08:59:35.000000000 +0200
@@ -24,7 +24,7 @@
     key: ClassVar[str]
 
     @classmethod
-    def from_config(self, cfg: dict[str, str]) -> Fragment:
+    def from_config(cls, cfg: dict[str, str]) -> Fragment:
         ...
 
     def render(self) -> str:
@@ -76,7 +76,9 @@
         try:
             contents = path.read_text(encoding="utf-8")
         except FileNotFoundError:
-            raise ConfigurationError([f"Fragment file '{path}' not found."])
+            raise ConfigurationError(
+                [f"Fragment file '{path}' not found."]
+            ) from None
 
         if start_after and start_at:
             raise ConfigurationError(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hatch_fancy_pypi_readme-22.8.0/tests/test_cli.py 
new/hatch_fancy_pypi_readme-23.1.0/tests/test_cli.py
--- old/hatch_fancy_pypi_readme-22.8.0/tests/test_cli.py        2020-02-02 
01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/tests/test_cli.py        2023-05-22 
08:59:35.000000000 +0200
@@ -9,7 +9,7 @@
 
 import pytest
 
-from hatch_fancy_pypi_readme.__main__ import tomllib
+from hatch_fancy_pypi_readme.__main__ import _maybe_load_hatch_toml, tomllib
 from hatch_fancy_pypi_readme._cli import cli_run
 
 from .utils import run
@@ -42,7 +42,9 @@
 
         assert (
             "Missing configuration "
-            "(`[tool.hatch.metadata.hooks.fancy-pypi-readme]`)\n" == out
+            "(`[tool.hatch.metadata.hooks.fancy-pypi-readme]` in"
+            " pyproject.toml or `[metadata.hooks.fancy-pypi-readme]` in"
+            " hatch.toml)\n" == out
         )
 
     def test_ok(self):
@@ -79,6 +81,51 @@
 
         assert out.read_text().startswith("# Level 1 Header")
 
+    def test_empty_explicit_hatch_toml(self, tmp_path):
+        """
+        Explicit empty hatch.toml is ignored.
+        """
+        hatch_toml = tmp_path / "hatch.toml"
+        hatch_toml.write_text("")
+
+        assert run(
+            "hatch_fancy_pypi_readme",
+            "tests/example_pyproject.toml",
+            f"--hatch-toml={hatch_toml.resolve()}",
+        ).startswith("# Level 1 Header")
+
+    def test_config_in_hatch_toml(self, tmp_path, monkeypatch):
+        """
+        Implicit empty hatch.toml is used.
+        """
+        pyproject = tmp_path / "pyproject.toml"
+        pyproject.write_text(
+            """\
+[build-system]
+requires = ["hatchling", "hatch-fancy-pypi-readme"]
+build-backend = "hatchling.build"
+
+[project]
+name = "my-pkg"
+version = "1.0"
+dynamic = ["readme"]
+"""
+        )
+        hatch_toml = tmp_path / "hatch.toml"
+        hatch_toml.write_text(
+            """\
+[metadata.hooks.fancy-pypi-readme]
+content-type = "text/markdown"
+
+[[metadata.hooks.fancy-pypi-readme.fragments]]
+text = '# Level 1 Header'
+"""
+        )
+
+        monkeypatch.chdir(tmp_path)
+
+        assert run("hatch_fancy_pypi_readme").startswith("# Level 1 Header")
+
 
 class TestCLI:
     def test_cli_run_missing_dynamic(self, capfd):
@@ -86,7 +133,7 @@
         Missing readme in dynamic is caught and gives helpful advice.
         """
         with pytest.raises(SystemExit):
-            cli_run({}, sys.stdout)
+            cli_run({}, {}, sys.stdout)
 
         out, err = capfd.readouterr()
 
@@ -99,14 +146,49 @@
         """
         with pytest.raises(SystemExit):
             cli_run(
-                {"project": {"dynamic": ["foo", "readme", "bar"]}}, sys.stdout
+                {"project": {"dynamic": ["foo", "readme", "bar"]}},
+                {},
+                sys.stdout,
             )
 
         out, err = capfd.readouterr()
 
         assert (
             "Missing configuration "
-            "(`[tool.hatch.metadata.hooks.fancy-pypi-readme]`)\n" == err
+            "(`[tool.hatch.metadata.hooks.fancy-pypi-readme]` in"
+            " pyproject.toml or `[metadata.hooks.fancy-pypi-readme]` in"
+            " hatch.toml)\n" == err
+        )
+        assert "" == out
+
+    def test_cli_run_two_configs(self, capfd):
+        """
+        Ambiguous two configs.
+        """
+        meta = {
+            "metadata": {
+                "hooks": {
+                    "fancy-pypi-readme": {"content-type": "text/markdown"}
+                }
+            }
+        }
+        with pytest.raises(SystemExit):
+            cli_run(
+                {
+                    "project": {
+                        "dynamic": ["foo", "readme", "bar"],
+                    },
+                    "tool": {"hatch": meta},
+                },
+                meta,
+                sys.stdout,
+            )
+
+        out, err = capfd.readouterr()
+
+        assert (
+            "Both pyproject.toml and hatch.toml contain "
+            "hatch-fancy-pypi-readme configuration.\n" == err
         )
         assert "" == out
 
@@ -115,7 +197,7 @@
         Configuration errors are detected and give helpful advice.
         """
         with pytest.raises(SystemExit):
-            cli_run(empty_pyproject, sys.stdout)
+            cli_run(empty_pyproject, {}, sys.stdout)
 
         out, err = capfd.readouterr()
 
@@ -134,10 +216,49 @@
         """
         sio = StringIO()
 
-        cli_run(pyproject, sio)
+        cli_run(pyproject, {}, sio)
 
         out, err = capfd.readouterr()
 
         assert "" == err
         assert "" == out
         assert sio.getvalue().startswith("# Level 1 Header")
+
+
+class TestMaybeLoadHatchToml:
+    def test_none(self, tmp_path, monkeypatch):
+        """
+        If nothing is passed and not hatch.toml is found, return empty dict.
+        """
+        monkeypatch.chdir(tmp_path)
+
+        assert {} == _maybe_load_hatch_toml(None)
+
+    def test_explicit(self, tmp_path, monkeypatch):
+        """
+        If one is passed, return its parsed content and ignore files called
+        hatch.toml.
+        """
+        monkeypatch.chdir(tmp_path)
+
+        hatch_toml = tmp_path / "hatch.toml"
+        hatch_toml.write_text("gibberish")
+
+        not_hatch_toml = tmp_path / "not-hatch.toml"
+        not_hatch_toml.write_text("[foo]\nbar='qux'")
+
+        assert {"foo": {"bar": "qux"}} == _maybe_load_hatch_toml(
+            str(not_hatch_toml)
+        )
+
+    def test_implicit(self, tmp_path, monkeypatch):
+        """
+        If none is passed, but a hatch.toml is present in current dir, parse
+        it.
+        """
+        monkeypatch.chdir(tmp_path)
+
+        hatch_toml = tmp_path / "hatch.toml"
+        hatch_toml.write_text("[foo]\nbar='qux'")
+
+        assert {"foo": {"bar": "qux"}} == _maybe_load_hatch_toml(None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hatch_fancy_pypi_readme-22.8.0/tests/test_substitutions.py 
new/hatch_fancy_pypi_readme-23.1.0/tests/test_substitutions.py
--- old/hatch_fancy_pypi_readme-22.8.0/tests/test_substitutions.py      
2020-02-02 01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/tests/test_substitutions.py      
2023-05-22 08:59:35.000000000 +0200
@@ -35,15 +35,15 @@
         
https://github.com/twisted/twisted/blob/eda9d29dc7fe34e7b207781e5674dc92f798bffe/setup.py#L19-L24
         """
         assert (
-            "For information on changes in this release, see the `NEWS 
<https://github.com/twisted/twisted/blob/trunk/NEWS.rst>`_ file."  # noqa
+            "For information on changes in this release, see the `NEWS 
<https://github.com/twisted/twisted/blob/trunk/NEWS.rst>`_ file."
         ) == Substituter.from_config(
             {
                 "pattern": r"`([^`]+)\s+<(?!https?://)([^>]+)>`_",
-                "replacement": r"`\1 
<https://github.com/twisted/twisted/blob/trunk/\2>`_",  # noqa
+                "replacement": r"`\1 
<https://github.com/twisted/twisted/blob/trunk/\2>`_",
                 "ignore-case": True,
             }
         ).substitute(
-            "For information on changes in this release, see the `NEWS 
<NEWS.rst>`_ file."  # noqa
+            "For information on changes in this release, see the `NEWS 
<NEWS.rst>`_ file."
         )
 
     @pytest.mark.parametrize(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hatch_fancy_pypi_readme-22.8.0/tests/utils.py 
new/hatch_fancy_pypi_readme-23.1.0/tests/utils.py
--- old/hatch_fancy_pypi_readme-22.8.0/tests/utils.py   2020-02-02 
01:00:00.000000000 +0100
+++ new/hatch_fancy_pypi_readme-23.1.0/tests/utils.py   2023-05-22 
08:59:35.000000000 +0200
@@ -10,7 +10,7 @@
 
 def run(*args, check=True):
     process = subprocess.run(
-        [sys.executable, "-m", *args],
+        [sys.executable, "-m", *args],  # noqa: S603
         stdout=subprocess.PIPE,
         stderr=subprocess.STDOUT,
         encoding="utf-8",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hatch_fancy_pypi_readme-22.8.0/tox.ini 
new/hatch_fancy_pypi_readme-23.1.0/tox.ini
--- old/hatch_fancy_pypi_readme-22.8.0/tox.ini  2020-02-02 01:00:00.000000000 
+0100
+++ new/hatch_fancy_pypi_readme-23.1.0/tox.ini  2023-05-22 08:59:35.000000000 
+0200
@@ -1,14 +1,15 @@
-[gh-actions]
-python =
-    3.7: py37
-    3.8: py38
-    3.9: py39
-    3.10: py310, mypy
-    3.11: py311
-
-
 [tox]
-envlist = 
pre-commit,mypy,py37,py38,py39,py310,py311,py3{7,10,11}-cli,coverage-report
+min_version = 4
+env_list =
+    pre-commit,
+    mypy,
+    py37,
+    py38,
+    py39,
+    py310,
+    py311,
+    py3{7,10,11}-cli,
+    coverage-report
 isolated_build = true
 
 
@@ -21,7 +22,6 @@
 
 
 [testenv:pre-commit]
-basepython = python3.10
 skip_install = true
 deps = pre-commit
 commands = pre-commit run --all-files
@@ -35,21 +35,21 @@
 
 [testenv]
 extras = tests
-commands = python -m pytest {posargs}
+commands = pytest {posargs}
 
 
-[testenv:py3{10,11}]
+[testenv:py31{0,1}]
 deps = coverage[toml]
-commands = python -m coverage run -m pytest {posargs}
+commands = coverage run -m pytest {posargs}
 
 
 [testenv:coverage-report]
-basepython = python3.10
+base_python = python3.11
 deps = coverage[toml]
 skip_install = true
 commands =
-    python -m coverage combine
-    python -m coverage report
+    coverage combine
+    coverage report
 
 
 [testenv:svg]

Reply via email to