name: Publish to PyPI on: push: tags: - 'v[0-9]+.[0-9]+.[0-9]+*' workflow_dispatch: jobs: build_wheels: name: Build wheels on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: include: - os: ubuntu-latest target: x86_64 - os: macos-latest target: x86_64 - os: windows-latest target: x86_64 steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install Rust uses: dtolnay/rust-toolchain@stable with: toolchain: stable - name: Build wheels with Maturin uses: PyO3/maturin-action@v1 with: target: ${{ matrix.target }} command: build args: --release --out dist --find-interpreter - name: Upload built wheels as Artifact uses: actions/upload-artifact@v4 with: name: wheels-${{ matrix.os }}-${{ matrix.target }} path: dist publish: name: Publish to PyPI runs-on: ubuntu-latest # NO NEEDS, NO IF - INDEPENDENT steps: - name: Install maturin for upload run: pip install maturin - name: Download ALL wheels uses: actions/download-artifact@v4 with: path: dist - name: Flatten wheels to dist/ run: | find dist -name "*.whl" -exec cp {} dist/ \; echo "Wheels ready:" ls -la dist/*.whl - name: Publish to PyPI env: PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} run: | cd dist ls -la *.whl maturin upload --skip-existing --non-interactive