Fix imports #385
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: | |
- 'master' | |
tags: [ 'v*' ] | |
pull_request: | |
branches: | |
- 'master' | |
jobs: | |
test: | |
name: 'Test' | |
runs-on: ${{ matrix.platform.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
python_version: [ '3.11', '3.12' ] | |
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' | |
}, | |
] | |
include: | |
- python_version: '3.8' | |
platform: { | |
os: 'macos-13', | |
python_architecture: 'x64', | |
rust_target: 'x86_64-apple-darwin' | |
} | |
- python_version: '3.9' | |
platform: { | |
os: 'macos-13', | |
python_architecture: 'x64', | |
rust_target: 'x86_64-apple-darwin' | |
} | |
- python_version: '3.10' | |
platform: { | |
os: 'macos-13', | |
python_architecture: 'x64', | |
rust_target: 'x86_64-apple-darwin' | |
} | |
- python_version: 'pypy-3.7' | |
platform: { os: 'macos-13', python_architecture: 'x64' } | |
- python_version: 'pypy-3.7' | |
platform: { os: 'ubuntu-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.7' | |
platform: { os: 'windows-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.8' | |
platform: { os: 'macos-13', python_architecture: 'x64' } | |
- python_version: 'pypy-3.8' | |
platform: { os: 'ubuntu-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.8' | |
platform: { os: 'windows-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.9' | |
platform: { os: 'macos-13', python_architecture: 'x64' } | |
- python_version: 'pypy-3.9' | |
platform: { os: 'ubuntu-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.9' | |
platform: { os: 'windows-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.10' | |
platform: { os: 'macos-13', python_architecture: 'x64' } | |
- python_version: 'pypy-3.10' | |
platform: { os: 'ubuntu-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.10' | |
platform: { os: 'windows-latest', python_architecture: 'x64' } | |
steps: | |
- name: 'Checkout' | |
uses: actions/checkout@v4 | |
- name: 'Setup Python' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python_version }} | |
architecture: ${{ matrix.platform.python_architecture }} | |
- name: 'Setup Rust' | |
uses: dtolnay/rust-toolchain@nightly | |
with: | |
components: rustfmt | |
target: ${{ matrix.platform.rust_target }} | |
if: ${{ !startsWith(matrix.python_version, 'pypy') }} | |
- name: 'Check Rust metadata' | |
run: > | |
[[ $(cargo metadata --format-version=1 --no-deps | jq '.packages[0].repository') | |
== '"${{ github.server_url }}/${{ github.repository }}"' ]] | |
shell: bash | |
if: ${{ !startsWith(matrix.python_version, 'pypy') }} | |
- name: 'Run Rust linter' | |
run: cargo fmt --check | |
if: ${{ !startsWith(matrix.python_version, 'pypy') }} | |
- name: 'Run Rust doctests' | |
run: rustup run nightly cargo test --doc --target=${{ matrix.platform.rust_target }} | |
env: | |
CARGO_INCREMENTAL: 0 | |
RUSTDOCFLAGS: > | |
-Zprofile -Ccodegen-units=1 -Copt-level=0 -Coverflow-checks=off | |
-Zpanic_abort_tests -Cpanic=abort | |
RUSTFLAGS: > | |
-Zprofile -Ccodegen-units=1 -Copt-level=0 -Coverflow-checks=off | |
-Zpanic_abort_tests -Cpanic=abort | |
if: ${{ !startsWith(matrix.python_version, 'pypy') }} | |
- name: 'Install in editable mode with Rust extensions' | |
run: rustup run nightly python -m pip -v install -e .[tests] | |
env: | |
CARGO_INCREMENTAL: 0 | |
RUSTFLAGS: > | |
-Zprofile -Ccodegen-units=1 -Copt-level=0 -Coverflow-checks=off | |
-Zpanic_abort_tests -Cpanic=abort | |
if: ${{ !startsWith(matrix.python_version, 'pypy') }} | |
- name: 'Install in editable mode' | |
run: python -m pip -v install -e .[tests] | |
if: ${{ startsWith(matrix.python_version, 'pypy') }} | |
- name: 'Install MyPy' | |
run: python -m pip install -U mypy | |
- name: 'Run MyPy' | |
run: python -m mypy ${{ github.event.repository.name }} | |
- name: 'Install Python coverage dependencies' | |
run: python -m pip install --upgrade coverage[toml] | |
- name: 'Run Python doctests' | |
run: > | |
coverage run -m doctest README.md | |
&& coverage run --append -m pytest --doctest-modules --ignore=tests | |
- name: 'Run tests' | |
run: coverage run --append -m pytest | |
env: | |
RUST_BACKTRACE: full | |
- name: 'Collect Python coverage' | |
run: coverage xml -o coverage_python.xml | |
- name: 'Install Rust coverage dependencies' | |
run: cargo install grcov | |
if: ${{ !startsWith(matrix.python_version, 'pypy') }} | |
- name: 'Collect Rust coverage' | |
run: > | |
grcov target -s . -t cobertura --llvm --branch --ignore-not-existing | |
--ignore "/*" -o coverage_rust.xml | |
if: ${{ !startsWith(matrix.python_version, 'pypy') }} | |
- name: 'Upload PyPy coverage' | |
uses: codecov/[email protected] | |
with: | |
fail_ci_if_error: false | |
files: ./coverage_python.xml | |
if: ${{ startsWith(matrix.python_version, 'pypy') }} | |
continue-on-error: true | |
- name: 'Upload СPython coverage' | |
uses: codecov/[email protected] | |
with: | |
fail_ci_if_error: false | |
files: ./coverage_python.xml,./coverage_rust.xml | |
if: ${{ !startsWith(matrix.python_version, 'pypy') }} | |
continue-on-error: true | |
pre-deploy: | |
name: 'Pre-deploy' | |
runs-on: ubuntu-latest | |
needs: test | |
if: github.event_name == 'push' && github.ref_type == 'tag' | |
steps: | |
- name: '_' | |
run: echo "Pre-deploy step" | |
deploy-crates-io: | |
name: 'Deploy to crates.io' | |
environment: release | |
needs: pre-deploy | |
runs-on: ubuntu-latest | |
steps: | |
- name: 'Checkout' | |
uses: actions/checkout@v4 | |
- name: 'Setup Rust' | |
uses: dtolnay/rust-toolchain@stable | |
- name: 'Upload' | |
run: cargo publish --no-verify | |
env: | |
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} | |
build-sdist: | |
name: 'Build sdist' | |
runs-on: ubuntu-latest | |
needs: pre-deploy | |
steps: | |
- name: 'Checkout' | |
uses: actions/checkout@v4 | |
- name: 'Setup Python' | |
uses: actions/setup-python@v5 | |
- name: 'Install packaging tools' | |
run: python -m pip install -U build | |
- name: 'Build sdist' | |
run: python -m build --sdist | |
- name: 'Upload sdist' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dist | |
path: dist | |
build-wheels: | |
name: 'Build wheels' | |
runs-on: ${{ matrix.platform.os }} | |
# needs: pre-deploy | |
strategy: | |
fail-fast: false | |
matrix: | |
python_tag: [ 'cp38', 'cp39', 'cp310', 'cp311', 'cp312' ] | |
platform: [ | |
{ | |
architecture: 'arm64', | |
os: 'macos-latest', | |
python_architecture: 'x64', | |
rust_target: 'aarch64-apple-darwin', | |
tag: 'macosx_arm64' | |
}, | |
{ | |
architecture: 'universal2', | |
os: 'macos-latest', | |
python_architecture: 'x64', | |
rust_target: 'aarch64-apple-darwin', | |
tag: 'macosx_universal2' | |
}, | |
{ | |
architecture: 'x86_64', | |
os: 'macos-latest', | |
python_architecture: 'x64', | |
rust_target: 'x86_64-apple-darwin', | |
tag: 'macosx_x86_64' | |
}, | |
{ | |
architecture: 'aarch64', | |
os: 'ubuntu-latest', | |
python_architecture: 'x64', | |
rust_target: 'aarch64-unknown-linux-gnu', | |
tag: 'manylinux_aarch64' | |
}, | |
{ | |
architecture: 'aarch64', | |
os: 'ubuntu-latest', | |
python_architecture: 'x64', | |
rust_target: 'aarch64-unknown-linux-musl', | |
tag: 'musllinux_aarch64' | |
}, | |
{ | |
architecture: 'i686', | |
os: 'ubuntu-latest', | |
python_architecture: 'x64', | |
rust_target: 'i686-unknown-linux-gnu', | |
tag: 'manylinux_i686' | |
}, | |
{ | |
architecture: 'ppc64le', | |
os: 'ubuntu-latest', | |
python_architecture: 'x64', | |
rust_target: 'powerpc64le-unknown-linux-gnu', | |
tag: 'manylinux_ppc64le' | |
}, | |
{ | |
architecture: 's390x', | |
os: 'ubuntu-latest', | |
python_architecture: 'x64', | |
rust_target: 's390x-unknown-linux-gnu', | |
tag: 'manylinux_s390x' | |
}, | |
{ | |
architecture: 'x86_64', | |
os: 'ubuntu-latest', | |
python_architecture: 'x64', | |
rust_target: 'x86_64-unknown-linux-gnu', | |
tag: 'manylinux_x86_64' | |
}, | |
{ | |
architecture: 'x86_64', | |
os: 'ubuntu-latest', | |
python_architecture: 'x64', | |
rust_target: 'x86_64-unknown-linux-musl', | |
tag: 'musllinux_x86_64' | |
}, | |
{ | |
architecture: 'AMD64', | |
os: 'windows-latest', | |
python_architecture: 'x64', | |
rust_target: 'x86_64-pc-windows-msvc', | |
tag: 'win_amd64' | |
}, | |
{ | |
architecture: 'x86', | |
os: 'windows-latest', | |
python_architecture: 'x86', | |
rust_target: 'i686-pc-windows-msvc', | |
tag: 'win32' | |
}, | |
] | |
steps: | |
- name: 'Checkout' | |
uses: actions/checkout@v4 | |
- name: 'Setup Python' | |
uses: actions/setup-python@v5 | |
with: | |
architecture: ${{ matrix.platform.python_architecture }} | |
- name: 'Setup Rust' | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
target: ${{ matrix.platform.rust_target }} | |
if: ${{ runner.os != 'Linux' }} | |
- name: 'Setup QEMU' | |
uses: docker/setup-qemu-action@v2 | |
with: | |
platforms: all | |
if: ${{ runner.os == 'Linux' }} | |
- name: 'Build wheels' | |
uses: pypa/[email protected] | |
env: | |
CIBW_ARCHS: ${{ matrix.platform.architecture }} | |
CIBW_BEFORE_ALL_LINUX: | | |
curl https://sh.rustup.rs -sSf | | |
sh -s -- -y --default-toolchain=nightly && | |
# caused by https://github.com/rust-lang/cargo/issues/9167 | |
cat > ~/.cargo/config.toml <<EOF | |
[net] | |
git-fetch-with-cli = true | |
EOF | |
CIBW_BUILD: ${{ matrix.python_tag }}-${{ matrix.platform.tag }} | |
CIBW_BUILD_VERBOSITY: 1 | |
CIBW_ENVIRONMENT_LINUX: PATH="$HOME/.cargo/bin:$PATH" | |
- name: 'Upload wheels' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dist | |
path: wheelhouse/*.whl | |
test-distributions: | |
name: Test distributions | |
runs-on: ${{ matrix.platform.os }} | |
needs: [ 'build-sdist', 'build-wheels' ] | |
strategy: | |
matrix: | |
python_version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] | |
platform: [ | |
{ | |
os: 'macos-latest', | |
python_architecture: 'x64' | |
}, | |
{ | |
os: 'ubuntu-latest', | |
python_architecture: 'x64' | |
}, | |
{ | |
os: 'windows-latest', | |
python_architecture: 'x64' | |
}, | |
{ | |
os: 'windows-latest', | |
python_architecture: 'x86' | |
}, | |
] | |
include: | |
- python_version: 'pypy-3.7' | |
platform: { os: 'macos-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.7' | |
platform: { os: 'ubuntu-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.7' | |
platform: { os: 'windows-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.8' | |
platform: { os: 'macos-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.8' | |
platform: { os: 'ubuntu-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.8' | |
platform: { os: 'windows-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.9' | |
platform: { os: 'macos-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.9' | |
platform: { os: 'ubuntu-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.9' | |
platform: { os: 'windows-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.10' | |
platform: { os: 'macos-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.10' | |
platform: { os: 'ubuntu-latest', python_architecture: 'x64' } | |
- python_version: 'pypy-3.10' | |
platform: { os: 'windows-latest', python_architecture: 'x64' } | |
steps: | |
- name: 'Setup Python' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python_version }} | |
architecture: ${{ matrix.platform.python_architecture }} | |
- name: 'Download distributions' | |
uses: actions/download-artifact@v3 | |
with: | |
name: dist | |
path: dist | |
- name: 'Install from distributions' | |
run: python -m pip install --find-links=dist --no-deps ${{ github.event.repository.name }} | |
deploy-pypi: | |
name: 'Deploy to PyPI' | |
environment: release | |
needs: test-distributions | |
runs-on: ubuntu-latest | |
steps: | |
- name: 'Download distributions' | |
uses: actions/download-artifact@v3 | |
with: | |
name: dist | |
path: dist | |
- name: 'Upload' | |
uses: pypa/[email protected] | |
with: | |
packages_dir: dist | |
password: ${{ secrets.PYPI_API_TOKEN }} |