From 66807d9e584f64b7cb5821ed90aa03c1c76e49d5 Mon Sep 17 00:00:00 2001 From: Richard Kiss Date: Sun, 4 Feb 2024 18:18:59 -0800 Subject: [PATCH] cibuildwheel --- .github/workflows/build_wheels.yml | 324 ++--------------------------- 1 file changed, 17 insertions(+), 307 deletions(-) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index fd1703a..541e4d8 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -1,320 +1,30 @@ -name: Test & Release +name: Build on: [push, pull_request] -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -env: - PACKAGE_NAME: pycoin_rs - PYTHON_VERSION: "3.7" # to build abi3 wheels - jobs: - macos: - runs-on: macos-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: ${{ env.PYTHON_VERSION }} - architecture: x64 - - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - profile: minimal - default: true - - name: Build wheels - x86_64 - uses: messense/maturin-action@v1 - with: - target: x86_64 - args: --release --out dist --sdist - maturin-version: "v0.14.3" - - name: Install built wheel - x86_64 - run: | - pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall - pip install pytest - pytest -v - - name: Build wheels - universal2 - uses: messense/maturin-action@v1 - with: - args: --release --universal2 --out dist - maturin-version: "v0.14.3" - - name: Install built wheel - universal2 - run: | - pip install dist/${{ env.PACKAGE_NAME }}-*universal2.whl --force-reinstall - pip install pytest - pytest -v - - name: Upload wheels - uses: actions/upload-artifact@v2 - with: - name: wheels - path: dist - - windows: - runs-on: windows-latest + build_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} strategy: matrix: - target: [x64, x86] - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: ${{ env.PYTHON_VERSION }} - architecture: ${{ matrix.target }} - - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - profile: minimal - default: true - - name: Build wheels - uses: messense/maturin-action@v1 - with: - target: ${{ matrix.target }} - args: --release --out dist - maturin-version: "v0.14.3" - - name: Install built wheel - shell: bash - run: | - python -m pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall - pip install pytest - python -m pytest -v - - name: Upload wheels - uses: actions/upload-artifact@v2 - with: - name: wheels - path: dist + os: [ubuntu-20.04, windows-2019, macos-11] - linux: - runs-on: ubuntu-latest - strategy: - matrix: - target: [x86_64, i686] steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: ${{ env.PYTHON_VERSION }} - architecture: x64 - - name: Build wheels - uses: messense/maturin-action@v1 - with: - target: ${{ matrix.target }} - manylinux: auto - args: --release --out dist - maturin-version: "v0.14.3" - - name: Install built wheel - if: matrix.target == 'x86_64' - run: | - pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall - pip install pytest - pytest -v - - name: Upload wheels - uses: actions/upload-artifact@v2 - with: - name: wheels - path: dist + - uses: actions/checkout@v4 - linux-cross: - runs-on: ubuntu-latest - strategy: - matrix: - target: [aarch64, armv7, s390x, ppc64le, ppc64] - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: ${{ env.PYTHON_VERSION }} - - name: Build wheels - uses: messense/maturin-action@v1 - with: - target: ${{ matrix.target }} - manylinux: auto - args: --release --out dist - maturin-version: "v0.14.3" - - uses: uraimo/run-on-arch-action@v2.0.5 - if: matrix.target != 'ppc64' - name: Install built wheel - with: - arch: ${{ matrix.target }} - distro: ubuntu20.04 - githubToken: ${{ github.token }} - install: | - apt-get update - apt-get install -y --no-install-recommends python3 python3-pip - pip3 install -U pip - run: | - pip3 install ${{ env.PACKAGE_NAME }} --no-index --find-links dist/ --force-reinstall - pip install pytest - pytest -v - - name: Upload wheels - uses: actions/upload-artifact@v2 - with: - name: wheels - path: dist + - uses: actions-rust-lang/setup-rust-toolchain@v1 + if: ${{ !startsWith(matrix.os, 'ubuntu') }} - musllinux: - runs-on: ubuntu-latest - strategy: - matrix: - target: - - x86_64-unknown-linux-musl - - i686-unknown-linux-musl - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: ${{ env.PYTHON_VERSION }} - architecture: x64 - - name: Build wheels - uses: messense/maturin-action@v1 - with: - target: ${{ matrix.target }} - manylinux: musllinux_1_2 - args: --release --out dist - maturin-version: "v0.14.3" - - name: Install built wheel - if: matrix.target == 'x86_64-unknown-linux-musl' - uses: addnab/docker-run-action@v3 - with: - image: alpine:latest - options: -v ${{ github.workspace }}:/io -w /io - run: | - apk add py3-pip - python3 -m venv venv - . venv/bin/activate - pip3 install -U pip pytest - pip3 install ${{ env.PACKAGE_NAME }} --no-index --find-links /io/dist/ --force-reinstall - python3 -m pytest - - name: Upload wheels - uses: actions/upload-artifact@v2 - with: - name: wheels - path: dist - - musllinux-cross: - runs-on: ubuntu-latest - strategy: - matrix: - platform: - - target: aarch64-unknown-linux-musl - arch: aarch64 - - target: armv7-unknown-linux-musleabihf - arch: armv7 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: ${{ env.PYTHON_VERSION }} - name: Build wheels - uses: messense/maturin-action@v1 - with: - target: ${{ matrix.platform.target }} - manylinux: musllinux_1_2 - args: --release --out dist - maturin-version: "v0.14.3" - - uses: uraimo/run-on-arch-action@master - name: Install built wheel - with: - arch: ${{ matrix.platform.arch }} - distro: alpine_latest - githubToken: ${{ github.token }} - install: | - apk add py3-pip - python3 -m venv venv - . venv/bin/activate - pip3 install -U pip pytest - run: | - pip3 install ${{ env.PACKAGE_NAME }} --no-index --find-links dist/ --force-reinstall - python3 -m pytest - - name: Upload wheels - uses: actions/upload-artifact@v2 - with: - name: wheels - path: dist - - pypy: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest] - target: [x86_64, aarch64] - python-version: - - '3.7' - - '3.8' - - '3.9' - exclude: - - os: macos-latest - target: aarch64 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: pypy${{ matrix.python-version }} - - name: Build wheels - uses: messense/maturin-action@v1 - with: - maturin-version: "v0.14.3" - target: ${{ matrix.target }} - manylinux: auto - args: --release --out dist -i pypy${{ matrix.python-version }} - - name: Install built wheel - if: matrix.target == 'x86_64' - run: | - pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall - pip install pytest - pytest -v - - name: Upload wheels - uses: actions/upload-artifact@v2 - with: - name: wheels - path: dist + uses: pypa/cibuildwheel@v2.16.2 + env: + CIBW_TEST_REQUIRES: pytest + CIBW_TEST_COMMAND: "pytest {project}/tests" + CIBW_BEFORE_BUILD_LINUX: "curl -o rustup.sh --proto '=https' --tlsv1.2 https://sh.rustup.rs && sh ./rustup.sh -y || apk add --no-cache rust cargo" + CIBW_ENVIRONMENT: PATH=$PATH:$HOME/.cargo/bin - lint: - runs-on: ubuntu-latest - strategy: - matrix: - # Lint on earliest and latest - python: ["3.7", "3.x"] - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: "3.x" - - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + - uses: actions/upload-artifact@v4 with: - toolchain: stable - profile: minimal - default: true - - name: Lint - run: | - cargo fmt && cargo clippy - release: - name: Release - runs-on: ubuntu-latest - needs: - - lint - - macos - - windows - - linux - - linux-cross - - musllinux - - musllinux-cross - - pypy - if: ${{ github.ref == 'refs/heads/main' }} - steps: - - uses: actions/download-artifact@v2 - with: - name: wheels - - uses: actions/setup-python@v2 - - name: Publish to PyPi - env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} - run: | - pip install --upgrade twine - twine upload --skip-existing * + name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} + path: ./wheelhouse/*.whl