From 21824c06ad22f1206e57530b5f0dadea88319597 Mon Sep 17 00:00:00 2001 From: Jens Vagelpohl Date: Sun, 13 Nov 2022 11:53:51 +0100 Subject: - Add support for building arm64 wheels on macOS. --- .github/workflows/tests.yml | 116 +++++++++++++++++++++++++++++++------------- .meta.toml | 5 +- CHANGES.rst | 2 + appveyor.yml | 8 --- 4 files changed, 89 insertions(+), 42 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 97faf3c..48528bc 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -117,9 +117,9 @@ jobs: steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} ### @@ -134,7 +134,7 @@ jobs: echo "dir=$(pip cache dir)" >>$GITHUB_OUTPUT - name: pip cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ runner.os }}-pip-${{ matrix.python-version }} @@ -147,40 +147,66 @@ jobs: run: | pip install -U pip pip install -U setuptools wheel twine "cffi != 1.15.1" + pip install -U zope.proxy - name: Install Build Dependencies (other Python versions) if: > !startsWith(matrix.python-version, 'pypy-2.7') run: | pip install -U pip pip install -U setuptools wheel twine cffi + pip install -U zope.proxy - - name: Build zope.security (Python 3.10 and 3.11 on MacOS) + - name: Build zope.security (macOS x86_64, Python 3.8+) if: > startsWith(runner.os, 'Mac') - && (startsWith(matrix.python-version, '3.10') - || startsWith(matrix.python-version, '3.11')) + && !(startsWith(matrix.python-version, 'pypy') + || matrix.python-version == '2.7' + || matrix.python-version == '3.5' + || matrix.python-version == '3.6' + || matrix.python-version == '3.7') env: - _PYTHON_HOST_PLATFORM: macosx-11-x86_64 + MACOSX_DEPLOYMENT_TARGET: 10.9 + _PYTHON_HOST_PLATFORM: macosx-10.9-x86_64 + ARCHFLAGS: -arch x86_64 + run: | + # Next, build the wheel *in place*. This helps ccache, and also lets us cache the configure + # output (pip install uses a random temporary directory, making this difficult). + python setup.py build_ext -i + python setup.py bdist_wheel + - name: Build zope.security (macOS arm64, Python 3.8+) + if: > + startsWith(runner.os, 'Mac') + && !(startsWith(matrix.python-version, 'pypy') + || matrix.python-version == '2.7' + || matrix.python-version == '3.5' + || matrix.python-version == '3.6' + || matrix.python-version == '3.7') + env: + MACOSX_DEPLOYMENT_TARGET: 11.0 + _PYTHON_HOST_PLATFORM: macosx-11.0-arm64 + ARCHFLAGS: -arch arm64 run: | # Next, build the wheel *in place*. This helps ccache, and also lets us cache the configure # output (pip install uses a random temporary directory, making this difficult). python setup.py build_ext -i python setup.py bdist_wheel - # Also install it, so that we get dependencies in the (pip) cache. - pip install -U 'faulthandler; python_version == "2.7" and platform_python_implementation == "CPython"' - pip install .[test] - - name: Build zope.security (all other versions) if: > !startsWith(runner.os, 'Mac') - || !(startsWith(matrix.python-version, '3.10') - || startsWith(matrix.python-version, '3.11')) + || startsWith(matrix.python-version, 'pypy') + || matrix.python-version == '2.7' + || matrix.python-version == '3.5' + || matrix.python-version == '3.6' + || matrix.python-version == '3.7' run: | # Next, build the wheel *in place*. This helps ccache, and also lets us cache the configure # output (pip install uses a random temporary directory, making this difficult). python setup.py build_ext -i python setup.py bdist_wheel - # Also install it, so that we get dependencies in the (pip) cache. + + - name: Install zope.security and dependencies + run: | + # Install to collect dependencies into the (pip) cache. pip install -U 'faulthandler; python_version == "2.7" and platform_python_implementation == "CPython"' pip install .[test] @@ -188,8 +214,32 @@ jobs: run: | ls -l dist twine check dist/* - - name: Upload zope.security wheel - uses: actions/upload-artifact@v2 + - name: Upload zope.security wheel (macOS x86_64) + if: > + startsWith(runner.os, 'Mac') + uses: actions/upload-artifact@v3 + with: + name: zope.security-${{ runner.os }}-${{ matrix.python-version }}.whl + path: dist/*x86_64.whl + - name: Upload zope.security wheel (macOS arm64) + if: > + startsWith(runner.os, 'Mac') + && !(startsWith(matrix.python-version, 'pypy') + || matrix.python-version == '2.7' + || matrix.python-version == '3.5' + || matrix.python-version == '3.6' + || matrix.python-version == '3.7') + uses: actions/upload-artifact@v3 + with: + # The arm64 wheel is uploaded with a different name just so it can be + # manually downloaded when desired. The wheel itself *cannot* be tested + # on the GHA runner, which uses x86_64 architecture. + name: zope.security-${{ runner.os }}-${{ matrix.python-version }}-arm64.whl + path: dist/*arm64.whl + - name: Upload zope.security wheel (all other platforms) + if: > + !startsWith(runner.os, 'Mac') + uses: actions/upload-artifact@v3 with: name: zope.security-${{ runner.os }}-${{ matrix.python-version }}.whl path: dist/*whl @@ -235,9 +285,9 @@ jobs: steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} ### @@ -252,7 +302,7 @@ jobs: echo "dir=$(pip cache dir)" >>$GITHUB_OUTPUT - name: pip cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ runner.os }}-pip-${{ matrix.python-version }} @@ -260,7 +310,7 @@ jobs: ${{ runner.os }}-pip- - name: Download zope.security wheel - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: zope.security-${{ runner.os }}-${{ matrix.python-version }}.whl path: dist/ @@ -312,9 +362,9 @@ jobs: steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} ### @@ -329,7 +379,7 @@ jobs: echo "dir=$(pip cache dir)" >>$GITHUB_OUTPUT - name: pip cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ runner.os }}-pip-${{ matrix.python-version }} @@ -337,7 +387,7 @@ jobs: ${{ runner.os }}-pip- - name: Download zope.security wheel - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: zope.security-${{ runner.os }}-${{ matrix.python-version }}.whl path: dist/ @@ -363,9 +413,9 @@ jobs: steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} ### @@ -380,7 +430,7 @@ jobs: echo "dir=$(pip cache dir)" >>$GITHUB_OUTPUT - name: pip cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ runner.os }}-pip-${{ matrix.python-version }} @@ -388,7 +438,7 @@ jobs: ${{ runner.os }}-pip- - name: Download zope.security wheel - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: zope.security-${{ runner.os }}-${{ matrix.python-version }}.whl path: dist/ @@ -416,9 +466,9 @@ jobs: steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} ### @@ -433,7 +483,7 @@ jobs: echo "dir=$(pip cache dir)" >>$GITHUB_OUTPUT - name: pip cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ runner.os }}-pip_manylinux-${{ matrix.image }}-${{ matrix.python-version }} @@ -470,14 +520,14 @@ jobs: bash .manylinux.sh - name: Upload zope.security wheels - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: path: wheelhouse/*whl name: manylinux_${{ matrix.image }}_wheels.zip - name: Restore pip cache permissions run: sudo chown -R $(whoami) ${{ steps.pip-cache.outputs.dir }} - name: Publish package to PyPI - uses: pypa/gh-action-pypi-publish@v1.4.1 + uses: pypa/gh-action-pypi-publish@release/v1 if: > github.event_name == 'push' && startsWith(github.ref, 'refs/tags') diff --git a/.meta.toml b/.meta.toml index d790e6b..c83bb8d 100644 --- a/.meta.toml +++ b/.meta.toml @@ -2,7 +2,7 @@ # https://github.com/zopefoundation/meta/tree/master/config/c-code [meta] template = "c-code" -commit-id = "b4dd6f9ffd3d6a2cde7dc70512c62d4c7ed22cd6" +commit-id = "57e4030390098babcc18db626cc426388394c231" [python] with-appveyor = true @@ -50,6 +50,9 @@ additional-config = [ "- [\"2.7\", \"py27-watch\"]", "- [\"3.7\", \"py37-watch\"]", ] +additional-build-dependencies = [ + "zope.proxy", + ] [appveyor] global-env-vars = [ diff --git a/CHANGES.rst b/CHANGES.rst index 200c912..f76d2c0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,8 @@ 5.6 (unreleased) ================ +- Add support for building arm64 wheels on macOS. + 5.5 (2022-11-06) ================ diff --git a/appveyor.yml b/appveyor.yml index 10a9529..f798e96 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -9,21 +9,13 @@ environment: ZOPE_INTERFACE_STRICT_IRO: 1 matrix: - - python: 27 - python: 27-x64 - - python: 35 - python: 35-x64 - - python: 36 - python: 36-x64 - - python: 37 - python: 37-x64 - - python: 38 - python: 38-x64 - - python: 39 - python: 39-x64 - - python: 310 - python: 310-x64 - - python: 311 - python: 311-x64 install: -- cgit v1.2.1