Skip to content

Use uv to manage the project environment #472

Use uv to manage the project environment

Use uv to manage the project environment #472

Workflow file for this run

name: Release
# This should almost always run, but upload binaries only on tag.
on:
pull_request:
branches: [ master ]
paths-ignore:
- '**.md'
workflow_dispatch:
push:
branches: [ master ]
tags:
- '*.*.*'
# Cancel previous runs on the same PR.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
RUST_TOOLCHAIN: nightly-2024-10-18
UV_VERSION: 0.5.13
jobs:
build-linux-x86_64:
name: Build Linux x86_64 wheel
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
env:
UV_PYTHON: ${{ matrix.python-version }}
steps:
- uses: actions/checkout@v4
- uses: PyO3/maturin-action@v1
with:
target: x86_64-unknown-linux-gnu
rust-toolchain: ${{ env.RUST_TOOLCHAIN }}
manylinux: auto
args: --release -i python${{ matrix.python-version }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- uses: astral-sh/setup-uv@v5
with:
version: ${{ env.UV_VERSION }}
- run: uv sync --no-install-project
- run: uv pip install ormsgpack --no-index -f target/wheels
- run: uv run --no-sync pytest
- uses: actions/upload-artifact@v4
with:
name: ormsgpack-x86_64-unknown-linux-gnu-${{ matrix.python-version }}
path: target/wheels
retention-days: 1
build-linux-cross:
name: Build Linux wheel
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
target: [
{
platform: 'linux/arm64',
target: 'aarch64-unknown-linux-gnu',
maturin_args: '',
},
{
platform: 'linux/arm/v7',
target: 'armv7-unknown-linux-gnueabihf',
maturin_args: '--no-default-features',
},
]
steps:
- uses: actions/checkout@v4
- uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target.target }}
rust-toolchain: ${{ env.RUST_TOOLCHAIN }}
manylinux: auto
args: --release -i python${{ matrix.python-version }} ${{ matrix.target.maturin_args }}
- uses: docker/setup-qemu-action@v3
- run: |
docker run \
--rm \
-v "$GITHUB_WORKSPACE":/work \
-w /work \
--platform ${{ matrix.target.platform }} \
python:${{ matrix.python-version }}-bookworm \
bash -e -c '
curl --proto '=https' --tlsv1.2 -LsSf https://astral.sh/uv/${{ env.UV_VERSION }}/install.sh | sh
export PATH=$PATH:$HOME/.local/bin
uv sync --no-install-project
uv pip install ormsgpack --no-index -f target/wheels
uv run --no-sync pytest
'
- uses: actions/upload-artifact@v4
with:
name: ormsgpack-${{ matrix.target.target }}-${{ matrix.python-version }}
path: target/wheels
retention-days: 1
build-windows:
name: Build Windows wheel
runs-on: windows-latest
strategy:
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
env:
UV_PYTHON: ${{ matrix.python-version }}
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- uses: PyO3/maturin-action@v1
with:
target: x86_64-pc-windows-msvc
rust-toolchain: ${{ env.RUST_TOOLCHAIN }}
args: --release -i ${{ env.pythonLocation }}\python.exe
- uses: astral-sh/setup-uv@v5
with:
version: ${{ env.UV_VERSION }}
- run: uv sync --no-install-project
- run: uv pip install ormsgpack --no-index -f target/wheels
- run: uv run --no-sync pytest
- uses: actions/upload-artifact@v4
with:
name: ormsgpack-x86_64-pc-windows-msvc-${{ matrix.python-version }}
path: target/wheels
retention-days: 1
build-macos-universal:
name: Build macOS universal wheel
strategy:
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
env:
UV_PYTHON: ${{ matrix.python-version }}
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- uses: PyO3/maturin-action@v1
with:
target: universal2-apple-darwin
rust-toolchain: ${{ env.RUST_TOOLCHAIN }}
args: --release -i python${{ matrix.python-version }}
- uses: astral-sh/setup-uv@v5
with:
version: ${{ env.UV_VERSION }}
- run: uv sync --no-install-project
- run: uv pip install ormsgpack --no-index -f target/wheels
- run: uv run --no-sync pytest
- uses: actions/upload-artifact@v4
with:
name: ormsgpack-universal-apple-darwin-${{ matrix.python-version }}
path: target/wheels
retention-days: 1
build-sdist:
name: Build sdist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11
- uses: PyO3/maturin-action@v1
with:
command: sdist
rust-toolchain: ${{ env.RUST_TOOLCHAIN }}
- uses: actions/upload-artifact@v4
with:
name: ormsgpack-sdist
path: target/wheels
retention-days: 1
release:
if: startsWith(github.ref, 'refs/tags/')
name: Release
runs-on: ubuntu-latest
needs: [
build-linux-x86_64,
build-linux-cross,
build-windows,
build-macos-universal,
build-sdist,
]
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
pattern: ormsgpack-*
path: wheels
merge-multiple: true
- uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: wheels/