diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 00000000..cabc1e76
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,40 @@
+name: Release
+
+on:
+ workflow_dispatch:
+ pull_request:
+ release:
+ types:
+ - published
+
+jobs:
+ dist:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Build SDist and wheel
+ run: pipx run build
+
+ - uses: actions/upload-artifact@v2
+ with:
+ path: dist/*
+
+ - name: Check metadata
+ run: pipx run twine check dist/*
+
+ publish:
+ needs: [dist]
+ runs-on: ubuntu-latest
+ if: github.event_name == 'release' && github.event.action == 'published'
+
+ steps:
+ - uses: actions/download-artifact@v2
+ with:
+ name: artifact
+ path: dist
+
+ - uses: pypa/gh-action-pypi-publish@v1.4.2
+ with:
+ user: __token__
+ password: ${{ secrets.pypi_password }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 97b2bedd..0dcd29cf 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -22,6 +22,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: pre-commit/action@v2.0.3
+ - run: pipx run nox -s check_manifest
test:
name: Test cibuildwheel on ${{ matrix.os }}
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index d03660a9..7c7a6b45 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -27,23 +27,23 @@ repos:
# Autoremoves unused imports
- repo: https://github.com/hadialqattan/pycln
- rev: v1.0.3
+ rev: v1.1.0
hooks:
- id: pycln
args: [--config=pyproject.toml]
- repo: https://github.com/PyCQA/isort
- rev: 5.9.3
+ rev: 5.10.0
hooks:
- id: isort
- repo: https://github.com/psf/black
- rev: 21.9b0
+ rev: 21.10b0
hooks:
- id: black
- repo: https://github.com/asottile/setup-cfg-fmt
- rev: v1.18.0
+ rev: v1.19.0
hooks:
- id: setup-cfg-fmt
@@ -54,7 +54,9 @@ repos:
exclude: ^(bin|cibuildwheel/resources|docs)/.*py$
args: ["--python-version=3.6", "--scripts-are-modules", "--show-error-codes"]
additional_dependencies: &mypy-dependencies
+ - nox
- packaging>=21.0
+ - pygithub
- rich
- tomli
- types-certifi
@@ -63,14 +65,15 @@ repos:
- types-jinja2
- types-pyyaml
- types-requests
+ - bracex
- id: mypy
name: mypy 3.7+ on bin/
- files: ^((bin|docs)/.*py|noxfile.py)$
+ files: ^((bin|docs)/.*py)$
args: ["--python-version=3.7", "--scripts-are-modules", "--show-error-codes"]
additional_dependencies: *mypy-dependencies
- repo: https://github.com/asottile/yesqa
- rev: v1.2.3
+ rev: v1.3.0
hooks:
- id: yesqa
additional_dependencies: &flake8-dependencies
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 00000000..6fc0b394
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,6 @@
+recursive-include cibuildwheel *.cfg
+recursive-include cibuildwheel *.in
+recursive-include cibuildwheel *.py
+recursive-include cibuildwheel *.toml
+recursive-include cibuildwheel *.txt
+recursive-include cibuildwheel *.typed
diff --git a/README.md b/README.md
index adface6d..9dffb47d 100644
--- a/README.md
+++ b/README.md
@@ -85,7 +85,7 @@ jobs:
- uses: actions/setup-python@v2
- name: Install cibuildwheel
- run: python -m pip install cibuildwheel==2.2.0b1
+ run: python -m pip install cibuildwheel==2.2.2
- name: Build wheels
run: python -m cibuildwheel --output-dir wheelhouse
@@ -189,24 +189,39 @@ Changelog
-### v2.2.0 (prerelease)
+### v2.2.2
-_Currently in prerelease. The below release notes will be condensed into a single entry on final release._
+_26 October 2021_
-_v2.2.0b1 (19 October 2021)_
+- 🐛 Fix bug in the GitHub Action step causing a syntax error (#895)
-- 🌟 TOML option overrides. This provides much greater flexibility in configuration via pyproject.toml.
+### v2.2.1
+
+_26 October 2021_
+
+- 🛠 Added a `config-file` option on the GitHub Action to specify something other than pyproject.toml in your GitHub Workflow file. (#883)
+- 🐛 Fix missing resources in sdist and released wheel on PyPI. We've also made some internal changes to our release processes to make them more reliable. (#893, #894)
+
+### v2.2.0
+
+_22 October 2021_
+
+- 🌟 Added support for [musllinux](https://www.python.org/dev/peps/pep-0656/). Support for this new wheel format lets projects build wheels for Linux distributions that use [musl libc](https://musl.libc.org/), notably, [Alpine](https://alpinelinux.org/) Docker containers. (#768)
+
+ Musllinux builds are enabled by default. If you're not ready to build musllinux, add `*-musllinux_*` to your [`CIBW_SKIP`/`skip`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip) option. Or, you might have to make some changes to your options - to simplify that process, you can use...
+
+- 🌟 TOML option overrides! This provides much greater flexibility in configuration via pyproject.toml. (#854)
You can now set build options for any subset of your builds using a match pattern. So, for example, you can customise CPython 3.8 builds with an override on `cp38-*` or musllinux builds by selecting `*musllinux*`. Check out [the docs](https://cibuildwheel.readthedocs.io/en/latest/options/#overrides) for more info on the specifics.
-_v2.2.0a1 (23 September 2021)_
+- 🛠 Added support for building PyPy wheels on macOS 11 CI runners. (#875)
-- 🌟 Added support for [musllinux](https://www.python.org/dev/peps/pep-0656/). Support for this new wheel format lets projects build wheels for Linux distributions that use [musl libc](https://musl.libc.org/), notably, [Alpine](https://alpinelinux.org/) Docker containers.
-
- Musllinux builds are enabled by default. To disable them on your project, add `*-musllinux_*` to your [`CIBW_SKIP`/`skip`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip)
- option. (#768)
- 🛠 Setting an empty string for the [`CIBW_*_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) option will now fallthrough to the config file or cibuildwheel's default, rather than causing an error. This makes the option easier to use in CI build matricies. (#829)
+- 🛠 Support for TOML 1.0 when reading config files, via the `tomli` package. (#876)
+
+Note: This version is not available on PyPI due to some missing resources in the release files. Please use a later version instead.
+
### v2.1.3
_6 October 2021_
@@ -221,21 +236,6 @@ _14 September 2021_
- 📚 Multiple docs updates
- 🐛 Improved warnings when built binaries are bundled into the container on Linux. (#807)
-### v2.1.1
-
-_7 August 2021_
-
-- ✨ Corresponding with the release of CPython 3.10.0rc1, which is ABI stable, cibuildwheel now builds CPython 3.10 by default - without the CIBW_PRERELEASE_PYTHONS flag.
-
-Note: v2.1.0 was a bad release, it was yanked from PyPI.
-
-### v2.0.1
-
-_25 July 2021_
-
-- 📚 Docs improvements (#767)
-- 🛠 Dependency updates, including delocate 0.9.0.
-
---
diff --git a/action.yml b/action.yml
index 4c910ef3..703cb33a 100644
--- a/action.yml
+++ b/action.yml
@@ -9,6 +9,10 @@ inputs:
description: 'Folder to place the outputs in, defaults to "wheelhouse"'
required: false
default: wheelhouse
+ config-file:
+ description: 'File containing the config, defaults to {package}/pyproject.toml'
+ required: false
+ default: ''
branding:
icon: package
color: yellow
@@ -24,5 +28,6 @@ runs:
cibuildwheel
${{ inputs.package-dir }}
--output-dir ${{ inputs.output-dir }}
+ --config-file "${{ inputs.config-file }}"
2>&1
shell: bash
diff --git a/bin/inspect_all_known_projects.py b/bin/inspect_all_known_projects.py
index ccbc9404..542e42b8 100755
--- a/bin/inspect_all_known_projects.py
+++ b/bin/inspect_all_known_projects.py
@@ -7,7 +7,7 @@ from typing import Iterator
import click
import yaml
-from ghapi.core import GhApi, HTTP404NotFoundError # type: ignore[import]
+from ghapi.core import GhApi, HTTP404NotFoundError
from rich import print
from cibuildwheel.projectfiles import Analyzer
diff --git a/cibuildwheel/__init__.py b/cibuildwheel/__init__.py
index 218eb8fd..ba51cedf 100644
--- a/cibuildwheel/__init__.py
+++ b/cibuildwheel/__init__.py
@@ -1 +1 @@
-__version__ = "2.2.0b1"
+__version__ = "2.2.2"
diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py
index c6a532f9..9c1af0f1 100644
--- a/cibuildwheel/__main__.py
+++ b/cibuildwheel/__main__.py
@@ -57,14 +57,15 @@ def main() -> None:
parser.add_argument(
"--output-dir",
- help="Destination folder for the wheels.",
+ help="Destination folder for the wheels. Default: wheelhouse.",
)
parser.add_argument(
"--config-file",
+ default="",
help="""
- TOML config file for cibuildwheel. Defaults to pyproject.toml, but
- can be overridden with this option.
+ TOML config file. Default: "", meaning {package}/pyproject.toml,
+ if it exists.
""",
)
@@ -162,7 +163,7 @@ def main() -> None:
os.environ["CIBUILDWHEEL"] = "1"
# Python is buffering by default when running on the CI platforms, giving problems interleaving subprocess call output with unflushed calls to 'print'
- sys.stdout = Unbuffered(sys.stdout) # type: ignore[no-untyped-call,assignment]
+ sys.stdout = Unbuffered(sys.stdout) # type: ignore[assignment]
print_preamble(platform=platform, options=options, identifiers=identifiers)
diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py
index eb00493e..4031e038 100644
--- a/cibuildwheel/linux.py
+++ b/cibuildwheel/linux.py
@@ -1,15 +1,14 @@
import subprocess
import sys
import textwrap
-from collections import OrderedDict
from pathlib import Path, PurePath
-from typing import Iterator, List, NamedTuple, Set
+from typing import Iterator, List, NamedTuple, Set, Tuple
from .architecture import Architecture
from .docker_container import DockerContainer
from .logger import log
from .options import Options
-from .typing import PathOrStr, assert_never
+from .typing import OrderedDict, PathOrStr, assert_never
from .util import (
BuildSelector,
NonPlatformWheelError,
@@ -80,7 +79,7 @@ def get_build_steps(
Groups PythonConfigurations into BuildSteps. Each BuildStep represents a
separate Docker container.
"""
- steps: OrderedDict[tuple, BuildStep] = OrderedDict() # type: ignore[type-arg]
+ steps = OrderedDict[Tuple[str, str, str], BuildStep]()
for config in python_configurations:
_, platform_tag = config.identifier.split("-", 1)
diff --git a/cibuildwheel/options.py b/cibuildwheel/options.py
index 902b64fa..9a207e9e 100644
--- a/cibuildwheel/options.py
+++ b/cibuildwheel/options.py
@@ -42,7 +42,7 @@ class CommandLineArguments:
platform: Literal["auto", "linux", "macos", "windows"]
archs: Optional[str]
output_dir: Optional[str]
- config_file: Optional[str]
+ config_file: str
package_dir: str
print_build_identifiers: bool
allow_empty: bool
@@ -335,8 +335,9 @@ class Options:
def config_file_path(self) -> Optional[Path]:
args = self.command_line_arguments
- if args.config_file is not None:
+ if args.config_file:
return Path(args.config_file.format(package=args.package_dir))
+
# return pyproject.toml, if it's available
pyproject_toml_path = Path(args.package_dir) / "pyproject.toml"
if pyproject_toml_path.exists():
diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml
index 10ac3c7f..78efd3f8 100644
--- a/cibuildwheel/resources/build-platforms.toml
+++ b/cibuildwheel/resources/build-platforms.toml
@@ -11,6 +11,7 @@ python_configurations = [
{ identifier = "cp39-manylinux_i686", version = "3.9", path_str = "/opt/python/cp39-cp39" },
{ identifier = "cp310-manylinux_i686", version = "3.10", path_str = "/opt/python/cp310-cp310" },
{ identifier = "pp37-manylinux_x86_64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
+ { identifier = "pp38-manylinux_x86_64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
{ identifier = "cp36-manylinux_aarch64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
{ identifier = "cp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
{ identifier = "cp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
@@ -27,7 +28,9 @@ python_configurations = [
{ identifier = "cp39-manylinux_s390x", version = "3.9", path_str = "/opt/python/cp39-cp39" },
{ identifier = "cp310-manylinux_s390x", version = "3.10", path_str = "/opt/python/cp310-cp310" },
{ identifier = "pp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
+ { identifier = "pp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
{ identifier = "pp37-manylinux_i686", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
+ { identifier = "pp38-manylinux_i686", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
{ identifier = "cp36-musllinux_x86_64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
{ identifier = "cp37-musllinux_x86_64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
{ identifier = "cp38-musllinux_x86_64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
@@ -62,13 +65,14 @@ python_configurations = [
{ identifier = "cp38-macosx_x86_64", version = "3.8", url = "https://www.python.org/ftp/python/3.8.10/python-3.8.10-macosx10.9.pkg" },
{ identifier = "cp38-macosx_arm64", version = "3.8", url = "https://www.python.org/ftp/python/3.8.10/python-3.8.10-macosx10.9.pkg" },
{ identifier = "cp38-macosx_universal2", version = "3.8", url = "https://www.python.org/ftp/python/3.8.10/python-3.8.10-macosx10.9.pkg" },
- { identifier = "cp39-macosx_x86_64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.7/python-3.9.7-macos11.pkg" },
- { identifier = "cp39-macosx_arm64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.7/python-3.9.7-macos11.pkg" },
- { identifier = "cp39-macosx_universal2", version = "3.9", url = "https://www.python.org/ftp/python/3.9.7/python-3.9.7-macos11.pkg" },
- { identifier = "cp310-macosx_x86_64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0-macos11.pkg" },
- { identifier = "cp310-macosx_arm64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0-macos11.pkg" },
- { identifier = "cp310-macosx_universal2", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0-macos11.pkg" },
- { identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.5-osx64.tar.bz2" },
+ { identifier = "cp39-macosx_x86_64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.8/python-3.9.8-macos11.pkg" },
+ { identifier = "cp39-macosx_arm64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.8/python-3.9.8-macos11.pkg" },
+ { identifier = "cp39-macosx_universal2", version = "3.9", url = "https://www.python.org/ftp/python/3.9.8/python-3.9.8-macos11.pkg" },
+ { identifier = "cp310-macosx_x86_64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0post2-macos11.pkg" },
+ { identifier = "cp310-macosx_arm64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0post2-macos11.pkg" },
+ { identifier = "cp310-macosx_universal2", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0post2-macos11.pkg" },
+ { identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.7-osx64.tar.bz2" },
+ { identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.7-osx64.tar.bz2" },
]
[windows]
@@ -79,9 +83,10 @@ python_configurations = [
{ identifier = "cp37-win_amd64", version = "3.7.9", arch = "64" },
{ identifier = "cp38-win32", version = "3.8.10", arch = "32" },
{ identifier = "cp38-win_amd64", version = "3.8.10", arch = "64" },
- { identifier = "cp39-win32", version = "3.9.7", arch = "32" },
- { identifier = "cp39-win_amd64", version = "3.9.7", arch = "64" },
+ { identifier = "cp39-win32", version = "3.9.8", arch = "32" },
+ { identifier = "cp39-win_amd64", version = "3.9.8", arch = "64" },
{ identifier = "cp310-win32", version = "3.10.0", arch = "32" },
{ identifier = "cp310-win_amd64", version = "3.10.0", arch = "64" },
- { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.5-win64.zip" },
+ { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.7-win64.zip" },
+ { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.7-win64.zip" },
]
diff --git a/cibuildwheel/resources/constraints-python36.txt b/cibuildwheel/resources/constraints-python36.txt
index 36380a9d..997c0348 100644
--- a/cibuildwheel/resources/constraints-python36.txt
+++ b/cibuildwheel/resources/constraints-python36.txt
@@ -4,19 +4,19 @@
#
# bin/update_dependencies.py
#
-backports.entry-points-selectable==1.1.0
+backports.entry-points-selectable==1.1.1
# via virtualenv
delocate==0.10.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.3
# via virtualenv
-filelock==3.3.0
+filelock==3.3.2
# via virtualenv
-importlib-metadata==4.8.1
+importlib-metadata==4.8.2
# via
# backports.entry-points-selectable
# virtualenv
-importlib-resources==5.2.2
+importlib-resources==5.4.0
# via virtualenv
platformdirs==2.4.0
# via virtualenv
@@ -26,7 +26,7 @@ typing-extensions==3.10.0.2
# via
# delocate
# importlib-metadata
-virtualenv==20.8.1
+virtualenv==20.10.0
# via -r cibuildwheel/resources/constraints.in
wheel==0.37.0
# via
@@ -38,7 +38,7 @@ zipp==3.6.0
# importlib-resources
# The following packages are considered to be unsafe in a requirements file:
-pip==21.2.4
+pip==21.3.1
# via -r cibuildwheel/resources/constraints.in
-setuptools==58.2.0
+setuptools==58.5.3
# via -r cibuildwheel/resources/constraints.in
diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt
index 9dfe3a88..ef7f2d11 100644
--- a/cibuildwheel/resources/constraints-python37.txt
+++ b/cibuildwheel/resources/constraints-python37.txt
@@ -4,15 +4,15 @@
#
# bin/update_dependencies.py
#
-backports.entry-points-selectable==1.1.0
+backports.entry-points-selectable==1.1.1
# via virtualenv
delocate==0.10.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.3
# via virtualenv
-filelock==3.3.0
+filelock==3.3.2
# via virtualenv
-importlib-metadata==4.8.1
+importlib-metadata==4.8.2
# via
# backports.entry-points-selectable
# virtualenv
@@ -24,7 +24,7 @@ typing-extensions==3.10.0.2
# via
# delocate
# importlib-metadata
-virtualenv==20.8.1
+virtualenv==20.10.0
# via -r cibuildwheel/resources/constraints.in
wheel==0.37.0
# via
@@ -34,7 +34,7 @@ zipp==3.6.0
# via importlib-metadata
# The following packages are considered to be unsafe in a requirements file:
-pip==21.2.4
+pip==21.3.1
# via -r cibuildwheel/resources/constraints.in
-setuptools==58.2.0
+setuptools==58.5.3
# via -r cibuildwheel/resources/constraints.in
diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt
index c3bd567c..1e964eb2 100644
--- a/cibuildwheel/resources/constraints-python38.txt
+++ b/cibuildwheel/resources/constraints-python38.txt
@@ -4,13 +4,13 @@
#
# bin/update_dependencies.py
#
-backports.entry-points-selectable==1.1.0
+backports.entry-points-selectable==1.1.1
# via virtualenv
delocate==0.10.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.3
# via virtualenv
-filelock==3.3.0
+filelock==3.3.2
# via virtualenv
platformdirs==2.4.0
# via virtualenv
@@ -18,7 +18,7 @@ six==1.16.0
# via virtualenv
typing-extensions==3.10.0.2
# via delocate
-virtualenv==20.8.1
+virtualenv==20.10.0
# via -r cibuildwheel/resources/constraints.in
wheel==0.37.0
# via
@@ -26,7 +26,7 @@ wheel==0.37.0
# delocate
# The following packages are considered to be unsafe in a requirements file:
-pip==21.2.4
+pip==21.3.1
# via -r cibuildwheel/resources/constraints.in
-setuptools==58.2.0
+setuptools==58.5.3
# via -r cibuildwheel/resources/constraints.in
diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt
index d2824450..ae417444 100644
--- a/cibuildwheel/resources/constraints-python39.txt
+++ b/cibuildwheel/resources/constraints-python39.txt
@@ -4,13 +4,13 @@
#
# bin/update_dependencies.py
#
-backports.entry-points-selectable==1.1.0
+backports.entry-points-selectable==1.1.1
# via virtualenv
delocate==0.10.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.3
# via virtualenv
-filelock==3.3.0
+filelock==3.3.2
# via virtualenv
platformdirs==2.4.0
# via virtualenv
@@ -18,7 +18,7 @@ six==1.16.0
# via virtualenv
typing-extensions==3.10.0.2
# via delocate
-virtualenv==20.8.1
+virtualenv==20.10.0
# via -r cibuildwheel/resources/constraints.in
wheel==0.37.0
# via
@@ -26,7 +26,7 @@ wheel==0.37.0
# delocate
# The following packages are considered to be unsafe in a requirements file:
-pip==21.2.4
+pip==21.3.1
# via -r cibuildwheel/resources/constraints.in
-setuptools==58.2.0
+setuptools==58.5.3
# via -r cibuildwheel/resources/constraints.in
diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt
index d2824450..ae417444 100644
--- a/cibuildwheel/resources/constraints.txt
+++ b/cibuildwheel/resources/constraints.txt
@@ -4,13 +4,13 @@
#
# bin/update_dependencies.py
#
-backports.entry-points-selectable==1.1.0
+backports.entry-points-selectable==1.1.1
# via virtualenv
delocate==0.10.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.3
# via virtualenv
-filelock==3.3.0
+filelock==3.3.2
# via virtualenv
platformdirs==2.4.0
# via virtualenv
@@ -18,7 +18,7 @@ six==1.16.0
# via virtualenv
typing-extensions==3.10.0.2
# via delocate
-virtualenv==20.8.1
+virtualenv==20.10.0
# via -r cibuildwheel/resources/constraints.in
wheel==0.37.0
# via
@@ -26,7 +26,7 @@ wheel==0.37.0
# delocate
# The following packages are considered to be unsafe in a requirements file:
-pip==21.2.4
+pip==21.3.1
# via -r cibuildwheel/resources/constraints.in
-setuptools==58.2.0
+setuptools==58.5.3
# via -r cibuildwheel/resources/constraints.in
diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg
index b889af8d..e8cf043f 100644
--- a/cibuildwheel/resources/pinned_docker_images.cfg
+++ b/cibuildwheel/resources/pinned_docker_images.cfg
@@ -1,43 +1,43 @@
[x86_64]
-manylinux1 = quay.io/pypa/manylinux1_x86_64:2021-10-10-fee0ae1
-manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2021-10-10-790306f
-manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2021-10-10-790306f
-manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2021-10-10-790306f
-musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2021-10-10-790306f
+manylinux1 = quay.io/pypa/manylinux1_x86_64:2021-11-07-f38ff36
+manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2021-11-07-28723f3
+manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2021-11-07-28723f3
+manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2021-11-07-28723f3
+musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2021-11-07-28723f3
[i686]
-manylinux1 = quay.io/pypa/manylinux1_i686:2021-10-10-fee0ae1
-manylinux2010 = quay.io/pypa/manylinux2010_i686:2021-10-10-790306f
-manylinux2014 = quay.io/pypa/manylinux2014_i686:2021-10-10-790306f
-manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2021-10-10-790306f
-musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2021-10-10-790306f
+manylinux1 = quay.io/pypa/manylinux1_i686:2021-11-07-f38ff36
+manylinux2010 = quay.io/pypa/manylinux2010_i686:2021-11-07-28723f3
+manylinux2014 = quay.io/pypa/manylinux2014_i686:2021-11-07-28723f3
+manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2021-11-07-28723f3
+musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2021-11-07-28723f3
[pypy_x86_64]
-manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2021-10-10-790306f
-manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2021-10-10-790306f
-manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2021-10-10-790306f
+manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2021-11-07-28723f3
+manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2021-11-07-28723f3
+manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2021-11-07-28723f3
[pypy_i686]
-manylinux2010 = quay.io/pypa/manylinux2010_i686:2021-10-10-790306f
-manylinux2014 = quay.io/pypa/manylinux2014_i686:2021-10-10-790306f
-manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2021-10-10-790306f
+manylinux2010 = quay.io/pypa/manylinux2010_i686:2021-11-07-28723f3
+manylinux2014 = quay.io/pypa/manylinux2014_i686:2021-11-07-28723f3
+manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2021-11-07-28723f3
[aarch64]
-manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2021-10-10-790306f
-manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2021-10-10-790306f
-musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2021-10-10-790306f
+manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2021-11-07-28723f3
+manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2021-11-07-28723f3
+musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2021-11-07-28723f3
[ppc64le]
-manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2021-10-10-790306f
-manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2021-10-10-790306f
-musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2021-10-10-790306f
+manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2021-11-07-28723f3
+manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2021-11-07-28723f3
+musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2021-11-07-28723f3
[s390x]
-manylinux2014 = quay.io/pypa/manylinux2014_s390x:2021-10-10-790306f
-manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2021-10-10-790306f
-musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2021-10-10-790306f
+manylinux2014 = quay.io/pypa/manylinux2014_s390x:2021-11-07-28723f3
+manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2021-11-07-28723f3
+musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2021-11-07-28723f3
[pypy_aarch64]
-manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2021-10-10-790306f
-manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2021-10-10-790306f
+manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2021-11-07-28723f3
+manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2021-11-07-28723f3
diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py
index 0e411351..5cf5d7f2 100644
--- a/cibuildwheel/util.py
+++ b/cibuildwheel/util.py
@@ -12,7 +12,7 @@ import urllib.request
from enum import Enum
from pathlib import Path
from time import sleep
-from typing import Any, Dict, Iterator, List, Optional
+from typing import Any, Dict, Iterable, Iterator, List, Optional, TextIO
import bracex
import certifi
@@ -126,9 +126,9 @@ def selector_matches(patterns: str, string: str) -> bool:
expansion. For example, 'cp{36,37}-*' would match either of 'cp36-*' or
'cp37-*'.
"""
- patterns_list: List[str] = patterns.split()
- patterns_list = itertools.chain.from_iterable(bracex.expand(p) for p in patterns_list) # type: ignore[assignment]
- return any(fnmatch.fnmatch(string, pat) for pat in patterns_list)
+ patterns_list = patterns.split()
+ expanded_patterns = itertools.chain.from_iterable(bracex.expand(p) for p in patterns_list)
+ return any(fnmatch.fnmatch(string, pat) for pat in expanded_patterns)
class IdentifierSelector:
@@ -203,18 +203,18 @@ class TestSelector(IdentifierSelector):
# Taken from https://stackoverflow.com/a/107717
class Unbuffered:
- def __init__(self, stream): # type: ignore[no-untyped-def]
+ def __init__(self, stream: TextIO) -> None:
self.stream = stream
- def write(self, data): # type: ignore[no-untyped-def]
+ def write(self, data: str) -> None:
self.stream.write(data)
self.stream.flush()
- def writelines(self, data): # type: ignore[no-untyped-def]
+ def writelines(self, data: Iterable[str]) -> None:
self.stream.writelines(data)
self.stream.flush()
- def __getattr__(self, attr): # type: ignore[no-untyped-def]
+ def __getattr__(self, attr: str) -> Any:
return getattr(self.stream, attr)
diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py
index bd5ad085..0a429c6d 100644
--- a/cibuildwheel/windows.py
+++ b/cibuildwheel/windows.py
@@ -112,7 +112,6 @@ def install_pypy(version: str, arch: str, url: str) -> Path:
download(url, pypy_zip)
# Extract to the parent directory because the zip file still contains a directory
extract_zip(pypy_zip, installation_path.parent)
- (installation_path / "python.exe").symlink_to(installation_path / "pypy3.exe")
return installation_path
diff --git a/docs/changelog.md b/docs/changelog.md
index 478c9865..3a9b2247 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -2,24 +2,39 @@
title: Changelog
---
-### v2.2.0 (prerelease)
+### v2.2.2
-_Currently in prerelease. The below release notes will be condensed into a single entry on final release._
+_26 October 2021_
-_v2.2.0b1 (19 October 2021)_
+- 🐛 Fix bug in the GitHub Action step causing a syntax error (#895)
-- 🌟 TOML option overrides. This provides much greater flexibility in configuration via pyproject.toml.
+### v2.2.1
+
+_26 October 2021_
+
+- 🛠 Added a `config-file` option on the GitHub Action to specify something other than pyproject.toml in your GitHub Workflow file. (#883)
+- 🐛 Fix missing resources in sdist and released wheel on PyPI. We've also made some internal changes to our release processes to make them more reliable. (#893, #894)
+
+### v2.2.0
+
+_22 October 2021_
+
+- 🌟 Added support for [musllinux](https://www.python.org/dev/peps/pep-0656/). Support for this new wheel format lets projects build wheels for Linux distributions that use [musl libc](https://musl.libc.org/), notably, [Alpine](https://alpinelinux.org/) Docker containers. (#768)
+
+ Musllinux builds are enabled by default. If you're not ready to build musllinux, add `*-musllinux_*` to your [`CIBW_SKIP`/`skip`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip) option. Or, you might have to make some changes to your options - to simplify that process, you can use...
+
+- 🌟 TOML option overrides! This provides much greater flexibility in configuration via pyproject.toml. (#854)
You can now set build options for any subset of your builds using a match pattern. So, for example, you can customise CPython 3.8 builds with an override on `cp38-*` or musllinux builds by selecting `*musllinux*`. Check out [the docs](https://cibuildwheel.readthedocs.io/en/latest/options/#overrides) for more info on the specifics.
-_v2.2.0a1 (23 September 2021)_
+- 🛠 Added support for building PyPy wheels on macOS 11 CI runners. (#875)
-- 🌟 Added support for [musllinux](https://www.python.org/dev/peps/pep-0656/). Support for this new wheel format lets projects build wheels for Linux distributions that use [musl libc](https://musl.libc.org/), notably, [Alpine](https://alpinelinux.org/) Docker containers.
-
- Musllinux builds are enabled by default. To disable them on your project, add `*-musllinux_*` to your [`CIBW_SKIP`/`skip`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip)
- option. (#768)
- 🛠 Setting an empty string for the [`CIBW_*_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) option will now fallthrough to the config file or cibuildwheel's default, rather than causing an error. This makes the option easier to use in CI build matricies. (#829)
+- 🛠 Support for TOML 1.0 when reading config files, via the `tomli` package. (#876)
+
+Note: This version is not available on PyPI due to some missing resources in the release files. Please use a later version instead.
+
### v2.1.3
_6 October 2021_
@@ -455,7 +470,7 @@ _26 May 2019_
- 🌟 Add support for building on Azure pipelines! This lets you build all
Linux, Mac and Windows wheels on one service, so it promises to be the
easiest to set up! Check out the quickstart in the docs, or
- [cibuildwheel-azure-example](https://github.com/pypa/cibuildwheel-azure-example)
+ [cibuildwheel-azure-example](https://github.com/joerick/cibuildwheel-azure-example)
for an example project. (#126, #132)
- 🛠 Internal change - the end-to-end test projects format was updated, so we
can more precisely assert what should be produced for each one. (#136, #137).
diff --git a/docs/contributing.md b/docs/contributing.md
index 74f93da3..c6a5b930 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -127,12 +127,10 @@ bin/bump_version.py
You'll be prompted to enter the new version number. Update the changelog when prompted. The script will create a 'bump version' commit and version tag.
-Finally, cut the release and upload to PyPI/GitHub.
+Finally, cut the release and push to GitHub.
```bash
-rm -rf dist
-python -m build
-git push && git push --tags && twine upload dist/*
+git push && git push --tags
```
-Then head to https://github.com/pypa/cibuildwheel/releases and create a GitHub release from the new tag, pasting in the changelog entry.
+Then head to https://github.com/pypa/cibuildwheel/releases and create a GitHub release from the new tag, pasting in the changelog entry. Once the release is created inside GitHub, a CI job will create the assets and upload them to PyPI.
diff --git a/docs/data/projects.yml b/docs/data/projects.yml
index 9d5478a9..c22300fb 100644
--- a/docs/data/projects.yml
+++ b/docs/data/projects.yml
@@ -256,8 +256,8 @@
- name: Tokenizer
gh: OpenNMT/Tokenizer
- ci: [github, travisci]
- os: [apple, linux]
+ ci: [github]
+ os: [windows, apple, linux]
- name: matrixprofile
gh: matrix-profile-foundation/matrixprofile
@@ -494,7 +494,7 @@
ci: [github]
os: [apple, linux, windows]
-- name: Pixar OpenTimelineIO
+- name: OpenTimelineIO
gh: PixarAnimationStudios/OpenTimelineIO
ci: [github]
os: [apple, linux, windows]
diff --git a/docs/deliver-to-pypi.md b/docs/deliver-to-pypi.md
index bddeea0f..610fe6e5 100644
--- a/docs/deliver-to-pypi.md
+++ b/docs/deliver-to-pypi.md
@@ -4,15 +4,16 @@ title: Delivering to PyPI
After you've built your wheels, you'll probably want to deliver them to PyPI.
-### Manual method
+## Manual method
-On your development machine, do the following...
+On your development machine, install [pipx](https://pypa.github.io/pipx/) and do the following:
```bash
+# Either download the SDist from your CI, or make it:
# Clear out your 'dist' folder.
rm -rf dist
# Make a source distribution
-python setup.py sdist
+pipx run build --sdist
# 🏃🏻
# Go and download your wheel files from wherever you put them. e.g. your CI
@@ -20,17 +21,77 @@ python setup.py sdist
# 'dist' folder.
# Upload using 'twine' (you may need to 'pip install twine')
-twine upload dist/*
+pipx run twine upload dist/*
```
-### Semi-automatic method using wheelhouse-uploader
+## Automatic method
-Obviously, manual steps are for chumps, so we can automate this a little by using [wheelhouse-uploader](https://github.com/ogrisel/wheelhouse-uploader).
+If you don't need much control over the release of a package, you can set up
+cibuildwheel to deliver the wheels straight to PyPI. You just need to bump the
+version and tag it.
-> Quick note from me - using S3 as a storage didn't work due to a [bug](https://issues.apache.org/jira/browse/LIBCLOUD-792) in libcloud. Feel free to use my fork of that package that fixes the bug `pip install https://github.com/joerick/libcloud/archive/v1.5.0-s3fix.zip`
+### Generic instructions
-### Automatic method
+Make your SDist with the [build](https://github.com/pypa/build) tool, and your wheels with cibuildwheel. If you can make the files available as
+downloadable artifacts, this make testing before releases easier (depending on your CI provider's options). The "publish" job/step should collect the
+files, and then run `twine upload ` (possibly via [pipx](https://github.com/pypa/pipx)); this should only happen on tags or "releases".
-If you don't need much control over the release of a package, you can set up cibuildwheel to deliver the wheels straight to PyPI. This doesn't require anycloud storage to work - you just need to bump the version and tag it.
+### GitHub Actions
-[`examples/travis-ci-deploy.yml`](https://github.com/pypa/cibuildwheel/blob/main/examples/travis-ci-deploy.yml) and [`examples/github-deploy.yml`](https://github.com/pypa/cibuildwheel/blob/main/examples/github-deploy.yml) are example configurations that automatically upload wheels to PyPI. Also check out [this example repo](https://github.com/pypa/cibuildwheel-autopypi-example) for more detailed instructions on how to set this up.
+GitHub actions has pipx in all the runners as a supported package manager, as
+well as several useful actions. Alongside your existing job(s) that runs cibuildwheel to make wheels, you will probably want to build an SDist:
+
+```yaml
+ make_sdist:
+ name: Make SDist
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ fetch-depth: 0 # Optional, use if you use setuptools_scm
+ submodules: true # Optional, use if you have submodules
+
+ - name: Build SDist
+ run: pipx run build --sdist
+
+ - uses: actions/upload-artifact@v2
+ with:
+ path: dist/*.tar.gz
+```
+
+Then, you need to publish the artifacts that the previous jobs have built. This final job should run only on release or tag, depending on your preference. It gathers the artifacts from the sdist and wheel jobs and uploads them to PyPI.
+
+This requires a [PyPI upload token](https://pypi.org/manage/account/token/), stored in your [GitHub repo's secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository) as `pypi_password`.
+
+```yaml
+ upload_all:
+ needs: [build_wheels, make_sdist]
+ runs-on: ubuntu-latest
+ if: github.event_name == 'release' && github.event.action == 'published'
+ steps:
+ - uses: actions/download-artifact@v2
+ with:
+ name: artifact
+ path: dist
+
+ - uses: pypa/gh-action-pypi-publish@v1.4.2
+ with:
+ user: __token__
+ password: ${{ secrets.pypi_password }}
+```
+
+You should use dependabot to keep the publish action up to date. In the above
+example, the same name (the default, "artifact" is used for all upload-artifact
+runs, so we can just download all of the in one step into a common directory.
+
+See
+[`examples/github-deploy.yml`](https://github.com/pypa/cibuildwheel/blob/main/examples/github-deploy.yml)
+for an example configuration that automatically upload wheels to PyPI. Also see
+[scikit-hep.org/developer/gha_wheels](https://scikit-hep.org/developer/gha_wheels)
+for a complete guide.
+
+### TravisCI
+
+See
+[`examples/travis-ci-deploy.yml`](https://github.com/pypa/cibuildwheel/blob/main/examples/travis-ci-deploy.yml)
+for an example configuration.
diff --git a/docs/faq.md b/docs/faq.md
index a5a0738a..9ed27902 100644
--- a/docs/faq.md
+++ b/docs/faq.md
@@ -127,7 +127,7 @@ There are two suggested methods for keeping cibuildwheel up to date that instead
If you use GitHub Actions for builds, you can use cibuildwheel as an action:
```yaml
-uses: pypa/cibuildwheel@v2.2.0b1
+uses: pypa/cibuildwheel@v2.2.2
```
This is a composite step that just runs cibuildwheel using pipx. You can set command-line options as `with:` parameters, and use `env:` as normal.
@@ -153,7 +153,7 @@ The second option, and the only one that supports other CI systems, is using a `
```bash
# requirements-cibw.txt
-cibuildwheel==2.2.0b1
+cibuildwheel==2.2.2
```
Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `.github/dependabot.yml` file could look like this:
diff --git a/docs/options.md b/docs/options.md
index aa625133..3b9aaeb3 100644
--- a/docs/options.md
+++ b/docs/options.md
@@ -208,7 +208,8 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat
| Python 3.8 | cp38-macosx_x86_64
cp38-macosx_universal2
cp38-macosx_arm64 | cp38-win_amd64
cp38-win32 | cp38-manylinux_x86_64
cp38-manylinux_i686
cp38-musllinux_x86_64
cp38-musllinux_i686 | cp38-manylinux_aarch64
cp38-manylinux_ppc64le
cp38-manylinux_s390x
cp38-musllinux_aarch64
cp38-musllinux_ppc64le
cp38-musllinux_s390x |
| Python 3.9 | cp39-macosx_x86_64
cp39-macosx_universal2
cp39-macosx_arm64 | cp39-win_amd64
cp39-win32 | cp39-manylinux_x86_64
cp39-manylinux_i686
cp39-musllinux_x86_64
cp39-musllinux_i686 | cp39-manylinux_aarch64
cp39-manylinux_ppc64le
cp39-manylinux_s390x
cp39-musllinux_aarch64
cp39-musllinux_ppc64le
cp39-musllinux_s390x |
| Python 3.10 | cp310-macosx_x86_64
cp310-macosx_universal2
cp310-macosx_arm64 | cp310-win_amd64
cp310-win32 | cp310-manylinux_x86_64
cp310-manylinux_i686
cp310-musllinux_x86_64
cp310-musllinux_i686 | cp310-manylinux_aarch64
cp310-manylinux_ppc64le
cp310-manylinux_s390x
cp310-musllinux_aarch64
cp310-musllinux_ppc64le
cp310-musllinux_s390x |
-| PyPy3.7 v7.3 | pp37-macosx_x86_64 | pp37-win_amd64 | pp37-manylinux_x86_64 | |
+| PyPy3.7 v7.3 | pp37-macosx_x86_64 | pp37-win_amd64 | pp37-manylinux_x86_64
pp37-manylinux_i686 | pp37-manylinux_aarch64 |
+| PyPy3.8 v7.3 | pp38-macosx_x86_64 | pp38-win_amd64 | pp38-manylinux_x86_64
pp38-manylinux_i686 | pp38-manylinux_aarch64 |
The list of supported and currently selected build identifiers can also be retrieved by passing the `--print-build-identifiers` flag to cibuildwheel.
The format is `python_tag-platform_tag`, with tags similar to those in [PEP 425](https://www.python.org/dev/peps/pep-0425/#details).
diff --git a/docs/setup.md b/docs/setup.md
index 85e935f1..353522f0 100644
--- a/docs/setup.md
+++ b/docs/setup.md
@@ -118,7 +118,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
- uses: actions/checkout@v2
- name: Build wheels
- run: pipx run cibuildwheel==2.2.0b1
+ run: pipx run cibuildwheel==2.2.2
- uses: actions/upload-artifact@v2
with:
@@ -153,7 +153,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
- uses: actions/setup-python@v2
- name: Install cibuildwheel
- run: python -m pip install cibuildwheel==2.2.0b1
+ run: python -m pip install cibuildwheel==2.2.2
- name: Build wheels
run: python -m cibuildwheel --output-dir wheelhouse
diff --git a/docs/working-examples.md b/docs/working-examples.md
index 95a173f8..5a355bac 100644
--- a/docs/working-examples.md
+++ b/docs/working-examples.md
@@ -23,29 +23,29 @@ title: Working examples
| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Image processing library. Uses cibuildwheel to build and test a project that uses Cython with platform-native code. |
| [twisted-iocpsupport][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. |
| [cmake][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
-| [websockets][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Library for building WebSocket servers and clients. Mostly written in Python, with a small C 'speedups' extension module. |
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an in-process SQL OLAP Database Management System |
+| [websockets][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Library for building WebSocket servers and clients. Mostly written in Python, with a small C 'speedups' extension module. |
| [cvxpy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A Python-embedded modeling language for convex optimization problems. |
| [Triton][] | ![github icon][] | ![linux icon][] | Self hosted runners |
| [PyOxidizer][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A modern Python application packaging and distribution tool |
| [pyzmq][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python bindings for zeromq, the networking library. Uses Cython and CFFI. |
| [OpenSpiel][] | ![github icon][] | ![apple icon][] ![linux icon][] | OpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games. |
-| [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy |
| [River][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | 🌊 Online machine learning in Python |
+| [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy |
| [aiortc][] | ![github icon][] | ![apple icon][] ![linux icon][] | WebRTC and ORTC implementation for Python using asyncio. |
| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` |
| [tinyobjloader][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Tiny but powerful single file wavefront obj loader |
| [coverage.py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python |
| [PyCryptodome][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A self-contained cryptographic library for Python |
-| [numexpr][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast numerical array expression evaluator for Python, NumPy, PyTables, pandas, bcolz and more |
| [Dependency Injector][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Dependency injection framework for Python, uses Windows TravisCI |
+| [numexpr][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast numerical array expression evaluator for Python, NumPy, PyTables, pandas, bcolz and more |
| [PyYAML][] | ![github icon][] | ![apple icon][] | Canonical source repository for PyYAML |
| [h5py][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | HDF5 for Python -- The h5py package is a Pythonic interface to the HDF5 binary data format. |
| [PyAV][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. |
| [OpenColorIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A color management framework for visual effects and animation. |
| [PyTables][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python package to manage extremely large amounts of data |
| [Line Profiler][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Line-by-line profiling for Python |
-| [Pixar OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. |
+| [OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. |
| [ruptures][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Extensive Cython + NumPy [pyproject.toml](https://github.com/deepcharles/ruptures/blob/master/pyproject.toml) example. |
| [pikepdf][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python library for reading and writing PDF, powered by qpdf |
| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python |
@@ -70,23 +70,23 @@ title: Working examples
| [CTranslate2][] | ![github icon][] | ![apple icon][] ![linux icon][] | Includes libraries from the [Intel oneAPI toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/base-toolkit.html). The Linux wheels also include CUDA libraries for GPU execution. |
| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 |
| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq |
-| [Tokenizer][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support |
+| [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support |
| [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python |
| [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. |
| [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. |
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
-| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python |
| [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
+| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python |
| [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. |
| [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms |
| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The interface between FastJet and NumPy |
| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy |
-| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. |
| [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. |
+| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. |
| [ninja][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
-| [GSD][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Cython and NumPy project with 64-bit wheels. |
-| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
| [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. |
+| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
+| [GSD][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Cython and NumPy project with 64-bit wheels. |
| [pyinstrument_cext][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies |
| [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. |
| [CorrectionLib][] | ![github icon][] | ![apple icon][] ![linux icon][] | Structured JSON powered correction library for HEP, designed for the CMS experiment at CERN. |
@@ -108,29 +108,29 @@ title: Working examples
[scikit-image]: https://github.com/scikit-image/scikit-image
[twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport
[cmake]: https://github.com/scikit-build/cmake-python-distributions
-[websockets]: https://github.com/aaugustin/websockets
[duckdb]: https://github.com/duckdb/duckdb
+[websockets]: https://github.com/aaugustin/websockets
[cvxpy]: https://github.com/cvxpy/cvxpy
[Triton]: https://github.com/openai/triton
[PyOxidizer]: https://github.com/indygreg/PyOxidizer
[pyzmq]: https://github.com/zeromq/pyzmq
[OpenSpiel]: https://github.com/deepmind/open_spiel
-[vispy]: https://github.com/vispy/vispy
[River]: https://github.com/online-ml/river
+[vispy]: https://github.com/vispy/vispy
[aiortc]: https://github.com/aiortc/aiortc
[Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python
[tinyobjloader]: https://github.com/tinyobjloader/tinyobjloader
[coverage.py]: https://github.com/nedbat/coveragepy
[PyCryptodome]: https://github.com/Legrandin/pycryptodome
-[numexpr]: https://github.com/pydata/numexpr
[Dependency Injector]: https://github.com/ets-labs/python-dependency-injector
+[numexpr]: https://github.com/pydata/numexpr
[PyYAML]: https://github.com/yaml/pyyaml
[h5py]: https://github.com/h5py/h5py
[PyAV]: https://github.com/PyAV-Org/PyAV
[OpenColorIO]: https://github.com/AcademySoftwareFoundation/OpenColorIO
[PyTables]: https://github.com/PyTables/PyTables
[Line Profiler]: https://github.com/pyutils/line_profiler
-[Pixar OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO
+[OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO
[ruptures]: https://github.com/deepcharles/ruptures
[pikepdf]: https://github.com/pikepdf/pikepdf
[aioquic]: https://github.com/aiortc/aioquic
@@ -160,18 +160,18 @@ title: Working examples
[bx-python]: https://github.com/bxlab/bx-python
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
[iDynTree]: https://github.com/robotology/idyntree
-[pybase64]: https://github.com/mayeut/pybase64
[TgCrypto]: https://github.com/pyrogram/tgcrypto
+[pybase64]: https://github.com/mayeut/pybase64
[etebase-py]: https://github.com/etesync/etebase-py
[fathon]: https://github.com/stfbnc/fathon
[pyjet]: https://github.com/scikit-hep/pyjet
[numpythia]: https://github.com/scikit-hep/numpythia
-[polaroid]: https://github.com/daggy1234/polaroid
[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build
+[polaroid]: https://github.com/daggy1234/polaroid
[ninja]: https://github.com/scikit-build/ninja-python-distributions
-[GSD]: https://github.com/glotzerlab/gsd
-[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
[clang-format]: https://github.com/ssciwr/clang-format-wheel
+[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
+[GSD]: https://github.com/glotzerlab/gsd
[pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext
[xmlstarlet]: https://github.com/dimitern/xmlstarlet
[CorrectionLib]: https://github.com/cms-nanoAOD/correctionlib
@@ -188,90 +188,90 @@ title: Working examples
[apple icon]: data/readme_icons/apple.svg
[linux icon]: data/readme_icons/linux.svg
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/appveyor-minimal.yml b/examples/appveyor-minimal.yml
index 1c49c93c..21f75923 100644
--- a/examples/appveyor-minimal.yml
+++ b/examples/appveyor-minimal.yml
@@ -12,7 +12,7 @@ stack: python 3.7
init:
- cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH%
-install: python -m pip install cibuildwheel==2.2.0b1
+install: python -m pip install cibuildwheel==2.2.2
build_script: python -m cibuildwheel --output-dir wheelhouse
diff --git a/examples/azure-pipelines-minimal.yml b/examples/azure-pipelines-minimal.yml
index 3106615a..232360f9 100644
--- a/examples/azure-pipelines-minimal.yml
+++ b/examples/azure-pipelines-minimal.yml
@@ -6,7 +6,7 @@ jobs:
- bash: |
set -o errexit
python3 -m pip install --upgrade pip
- pip3 install cibuildwheel==2.2.0b1
+ pip3 install cibuildwheel==2.2.2
displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels
@@ -20,7 +20,7 @@ jobs:
- bash: |
set -o errexit
python3 -m pip install --upgrade pip
- python3 -m pip install cibuildwheel==2.2.0b1
+ python3 -m pip install cibuildwheel==2.2.2
displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels
@@ -34,7 +34,7 @@ jobs:
- bash: |
set -o errexit
python -m pip install --upgrade pip
- pip install cibuildwheel==2.2.0b1
+ pip install cibuildwheel==2.2.2
displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels
diff --git a/examples/circleci-minimal.yml b/examples/circleci-minimal.yml
index fda7752a..67388c84 100644
--- a/examples/circleci-minimal.yml
+++ b/examples/circleci-minimal.yml
@@ -11,7 +11,7 @@ jobs:
- run:
name: Build the Linux wheels.
command: |
- pip3 install --user cibuildwheel==2.2.0b1
+ pip3 install --user cibuildwheel==2.2.2
cibuildwheel --output-dir wheelhouse
- store_artifacts:
path: wheelhouse/
@@ -25,7 +25,7 @@ jobs:
- run:
name: Build the OS X wheels.
command: |
- pip3 install cibuildwheel==2.2.0b1
+ pip3 install cibuildwheel==2.2.2
cibuildwheel --output-dir wheelhouse
- store_artifacts:
path: wheelhouse/
diff --git a/examples/github-apple-silicon.yml b/examples/github-apple-silicon.yml
index b042ff11..db4b1156 100644
--- a/examples/github-apple-silicon.yml
+++ b/examples/github-apple-silicon.yml
@@ -10,7 +10,7 @@ jobs:
- uses: actions/checkout@v2
- name: Build wheels
- uses: pypa/cibuildwheel@v2.2.0b1
+ uses: pypa/cibuildwheel@v2.2.2
env:
CIBW_ARCHS_MACOS: x86_64 universal2
diff --git a/examples/github-deploy.yml b/examples/github-deploy.yml
index b9ea8975..ef4ec299 100644
--- a/examples/github-deploy.yml
+++ b/examples/github-deploy.yml
@@ -21,13 +21,8 @@ jobs:
steps:
- uses: actions/checkout@v2
- - uses: actions/setup-python@v2
- name: Install Python
- with:
- python-version: '3.8'
-
- name: Build wheels
- uses: pypa/cibuildwheel@v2.2.0b1
+ uses: pypa/cibuildwheel@v2.2.2
- uses: actions/upload-artifact@v2
with:
@@ -39,13 +34,8 @@ jobs:
steps:
- uses: actions/checkout@v2
- - uses: actions/setup-python@v2
- name: Install Python
- with:
- python-version: '3.8'
-
- name: Build sdist
- run: python setup.py sdist
+ run: pipx run build --sdist
- uses: actions/upload-artifact@v2
with:
diff --git a/examples/github-minimal.yml b/examples/github-minimal.yml
index 4ac0e3b2..17916818 100644
--- a/examples/github-minimal.yml
+++ b/examples/github-minimal.yml
@@ -14,7 +14,7 @@ jobs:
- uses: actions/checkout@v2
- name: Build wheels
- uses: pypa/cibuildwheel@v2.2.0b1
+ uses: pypa/cibuildwheel@v2.2.2
# to supply options, put them in 'env', like:
# env:
# CIBW_SOME_OPTION: value
diff --git a/examples/github-with-qemu.yml b/examples/github-with-qemu.yml
index 63028cbd..3261da5f 100644
--- a/examples/github-with-qemu.yml
+++ b/examples/github-with-qemu.yml
@@ -25,7 +25,7 @@ jobs:
platforms: all
- name: Build wheels
- uses: pypa/cibuildwheel@v2.2.0b1
+ uses: pypa/cibuildwheel@v2.2.2
env:
# configure cibuildwheel to build native archs ('auto'), and some
# emulated ones
diff --git a/examples/gitlab-minimal.yml b/examples/gitlab-minimal.yml
index d7445546..2e8b89ce 100644
--- a/examples/gitlab-minimal.yml
+++ b/examples/gitlab-minimal.yml
@@ -12,7 +12,7 @@ linux:
DOCKER_TLS_CERTDIR: ""
script:
- curl -sSL https://get.docker.com/ | sh
- - python -m pip install cibuildwheel==2.2.0b1
+ - python -m pip install cibuildwheel==2.2.2
- cibuildwheel --output-dir wheelhouse
artifacts:
paths:
diff --git a/examples/travis-ci-deploy.yml b/examples/travis-ci-deploy.yml
index 39c96df1..ae2117e0 100644
--- a/examples/travis-ci-deploy.yml
+++ b/examples/travis-ci-deploy.yml
@@ -19,7 +19,7 @@ jobs:
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
install:
- - python3 -m pip install cibuildwheel==2.2.0b1
+ - python3 -m pip install cibuildwheel==2.2.2
script:
# build the wheels, put them into './wheelhouse'
diff --git a/examples/travis-ci-minimal.yml b/examples/travis-ci-minimal.yml
index 932b460d..173aa4dc 100644
--- a/examples/travis-ci-minimal.yml
+++ b/examples/travis-ci-minimal.yml
@@ -25,7 +25,7 @@ jobs:
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
install:
- - python3 -m pip install cibuildwheel==2.2.0b1
+ - python3 -m pip install cibuildwheel==2.2.2
script:
# build the wheels, put them into './wheelhouse'
diff --git a/examples/travis-ci-test-and-deploy.yml b/examples/travis-ci-test-and-deploy.yml
index a7787b34..cb556385 100644
--- a/examples/travis-ci-test-and-deploy.yml
+++ b/examples/travis-ci-test-and-deploy.yml
@@ -26,7 +26,7 @@ install:
- python3 -m pip install pytest
script:
- - python3 setup.py install
+ - python3 -m pip install .
- pytest
stages:
@@ -48,30 +48,24 @@ jobs:
# Deploy source distribution
- stage: deploy
name: Deploy source distribution
- install: skip
- script: python3 setup.py sdist --formats=gztar
- after_success: |
- python3 -m pip install twine
- python3 -m twine upload --skip-existing dist/*.tar.gz
+ install: python3 -m pip install build twine
+ script: python3 -m build --sdist --formats=gztar
+ after_success: python3 -m twine upload --skip-existing dist/*.tar.gz
# Deploy on linux
- stage: deploy
name: Build and deploy Linux wheels
services: docker
- install: python3 -m pip install cibuildwheel==2.2.0b1
+ install: python3 -m pip install cibuildwheel==2.2.2 twine
script: python3 -m cibuildwheel --output-dir wheelhouse
- after_success: |
- python3 -m pip install twine
- python3 -m twine upload --skip-existing wheelhouse/*.whl
+ after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
# Deploy on windows
- stage: deploy
name: Build and deploy Windows wheels
os: windows
language: shell
- install: python3 -m pip install cibuildwheel==2.2.0b1
+ install: python3 -m pip install cibuildwheel==2.2.2 twine
script: python3 -m cibuildwheel --output-dir wheelhouse
- after_success: |
- python3 -m pip install twine
- python3 -m twine upload --skip-existing wheelhouse/*.whl
+ after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
env:
global:
diff --git a/noxfile.py b/noxfile.py
index 0d4881e5..4ee397c9 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -4,7 +4,7 @@ from pathlib import Path
import nox
-nox.options.sessions = ["lint", "tests"]
+nox.options.sessions = ["lint", "check_manifest", "tests"]
PYTHON_ALL_VERSIONS = ["3.6", "3.7", "3.8", "3.9"]
@@ -34,6 +34,16 @@ def lint(session: nox.Session) -> None:
session.run("pre-commit", "run", "--all-files", *session.posargs)
+@nox.session
+def check_manifest(session: nox.Session) -> None:
+ """
+ Ensure all needed files are included in the manifest.
+ """
+
+ session.install("check-manifest")
+ session.run("check-manifest", *session.posargs)
+
+
@nox.session(python=PYTHON_ALL_VERSIONS)
def update_constraints(session: nox.Session) -> None:
"""
diff --git a/pyproject.toml b/pyproject.toml
index 2789fd27..ab4ed941 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -32,7 +32,8 @@ files = [
"cibuildwheel/*.py",
"test/**/*.py",
"unit_test/**/*.py",
- "bin/*.py"
+ "bin/*.py",
+ "noxfile.py",
]
warn_unused_configs = true
warn_redundant_casts = true
@@ -58,12 +59,25 @@ module = [
"setuptools",
"pytest", # ignored in pre-commit to speed up check
"bashlex",
- "bracex",
"importlib_resources",
- "nox",
- "github",
+ "ghapi.*",
]
ignore_missing_imports = true
[tool.pycln]
all = true
+
+[tool.check-manifest]
+ignore = [
+ ".*",
+ ".circleci/**",
+ "test/**",
+ "unit_test/**",
+ "docs/**",
+ "examples/**",
+ "bin/**",
+ "*.yml",
+ "CI.md", # TODO: can change test/test_ssl and remove this
+ "requirements-dev.txt",
+ "noxfile.py",
+]
diff --git a/setup.cfg b/setup.cfg
index 7f78f04d..4dadd79b 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = cibuildwheel
-version = 2.2.0b1
+version = 2.2.2
description = Build Python wheels on CI with minimal configuration.
long_description = file: README.md
long_description_content_type = text/markdown
@@ -37,7 +37,7 @@ install_requires =
packaging
tomli
dataclasses;python_version < '3.7'
- typing_extensions;python_version < '3.8'
+ typing-extensions>=3.10.0.0;python_version < '3.8'
python_requires = >=3.6
include_package_data = True
zip_safe = False
diff --git a/test/utils.py b/test/utils.py
index 34632c20..97675c7d 100644
--- a/test/utils.py
+++ b/test/utils.py
@@ -130,7 +130,7 @@ def expected_wheels(
python_abi_tags = ["cp36-cp36m", "cp37-cp37m", "cp38-cp38", "cp39-cp39", "cp310-cp310"]
if machine_arch in ["x86_64", "AMD64", "x86", "aarch64"]:
- python_abi_tags += ["pp37-pypy37_pp73"]
+ python_abi_tags += ["pp37-pypy37_pp73", "pp38-pypy38_pp73"]
if platform == "macos" and machine_arch == "arm64":
# currently, arm64 macs are only supported by cp39 & cp310
diff --git a/unit_test/build_selector_test.py b/unit_test/build_selector_test.py
index c99b28f1..7555ab33 100644
--- a/unit_test/build_selector_test.py
+++ b/unit_test/build_selector_test.py
@@ -53,6 +53,9 @@ def test_skip():
assert not build_selector("pp36-manylinux_x86_64")
assert build_selector("pp37-manylinux_x86_64")
+ assert build_selector("pp38-manylinux_x86_64")
+ assert build_selector("pp37-manylinux_i686")
+ assert build_selector("pp38-manylinux_i686")
assert build_selector("cp36-manylinux_x86_64")
assert build_selector("cp37-manylinux_x86_64")
assert not build_selector("cp36-manylinux_i686")
diff --git a/unit_test/option_prepare_test.py b/unit_test/option_prepare_test.py
index cadab279..55d7edb2 100644
--- a/unit_test/option_prepare_test.py
+++ b/unit_test/option_prepare_test.py
@@ -11,7 +11,7 @@ import pytest
from cibuildwheel import linux, util
from cibuildwheel.__main__ import main
-ALL_IDS = {"cp36", "cp37", "cp38", "cp39", "cp310", "pp37"}
+ALL_IDS = {"cp36", "cp37", "cp38", "cp39", "cp310", "pp37", "pp38"}
@pytest.fixture
@@ -132,7 +132,9 @@ before-all = "true"
assert not kwargs["docker"]["simulate_32_bit"]
identifiers = {x.identifier for x in kwargs["platform_configs"]}
- assert identifiers == {f"{x}-manylinux_x86_64" for x in ALL_IDS - {"cp36", "cp310", "pp37"}}
+ assert identifiers == {
+ f"{x}-manylinux_x86_64" for x in ALL_IDS - {"cp36", "cp310", "pp37", "pp38"}
+ }
assert kwargs["options"].build_options("cp37-manylinux_x86_64").before_all == ""
kwargs = build_on_docker.call_args_list[2][1]
@@ -140,7 +142,11 @@ before-all = "true"
assert kwargs["docker"]["cwd"] == Path("/project")
assert not kwargs["docker"]["simulate_32_bit"]
identifiers = {x.identifier for x in kwargs["platform_configs"]}
- assert identifiers == {"cp310-manylinux_x86_64", "pp37-manylinux_x86_64"}
+ assert identifiers == {
+ "cp310-manylinux_x86_64",
+ "pp37-manylinux_x86_64",
+ "pp38-manylinux_x86_64",
+ }
kwargs = build_on_docker.call_args_list[3][1]
assert "quay.io/pypa/manylinux2010_i686" in kwargs["docker"]["docker_image"]
diff --git a/unit_test/utils.py b/unit_test/utils.py
index 0f735916..61833fa2 100644
--- a/unit_test/utils.py
+++ b/unit_test/utils.py
@@ -7,7 +7,7 @@ def get_default_command_line_arguments() -> CommandLineArguments:
defaults.platform = "auto"
defaults.allow_empty = False
defaults.archs = None
- defaults.config_file = None
+ defaults.config_file = ""
defaults.output_dir = None
defaults.package_dir = "."
defaults.prerelease_pythons = False
diff --git a/unit_test/test_wheel_print.py b/unit_test/wheel_print_test.py
similarity index 100%
rename from unit_test/test_wheel_print.py
rename to unit_test/wheel_print_test.py