Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
[Unreleased]
Added
- Single-package workspace layout. A root
pyproject.tomlcarrying[project]and[build-system]with no[tool.uv.workspace]is now discovered as a one-package workspace, with the root itself as the package at path.. Users releasing a single library no longer need to scaffold apackages/<name>/subdirectory. A root that combines[project]and[tool.uv.workspace]is rejected with an error because the discovery semantics are ambiguous. See ADR-0019. [tool.uvr.config].latestdefaults to the sole package's name in single-package workspaces. The marker has no meaning when only one package can be selected, so requiring users to write it would be busywork.
Changed
SetVersionCommandandBuildCommandcarry the package name as an explicitpackage_namefield instead of deriving it from the directory portion ofpackage_path. Path-derived names returned an empty string for the new single-package layout wherepackage_path == ".".
[uv-release v0.38.0] - 2026-05-14
Changed
uvr statusanduvr releaseno longer mark a package as changed because one of its workspace dependencies changed. Change detection is purely file-based: a package is dirty when its own files have moved since its baseline tag, or when it has no baseline. To coordinate a cross-package release, runuvr version --bump <axis> --packages <pkg>first. The bump now rewrites the pins on every workspace dependent whose existing specifier rejects the new version's stripped-dev form, so the bump commit produces file changes in the dependents and the nextuvr releasepicks them up in the same cycle. Patch-level bumps that stay within an existing pin range no longer cascade. See ADR-0018.compute_dependency_pinsemits a pin only when the dependent's currentDependencyspecifier does not already accept the new release form. The lower bound uses the stripped-dev form (compute_release_version), souvr version --bump minoron0.1.0.dev0writes pins referencing0.2.0rather than0.2.0.dev0. The previous unconditional rewrite tightened every dependent's lower bound on every bump, including patches.ReleaseDependencyPinsnow feedsReleaseVersions(the just-published form) into the pin computer instead ofReleaseBumpVersions(next-dev). Under the new pin lower-bound semantics, the next-dev source would have pinned consumers at versions that did not exist yet. With the conditional rule this is typically a no-op safety net.
Fixed
uvr release --packages Xnow forwards the package filter to the strip-dev fixup. Previously the suggesteduvr version --bump releaseran over every changed package, so accepting the fix on a filtered release stripped dev versions on packages the user had not selected.--not-packagesand--all-packagesare forwarded the same way.
[uv-release v0.37.2] - 2026-05-13
Fixed
- Publish job no longer strips wheels to the publish runner's host platform before uploading.
DownloadWheelsCommandnow runs withall_platforms=Truefor the publish step, so every wheel attached to the GitHub release lands indist/beforeuv publishruns. Previously the defaultpackaging.tags.sys_tags()filter on anubuntu-latestpublish runner kept onlymanylinux_2_17_x86_64, and PyPI ended up with a single-platform release. Pure-Python (py3-none-any) packages were unaffected.
[uv-release v0.37.1] - 2026-05-13
Fixed
uvr bumpanduvr versionnow rewrite workspace dependency pins in[build-system].requires, not just[project].dependencies. A workspace package that build-depends on a sibling no longer drifts out of sync with the rest of the release. The user-facing docs already claimed this behavior; only the code was missing.
[uv-release v0.37.0] - 2026-05-13
Added
uvr version --bump releasestrips only the.devNsuffix, preserving any pre-release or post-release suffix.1.0.0a0.dev0becomes1.0.0a0;1.0.0.dev0becomes1.0.0. Mirrors what the release pipeline does when it turns a working-tree dev version into a published version.
Fixed
- The
uvr releasestrip-dev fixup now uses--bump releaseinstead of--bump stable.--bump stablestrips both.devNand the pre-release suffix, which silently turned1.0.0a0.dev0into1.0.0and published a stable release instead of the alpha.--bump releasepreserves the pre-release suffix so the alpha cycle survives.
[uv-release v0.36.0] - 2026-05-13
Added
uvr version --bump alpha|a|beta|b|rcenters or advances a pre-release cycle. Same-kind input increments the pre-number with.dev0(1.0.0a2->1.0.0a3.dev0); a higher kind resets to 0 (1.0.0a2->--bump beta->1.0.0b0.dev0); regressions (rc->alpha) and post-release sources are rejected.aandbare short-form aliases foralphaandbeta. Restores the pre-release axis removed in 0.34.0 when the--promoteflag was deleted, this time on--bumpitself with no auto-promote chain.
[uv-release v0.35.2] - 2026-05-12
Changed
uvr releasePackages table dropped theCURRENTandDIFF FROMcolumns. The current version is the working-tree state the user just edited and the diff-from baseline is internal accounting; both still surface inuvr status. Release output stays focused on what is about to happen.uvr releasepipeline rendering now surfaces the most informative datum per job. Release lines showname TAG_NAME(e.g.,my-core my-core/v0.35.1) — the actual git tag and GitHub release that will be created. Publish lines showname INDEX(my-core pypi) — where the wheel is going. Bump lines showname NEXT_VERSION(my-core 0.35.2.dev0) — the post-release dev cycle anchor. Names are right-padded so columns align across packages.
Fixed
- Wheel platform compatibility filter in the build job now uses
packaging.tags.sys_tags(), the canonical check used by pip and uv. The previous hand-rolled substring check only inspected arch tokens (x86_64/arm64/aarch64) and ignored the OS, so it could keep macOS wheels on a Linux runner or drop a validmanylinux_2_17_x86_64wheel. Each removal now logsRemoving incompatible wheel: <name>so the filter's behavior is visible. uvr workflow install --upgradeanduvr skill install --upgradeno longer hard-fail when[tool.uvr.config].workflow-version/skill-versionis missing (users who installed before version tracking landed in 0.32.2). The provider now falls back to uv-release 0.32.0 as the merge baseline — the oldest released version that shipped the bundled workflow and skill templates. A yellow warning prints the chosen baseline. Hand edits stay safe because the three-way merge surfaces divergent regions as conflicts in the editor rather than overwriting.
Added
--from-version VERSIONflag onuvr workflow installanduvr skill install. One-shot override for the--upgrademerge baseline; takes precedence over both the recorded*-versionand the 0.32.0 fallback. Useful when you know the version you originally installed with.
[uv-release v0.35.1] - 2026-05-10
Fixed
uvr workflow install --print-templateanduvr skill install --print-templateno longer raise "already exists" when run in a workspace that has the workflow or skill files installed. The provider now short-circuits before the existence and mode checks so the uvx-based fetch path used by--upgradeworks regardless of cwd state.
Added
FetchWorkflowBaseCommandandFetchSkillBasesCommandnow fall back to extracting templates directly when theuvx --print-templatepath fails. The fallback runsuv pip install --no-deps --target <tmp> uv-release=={version}and reads template files straight out of the installed site-packages. This rescuesuvr workflow install --upgradeanduvr skill install --upgradeagainst older releases on PyPI that ship the--print-templatebug.
[uv-release v0.35.0] - 2026-05-09
Added
- New
uv_release.uimodule: a small vocabulary of primitives — section headers, ASCII progress bars, no-box tables, status badges, confirm prompts, two-level pipelines, error blocks with copy-paste fix sections, key/value pairs, hints, banner, ASCII spinner. Every command imports from this layer instead of touching Rich directly. uvr ui-demorenders every primitive plus the fulluvr releasecomposition for visual verification.- Custom argparse renderer:
uvr --helpand every subcommand help use the design grammar. Internal CI flags (--plan,--print-template) hidden viaargparse.SUPPRESS. Every option flag has a real help string.
Changed
- The whole CLI now speaks the design grammar:
status,release,version,build,configure,workflow validate, everyCommand.execute()label. - Color language is six semantic tokens: magenta (brand / things you type), green (success), yellow ("look here, nothing broken"), red (error), cyan (refs — package names, tags, baselines, version strings), dim (chrome only). Default fg is the workhorse for everything else.
SetVersionCommandprints a branded diff line (Updated PKG vOLD -> vNEW) instead of a generic label.- Argparse errors humanized:
error: Unknown command 'foo' for uvr.instead ofargument wf_subcommand: invalid choice .... - Confirm prompts read
Apply fix? (y/N):— capital marks the default, only the(y/N)token is brand-colored. - Bump commit messages now reflect the actual CLI intent.
--bump stable→chore: set release versions;--bump minor→chore: bump minor versions;--set X→chore: set versions. DIFF FROMresolution prefers the dev0 baseline tag for clean stable versions. After strip-dev,0.34.2correctly diffs fromv0.34.2.dev0-base(the cycle anchor) instead of skipping back to the previous release.- Strip-dev fix simplified to a single literal shell command:
uvr version --bump stable. The Fix block shows exactly what runs.
Fixed
- Fix
ModuleNotFoundError: No module named 'yaml'on everyuvrinvocation by declaringpyyamlas a runtime dependency (#20) - Post-release bump commit now includes
uv.lock. The lockfile sync step usesuv lock(notuv sync) and aborts loudly on failure instead of silently shipping a bump commit out of sync withpyproject.toml. - Baseline
-basetags are annotated, sogit push --follow-tagsactually pushes them. git pull --rebaseruns before tagging in the bump job, not after — orphaned tag refs from a rebased commit can no longer happen.
Internal
- All
# type: ignore[arg-type]/[no-untyped-def]suppressions removed (34 of them).uv run poe checkreports zero diagnostics.
[uv-release v0.34.0] - 2026-05-06
Changed
uvr version --bumpnow acceptsstable, which strips pre-release and dev suffixes (e.g.,1.2.3a2.dev0to1.2.3). Replacesuvr version --promote final.
Removed
- BREAKING:
uvr version --promoteand all of its targets (a,alpha,b,beta,rc,final, and no-arg auto-advance). Use--bump stableto finalize a pre-release; use--set <version>to enter or advance a pre-release cycle.
[v0.22.0] - 2026-04-02
Added
- Add
uvr buildcommand for building changed workspace packages locally using layered dependency ordering without versioning, tagging, or publishing - Add typed pydantic argument models for all CLI commands, replacing untyped
getattr()access onargparse.Namespace
Changed
- Reorganize CLI command files into nested subpackages matching the command tree (
workflow/,skill/,jobs/) - Extract shared upgrade/merge-base helpers into
cli/_upgrade.py
Fixed
- Fix
uvr statusnot showing previous release version and diff-from tag for unchanged packages
[v0.18.0b0] - 2026-03-29
Changed
- BREAKING: Bump
ReleasePlanschema version to 9 — consolidate per-package data intoChangedPackagemodel replacingBumpPlan,MatrixEntry,PublishEntry,current_versions,release_tags, andbumpsfields - BREAKING: Rename release pipeline phase from "publish" to "release" — affects
--skipflag values, workflow job names, and plan field names (publish_commands→release_commands,publish_matrix→release_matrix,runners→build_matrix) - BREAKING: Rename all shared module functions to verb-first convention —
load_pyproject→read_pyproject,save_pyproject→write_pyproject,step→print_step,fatal→exit_fatal,discover_packages→find_packages,get_baseline_tags→find_baseline_tags,base_version→get_base_version,get_uvr_config→get_config,get_uvr_matrix→get_matrix - BREAKING: Restructure
shared/modules by topological dependency layer —planner/subpackage absorbsversions.py,deps.py,graph.py,changes.py;context/subpackage replacesdiscovery.pywithRepositoryContextmodel;execute.py→executor.py - Change
ReleasePlannerto accept a pre-builtRepositoryContextinstead of calling discovery functions internally - Change
uvr init --upgradeto use editor prompt with--waitfor GUI editors instead ofgit checkout -pfor conflict resolution - Prefix all core workflow jobs with
uvr-(uvr-validate,uvr-build,uvr-release,uvr-finalize) to distinguish from user-defined jobs - Replace GitHub API calls and tag scanning with O(1) local ref lookups via
find_previous_releaseinverse version bump
Added
- Add
RepositoryContextmodel that pre-fetches all repository state (repo handle, git tags, GitHub releases, packages, release tags, baselines) in a singlebuild_context()call - Add
ChangedPackagemodel extendingPackageInfowithcurrent_version,release_version,next_version,last_release_tag,release_notes,make_latest, andrunnersfields - Add
get_path()helper intoml.pyfor navigating nested TOML dicts without chained.get()calls - Add
--editorCLI flag and[tool.uvr.config].editorsetting for configuring conflict resolution editor inuvr init --upgrade - Add
@computed_fieldproperties onReleasePlanforbuild_matrixandrelease_matrix— derived fromchangedpackages, serialized into JSON for CI workflow consumption - Add cumulative pre-release notes — beta notes include all commits since the last final release, not just since the last alpha
- Add
--full-release-notesflag to show all commits (default truncates to 10 with overflow count) - Add
is_pre()helper for detecting alpha/beta/rc versions - Add
--allow-dirtyflag touvr releasefor running with uncommitted changes - Add progress bar with per-phase timing and bar chart summary to
uvr releaseplanning output - Add
find_previous_release()inverse version bump — derives predecessor via O(1) ref lookups with kind chain fallback (rc → b → a → final) - Add
uvr skill init --upgradewith three-way merge and editor conflict resolution matchinguvr init --upgrade - Add versioned skill templates replacing git commit SHA tracking
Removed
- Remove
BumpPlan,MatrixEntry,PublishEntry,PinChange,DepPinChangemodels — data consolidated intoChangedPackage - Remove
git(),gh(),run()subprocess wrappers fromshell.py— replaced by pygit2 and httpx in earlier versions - Remove unused functions:
dev_number,is_final,is_prerelease,is_postrelease,tag_for_package,topo_sort,rewrite_pyproject,update_dep_pins - Remove GitHub API dependency for release detection — all tag lookups are now local via pygit2
- Remove
git/remote.pymodule
Fixed
- Fix
git merge-fileexit code check inuvr init --upgrade— was treating conflict count > 1 as fatal error instead of only negative exit codes - Fix multiline
run:steps in generated workflow YAML rendering as quoted strings instead of block scalars (|) - Fix
strategyfield rendering afterstepsin workflow YAML job definitions - Fix
--pre bwith alpha version producing another alpha instead of beta - Fix
--devrejecting clean versions — now auto-appends.dev0consistent with other release types
[v0.17.0] - 2026-03-27
Added
- Add
pre_build_stage/post_build_stagehooks called before and after each build stage with the list of packages - Add
pre_build_package/post_build_packagehooks called around individual package builds (run in parallel threads) - Add optional
runnerparameter topre_build/post_buildhooks identifying the active runner labels
Changed
- BREAKING: Replace
BuildStage.commandsdict (with__setup__/__cleanup__sentinel keys) with explicitsetup,packages, andcleanupfields - BREAKING: Change
build_commandsdict keys from JSON-encoded strings toRunnerKey— a Pydantic-validatedtuple[str, ...]that parses JSON strings at model validation time - Change
ReleaseExecutor.build()to acceptstr | list[str] | Nonefor the runner parameter — JSON strings from CI are parsed via theRunnerKeyvalidator instead of a separateparse_runnerfunction
[v0.16.0] - 2026-03-27
Added
- Add
validate-planCI job that runs first in the release pipeline — validates the plan JSON as aReleasePlanand pretty-prints it to stdout - Add
uvr validate-planCLI subcommand for validating and displaying a release plan
Changed
- Change pipeline order to
validate-plan → build → publish → finalize— build now depends on validate-plan
[v0.15.0] - 2026-03-27
Added
- Add
ReleaseHookplugin system for extending the release pipeline with Python hooks — supports local hooks (pre_plan/post_plan) and CI hooks (pre_build/post_build/pre_release/post_release/pre_finalize/post_finalize) (ADR-0011) - Add
[tool.uvr.hooks]config key and convention-based discovery (uvr_hooks.pyat workspace root) - Export
ReleaseHookandReleasePlanfromuv_releasepackage root
Changed
- Replace
gitandghsubprocess calls with pygit2 and httpx for faster release planning (ADR-0012) - Change
uvr init --upgradeto use three-way merge for combining template updates with user customizations (ADR-0013) - Bump
ReleasePlanschema version to 8 — plans now preserve extra keys injected by hooks
[v0.14.3] - 2026-03-27
Changed
- Deduplicate subprocess calls in the planning phase — fetch git tags and GitHub releases once instead of 3x and 2x respectively
- Batch per-package baseline tag lookups into a single
git tag --listcall with Python set filtering (eliminates N subprocess calls) - Parallelize per-package
git diffchange detection withThreadPoolExecutor - Pre-compute release notes once instead of regenerating per caller
[v0.14.2] - 2026-03-27
Fixed
- Fix build commands failing on Windows runners — replace
mkdir -pandfind -deletewith cross-platformuv run python -cequivalents (#9)
[v0.14.1] - 2026-03-27
Fixed
- Fix
uvr init --upgradestep matching to use all of id/name/uses for cross-matching between old and new templates - Fix
uvr init --upgradeto block on uncommitted release.yml changes and handle quit gracefully - Remove special characters from CLI output
[v0.14.0] - 2026-03-27
Added
- Add
uvr init --upgradeto update frozen template fields in an existingrelease.ymlwhile preserving custom jobs, triggers, and env vars - Add
uvr skill initto copy bundled Claude Code skills into your project
[v0.13.4] - 2026-03-27
Fixed
- Fix
uvr build/uvr finalizefailing on Windows runners —--plannow falls back to theUVR_PLANenvironment variable and supports@fileinput (#8)
Changed
- Change workflow template to omit
--plan "$UVR_PLAN"from build/finalize run commands — re-runuvr initto update existing workflows
[v0.13.3] - 2026-03-27
Fixed
- Fix
uvr statusbuild display to show all packages built per runner, including transitive deps marked with(dep)
[v0.13.2] - 2026-03-27
Fixed
- Fix cross-runner builds failing when a workspace dependency is only assigned to a different runner — unchanged deps are now fetched into
deps/and changed transitive deps are built on every runner that needs them (#7)
[v0.13.1] - 2026-03-27
Fixed
- Fix topo-sort not considering
[build-system].requiresdependencies, causing concurrent builds to fail when a package's build-time dep hadn't finished building (#6)
[v0.13.0] - 2026-03-27
Changed
- Move version setting and dependency pinning from CI build commands to local pre-dispatch —
uvr releasenow commits release versions before dispatching to CI, so release tags point at commits with the correct version (ADR-0010)
[v0.12.0] - 2026-03-27
Changed
- Change
uvr release --jsonto output only the plan JSON to stdout — no human-readable output, no worktree check, no dispatch prompt
[v0.11.3] - 2026-03-27
Fixed
- Fix layered builds resolving workspace sources instead of pre-built wheels —
uv buildnow passes--no-sourcesfor layer 1+ packages (#5)
[v0.11.2] - 2026-03-27
Changed
- Change
uvr runnersto group output by runner instead of by package and show the default (ubuntu-latest) for unconfigured packages
[v0.11.1] - 2026-03-27
Fixed
- Fix
uvr releaseCI dispatch checking out the default branch instead of the dispatching branch
[v0.11.0] - 2026-03-27
Changed
- Move dependency pin writes from local two-pass flow to inline
uvr pin-depscommands in the build plan (ADR-0009) — pins are only applied if the build succeeds
Fixed
- Fix
set_versionandpin_dependenciescrashing on pyproject.toml files without a[project]table
[v0.10.0] - 2026-03-27
Added
- Add parallel builds within runners — packages at the same dependency depth build concurrently using topological layers
[v0.9.0] - 2026-03-27
Added
- Add self-hosted runner support — runners are now label sets (e.g.
uvr runners pkg --add "self-hosted,linux,x64") - Add tag and release conflict detection — planner validates no planned tags/releases already exist before dispatching
- Add
--where localplatform check — errors when changed packages have runners for a different OS - Add HEAD-vs-remote sync check before CI dispatch
Changed
- BREAKING: Remove hook jobs from workflow model —
uvr initgenerates onlybuild,release,finalize; users add their own jobs by editingrelease.yml - BREAKING: Remove
uvr set-versionsubcommand — planner emitsuv versioncommands instead - BREAKING: Change runner type from
strtolist[str]inMatrixEntry,ReleasePlan, and[tool.uvr.matrix] - BREAKING: Require
org/repo/pkgformat foruvr install(bare package names no longer accepted) - Change
uvr statusto an alias foruvr release --dry-run - Improve dry-run output: column headers, current → release version display, version rewrite visibility in build section
- Rewrite README with usage-focused sections
Removed
- Remove
uvr set-versionsubcommand (useuv versiondirectly) - Remove hook job classes (
HookJob,PreBuildJob,PostBuildJob,PreReleaseJob,PostReleaseJob) - Remove
_NOOP_STEPSconstant and auto-skip logic for no-op hooks
Fixed
- Fix publish workflow
files:pattern missingdist/prefix — wheels not attached to GitHub releases - Fix conflict error suggesting deletion as first option — now shows
--postand version bump first
[v0.8.0] - 2026-03-26
Added
- Add
--dev,--pre {a,b,rc}, and--postflags touvr releasefor PEP 440 dev, pre, and post releases (ADR-0008) - Add
uvr build,uvr finalize,uvr set-version, anduvr pin-depssubcommands (previously separateuvr-cientry point) - Add
--where {ci,local}flag touvr release— replaces the separateuvr runcommand - Add
--dry-runflag touvr releasefor previewing the release plan without changes - Add
PlanCommandmodel for pre-computed shell commands in the release plan - Add
ReleasePlannerclass as the single entry point for creating release plans
Changed
- BREAKING: Remove
uvr runcommand — useuvr release --where localinstead - BREAKING: Remove
uvr-ci/uvr-stepsentry point — all subcommands are now underuvr - BREAKING: Rename CI subcommand
build-alltobuild - BREAKING: Bump
ReleasePlanschema version to 6 — plans include pre-computed command sequences - Change
ReleaseExecutorto a pure command runner — all domain logic moved toReleasePlanner - Change
find_release_tagsto query GitHub releases instead of git tags - Change release tag lookup to only match versions below the current base version
- Change
BumpPlan.new_versionto store the exact pyproject.toml version (includes.dev0suffix) - Improve
uvr --helpwith grouped command listing (Commands, CI steps, Low-level) - Improve
uvr release --helpwith argument groups (mode, build, dispatch, local, output) - Column-align package, build, and finalize sections in dry-run output
Removed
- Remove
pipeline/re-export package — all imports useshared.*directly - Remove
ci/package — step functions inlined into CLI - Remove
run_release(),execute_plan(),bump_versions(),collect_published_state()functions - Remove legacy
-devbaseline tag handling
Fixed
- Fix
--dry-runnot showing auto-skipped no-op hook jobs - Fix
--devrelease silently publishing a clean version when pyproject.toml has no.devsuffix - Fix double
.dev0.dev0in post-release bump versions - Fix pre-release bump producing a patch bump instead of next pre-release
.dev0(e.g.a0→a1.dev0) - Fix post-release bump producing
.post0.dev0instead of.post1.dev0
[v0.6.1] - 2026-03-25
Added
- Add
--skip JOBand--skip-to JOBflags touvr releasefor skipping individual or ranges of jobs in the pipeline - Add
--reuse-run RUN_IDand--reuse-releaseflags for reusing build artifacts from a previous workflow run or existing GitHub releases - Add
skipandreuse_run_idworkflow dispatch inputs with per-jobif:conditions - Add
JOB_ORDERconstant defining the canonical pipeline job ordering
Fixed
- Fix
GH_TOKENnot being set in post-release download step - Fix duplicate
if:keys in generated workflow when hook jobs had template-generated skip conditions
[v0.6.0] - 2026-03-25
Added
- Add
uvr workflowcommand for reading, writing, and deleting any key inrelease.ymlwith--set,--add,--insert --at,--remove, and--clearflags - Add
uvr runners PKG --add/--remove/--clear RUNNERcommand for managing per-package build runners - Add
ReleaseWorkflowPydantic model validating the full workflow YAML schema before writes - Add
ruamel-yamldependency for lossless YAML round-tripping (preserves key order, comments, quote style)
Changed
- BREAKING: Remove
-m/--matrixflag fromuvr init— useuvr runnersinstead - BREAKING: Replace
uvr hooks PHASE {add|insert|remove|update|clear}positional subcommands with flag-based--add/--insert --at/--set/--remove/--clear - Split monolithic
cli.py(1461 lines) intocli/package with one module per command
Fixed
- Fix
on:key being serialized astrue:after YAML round-trip (PyYAML boolean coercion) - Fix PyYAML corrupting GitHub Actions
${{ }}expressions with double-quoted single quotes - Fix PyYAML reordering top-level YAML keys on write
[v0.5.0] - 2026-03-25
Added
- Add per-runner build matrix where each runner builds all assigned packages in dependency order via
uvr-steps build-all - Add
topo_layers()for computing dependency depth in the package graph - Add
runnersanddist_namefields toReleasePlan(schema version 4)
Changed
- BREAKING: Replace per-package parallel matrix with per-runner matrix — fixes build failures when packages have build-time dependencies on sibling workspace packages
- BREAKING: Rename
--force-allto--rebuild-all - Publish job filters wheels by
dist_namefor per-package GitHub releases
Fixed
- Fix CI dispatch pinning
uvr_versionto a.devversion that doesn't exist on PyPI - Fix shell quoting issues with plan JSON by passing it via environment variable
[v0.4.2] - 2026-03-23
Added
- Add tag-triggered PyPI publish workflow (
uv-release/v*tags, excluding-dev) - Add
make_latestfield toPublishEntry, driven by[tool.uvr.config] latestsetting
Fixed
- Fix glob wildcard for tag pattern in publish workflow trigger
[v0.4.1] - 2026-03-23
Fixed
- Fix PyPI publish rebuilding from HEAD (which picked up the
.dev0bump) — now downloads the wheel directly from the GitHub release artifact
[v0.4.0] - 2026-03-23
Added
- Add
[tool.uvr.config]withincludeandexcludelists for package filtering - Add
--yes/-yflag to skip the confirmation prompt
Changed
- BREAKING:
uvr releasenow prints the plan and prompts before dispatching — read-only by default (replaces--dry-run) - BREAKING: Remove
--dry-runflag fromuvr release - Replace shell scripts in release workflow with real GitHub Actions (
softprops/action-gh-release) - Move dependency pinning from CI to local planning —
build_plan()pre-computes all version bumps, CI applies them viaapply_bumps() - Add
BumpPlanmodel andbumpsfield toReleasePlan - Add precomputed release notes via
PublishEntryandgenerate_release_notes() - Bump
ReleasePlanschema version to 3
[v0.3.1] - 2026-03-20
Fixed
- Fix dogfood release by using
uv run uvr-stepsfrom workspace instead of global install
[v0.3.0] - 2026-03-20
Added
- Plan+execute architecture:
uvr releasebuilds aReleasePlanlocally and dispatches it to CI as a pure executor - Per-package GitHub releases tagged
{package}/v{version} uvr install PACKAGE[@VERSION]with transitive internal dependency resolutionuvr install ORG/REPO/PACKAGE[@VERSION]for remote installs--python VERSIONflag to pin CI Python version (default 3.12)uvr-stepsCLI entry point for workflow step dispatchuvr statuscommand showing workflow config and changed packages
Changed
- BREAKING: Replace
lazy-wheelspackage entirely withuv-release - Matrix config moved to
[tool.uvr.matrix]in workspace rootpyproject.toml
Removed
- Remove
lazy-wheelspackage and all associated code