Skip to main content

Lazy monorepo wheel builder — only rebuilds what changed.

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

uv-release-monorepo

The missing CI release orchestrator for uv workspaces. Rebuilds only what changed, creates one GitHub release per package, handles version bumping.

Quick Start

uv tool install uv-release-monorepo
uvr init        # generate .github/workflows/release.yml
uvr release     # detect changes, show plan, dispatch to CI

Releasing

# Preview what would be released
uvr status

# Release to CI (default)
uvr release

# Release locally (pure-python packages only)
uvr release --where local

Version bumping

uvr bump --all --minor       # 1.0.1.dev0 → 1.1.0.dev0
uvr bump --all --alpha       # 1.0.1.dev0 → 1.0.1a0.dev0
uvr bump --all --rc          # 1.0.1a2.dev0 → 1.0.1rc0.dev0
uvr bump --package my-pkg --patch  # bump one package

uvr release auto-detects from the version — just strip .devN and publish:

uvr release              # 1.0.1.dev0 → release 1.0.1
uvr release              # 1.0.1a0.dev0 → release 1.0.1a0
uvr release --dev        # publish 1.0.1.dev0 as-is

Skipping and reusing

uvr release --skip build                      # skip the build job
uvr release --skip-to release                 # skip everything before release
uvr release --skip build --reuse-run 12345    # reuse artifacts from run 12345

Managing runners

uvr runners                        # show all package runners
uvr runners my-pkg --add macos-14  # add a build runner
uvr runners my-pkg --clear         # reset to default (ubuntu-latest)

Installing from releases

uvr install myorg/myrepo/my-pkg           # latest release
uvr install myorg/myrepo/my-pkg@1.2.3     # specific version

Hooks

Customize the release pipeline with Python hooks. Subclass ReleaseHook and override the methods you need:

from uv_release_monorepo import ReleaseHook, ReleasePlan

class Hook(ReleaseHook):
    def post_plan(self, plan: ReleasePlan) -> ReleasePlan:
        data = plan.model_dump()
        data["deploy_env"] = "staging"
        return ReleasePlan.model_validate(data)

Configure in pyproject.toml:

[tool.uvr.hooks]
file = "uvr_hooks.py"          # default class: Hook
# or: file = "path/to/file.py:MyHook"

Or just drop a uvr_hooks.py with a Hook class at the workspace root — it's discovered automatically.

Hook points: pre_plan / post_plan (local), pre_build / post_build, pre_build_stage / post_build_stage, pre_build_package / post_build_package, pre_release / post_release, pre_finalize / post_finalize (CI).

How it works

uvr release scans your workspace, diffs each package against its last baseline tag, walks the dependency graph, and builds a plan containing every shell command needed for the release. It dispatches this plan to GitHub Actions, which runs eight jobs:

validate-plan → build → release → finalize

Hook jobs (pre-build, post-build, pre-release, post-release) are no-ops by default — edit release.yml directly to add tests, linting, PyPI publish, or notifications.

Documentation

  • User Guide — setup, releasing, hooks, PyPI, skip/reuse, package filtering
  • Under the Hood — change detection, dependency pinning, build matrix, workflow model

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

uv_release_monorepo-0.19.4.dev1-py3-none-any.whl (83.5 kB view details)

Uploaded Python 3

File details

Details for the file uv_release_monorepo-0.19.4.dev1-py3-none-any.whl.

File metadata

File hashes

Hashes for uv_release_monorepo-0.19.4.dev1-py3-none-any.whl
Algorithm Hash digest
SHA256 10afb345bcee05f95e639fd443966a72343aa4e4891dc725f08a460e856beac6
MD5 770f7224740f18c6f6b40f86faff39a0
BLAKE2b-256 9bd6c3484a2a1ec4a6c9b8448d9f9822830eb944ff9a8def4151156b048a6842

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_release_monorepo-0.19.4.dev1-py3-none-any.whl:

Publisher: release.yml on tylerpayne/uv-release-monorepo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page