name: Publish to PyPI on: push: tags: - 'v[0-9]+.[0-9]+.[0-9]+*' workflow_dispatch: jobs: build_and_publish: name: Build and Publish All Wheels runs-on: ubuntu-latest strategy: matrix: os: [ubuntu-latest, macos-latest, 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 wheel uses: PyO3/maturin-action@v1 with: target: ${{ matrix.target }} command: build args: --release --out dist --find-interpreter - name: Upload wheel artifact uses: actions/upload-artifact@v4 with: name: wheel-${{ matrix.os }}-${{ matrix.target }} path: dist/*.whl publish: name: Publish All Wheels needs: [build_and_publish] runs-on: ubuntu-latest steps: - name: Install maturin run: pip install maturin - name: Download ALL wheels uses: actions/download-artifact@v4 with: path: dist - name: Flatten and upload env: PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} run: | mkdir -p dist/flattened rm -rf dist/flattened/* # Clear # Copy EVERY wheel from EVERY subdir find dist -name "*.whl" | while read wheel; do cp "$wheel" dist/flattened/ done echo "=== TOTAL WHEELS (should be 9+) ===" ls -la dist/flattened/*.whl | wc -l cd dist/flattened echo "=== UPLOADING $(ls *.whl | wc -l) WHEELS ===" ls -la *.whl | head -5 maturin upload --skip-existing --non-interactive *.whl