diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml index a000d7d594..46f231dd63 100644 --- a/.github/workflows/pypi.yml +++ b/.github/workflows/pypi.yml @@ -7,96 +7,106 @@ on: - "*" jobs: - build_wheels: - name: Build wheels on ${{ matrix.os }} - runs-on: ${{ matrix.os }} + build_linux_wheels: + name: Build ${{ matrix.linux_tag }} wheels with cp${{ matrix.python-version }} + runs-on: ubuntu-latest strategy: - # https://github.com/actions/runner-images/tree/main matrix: - os: - [ - ubuntu-latest, - windows-2019, - windows-2022, - macos-13, - macos-14, - ] - + linux_tag: ["manylinux", "musllinux"] + python-version: ["310", "311", "312", "313"] steps: - uses: actions/checkout@v4 - - - name: Set up rust - if: matrix.os != 'ubuntu-20.04' && matrix.os != 'ubuntu-22.04' && matrix.os != 'ubuntu-24.04' - uses: dtolnay/rust-toolchain@stable - with: - toolchain: nightly - - - run: rustup target add aarch64-apple-darwin && rustup target add x86_64-apple-darwin - if: matrix.os == 'macos-13' || matrix.os == 'macos-14' - - - run: rustup toolchain install stable-i686-pc-windows-msvc - if: matrix.os == 'windows-2019' || matrix.os == 'windows-2022' - - - run: rustup target add i686-pc-windows-msvc - if: matrix.os == 'windows-2019' || matrix.os == 'windows-2022' - - name: Set up QEMU - if: matrix.os == 'ubuntu-20.04' || matrix.os == 'ubuntu-22.04' || matrix.os == 'ubuntu-24.04' uses: docker/setup-qemu-action@v3 with: platforms: all - - name: Build wheels uses: pypa/cibuildwheel@v2.22.0 timeout-minutes: 720 env: - CIBW_BUILD_VERBOSITY: 2 - CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-*" + CIBW_BUILD: "cp${{ matrix.python-version }}-${{ matrix.linux_tag }}_*" CIBW_ARCHS_LINUX: "x86_64 i686 aarch64" - # CIBW_ARCHS_MACOS: "x86_64 arm64" - CIBW_ARCHS_MACOS: "universal2" - # We don't build ARM64 wheels yet because there's a Rust issue - CIBW_ARCHS_WINDOWS: "AMD64 x86" - # Rust nighlty doesn't seem to be available for musl linux on i686 CIBW_SKIP: "*-musllinux_i686" - - # arm64 and universal2 wheels are tagged with x86_64 because there's an issue with Poetry - # More information here: https://cibuildwheel.readthedocs.io/en/stable/faq/#how-to-cross-compile (CTRL + F "poetry") - # https://github.com/pypa/cibuildwheel/issues/1415 - CIBW_REPAIR_WHEEL_COMMAND_MACOS: > - ls {dest_dir} && - delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel} && - for file in {dest_dir}/*.whl ; do mv $file ${file//x86_64/universal2} ; done - CIBW_MANYLINUX_X86_64_IMAGE: "manylinux2014" CIBW_MANYLINUX_I686_IMAGE: "manylinux2014" CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux2014" - CIBW_MANYLINUX_PYPY_X86_64_IMAGE: "manylinux2014" - CIBW_MANYLINUX_PYPY_I686_IMAGE: "manylinux2014" - CIBW_MANYLINUX_PYPY_AARCH64_IMAGE: "manylinux2014" - CIBW_MUSLLINUX_X86_64_IMAGE: "musllinux_1_1" CIBW_MUSLLINUX_I686_IMAGE: "musllinux_1_1" CIBW_MUSLLINUX_AARCH64_IMAGE: "musllinux_1_1" - CIBW_ENVIRONMENT: 'PATH="$HOME/.cargo/bin:$PATH"' - # Fix the following error: error: cargo rustc --lib --message-format=json-render-diagnostics --manifest-path Cargo.toml --release -v --features pyo3/extension-module -- --crate-type cdylibfailed with code -9 - # You need to set a second environment variable CARGO_NET_GIT_FETCH_WITH_CLI="true" for linux environments - # Solutio found here: https://github.com/rust-lang/cargo/issues/10583 CIBW_ENVIRONMENT_LINUX: 'PATH="$HOME/.cargo/bin:$PATH" CARGO_NET_GIT_FETCH_WITH_CLI="true"' - CIBW_ENVIRONMENT_WINDOWS: 'PATH="$UserProfile\.cargo\bin;$PATH"' - CIBW_BEFORE_BUILD: > rustup default nightly && rustup show CIBW_BEFORE_BUILD_LINUX: > curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain=nightly --profile=minimal -y && rustup show + - uses: actions/upload-artifact@v4 + with: + name: artifact-${{ matrix.linux_tag }}-cp${{ matrix.python-version }} + path: ./wheelhouse/*.whl - # Fixes delocate.libsana.DelocationError: - # river/stats/_rust_stats.cpython-310-darwin.so has a minimum target of 10.12 + build_macos_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macos-13, macos-14] + steps: + - uses: actions/checkout@v4 + - name: Set up rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: nightly + - run: rustup target add aarch64-apple-darwin && rustup target add x86_64-apple-darwin + - name: Build wheels + uses: pypa/cibuildwheel@v2.22.0 + timeout-minutes: 720 + env: + CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-*" + CIBW_ARCHS_MACOS: "universal2" + # arm64 and universal2 wheels are tagged with x86_64 because there's an issue with Poetry + # More information here: https://cibuildwheel.readthedocs.io/en/stable/faq/#how-to-cross-compile (CTRL + F "poetry") + # https://github.com/pypa/cibuildwheel/issues/1415 + CIBW_REPAIR_WHEEL_COMMAND_MACOS: > + ls {dest_dir} && + delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel} && + for file in {dest_dir}/*.whl ; do mv $file ${file//x86_64/universal2} ; done + CIBW_ENVIRONMENT: 'PATH="$HOME/.cargo/bin:$PATH"' + CIBW_BEFORE_BUILD: > + rustup default nightly && + rustup show MACOSX_DEPLOYMENT_TARGET: 10.13 + - uses: actions/upload-artifact@v4 + with: + name: artifact-${{ matrix.os }} + path: ./wheelhouse/*.whl + build_windows_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-2019, windows-2022] + steps: + - uses: actions/checkout@v4 + - name: Set up rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: nightly + - run: rustup toolchain install stable-i686-pc-windows-msvc + - run: rustup target add i686-pc-windows-msvc + - name: Build wheels + uses: pypa/cibuildwheel@v2.22.0 + timeout-minutes: 720 + env: + CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-*" + CIBW_ARCHS_WINDOWS: "AMD64 x86" + CIBW_ENVIRONMENT: 'PATH="$HOME/.cargo/bin:$PATH"' + CIBW_ENVIRONMENT_WINDOWS: 'PATH="$UserProfile\.cargo\bin;$PATH"' + CIBW_BEFORE_BUILD: > + rustup default nightly && + rustup show - uses: actions/upload-artifact@v4 with: name: artifact-${{ matrix.os }} @@ -104,6 +114,8 @@ jobs: build_sdist: name: Build source distribution + # Can't use more than 12 jobs in parallel + needs: [build_macos_wheels] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -123,7 +135,7 @@ jobs: merge_artifacts: runs-on: ubuntu-latest - needs: [build_wheels, build_sdist] + needs: [build_linux_wheels, build_macos_wheels, build_windows_wheels, build_sdist] steps: - name: Merge Artifacts uses: actions/upload-artifact/merge@v4