torsh-python 0.1.2

Python bindings for ToRSh - PyTorch-compatible deep learning in Rust
Documentation
name: Release

on:
  push:
    tags:
      - 'v*'
  workflow_dispatch:

env:
  CARGO_TERM_COLOR: always

jobs:
  # =============================================================================
  # Build Wheels for Multiple Platforms
  # =============================================================================

  build-wheels:
    name: Build wheels on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]

    steps:
    - uses: actions/checkout@v4

    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.11'

    - name: Install Rust
      uses: dtolnay/rust-toolchain@stable

    - name: Install maturin
      run: pip install maturin

    - name: Build wheels
      run: maturin build --release --out dist

    - name: Upload wheels
      uses: actions/upload-artifact@v4
      with:
        name: wheels-${{ matrix.os }}
        path: dist/*.whl

  # =============================================================================
  # Build Source Distribution
  # =============================================================================

  build-sdist:
    name: Build source distribution
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.11'

    - name: Install Rust
      uses: dtolnay/rust-toolchain@stable

    - name: Install maturin
      run: pip install maturin

    - name: Build sdist
      run: maturin sdist --out dist

    - name: Upload sdist
      uses: actions/upload-artifact@v4
      with:
        name: sdist
        path: dist/*.tar.gz

  # =============================================================================
  # Create GitHub Release
  # =============================================================================

  github-release:
    name: Create GitHub Release
    needs: [build-wheels, build-sdist]
    runs-on: ubuntu-latest
    if: startsWith(github.ref, 'refs/tags/')

    steps:
    - uses: actions/checkout@v4

    - name: Download all artifacts
      uses: actions/download-artifact@v4
      with:
        path: dist
        merge-multiple: true

    - name: Create Release
      uses: softprops/action-gh-release@v1
      with:
        files: dist/*
        draft: false
        prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') }}
        generate_release_notes: true
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  # =============================================================================
  # Publish to PyPI (Manual approval required)
  # =============================================================================

  # publish-pypi:
  #   name: Publish to PyPI
  #   needs: [build-wheels, build-sdist]
  #   runs-on: ubuntu-latest
  #   if: startsWith(github.ref, 'refs/tags/')
  #   environment:
  #     name: pypi
  #     url: https://pypi.org/p/torsh
  #
  #   steps:
  #   - name: Download all artifacts
  #     uses: actions/download-artifact@v4
  #     with:
  #       path: dist
  #       merge-multiple: true
  #
  #   - name: Publish to PyPI
  #     uses: pypa/gh-action-pypi-publish@release/v1
  #     with:
  #       password: ${{ secrets.PYPI_API_TOKEN }}