Skip to content

Commit

Permalink
Use cibuildwheel to build wheels (MagicStack#70)
Browse files Browse the repository at this point in the history
The cibuildwheel infra seems to be mature enough, so use it for the
wheel-building step instead of the homegrown setup.  This gives us
32-bit and ARM wheels for free.

Fixes: MagicStack#44
Fixes: MagicStack#63
  • Loading branch information
elprans committed Aug 7, 2021
1 parent 189b959 commit f671cb4
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 100 deletions.
28 changes: 0 additions & 28 deletions .github/workflows/build-manylinux-wheels.sh

This file was deleted.

83 changes: 32 additions & 51 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
mkdir -p dist/
echo "${VERSION}" > dist/VERSION
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v2
with:
name: dist
path: dist/
Expand All @@ -50,80 +50,61 @@ jobs:
fetch-depth: 50
submodules: true

- name: Set up Python 3.7
uses: actions/setup-python@v2
with:
python-version: 3.7
- uses: actions/setup-python@v2

- name: Build source distribution
run: |
pip install -U setuptools wheel pip
python -m pip install -U setuptools wheel pip
python setup.py sdist
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v2
with:
name: dist
path: dist/
path: dist/*.tar.*

build-wheels:
needs: validate-release-request
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version: [3.5, 3.6, 3.7, 3.8, 3.9]
os: [ubuntu-16.04, macos-latest, windows-latest]
exclude:
# Python 3.5 is unable to properly
# find the recent VS tooling
# https://bugs.python.org/issue30389
- os: windows-latest
python-version: 3.5
os: [ubuntu-latest, macos-latest, windows-latest]
cibw_arch: [auto]
include:
- os: ubuntu-latest
cibw_arch: aarch64
- os: macos-latest
cibw_arch: universal2

steps:
- uses: actions/checkout@v2
with:
fetch-depth: 50
submodules: true

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
- name: Set up QEMU
if: matrix.os == 'ubuntu-latest' && matrix.cibw_arch == 'aarch64'
uses: docker/setup-qemu-action@v1
with:
python-version: ${{ matrix.python-version }}

- name: Install Python Deps
run: |
python -m pip install --upgrade setuptools pip wheel
platforms: arm64

- name: Test
run: |
make debug && make test
- name: Build Wheels (linux)
if: startsWith(matrix.os, 'ubuntu')
uses: docker://quay.io/pypa/manylinux1_x86_64
- uses: pypa/cibuildwheel@v2.0.1
env:
PYTHON_VERSION: ${{ matrix.python-version }}
with:
entrypoint: /github/workspace/.github/workflows/build-manylinux-wheels.sh

- name: Build Wheels (non-linux)
if: "!startsWith(matrix.os, 'ubuntu')"
run: |
make clean
python setup.py bdist_wheel
- name: Test Wheels
shell: bash
if: |
!contains(github.event.pull_request.labels.*.name, 'skip wheel tests')
run: |
pip install --pre immutables -f "file:///${GITHUB_WORKSPACE}/dist"
make -C "${GITHUB_WORKSPACE}" testinstalled
- uses: actions/upload-artifact@v1
CIBW_BUILD_VERBOSITY: 1
CIBW_BUILD: "cp36-* cp37-* cp38-* cp39-*"
CIBW_ARCHS: ${{ matrix.cibw_arch }}
CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux1_x86_64
CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux1_i686
CIBW_SKIP: "pp*"
CIBW_TEST_EXTRAS: "test"
CIBW_TEST_COMMAND: "cd .. && python {project}/tests/__init__.py"
CIBW_TEST_COMMAND_WINDOWS: "cd .. && python {project}\\tests\\__init__.py"
CIBW_TEST_SKIP: "*universal2:arm64"
CIBW_ENVIRONMENT: "IMMU_SKIP_MYPY_TESTS=1"

- uses: actions/upload-artifact@v2
with:
name: dist
path: dist/
path: wheelhouse/*.whl

publish:
needs: [build-sdist, build-wheels]
Expand All @@ -135,7 +116,7 @@ jobs:
fetch-depth: 5
submodules: false

- uses: actions/download-artifact@v1
- uses: actions/download-artifact@v2
with:
name: dist
path: dist/
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ jobs:
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
if: steps.release.outputs.version == 0
env:
PIP_DISABLE_PIP_VERSION_CHECK: 1
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.arch }}
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ __pycache__/
/.coverage
/.mypy_cache
/.venv*
/wheelhouse
45 changes: 24 additions & 21 deletions tests/test_mypy.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
import os
import mypy.test.testcmdline
from mypy.test.helpers import normalize_error_messages


# I'm upset. There's no other way to deal with the little 'defined here'
# notes that mypy emits when passing an unexpected keyword argument
# and at no other time.
def renormalize_error_messages(messages):
messages = [x for x in messages if not x.endswith(' defined here')]
return normalize_error_messages(messages)


mypy.test.testcmdline.normalize_error_messages = renormalize_error_messages


this_file_dir = os.path.dirname(os.path.realpath(__file__))
test_data_prefix = os.path.join(this_file_dir, 'test-data')


class ImmuMypyTest(mypy.test.testcmdline.PythonCmdlineSuite):
data_prefix = test_data_prefix
files = ['check-immu.test']
try:
import mypy.test.testcmdline
from mypy.test.helpers import normalize_error_messages
except (ImportError, AssertionError):
if os.environ.get('IMMU_SKIP_MYPY_TESTS'):
pass
else:
raise
else:
# I'm upset. There's no other way to deal with the little 'defined here'
# notes that mypy emits when passing an unexpected keyword argument
# and at no other time.
def renormalize_error_messages(messages):
messages = [x for x in messages if not x.endswith(' defined here')]
return normalize_error_messages(messages)

mypy.test.testcmdline.normalize_error_messages = renormalize_error_messages

this_file_dir = os.path.dirname(os.path.realpath(__file__))
test_data_prefix = os.path.join(this_file_dir, 'test-data')

class ImmuMypyTest(mypy.test.testcmdline.PythonCmdlineSuite):
data_prefix = test_data_prefix
files = ['check-immu.test']

0 comments on commit f671cb4

Please sign in to comment.