New GitHub Actions with maturin/uv #167
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] | |
| # Automatically cancel previous runs of this workflow on the same branch | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| 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" | |
| # NOTE: On Linux we need to manually export LD_LIBRARY_PATH | |
| - name: Set up Python | |
| run: | | |
| uv python install --default | |
| LIBDIR=$(python -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR'))") | |
| echo "LD_LIBRARY_PATH=${LIBDIR}:${LD_LIBRARY_PATH}" >> $GITHUB_ENV | |
| - name: Run Rust tests | |
| run: | | |
| cargo run --release | |
| cargo clean | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| target: ${{ matrix.target }} | |
| args: --release --out dist --find-interpreter | |
| 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 }} |