Skip to content

Commit

Permalink
Switch build backend to Hatchling
Browse files Browse the repository at this point in the history
  • Loading branch information
ofek committed Aug 19, 2022
1 parent 4ebf14d commit c95a6d3
Show file tree
Hide file tree
Showing 11 changed files with 133 additions and 192 deletions.
14 changes: 0 additions & 14 deletions .github/mypyc-requirements.txt

This file was deleted.

13 changes: 6 additions & 7 deletions .github/workflows/diff_shades.yml
Expand Up @@ -3,10 +3,10 @@ name: diff-shades
on:
push:
branches: [main]
paths: ["src/**", "setup.*", "pyproject.toml", ".github/workflows/*"]
paths: ["src/**", "pyproject.toml", ".github/workflows/*"]

pull_request:
paths: ["src/**", "setup.*", "pyproject.toml", ".github/workflows/*"]
paths: ["src/**", "pyproject.toml", ".github/workflows/*"]

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
Expand Down Expand Up @@ -64,7 +64,6 @@ jobs:
run: |
python -m pip install https://github.com/ichard26/diff-shades/archive/stable.zip
python -m pip install click packaging urllib3
python -m pip install -r .github/mypyc-requirements.txt
# After checking out old revisions, this might not exist so we'll use a copy.
cat scripts/diff_shades_gha_helper.py > helper.py
git config user.name "diff-shades-gha"
Expand All @@ -81,10 +80,10 @@ jobs:
if: steps.baseline-cache.outputs.cache-hit != 'true'
env:
GITHUB_TOKEN: ${{ github.token }}
HATCH_BUILD_HOOKS_ENABLE: "1"
run: >
${{ matrix.baseline-setup-cmd }}
&& python setup.py --use-mypyc bdist_wheel
&& python -m pip install dist/*.whl && rm build dist -r
&& python -m pip install . && rm dist -r
- name: Analyze baseline revision
if: steps.baseline-cache.outputs.cache-hit != 'true'
Expand All @@ -95,10 +94,10 @@ jobs:
- name: Build and install target revision
env:
GITHUB_TOKEN: ${{ github.token }}
HATCH_BUILD_HOOKS_ENABLE: "1"
run: >
${{ matrix.target-setup-cmd }}
&& python setup.py --use-mypyc bdist_wheel
&& python -m pip install dist/*.whl
&& python -m pip install .
- name: Analyze target revision
run: >
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/fuzz.yml
Expand Up @@ -22,7 +22,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"]
python-version: ["3.7", "3.8", "3.9", "3.10"]

steps:
- uses: actions/checkout@v3
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Expand Up @@ -31,7 +31,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.6", "3.7", "3.8", "3.9", "3.10", "pypy-3.7", "pypy-3.8"]
python-version: ["3.7", "3.8", "3.9", "3.10", "pypy-3.7", "pypy-3.8"]
os: [ubuntu-latest, macOS-latest, windows-latest]

steps:
Expand Down
2 changes: 2 additions & 0 deletions CHANGES.md
Expand Up @@ -69,6 +69,8 @@

<!-- Changes to how Black is packaged, such as dependency requirements -->

- Hatchling is now used as the build backend. (#3233)

### Parser

<!-- Changes to the parser or to version autodetection -->
Expand Down
1 change: 0 additions & 1 deletion MANIFEST.in

This file was deleted.

7 changes: 4 additions & 3 deletions docs/usage_and_configuration/the_basics.md
Expand Up @@ -204,9 +204,10 @@ code in compliance with many other _Black_ formatted projects.

[PEP 518](https://www.python.org/dev/peps/pep-0518/) defines `pyproject.toml` as a
configuration file to store build system requirements for Python projects. With the help
of tools like [Poetry](https://python-poetry.org/) or
[Flit](https://flit.readthedocs.io/en/latest/) it can fully replace the need for
`setup.py` and `setup.cfg` files.
of tools like [Poetry](https://python-poetry.org/),
[Flit](https://flit.readthedocs.io/en/latest/), or
[Hatch](https://hatch.pypa.io/latest/) it can fully replace the need for `setup.py` and
`setup.cfg` files.

### Where _Black_ looks for the file

Expand Down
136 changes: 116 additions & 20 deletions pyproject.toml
Expand Up @@ -7,7 +7,7 @@

[tool.black]
line-length = 88
target-version = ['py36', 'py37', 'py38']
target-version = ['py37', 'py38']
include = '\.pyi?$'
extend-exclude = '''
/(
Expand All @@ -26,8 +26,119 @@ preview = true
# NOTE: You don't need this in your own Black configuration.

[build-system]
requires = ["setuptools>=45.0", "setuptools_scm[toml]>=6.3.1", "wheel"]
build-backend = "setuptools.build_meta"
requires = ["hatchling>=1.8.0", "hatch-vcs", "hatch-fancy-pypi-readme"]
build-backend = "hatchling.build"

[project]
name = "black"
description = "The uncompromising code formatter."
license = "MIT"
requires-python = ">=3.7"
authors = [
{ name = "Łukasz Langa", email = "lukasz@langa.pl" },
]
keywords = [
"automation",
"autopep8",
"formatter",
"gofmt",
"pyfmt",
"rustfmt",
"yapf",
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Software Development :: Quality Assurance",
]
dependencies = [
"click>=8.0.0",
"mypy_extensions>=0.4.3",
"pathspec>=0.9.0",
"platformdirs>=2",
"tomli>=1.1.0; python_full_version < '3.11.0a7'",
"typed-ast>=1.4.2; python_version < '3.8' and implementation_name == 'cpython'",
"typing_extensions>=3.10.0.0; python_version < '3.10'",
]
dynamic = ["readme", "version"]

[project.optional-dependencies]
colorama = [
"colorama>=0.4.3",
]
d = [
"aiohttp>=3.7.4",
]
jupyter = [
"ipython>=7.8.0",
"tokenize-rt>=3.2.0",
]
uvloop = [
"uvloop>=0.15.2",
]

[project.scripts]
black = "black:patched_main"
blackd = "blackd:patched_main [d]"

[project.urls]
Changelog = "https://github.com/psf/black/blob/main/CHANGES.md"
Homepage = "https://github.com/psf/black"

[tool.hatch.metadata.hooks.fancy-pypi-readme]
content-type = "text/markdown"

[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]
path = "README.md"

[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]
path = "CHANGES.md"

[tool.hatch.version]
source = "vcs"

[tool.hatch.build.hooks.vcs]
version-file = "src/_black_version.py"
template = '''
version = "{version}"
'''

[tool.hatch.build.targets.wheel]
only-include = ["src"]
sources = ["src"]

[tool.hatch.build.targets.wheel.hooks.mypyc]
enable-by-default = false
dependencies = [
"hatch-mypyc>=0.13.0",
# Required stubs to be removed when the packages support PEP 561 themselves
"types-typed-ast>=1.4.2",
]
require-runtime-dependencies = true
exclude = [
# Not performance sensitive, so save bytes + compilation time:
"/src/blib2to3/__init__.py",
"/src/blib2to3/pgen2/__init__.py",
"/src/black/output.py",
"/src/black/concurrency.py",
"/src/black/files.py",
"/src/black/report.py",
# Breaks the test suite when compiled (and is also useless):
"/src/black/debug.py",
# Compiled modules can't be run directly and that's a problem here:
"/src/black/__main__.py",
]
options = { debug_level = "0" }

[tool.cibuildwheel]
build-verbosity = 1
Expand All @@ -37,7 +148,6 @@ build-verbosity = 1
# - OS: Linux (no musl), Windows, and macOS
build = "cp3*-*"
skip = ["*-manylinux_i686", "*-musllinux_*", "*-win32", "pp-*"]
before-build = ["pip install -r .github/mypyc-requirements.txt"]
# This is the bare minimum needed to run the test suite. Pulling in the full
# test_requirements.txt would download a bunch of other packages not necessary
# here and would slow down the testing step a fair bit.
Expand All @@ -49,38 +159,24 @@ test-extras = ["d"," jupyter"]
test-skip = ["*-macosx_arm64", "*-macosx_universal2:arm64"]

[tool.cibuildwheel.environment]
BLACK_USE_MYPYC = "1"
HATCH_BUILD_HOOKS_ENABLE = "1"
MYPYC_OPT_LEVEL = "3"
MYPYC_DEBUG_LEVEL = "0"
# The dependencies required to build wheels with mypyc aren't specified in
# [build-system].requires so we'll have to manage the build environment ourselves.
PIP_NO_BUILD_ISOLATION = "no"

[tool.cibuildwheel.linux]
before-build = [
"pip install -r .github/mypyc-requirements.txt",
"yum install -y clang",
]
# Newer images break the builds, not sure why. We'll need to investigate more later.
manylinux-x86_64-image = "quay.io/pypa/manylinux2014_x86_64:2021-11-20-f410d11"

[tool.cibuildwheel.linux.environment]
BLACK_USE_MYPYC = "1"
HATCH_BUILD_HOOKS_ENABLE = "1"
MYPYC_OPT_LEVEL = "3"
MYPYC_DEBUG_LEVEL = "0"
PIP_NO_BUILD_ISOLATION = "no"
# Black needs Clang to compile successfully on Linux.
CC = "clang"

[tool.cibuildwheel.windows]
# For some reason, (compiled) mypyc is failing to start up with "ImportError: DLL load
# failed: A dynamic link library (DLL) initialization routine failed." on Windows for
# at least 3.6. Let's just use interpreted mypy[c].
# See also: https://github.com/mypyc/mypyc/issues/819.
before-build = [
"pip install -r .github/mypyc-requirements.txt --no-binary mypy"
]

[tool.isort]
atomic = true
profile = "black"
Expand Down
3 changes: 0 additions & 3 deletions setup.cfg

This file was deleted.

0 comments on commit c95a6d3

Please sign in to comment.