New GitHub Actions with maturin/uv #159
Workflow file for this run
This file contains hidden or 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, pull_request] | |
| jobs: | |
| linux: | |
| # Skip building pull requests from the same repository | |
| if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| target: [x86_64, aarch64] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| submodules: 'true' | |
| - name: Update pyproject.toml version | |
| if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| shell: bash | |
| run: | | |
| # Extract version from tag (strip 'v' prefix if present) | |
| VERSION=${GITHUB_REF#refs/tags/} | |
| VERSION=${VERSION#v} | |
| echo "Extracted version: $VERSION" | |
| # Update version in pyproject.toml (works on both GNU and BSD sed) | |
| sed -i.bak "s/^version = .*/version = \"$VERSION\"/" pyproject.toml | |
| rm pyproject.toml.bak | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v6 | |
| with: | |
| version: "0.9.3" | |
| - name: Set up Python | |
| run: uv python install --default | |
| - name: Run Rust tests | |
| run: | | |
| echo "Python: $(which python)" | |
| python --version | |
| ldd $(which python) | |
| cargo run --release | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| target: ${{ matrix.target }} | |
| args: --release --out dist --find-interpreter | |
| sccache: 'true' | |
| manylinux: auto | |
| - name: Run Python tests | |
| run: uv run pytest | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-linux-${{ matrix.target }} | |
| path: dist | |
| windows: | |
| # Skip building pull requests from the same repository | |
| if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }} | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| submodules: 'true' | |
| - name: Update pyproject.toml version | |
| if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| shell: bash | |
| run: | | |
| # Extract version from tag (strip 'v' prefix if present) | |
| VERSION=${GITHUB_REF#refs/tags/} | |
| VERSION=${VERSION#v} | |
| echo "Extracted version: $VERSION" | |
| # Update version in pyproject.toml (works on both GNU and BSD sed) | |
| sed -i.bak "s/^version = .*/version = \"$VERSION\"/" pyproject.toml | |
| rm pyproject.toml.bak | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| version: "0.9.3" | |
| - name: Set up Python | |
| run: uv python install --default | |
| - name: Run Rust tests | |
| run: cargo run --release | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| target: x64 | |
| args: --release --out dist --find-interpreter | |
| - name: Run Python tests | |
| run: uv run pytest | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-windows-x64 | |
| path: dist | |
| macos: | |
| # Skip building pull requests from the same repository | |
| if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }} | |
| runs-on: macos-latest | |
| strategy: | |
| matrix: | |
| target: [x86_64, aarch64] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| submodules: 'true' | |
| - name: Update pyproject.toml version | |
| if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| shell: bash | |
| run: | | |
| # Extract version from tag (strip 'v' prefix if present) | |
| VERSION=${GITHUB_REF#refs/tags/} | |
| VERSION=${VERSION#v} | |
| echo "Extracted version: $VERSION" | |
| # Update version in pyproject.toml (works on both GNU and BSD sed) | |
| sed -i.bak "s/^version = .*/version = \"$VERSION\"/" pyproject.toml | |
| rm pyproject.toml.bak | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| version: "0.9.3" | |
| - name: Set up Python | |
| run: uv python install --default | |
| - name: Run Rust tests | |
| if: matrix.target == 'aarch64' | |
| run: cargo run --release | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| target: ${{ matrix.target }} | |
| args: --release --out dist --find-interpreter | |
| - name: Run Python tests | |
| if: matrix.target == 'aarch64' | |
| run: uv run pytest | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-macos-${{ matrix.target }} | |
| path: dist | |
| sdist: | |
| # Skip building pull requests from the same repository | |
| if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| submodules: 'true' | |
| - name: Update pyproject.toml version | |
| if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| shell: bash | |
| run: | | |
| # Extract version from tag (strip 'v' prefix if present) | |
| VERSION=${GITHUB_REF#refs/tags/} | |
| VERSION=${VERSION#v} | |
| echo "Extracted version: $VERSION" | |
| # Update version in pyproject.toml (works on both GNU and BSD sed) | |
| sed -i.bak "s/^version = .*/version = \"$VERSION\"/" pyproject.toml | |
| rm pyproject.toml.bak | |
| - name: Build sdist | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| command: sdist | |
| args: --out dist | |
| - name: Upload sdist | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-sdist | |
| path: dist | |
| release: | |
| if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| runs-on: ubuntu-latest | |
| needs: [linux, windows, macos, sdist] | |
| permissions: | |
| contents: write | |
| discussions: write | |
| id-token: write | |
| steps: | |
| - name: Download wheels | |
| uses: actions/download-artifact@v5 | |
| with: | |
| pattern: wheels-* | |
| merge-multiple: true | |
| path: dist | |
| - name: Publish to PyPI | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| command: upload | |
| args: --non-interactive --skip-existing dist/* | |
| - name: Release | |
| uses: softprops/action-gh-release@6da8fa9354ddfdc4aeace5fc48d7f679b5214090 # v2.4.1 | |
| with: | |
| generate_release_notes: true | |
| files: dist/* | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |