akinator-py 0.2.1

Python bindings for akinator-rs
Documentation
name: Python Binding

on: [push, pull_request]

jobs:
  build: # Workflow credit to https://github.com/Cryptex-github/ril-py/blob/main/.github/workflows/py-binding.yml
    name: >

      build ${{ matrix.python-version }} on ${{ matrix.platform || matrix.os }}
      (${{ matrix.alt_arch_name || matrix.arch }})
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu, macos, windows]
        python-version: ['cp310', 'pp37', 'pp38', 'pp39']
        arch: [main, alt]
        include:
          - os: ubuntu
            platform: linux
          - os: windows
            ls: dir
          - os: macos
            arch: alt
            alt_arch_name: 'arm64 universal2'
        exclude:
          - os: windows
            arch: alt
          - os: macos
            python-version: 'pp37'
            arch: alt
          - os: macos
            python-version: 'pp38'
            arch: alt
          - os: macos
            python-version: 'pp39'
            arch: alt
          - os: ubuntu
            arch: alt

    runs-on: ${{ format('{0}-latest', matrix.os) }}
    steps:
    - uses: actions/checkout@v3

    - name: set up python
      uses: actions/setup-python@v3
      with:
        python-version: '3.9'

    - name: set up rust
      uses: actions-rs/toolchain@v1
      with:
        profile: minimal
        toolchain: stable
        override: true

    - name: Setup Rust cache
      uses: Swatinem/rust-cache@v2
      with:
        key: ${{ matrix.alt_arch_name }}

    - run: rustup target add aarch64-apple-darwin
      if: matrix.os == 'macos'

    - run: rustup toolchain install stable-i686-pc-windows-msvc
      if: matrix.os == 'windows'

    - run: rustup target add i686-pc-windows-msvc
      if: matrix.os == 'windows'

    - name: Get pip cache dir
      id: pip-cache
      run: |

        echo "::set-output name=dir::$(pip cache dir)"

    - name: Cache python dependencies
      uses: actions/cache@v3
      with:
        path: ${{ steps.pip-cache.outputs.dir }}
        key: ${{ runner.os }}-pip-${{ matrix.python-version }}

    - name: install python dependencies
      run: pip install -U setuptools wheel twine cibuildwheel platformdirs

    - name: Display cibuildwheel cache dir
      id: cibuildwheel-cache
      run: |

        from platformdirs import user_cache_path
        print('::set-output name=dir::' + str(user_cache_path(appname='cibuildwheel', appauthor='pypa')))
      shell: python

    - name: Cache cibuildwheel tools
      uses: actions/cache@v3
      with:
        path: ${{ steps.cibuildwheel-cache.outputs.dir }}
        key: ${{ runner.os }}-cibuildwheel-${{ matrix.python-version }}

    - name: build sdist
      if: matrix.os == 'ubuntu' && matrix.python-version == 'cp310'
      run: |

        pip install maturin build
        python -m build --sdist -o wheelhouse
    - name: build ${{ matrix.platform || matrix.os }} binaries
      run: cibuildwheel --output-dir wheelhouse
      env:
        CIBW_BUILD: '${{ matrix.python-version }}-*'
        # both yum and apt doesn't seem to be available for musl linux
        CIBW_SKIP: '*-musllinux_*'
        # we build for "alt_arch_name" if it exists, else 'auto
        CIBW_ARCHS: ${{ matrix.alt_arch_name || 'auto' }}
        CIBW_ENVIRONMENT: 'PATH="$HOME/.cargo/bin:$PATH"'
        CIBW_ENVIRONMENT_WINDOWS: 'PATH="$UserProfile\.cargo\bin;$PATH"'
        CIBW_BEFORE_BUILD: rustup show
        CIBW_BEFORE_BUILD_LINUX: >

          curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain=stable --profile=minimal -y &&
          rustup show
        CIBW_BEFORE_ALL_LINUX: 'yum install -y openssl-devel || apt-get openssl -y'
        CIBW_BUILD_VERBOSITY: 1

    - run: ${{ matrix.ls || 'ls -lh' }} wheelhouse/

    - run: twine check wheelhouse/*

    - uses: actions/upload-artifact@v2
      with:
        name: wheels
        path: wheelhouse

  release:
    needs: [build]
    if: "success() && startsWith(github.ref, 'refs/tags/')"
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3

    - name: set up python
      uses: actions/setup-python@v3
      with:
        python-version: '3.10'

    - run: pip install -U twine

    - name: get wheelhouse artifacts
      uses: actions/download-artifact@v2
      with:
        name: wheels
        path: wheelhouse

    - run: twine check wheelhouse/*

    - name: upload to pypi
      run: twine upload wheelhouse/*
      env:
        TWINE_USERNAME: __token__
        TWINE_PASSWORD: ${{ secrets.pypi_token }}

    - name: Upload artifacts to release
      uses: softprops/action-gh-release@v1
      with:
        files: wheelhouse/*