| Crates.io | nextver |
| lib.rs | nextver |
| version | 0.8.4 |
| created_at | 2024-01-24 06:31:22.799452+00 |
| updated_at | 2024-02-28 09:05:54.786704+00 |
| description | A library for parsing and incrementing arbitrarily-formatted versions. |
| homepage | https://github.com/t-mart/nextver |
| repository | https://github.com/t-mart/nextver |
| max_upload_size | |
| id | 1111717 |
| size | 180,593 |
A library for parsing and incrementing arbitrarily-formatted versions.
Instead of conforming to a specific versioning scheme, this library allows you to define your own version format, parse version strings against it, and increment versions according to semantic and/or calendar rules.
Also comes with a CLI.
This an abridged version of the documentation. For the full documentation, see docs.rs.
Below, the text in < and > brackets is a specifier. See what they mean
here.
Quickly get a next version:
use nextver::prelude::*;
let next = Sem::next_version_string(
"<MAJOR>.<MINOR>.<PATCH>", // format string
"1.2.3", // current version string
SemLevel::Minor // the specifier to increment
)?;
assert_eq!(next, "1.3.0");
nextver is built around three main concepts: Schemes, formats, and versions.
Schemes dictate the kinds of values allowed in versions and the rules for
incrementing them. (See the table below.) They are modeled by the
[Scheme] trait and implemented by the the following structs:
Sem]: A semantic versioning scheme. It is similar to
SemVer.CalSem]: A calendar-semantic versioning scheme. It is similar to
CalVer, but with an explicitly-required semantic
part(s).Cal]: A calendar versioning scheme. Its like [CalSem] but without
semantic specifiers. (This scheme is less useful in practice because there
is no way to increment a version twice within the same period of its least
significant specifier.)Formats define the structure of a version string. They are modeled by the
[Format] struct. They contains a sequence of specifier and literal text
tokens. For example, <MAJOR>.<MINOR>.<PATCH> is a format string that can be
turned into a [Format] object.
Versions are like Formats, but with actual values instead of specifiers.
They represent a a point in a project's development. These are modeled by the
[Version] struct. They can be incremented to new versions and compared
amongst each other.
Use any sequence of specifiers (listed below) and literal text in a format
string. Specifiers are bracketed with < and >.
In the "Example" column below, we reference a major of 1, minor of 2, patch
of 3 and a date of 2001-02-03 (which is in the 4th week).
| Specifier | Example | Sem |
CalSem |
Cal |
Parse Width | Format Width | Description |
|---|---|---|---|---|---|---|---|
<MAJOR> |
1 |
✅ | ❌ | ❌ | >=1 | None | The major part of a version |
<MINOR> |
2 |
✅ | ✅ | ❌ | >=1 | None | The minor part of a version |
<PATCH> |
3 |
✅ | ✅ | ❌ | >=1 | None | The patch part of a version |
<YYYY> |
2001 |
❌ | ✅ | ✅ | >=1 | None | Full year, years less than 1 BCE are unsupported (0 refers to 1 BCE) |
<YY> |
1 |
❌ | ✅ | ✅ | >=1 | None | Year minus 2000. For now, has same effect as year % 100, but the year 2100 will be 100, and so on |
<0Y> |
01 |
❌ | ✅ | ✅ | >=2 | 2 | Same as YY but zero-padded |
<MM> |
1 |
❌ | ✅ | ✅ | 1 or 2 | None | Month of year (1–12) |
<0M> |
01 |
❌ | ✅ | ✅ | 2 | 2 | Same as MM but zero-padded |
<WW> |
4 |
❌ | ✅ | ✅ | 1 or 2 | None | Week of the year (0–53), week 1 starts with the first Sunday in that year. |
<0W> |
04 |
❌ | ✅ | ✅ | 2 | 2 | Same as WW but zero-padded |
<DD> |
3 |
❌ | ✅ | ✅ | 1 or 2 | None | Day of the month (1–31) |
<0D> |
03 |
❌ | ✅ | ✅ | 2 | 2 | Same as DD but zero-padded |
Specifiers are case-sensitive. For example, <major> is not a valid specifier.
This crate provides a CLI that can be used to do some API functions straight from the command line.
cargo install nextver
nextver --help
To:
simply push a commit to the master branch with an updated version number in
Cargo.toml. The workflow file at .github/workflows/release+build+publish.yml
will take care of the rest. Make sure to pull afterwards.