raise minimum python version to 3.8 and drop typing_extensions #888
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: CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} | |
cancel-in-progress: true | |
jobs: | |
fmt: | |
runs-on: "ubuntu-latest" | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.x" | |
- run: pip install black | |
- run: black --check . | |
mypy: | |
runs-on: "ubuntu-latest" | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.x" | |
- run: pip install nox | |
- run: nox -s mypy | |
pytest: | |
runs-on: "ubuntu-latest" | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.x" | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@stable | |
- run: pip install nox | |
- run: nox -s test | |
build: | |
name: ${{ matrix.python-version }} ${{ matrix.platform.os }}-${{ matrix.platform.python-architecture }} | |
runs-on: ${{ matrix.platform.os }} | |
strategy: | |
# If one platform fails, allow the rest to keep testing if `CI-no-fail-fast` label is present | |
fail-fast: ${{ !contains(github.event.pull_request.labels.*.name, 'CI-no-fail-fast') }} | |
matrix: | |
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12-dev", pypy-3.8, pypy-3.9] | |
platform: [ | |
{ os: "macos-latest", python-architecture: "x64", rust-target: "x86_64-apple-darwin" }, | |
{ os: "ubuntu-latest", python-architecture: "x64", rust-target: "x86_64-unknown-linux-gnu" }, | |
{ os: "windows-latest", python-architecture: "x64", rust-target: "x86_64-pc-windows-msvc" }, | |
{ os: "windows-latest", python-architecture: "x86", rust-target: "i686-pc-windows-msvc" }, | |
] | |
exclude: | |
# No 32-bit pypy 3.8 on Windows | |
- python-version: pypy-3.8 | |
platform: { os: "windows-latest", python-architecture: "x86" } | |
# No 32-bit pypy 3.9 on Windows | |
- python-version: pypy-3.9 | |
platform: { os: "windows-latest", python-architecture: "x86" } | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
architecture: ${{ matrix.platform.python-architecture }} | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.platform.rust-target }} | |
- name: Install Rust aarch64-apple-darwin target | |
if: matrix.platform.os == 'macos-latest' | |
run: rustup target add aarch64-apple-darwin | |
- name: Install test dependencies | |
run: pip install --upgrade nox | |
- name: Build package | |
run: pip install -e . | |
- name: Test examples | |
shell: bash | |
env: | |
PYTHON: ${{ matrix.python-version }} | |
run: nox -s test-examples | |
- name: Test macOS universal2 | |
if: matrix.platform.os == 'macos-latest' && !startsWith(matrix.python-version, 'pypy') | |
shell: bash | |
env: | |
DEVELOPER_DIR: /Applications/Xcode.app/Contents/Developer | |
MACOSX_DEPLOYMENT_TARGET: '10.9' | |
ARCHFLAGS: -arch x86_64 -arch arm64 | |
PYO3_CROSS_LIB_DIR: /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib | |
run: | | |
cd examples/namespace_package | |
pip install build wheel | |
python -m build --no-isolation | |
ls -l dist/ | |
pip install --force-reinstall dist/namespace_package*_universal2.whl | |
cd - | |
python -c "from namespace_package import rust; assert rust.rust_func() == 14" | |
python -c "from namespace_package import python; assert python.python_func() == 15" | |
- name: Test sdist vendor Rust crates | |
shell: bash | |
run: nox -s test-sdist-vendor | |
env: | |
CARGO_BUILD_TARGET: ${{ matrix.platform.rust-target }} | |
test-abi3: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
# If one platform fails, allow the rest to keep testing if `CI-no-fail-fast` label is present | |
fail-fast: ${{ !contains(github.event.pull_request.labels.*.name, 'CI-no-fail-fast') }} | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
steps: | |
- uses: actions/checkout@master | |
- name: Setup python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.9 | |
- uses: dtolnay/rust-toolchain@stable | |
- name: Install Rust aarch64-apple-darwin target | |
if: matrix.os == 'macos-latest' | |
run: rustup target add aarch64-apple-darwin | |
- name: Build package | |
run: pip install -e . | |
- name: Build an abi3 wheel | |
shell: bash | |
env: | |
# https://github.com/actions/setup-python/issues/26 | |
MACOSX_DEPLOYMENT_TARGET: 10.9 | |
DIST_EXTRA_CONFIG: /tmp/build-opts.cfg | |
run: | | |
set -e | |
cd examples/rust_with_cffi/ | |
python --version | |
pip install -U build cffi wheel | |
echo -e "[bdist_wheel]\npy_limited_api=cp39" > $DIST_EXTRA_CONFIG | |
python -m build --no-isolation | |
ls -la dist/ | |
# Now we switch to a differnet Python version and ensure we can install | |
# the wheel we just built. | |
- name: Setup python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.10" | |
- name: Install abi3 wheel and run tests | |
shell: bash | |
run: | | |
set -e | |
cd examples/ | |
pip install -U wheel | |
python --version | |
pip install rust_with_cffi/dist/rust_with_cffi*.whl | |
python -c "from rust_with_cffi import rust; assert rust.rust_func() == 14" | |
python -c "from rust_with_cffi.cffi import lib; assert lib.cffi_func() == 15" | |
- name: Run abi3audit | |
shell: bash | |
run: | | |
set -e | |
pip install abi3audit | |
cd examples/ | |
abi3audit rust_with_cffi/dist/rust_with_cffi*.whl | |
test-crossenv: | |
runs-on: ubuntu-latest | |
strategy: | |
# If one platform fails, allow the rest to keep testing if `CI-no-fail-fast` label is present | |
fail-fast: ${{ !contains(github.event.pull_request.labels.*.name, 'CI-no-fail-fast') }} | |
matrix: | |
platform: [ | |
{ target: "aarch64-unknown-linux-gnu", arch: "aarch64" }, | |
{ target: "armv7-unknown-linux-gnueabihf", arch: "armv7" }, | |
] | |
steps: | |
- uses: actions/checkout@master | |
- name: Build wheels | |
run: | | |
echo 'set -ex | |
curl -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable | |
source ~/.cargo/env | |
rustup target add ${{ matrix.platform.target }} | |
# https://github.com/pypa/setuptools_scm/issues/707 | |
git config --global --add safe.directory /io | |
cd examples/rust_with_cffi/ | |
python3.9 -m pip install crossenv | |
python3.9 -m crossenv "/opt/python/cp39-cp39/bin/python3" --cc $TARGET_CC --cxx $TARGET_CXX --sysroot $TARGET_SYSROOT --env LIBRARY_PATH= --manylinux manylinux1 venv | |
. venv/bin/activate | |
build-pip install -U pip>=23.2.1 setuptools>=68.0.0 wheel>=0.41.1 | |
cross-pip install -U pip>=23.2.1 setuptools>=68.0.0 wheel>=0.41.1 | |
build-pip install cffi | |
cross-expose cffi | |
cross-pip install -e ../../ | |
cross-pip list | |
export DIST_EXTRA_CONFIG=/tmp/build-opts.cfg | |
echo -e "[bdist_wheel]\npy_limited_api=cp37" > $DIST_EXTRA_CONFIG | |
cross-pip wheel --no-build-isolation --no-deps --wheel-dir dist . | |
ls -la dist/ | |
python -m zipfile -l dist/*.whl # debug all files inside wheel file | |
' > build-wheels.sh | |
docker run --rm -v "$PWD":/io -w /io messense/manylinux2014-cross:${{ matrix.platform.arch }} bash build-wheels.sh | |
- name: Install abi3 wheel and run tests | |
uses: uraimo/run-on-arch-action@v2.5.0 | |
with: | |
arch: ${{ matrix.platform.arch }} | |
distro: ubuntu20.04 | |
dockerRunArgs: | | |
--volume "${PWD}/examples:/examples" | |
install: | | |
apt-get update | |
apt-get install -y --no-install-recommends python3 python3-dev python3-pip build-essential libffi-dev | |
run: | | |
cd /examples | |
python3 --version | |
pip3 install rust_with_cffi/dist/rust_with_cffi*.whl | |
python3 -c "from rust_with_cffi import rust; assert rust.rust_func() == 14" | |
python3 -c "from rust_with_cffi.cffi import lib; assert lib.cffi_func() == 15" | |
test-cross: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.8 | |
- uses: dtolnay/rust-toolchain@stable | |
- name: Install cross | |
uses: taiki-e/install-action@v1 | |
with: | |
tool: cross | |
- name: Build package | |
run: pip install -e . | |
- name: Build wheel using cross | |
shell: bash | |
env: | |
CARGO: cross | |
CARGO_BUILD_TARGET: aarch64-unknown-linux-gnu | |
PYO3_CROSS_LIB_DIR: /opt/python/cp38-cp38/lib | |
DIST_EXTRA_CONFIG: /tmp/build-opts.cfg | |
run: | | |
cd examples/namespace_package | |
docker build -t cross-pyo3:aarch64-unknown-linux-gnu . | |
python -m pip install build wheel | |
echo -e "[bdist_wheel]\nplat_name=manylinux2014_aarch64" > $DIST_EXTRA_CONFIG | |
python -m build --no-isolation | |
ls -la dist/ | |
unzip -l dist/*.whl # debug all files inside wheel file | |
- uses: uraimo/run-on-arch-action@v2.5.0 | |
name: Install built wheel | |
with: | |
arch: aarch64 | |
distro: ubuntu20.04 | |
dockerRunArgs: | | |
--volume "${PWD}/examples/namespace_package:/io" | |
install: | | |
apt-get update | |
apt-get install -y --no-install-recommends python3 python3-pip | |
pip3 install -U pip | |
run: | | |
pip3 install namespace_package --no-index --find-links /io/dist/ --force-reinstall | |
python3 -c "from namespace_package import rust; assert rust.rust_func() == 14" | |
python3 -c "from namespace_package import python; assert python.python_func() == 15" | |
test-zigbuild: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.8 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: aarch64-unknown-linux-gnu | |
- name: Install cargo-zigbuild | |
run: | | |
python3 -m pip install cargo-zigbuild | |
- name: Build package | |
run: pip install -e . | |
- name: Build wheel using cargo-zigbuild | |
shell: bash | |
env: | |
CARGO: cargo-zigbuild | |
CARGO_BUILD_TARGET: aarch64-unknown-linux-gnu | |
PYO3_CROSS_LIB_DIR: /opt/python/cp38-cp38/lib | |
DIST_EXTRA_CONFIG: /tmp/build-opts.cfg | |
run: | | |
mkdir -p $PYO3_CROSS_LIB_DIR | |
docker cp -L $(docker create --rm quay.io/pypa/manylinux2014_aarch64:latest):/opt/python/cp38-cp38 /opt/python | |
cd examples/namespace_package | |
python -m pip install build wheel | |
echo -e "[bdist_wheel]\nplat_name=manylinux2014_aarch64" > $DIST_EXTRA_CONFIG | |
python -m build --no-isolation | |
ls -la dist/ | |
unzip -l dist/*.whl # debug all files inside wheel file | |
- uses: uraimo/run-on-arch-action@v2.5.0 | |
name: Install built wheel | |
with: | |
arch: aarch64 | |
distro: ubuntu20.04 | |
dockerRunArgs: | | |
--volume "${PWD}/examples/namespace_package:/io" | |
install: | | |
apt-get update | |
apt-get install -y --no-install-recommends python3 python3-pip | |
pip3 install -U pip | |
run: | | |
pip3 install namespace_package --no-index --find-links /io/dist/ --force-reinstall | |
python3 -c "from namespace_package import rust; assert rust.rust_func() == 14" | |
python3 -c "from namespace_package import python; assert python.python_func() == 15" | |
test-cibuildwheel: | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: aarch64-apple-darwin | |
- uses: pypa/cibuildwheel@v2.3.1 | |
env: | |
CIBW_BUILD: cp39-* | |
CIBW_BEFORE_BUILD: pip install -U 'pip>=23.2.1' 'setuptools>=68.0.0' 'wheel<=0.37.1' && pip install -e . && pip list | |
# ^-- cap on `wheel` is a workaround for pypa/auditwheel#436 | |
# setuptools needs to be upgraded before installing setuptools-rust | |
CIBW_ARCHS_MACOS: "x86_64 universal2 arm64" | |
CIBW_BUILD_VERBOSITY: 3 | |
CIBW_BUILD_FRONTEND: pip # pip allows disabling isolation via env var | |
CIBW_ENVIRONMENT: PIP_NO_BUILD_ISOLATION=false | |
# ^-- necessary to use working copy of setuptools-rust, | |
# (however PIP_NO_BUILD_ISOLATION is counter-intuitive: see pypa/pip#5735) | |
with: | |
package-dir: examples/namespace_package | |
test-mingw: | |
runs-on: windows-latest | |
name: ${{ matrix.python-version }} mingw-${{ matrix.arch }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: [ | |
{ msystem: MINGW64, arch: x86_64, path: mingw64, rust_target: x86_64-pc-windows-gnu }, | |
{ msystem: MINGW32, arch: i686, path: mingw32, rust_target: i686-pc-windows-gnu } | |
] | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install MSys2 and dependencies | |
uses: msys2/setup-msys2@v2 | |
with: | |
update: true | |
msystem: ${{ matrix.msystem }} | |
install: >- | |
git | |
mingw-w64-${{ matrix.arch }}-python | |
mingw-w64-${{ matrix.arch }}-python-pip | |
mingw-w64-${{ matrix.arch }}-openssl | |
mingw-w64-${{ matrix.arch }}-toolchain | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable-${{ matrix.rust_target }} | |
- name: Install test dependencies | |
shell: msys2 {0} | |
run: python -m pip install --upgrade nox pip wheel | |
- name: Create libpython symlink | |
shell: msys2 {0} | |
run: ln -s /${{ matrix.path }}/lib/libpython3.11.dll.a /${{ matrix.path }}/lib/libpython311.dll.a | |
- name: Test examples | |
shell: msys2 {0} | |
run: | | |
PATH="$PATH:/c/Users/runneradmin/.cargo/bin" nox -s test-mingw | |
test-emscripten: | |
name: Test Emscripten | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- run: | | |
PYODIDE_VERSION=0.21.0 | |
cd emscripten | |
npm i pyodide@0.21.0 | |
cd node_modules/pyodide/ | |
npx -y prettier -w pyodide.asm.js | |
EMSCRIPTEN_VERSION=$(node -p "require('./repodata.json').info.platform.split('_').slice(1).join('.')") | |
PYTHON_VERSION=3.10 | |
echo "PYODIDE_VERSION=$PYODIDE_VERSION" >> $GITHUB_ENV | |
echo "EMSCRIPTEN_VERSION=$EMSCRIPTEN_VERSION" >> $GITHUB_ENV | |
echo "PYTHON_VERSION=$PYTHON_VERSION" >> $GITHUB_ENV | |
echo "ORIG_PATH=$PATH" >> $GITHUB_ENV | |
- uses: dtolnay/rust-toolchain@nightly | |
with: | |
components: rust-src | |
targets: wasm32-unknown-emscripten | |
- uses: mymindstorm/setup-emsdk@v11 | |
with: | |
version: ${{env.EMSCRIPTEN_VERSION}} | |
actions-cache-folder: emsdk-cache | |
- uses: actions/setup-python@v4 | |
id: setup-python | |
with: | |
python-version: ${{env.PYTHON_VERSION}} | |
- run: pip install nox | |
- uses: actions/cache@v3 | |
with: | |
path: | | |
tests/pyodide | |
key: ${{ hashFiles('tests/*.js') }} - ${{ hashFiles('noxfile.py') }} - ${{ steps.setup-python.outputs.python-path }} | |
- uses: Swatinem/rust-cache@v2 | |
- name: Test | |
run: | | |
export PATH=$ORIG_PATH:$PATH | |
nox -s test-examples-emscripten |