
This implements PEP 621, obviating the need for `setup.py`, `setup.cfg`, and `MANIFEST.in`. The build backend Hatchling (of which I am a maintainer in the PyPA) is now used as that is the default in the official Python packaging tutorial. Hatchling is available on all the major distribution channels such as Debian, Fedora, and many more. ## Python support The earliest supported Python 3 version of Hatchling is 3.7, therefore I've also set that as the minimum here. Python 3.6 is EOL and other build backends like flit-core and setuptools also dropped support. Python 3.6 accounted for 3-4% of downloads in the last month. ## Plugins Configuration is now completely static with the help of 3 plugins: ### Readme hynek's hatch-fancy-pypi-readme allows for the dynamic construction of the readme which was previously coded up in `setup.py`. Now it's simply: ```toml [tool.hatch.metadata.hooks.fancy-pypi-readme] content-type = "text/markdown" fragments = [ { path = "README.md" }, { path = "CHANGES.md" }, ] ``` ### Versioning hatch-vcs is currently just a wrapper around setuptools-scm (which despite the legacy naming is actually now decoupled from setuptools): ```toml [tool.hatch.version] source = "vcs" [tool.hatch.build.hooks.vcs] version-file = "src/_black_version.py" template = ''' version = "{version}" ''' ``` ### mypyc hatch-mypyc offers many benefits over the existing approach: - No need to manually select files for inclusion - Avoids the need for the current CI workaround for https://github.com/mypyc/mypyc/issues/946 - Intermediate artifacts (like `build/`) from setuptools and mypyc itself no longer clutter the project directory - Runtime dependencies required at build time no longer need to be manually redeclared as this is a built-in option of Hatchling Co-authored-by: Richard Si <63936253+ichard26@users.noreply.github.com> Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
107 lines
2.9 KiB
YAML
107 lines
2.9 KiB
YAML
name: Test
|
|
|
|
on:
|
|
push:
|
|
paths-ignore:
|
|
- "docs/**"
|
|
- "*.md"
|
|
|
|
pull_request:
|
|
paths-ignore:
|
|
- "docs/**"
|
|
- "*.md"
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
main:
|
|
# We want to run on external PRs, but not on our own internal PRs as they'll be run
|
|
# by the push to the branch. Without this if check, checks are duplicated since
|
|
# internal PRs match both the push and pull_request events.
|
|
if:
|
|
github.event_name == 'push' || github.event.pull_request.head.repo.full_name !=
|
|
github.repository
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ["3.7", "3.8", "3.9", "3.10", "pypy-3.7", "pypy-3.8"]
|
|
os: [ubuntu-latest, macOS-latest, windows-latest]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: Install tox
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
python -m pip install --upgrade tox
|
|
|
|
- name: Unit tests
|
|
if: "!startsWith(matrix.python-version, 'pypy')"
|
|
run: tox -e ci-py -- -v --color=yes
|
|
|
|
- name: Unit tests (pypy)
|
|
if: "startsWith(matrix.python-version, 'pypy')"
|
|
run: tox -e ci-pypy3 -- -v --color=yes
|
|
|
|
- name: Upload coverage to Coveralls
|
|
# Upload coverage if we are on the main repository and
|
|
# we're running on Linux (this action only supports Linux)
|
|
if: github.repository == 'psf/black' && matrix.os == 'ubuntu-latest'
|
|
uses: AndreMiras/coveralls-python-action@v20201129
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
parallel: true
|
|
flag-name: py${{ matrix.python-version }}-${{ matrix.os }}
|
|
debug: true
|
|
|
|
coveralls-finish:
|
|
needs: main
|
|
if: github.repository == 'psf/black'
|
|
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Send finished signal to Coveralls
|
|
uses: AndreMiras/coveralls-python-action@v20201129
|
|
with:
|
|
parallel-finished: true
|
|
debug: true
|
|
|
|
uvloop:
|
|
if:
|
|
github.event_name == 'push' || github.event.pull_request.head.repo.full_name !=
|
|
github.repository
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest, macOS-latest]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Set up latest Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "*"
|
|
|
|
- name: Install black with uvloop
|
|
run: |
|
|
python -m pip install pip --upgrade --disable-pip-version-check
|
|
python -m pip install -e ".[uvloop]"
|
|
|
|
- name: Format ourselves
|
|
run: python -m black --check src/
|