Skip to content

🚀 Migrate from maturin publish to uv Build & Publish Workflow #62

@muk2

Description

@muk2

Summary

The project currently uses:

python3 -m maturin publish

This command is being deprecated. We need to migrate to a modern publishing workflow using:

uv build
uv publish

This will future-proof our release process and align the project with modern Python packaging standards.


Motivation

  • maturin publish is being deprecated
  • uv provides a fast, modern, standards-compliant packaging workflow
  • Cleaner CI/CD integration
  • Reduced technical debt
  • Long-term maintainability

Goals

  • Remove all usage of maturin publish
  • Adopt uv build for generating artifacts
  • Adopt uv publish for PyPI releases
  • Update CI workflows accordingly
  • Update documentation
  • Ensure Rust + PyO3 integration continues working properly

Proposed Workflow

Local Development

Continue supporting:

python3 -m maturin develop

Optional future improvement (if compatible):

uv develop

Build Artifacts

Generate distribution files using:

uv build

This should produce:

  • Source distribution (sdist)
  • Wheels (including compiled Rust extension)

Publish to PyPI

Replace:

python3 -m maturin publish

With:

uv publish

Authentication should use:

UV_PUBLISH_TOKEN

Backed by repository secret:

PYPI_API_TOKEN

CI Changes Required

Update .github/workflows/ release pipeline.

Example steps:

- Install uv
- Run uv build
- Run uv publish
  with UV_PUBLISH_TOKEN from secrets

Publishing should only run on:

  • Tagged releases
  • Or explicit release workflow trigger

Required Updates

1. Validate pyproject.toml

  • Confirm build backend compatibility
  • Ensure metadata is correct
  • Remove deprecated publish configuration
  • Confirm versioning strategy

2. Validate Rust Extension Build

  • Ensure uv build compiles the PyO3 extension correctly

  • Verify wheels contain compiled binaries

  • Test installation from built wheel:

    pip install dist/<wheel-file>
    

3. Documentation

Update:

  • README
  • Contributing guide
  • Release documentation

Replace all references to:

maturin publish

With:

uv build
uv publish

Acceptance Criteria

  • uv build successfully produces wheels and sdist
  • uv publish successfully uploads to PyPI
  • Installed package works correctly
  • CI pipeline passes
  • No remaining references to maturin publish
  • Documentation updated

Priority

High — required to prevent breakage from deprecated publishing workflow

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions