Try cibuildwheels on Windows #363
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build | |
on: | |
push: | |
tags: | |
- v* | |
branches: | |
- master | |
pull_request: | |
branches: | |
- master | |
concurrency: | |
group: build-${{ github.head_ref }} | |
cancel-in-progress: true | |
env: | |
COINCURVE_UPSTREAM_REF: 1ad5185cd42c0636104129fcc9f6a4bf9c67cc40 | |
COINCURVE_IGNORE_SYSTEM_LIB: '1' | |
CIBW_BEFORE_ALL_MACOS: ./.github/scripts/install-macos-build-deps.sh | |
CIBW_ENVIRONMENT_PASS_LINUX: > | |
COINCURVE_UPSTREAM_REF | |
COINCURVE_IGNORE_SYSTEM_LIB | |
# CIBW_TEST_COMMAND: > | |
# python -c | |
# "from coincurve import PrivateKey; | |
# a=PrivateKey(); | |
# b=PrivateKey(); | |
# assert a.ecdh(b.public_key.format())==b.ecdh(a.public_key.format()) | |
# " | |
CIBW_TEST_REQUIRES: pytest pytest-benchmark | |
CIBW_TEST_COMMAND: python -m pytest {project}/tests | |
CIBW_TEST_SKIP: "*-macosx_arm64" | |
CIBW_SKIP: > | |
pp* | |
jobs: | |
test: | |
name: Test latest Python | |
runs-on: ubuntu-latest | |
env: | |
PYTHON_VERSION: '3.12' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ env.PYTHON_VERSION }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
- name: Upgrade Python packaging tools | |
run: pip install --upgrade pip setuptools wheel | |
- name: Show runner information | |
run: | | |
python --version | |
pip --version | |
- name: Install dependencies | |
run: ./.github/scripts/install-test-deps.sh | |
- name: Check style and typing | |
run: tox -e lint,typing | |
- name: Run tests | |
run: tox -e ${PYTHON_VERSION} | |
- name: Run benchmarks | |
run: tox -e bench | |
- name: Upload coverage | |
run: codecov -X gcov | |
linux-wheels-standard: | |
name: Build Linux wheels | |
needs: | |
- test | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
CIBW_TEST_REQUIRES: pytest pytest-benchmark | |
CIBW_TEST_COMMAND: python -m pytest {project}/tests | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: artifacts | |
path: wheelhouse/*.whl | |
if-no-files-found: error | |
windows-wheels-standard: | |
name: Build Windows wheels | |
needs: | |
- test | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v3 | |
- name: Remove libsecp256k1 | |
run: | | |
Get-ChildItem -Recurse -Filter *.egg-info | Remove-Item -Force | |
- uses: conda-incubator/setup-miniconda@11b562958363ec5770fef326fe8ef0366f8cbf8a # v3.0.1 | |
with: | |
auto-update-conda: true | |
python-version: "3.12" | |
- name: Install build dependencies | |
run: conda install -y m2-autoconf m2-automake-wrapper m2-base m2-bash m2-libtool m2-m4 m2-gzip m2-make m2-sed m2-tar pkg-config | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
# CIBW_BEFORE_ALL: choco install -y --no-progress --no-color msys2 pkgconfiglite | |
CIBW_BEFORE_TEST_WINDOWS: bash {project}/.github/scripts/build-minimal-windows-image.sh 312 | |
CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: bash {project}/.github/repair-windows-wheels.sh {wheel} {dest_dir} | |
CIBW_TEST_COMMAND_WINDOWS: bash {project}/.github/scripts/test-windows-wheels.sh 312 | |
CIBW_TEST_REQUIRES: pytest pytest-benchmark | |
CIBW_TEST_COMMAND: python -m pytest {project}/tests | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: artifacts | |
path: wheelhouse/*.whl | |
if-no-files-found: error | |
macos-wheels-x86-64: | |
name: Build macOS wheels | |
needs: | |
- test | |
runs-on: macos-12 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
CIBW_ARCHS_MACOS: x86_64 | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: artifacts | |
path: wheelhouse/*.whl | |
if-no-files-found: error | |
macos-wheels-arm: | |
name: Build macOS wheels for ARM | |
needs: | |
- test | |
runs-on: macos-12 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
CIBW_ARCHS_MACOS: arm64 | |
COINCURVE_CROSS_HOST: aarch64-apple-darwin | |
CFLAGS: -target arm64-apple-macos11 | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: artifacts | |
path: wheelhouse/*.whl | |
if-no-files-found: error | |
windows-wheels-and-sdist: | |
name: Build Windows wheels and source distribution | |
needs: | |
- test | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install build dependencies | |
run: python -m pip install --upgrade cffi pytest | |
- name: Build source distribution | |
run: python setup.py sdist | |
- name: Build Windows wheels | |
run: ./.github/scripts/build-windows-wheels.sh | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: artifacts | |
path: dist/* | |
if-no-files-found: error | |
linux-wheels-arm: | |
name: Build Linux wheels for ARM | |
needs: | |
- test | |
runs-on: ubuntu-20.04 | |
if: > | |
github.event_name == 'push' | |
&& | |
(github.ref == 'refs/heads/master' || startsWith(github.event.ref, 'refs/tags')) | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: arm64 | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
CIBW_ARCHS_LINUX: aarch64 | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: artifacts | |
path: wheelhouse/*.whl | |
if-no-files-found: error | |
publish: | |
name: Publish release | |
needs: | |
- linux-wheels-standard | |
- macos-wheels-x86-64 | |
- macos-wheels-arm | |
- windows-wheels-and-sdist | |
- linux-wheels-arm | |
runs-on: ubuntu-latest | |
if: > | |
github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: | |
name: artifacts | |
path: dist | |
- name: Push build artifacts to PyPI | |
uses: pypa/[email protected] | |
with: | |
skip_existing: true | |
user: __token__ | |
password: ${{ secrets.PYPI_API_TOKEN }} |