Fix imports #388
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.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.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: [ '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-13', | |
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 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.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.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 }} |