Skip to content

Fix upload_pypi job in pypi workflow #113

Fix upload_pypi job in pypi workflow

Fix upload_pypi job in pypi workflow #113

Workflow file for this run

name: pypi
on:
workflow_dispatch:
push:
tags:
- "*"
jobs:
build_wheels:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
# https://github.com/actions/runner-images/tree/main
matrix:
os:
[
ubuntu-20.04,
ubuntu-22.04,
windows-2019,
windows-2022,
macos-12,
macos-13,
macos-14,
]
steps:
- uses: actions/checkout@v4
- name: Set up rust
if: matrix.os != 'ubuntu-20.04' && matrix.os != 'ubuntu-22.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-12' || 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'
uses: docker/setup-qemu-action@v3
with:
platforms: all
- name: Build wheels
uses: pypa/[email protected]
timeout-minutes: 720
env:
CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-*"
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
# Fixes delocate.libsana.DelocationError:
# river/stats/_rust_stats.cpython-310-darwin.so has a minimum target of 10.12
MACOSX_DEPLOYMENT_TARGET: 10.12
- uses: actions/upload-artifact@v4
with:
name: artifact-${{ matrix.os }}
path: ./wheelhouse/*.whl
build_sdist:
name: Build source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build River
uses: ./.github/actions/install-env
with:
python-version: "3.13"
- name: Build dist
run: poetry build
- uses: actions/upload-artifact@v4
with:
name: artifact-sdist
path: dist/*.tar.gz
merge_artifacts:
runs-on: ubuntu-latest
needs: [build_wheels, build_sdist]
steps:
- name: Merge Artifacts
uses: actions/upload-artifact/merge@v4
with:
name: artifact
pattern: artifact-*
upload_pypi:
needs: merge_artifacts
runs-on: ubuntu-latest
steps:
- uses: actions/[email protected]
with:
name: artifact
path: dist
- uses: pypa/[email protected]
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}