uvr bump: Automatic Dependency Pinning
uvr bump manages versions and pins internal dependencies automatically. When you bump pkg-alpha to 0.1.5, every workspace package that depends on alpha gets its constraint updated.
pkg-beta/pyproject.toml
pkg-alpha>=0.1.0 → pkg-alpha>=0.1.5
pkg-gamma/pyproject.toml
pkg-beta>=0.1.0 → pkg-beta>=0.2.0
pkg-delta/pyproject.toml
pkg-alpha>=0.1.0 → pkg-alpha>=0.1.5No manual auditing. No stale constraints shipping broken wheels. See PEP 440 version specifiers for constraint syntax.
How pins are computed
The planner builds a published_versions map for every workspace package.
- Changed packages publish at their release version.
0.1.5.dev0strips to0.1.5. - Unchanged packages use the version from their last release tag.
pkg-alpha/v0.1.4gives0.1.4.
Every internal dep constraint is rewritten to >=published_version. Pins cover [project].dependencies, [project].optional-dependencies, and [dependency-groups]. [build-system].requires is not pinned. Build-time deps are resolved through the layered build system instead.
Pin detection without side effects
Pin detection is pure. No files are modified during plan generation. If pins need updating, uvr release shows the pending changes.
Dependency pins
pkg-beta/pyproject.toml
pkg-alpha>=0.1.0 → pkg-alpha>=0.1.5
pkg-gamma/pyproject.toml
pkg-beta>=0.1.0 → pkg-beta>=0.2.0On confirmation, uvr writes the pins and instructs you to commit and re-run.
Commit pin updates before dispatching:
git add -A && git commit -m 'chore: update dependency pins' && git push
uvr releaseThe second run detects no pending changes and proceeds to dispatch.
Post-release pinning
After CI builds and publishes, the bump phase pins internal deps to the just-published versions. This ensures pyproject.toml constraints stay satisfiable during development.
uvr pin-deps --path packages/pkg-beta/pyproject.toml pkg-alpha>=0.1.5
uvr pin-deps --path packages/pkg-gamma/pyproject.toml pkg-beta>=0.2.0These commands are embedded in the ReleasePlan JSON. Pins only land in the repo if the build succeeds.
Version management
Use uvr bump to set the version you intend to release.
uvr bump --minor # bump changed packages to next minor
uvr bump --alpha # enter alpha pre-release cycle
uvr bump --rc # promote alpha → release candidate
uvr bump --stable # exit pre-release → stable
uvr bump --packages my-pkg --patch # bump specific package(s)After every release, CI bumps the patch number and appends .dev0.
1.0.1 (released) → 1.0.2.dev0 (next dev version)
1.0.1a0 (released) → 1.0.1a1.dev0 (next pre-release dev)
1.0.0.post0 (released) → 1.0.0.post1.dev0 (next post-release dev)On release, .dev0 is stripped automatically.
The version lifecycle
commit A ← pkg-alpha/v0.1.5 (release tag)
commit B ← pkg-alpha/v0.1.6.dev0-base (baseline; pyproject.toml bumped to 0.1.6.dev0)
commits … normal development …
commit C ← pkg-alpha/v0.1.6 (release tag)
commit D ← pkg-alpha/v0.1.7.dev0-base (baseline; pyproject.toml bumped to 0.1.7.dev0)The -base tags serve as diff baselines for change detection.