mirror of
https://github.com/astral-sh/uv.git
synced 2025-08-02 10:02:16 +00:00
![]() This adds `alpha`, `beta`, `rc`, `stable`, `post`, and `dev` modes to `uv version --bump`. The components that `--bump` accepts are ordered as follows: major > minor > patch > stable > alpha > beta > rc > post > dev Bumping a component "clears" all lesser component (`alpha`, `beta`, and `rc` all overwrite each other): * `--bump minor` on `1.2.3a4.post5.dev6` => `1.3.0` * `--bump alpha` on `1.2.3a4.post5.dev6` => `1.2.3a5` * `--bump dev ` on `1.2.3a4.post5.dev6` => `1.2.3a4.post5.dev7` In addition, `--bump` can now be repeated. The primary motivation of this is "bump stable version and also enter a prerelease", but it technically lets you express other things if you want them: * `--bump patch --bump alpha` on `1.2.3` => `1.2.4a1` ("bump patch version and go to alpha 1") * `--bump minor --bump patch` on `1.2.3` => `1.3.1` ("bump minor version and got to patch 1") * `--bump minor --bump minor` on `1.2.3` => `1.4.0` ("bump minor version twice") The `--bump` flags are sorted by their priority, so that you don't need to remember the priority yourself. This ordering is the only "useful" one that preserves every `--bump` you passed, so there's no concern about loss of expressiveness. For instance `--bump minor --bump major` would just be `--bump major` if we didn't sort, as the major bump clears the minor version. The ordering of `beta` after `alpha` means `--bump alpha --bump beta` will just result in beta 1; this is the one case where a bump request will effectively get overwritten. The `stable` mode "bumps to the next stable release", clearing the pre (`alpha`, `beta`, `rc`), `dev`, and `post` components from a version (`1.2.3a4.post5.dev6` => `1.2.3`). The choice to clear `post` here is a bit odd, in that `1.2.3.post4` => `1.2.3` is actually a version decrease, but I think this gives a more intuitive model (as preserving `post5` in the previous example is definitely wrong), and also post-releases are extremely obscure so probably no one will notice. In the cases where this behaviour isn't useful, you probably wanted to pass `--bump patch` or something anyway which *should* definitely clear the `post5` (putting it another way: the only cases where `--bump stable` has dubious behaviour is when you wanted it to do a noop, which, is a command you could have just not written at all). In all cases we preserve the "epoch" and "local" components of a version, so the `7!` and `+local` in `7!1.2.3+local` will never be modified by `--bump` (you can use the raw version set mode if you want to touch those). The preservation of `local` is another slightly odd choice, but it's a really obscure feature (so again it mostly won't come up) and when it's used it seems to mostly be used for referring to variant releases, in which case preserving it tends to be correct. Fixes #13223 --------- Co-authored-by: Zanie Blue <contact@zanie.dev> |
||
---|---|---|
.. | ||
integration | ||
migration | ||
index.md | ||
install-python.md | ||
package.md | ||
projects.md | ||
scripts.md | ||
tools.md |